WithWatchStaticMappings doesn't respect new files
Describe the bug
"--WatchStaticMappings true" command doesn't respect new files copied. This is a bit annoying in docker in docker configuration where I can't bind mappings using WithMappings() as docker bind always references the host and not the parent container.
Expected behavior:
On new file copy static mappings are read.
Test to reproduce
private readonly WireMockContainer _wireMockContainer = new WireMockContainerBuilder()
.WithWatchStaticMappings(true)
.WithPortBinding(5000, 80)
.Build();
await _wireMockContainer.CopyAsync($"{AppDomain.CurrentDomain.BaseDirectory}Mappings", "/app/__admin/mappings");
Check mappings or make request
Other related info
Workaround exists using admin client: await _wireMockContainer.CreateWireMockAdminClient().ResetMappingsAsync(true);
Sounds familiar.
Related to this? https://github.com/WireMock-Net/WireMock.Net/blob/eb7e6c397f686859401b3b527d68ad55dd87ff6b/src/WireMock.Net.Aspire/WireMockServerBuilderExtensions.cs#L57
If that's the correct use then no dice - mappings are still empty.
private readonly WireMockContainer _wireMockContainer = new WireMockContainerBuilder()
.WithWatchStaticMappings(true)
.WithPortBinding(5000, 80)
.WithEnvironment("DOTNET_USE_POLLING_FILE_WATCHER", "1") // https://khalidabuhakmeh.com/aspnet-docker-gotchas-and-workarounds#configuration-reloads-and-filesystemwatcher
.Build();
Mmm.
- https://learn.microsoft.com/en-us/answers/questions/1539195/filewatcher-helper-system-events-not-triggered-in
- https://forums.docker.com/t/file-system-watch-does-not-work-with-mounted-volumes/12038
The only thing I can build is a simple polling to a new rest endpoint like /__admin/mappings/readStaticMappings.
https://github.com/WireMock-Net/WireMock.Net/pull/1189
@mantasburokas Can you try 1.6.7-preview-01 ?
(Make sure to delete your local ":latest" image for WireMock.Net)
Note that I only tested on windows.
I have deleted all existing images and containers, upgraded the package but still no mappings. Added a breakpoint on CopyAsync to observe if maybe mappings appear after some delay but they don't. I also ran the unit tests on windows.
Ah sorry I misunderstood your question. I thought you were just using this to mount this folder to the internal __admin/mappings folder.
.WithMappings($"{AppDomain.CurrentDomain.BaseDirectory}Mappings")
This has been solved in the preview version.
BTW, when running on windows and using a windows container, the second argument should be c:\\app\\__admin\\mappings ?
Yeah, but I am running on windows for local setup and using linux containers. So just to re-iterate, the problem is that WithMappings() works as expected on local setup but in docker in docker configuration I can't mount the path from parent container. That's why I'd like to copy the mappings directory by hand and expect the watch flag to pick it up.
Can you give an example how you use these multiple docker containers?
I can prepare a test solution but I am bit busy this week. Basically I have dockerfile that runs my tests and since my tests run in docker then wiremock becomes a docker in docker setup.
What happens when you just go into the WireMock.Net container and touch or create a file? Is there an update triggered? (You can checkout the logs to see this).
Please test new version: 1.6.7-preview-02 (make sure to delete the all local versions to be sure you get the latest) When you do a CopyAsync after the container is started, the new mapping will be processed.
And I noticed that when using CopyAsync in a Windows Container, I get error:
filesystem operations against a running Hyper-V container are not supported
@mantasburokas did you have time to test that version?
@mantasburokas did you have time to test that version?
Hello @mantasburokas, can you please test that version?