Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WithWatchStaticMappings doesn't respect new files #1188

Open
mantasburokas opened this issue Oct 2, 2024 · 12 comments
Open

WithWatchStaticMappings doesn't respect new files #1188

mantasburokas opened this issue Oct 2, 2024 · 12 comments
Assignees
Labels

Comments

@mantasburokas
Copy link

mantasburokas commented Oct 2, 2024

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);

@StefH
Copy link
Collaborator

StefH commented Oct 2, 2024

Sounds familiar.

Related to this?

.WithEnvironment(ctx => ctx.EnvironmentVariables.Add("DOTNET_USE_POLLING_FILE_WATCHER", "1")) // https://khalidabuhakmeh.com/aspnet-docker-gotchas-and-workarounds#configuration-reloads-and-filesystemwatcher

@StefH StefH self-assigned this Oct 2, 2024
@mantasburokas
Copy link
Author

mantasburokas commented Oct 2, 2024

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();

@StefH
Copy link
Collaborator

StefH commented Oct 2, 2024

Mmm.

The only thing I can build is a simple polling to a new rest endpoint like /__admin/mappings/readStaticMappings.

@StefH
Copy link
Collaborator

StefH commented Oct 2, 2024

#1189

@StefH
Copy link
Collaborator

StefH commented Oct 2, 2024

@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.

@mantasburokas
Copy link
Author

mantasburokas commented Oct 3, 2024

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.

@StefH
Copy link
Collaborator

StefH commented Oct 3, 2024

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 ?

@mantasburokas
Copy link
Author

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.

@StefH
Copy link
Collaborator

StefH commented Oct 3, 2024

Can you give an example how you use these multiple docker containers?

@mantasburokas
Copy link
Author

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.

@StefH
Copy link
Collaborator

StefH commented Oct 3, 2024

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).

@StefH
Copy link
Collaborator

StefH commented Oct 6, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants