WireMock-Net / WireMock.Net

WireMock.Net is a flexible product for stubbing and mocking web HTTP responses using advanced request matching and response templating. Based on the functionality from http://WireMock.org, but extended with more functionality.
Apache License 2.0
1.41k stars 209 forks source link

Admin API fails to create a mapping with Request Header matching using WildCardMatcher #1167

Closed kaushiksk closed 2 months ago

kaushiksk commented 2 months ago

Describe the bug

When creating a mapping that contains wildcard match on a specific header, the mapping is not created, API returns 201. The created mapping is not returned in GET __admin/mappings.

Expected behavior:

Header match mapping should appear when querying GET __admin/mappings.

Test to reproduce

POST /__admin/mappings

{
  "Guid": "419c3832-9fb6-4998-9a86-8edc57af65ff",
  "Title": "Header based routing",
  "Request": {
    "Headers": [
      {
        "Name": "myheader",
        "Matchers": [
          {
            "Name": "WildcardMatcher",
            "Pattern": "*aaaaaa*",
          }
        ],
      }
    ],
  },
  "Response": {
    "ProxyUrl": "http://localhost:9124",
  },
}

Response: 201 Created

{
  "Status": "Mapping added"
}

Get /__admin/mappings does not return this mapping. I am able to get other mappings that are created on path etc. using WildCardMatcher.

StefH commented 2 months ago

@kaushiksk The reason is: The Path or Url matcher is missing for this mapping, this mapping will not be added.

However I cannot remember anymore why I build it like this.... I need to check if there is a technical reason for this or a business reason...

kaushiksk commented 2 months ago

This works when I configure it directly in code as below:

mockServer
    .Given(Request.Create().WithHeader("myheader", new WildcardMatcher($"*aaaaaa*")))
    .WithTitle("Header based routing")
    .RespondWith(Response.Create().WithProxy(mockServerEndpoint));

With this mapping, the wiremock server is able to do exactly what I intend, I validated from logs that my requests are successfully being matched and proxied. In fact, this is how I figured out the exact payload to send to the POST /__admin/mappings API (I got it from Get /__admin/mappings once the server was running).

So it seems like something that is only missing in the Admin API?

StefH commented 2 months ago

https://github.com/WireMock-Net/WireMock.Net/pull/1169