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.35k stars 197 forks source link

Scenario with proxy not removing route prefix #1024

Closed mark-hingston closed 6 months ago

mark-hingston commented 7 months ago

I'm using WireMock.Net.StandAlone 1.5.39 and have the following scenario:

[
  {
    "Scenario": "HyperPaySucceedOnThirdTryScenario",
    "SetStateTo": "SecondAttempt",
    "Priority": 1,
    "Request": {
      "Methods": ["GET", "POST"],
      "Path": {
        "Matchers": [
          {
            "Name": "WildcardMatcher",
            "Pattern": "/hyperpay/*",
            "IgnoreCase": false
          }
        ]
      }
    },
    "Response": {
      "StatusCode": 503,
      "Headers": {
        "X-PureTrace-Wiremock": "HyperPay 503 - Server Unavailable - Attempt 1"
      }
    }
  },
  {
    "Scenario": "HyperPaySucceedOnThirdTryScenario",
    "WhenStateIs": "SecondAttempt",
    "SetStateTo": "ThirdAttempt",
    "Priority": 1,
    "Request": {
      "Methods": [ "GET", "POST" ],
      "Path": {
        "Matchers": [
          {
            "Name": "WildcardMatcher",
            "Pattern": "/hyperpay/*",
            "IgnoreCase": false
          }
        ]
      }
    },
    "Response": {
      "StatusCode": 503,
      "Headers": {
        "X-PureTrace-Wiremock": "HyperPay 503 - Server Unavailable - Attempt 2"
      }
    }
  },
  {
    "Scenario": "HyperPaySucceedOnThirdTryScenario",
    "WhenStateIs": "ThirdAttempt",
    "Priority": 1,
    "Request": {
      "Methods": [ "GET", "POST" ],
      "Path": {
        "Matchers": [
          {
            "Name": "WildcardMatcher",
            "Pattern": "/hyperpay/*",
            "IgnoreCase": false
          }
        ]
      }
    },
    "Response": {
      "ProxyUrl": "https://eu-test.oppwa.com"
    }
  }
]

The issue I'm finding is that on the third request when proxying to the upstream it is including the route prefix in the path e.g.

https://eu-test.oppwa.com/hyperpay/v1/checkouts instead of https://eu-test.oppwa.com/v1/checkouts.

How can I remove the route prefix? Thanks

StefH commented 7 months ago

Currently it's not yet possible to define this per request.

But you can define it in the settings: https://github.com/WireMock-Net/WireMock.Net/wiki/Settings#proxyandrecordsettings

via ReplaceSettings

StefH commented 7 months ago

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

StefH commented 6 months ago

@mark-hingston Did you have time to test this, or should I just merge this change?

mark-hingston commented 6 months ago

@StefH I haven't had the chance to test the changes in the PR, but it looks good to merge 👍

Thanks again.

StefH commented 6 months ago

PR is merged. A new NuGet will be released this week.

mark-hingston commented 5 months ago

Hi @StefH

I'm sending the following mapping to the POST __admin/mappings endpoint:

[{
    "Scenario": "SucceedOnThirdAttemptScenario",
    "SetStateTo": "SecondAttempt",
    "Priority": 1,
    "Request": {
      "Methods": ["GET", "POST"],
      "Path": {
        "Matchers": [{
          "Name": "WildcardMatcher",
          "Pattern": "/google/*",
          "IgnoreCase": false
        }]
      }
    },
    "Response": {
      "StatusCode": 503
    }
  },
  {
    "Scenario": "SucceedOnThirdAttemptScenario",
    "WhenStateIs": "SecondAttempt",
    "SetStateTo": "ThirdAttempt",
    "Priority": 1,
    "Request": {
      "Methods": ["GET", "POST"],
      "Path": {
        "Matchers": [{
          "Name": "WildcardMatcher",
          "Pattern": "/google/*",
          "IgnoreCase": false
        }]
      }
    },
    "Response": {
      "StatusCode": 503
    }
  },
  {
    "Scenario": "SucceedOnThirdAttemptScenario",
    "WhenStateIs": "ThirdAttempt",
    "Priority": 1,
    "Request": {
      "Methods": ["GET", "POST"],
      "Path": {
        "Matchers": [{
          "Name": "WildcardMatcher",
          "Pattern": "/google/*",
          "IgnoreCase": false
        }]
      }
    },
    "Response": {
      "ProxyUrl": "https://google.com",
      "ProxyUrlReplaceSettings ": {
        "OldValue": "/google",
        "NewValue": "",
        "IgnoreCase": true
      }
    }
  }
]

When I try requesting <wiremockAddress>/google/search in my browser, on the third attempt it is proxying to: https://google.com/google/search. Am I missing something here?

Many thanks.

StefH commented 5 months ago

@mark-hingston I cannot understand your issue here?