Why WireMock says that the Request not matches? Spring cloud contract

18,399

Solution 1

It turned out to be a missing / at the end of the URL in the contract/stub

Solution 2

Not directly related to the question but for all who came here from Google:

In my case I was in the wrong scenario state.

More about scenario states here: http://wiremock.org/docs/stateful-behaviour/

Share:
18,399
Rocks360
Author by

Rocks360

Backend Programmer and working on my mobile Game with Unity3d in my free time. I also on new technologies like docker, continues delivery pipelines and microservices.

Updated on June 08, 2022

Comments

  • Rocks360
    Rocks360 about 2 years

    Wiremock logs that the following request not matches:

        WireMock                                 : Request was not matched:
    {
      "url" : "/api/accounts?username=defaultuser",
      "absoluteUrl" : "http://localhost:11651/api/accounts?username=defaultuser",
      "method" : "GET",
      "clientIp" : "127.0.0.1",
      "headers" : {
        "authorization" : "bearer test123",
        "accept" : "application/json, application/*+json",
        "user-agent" : "Java/1.8.0_121",
        "host" : "localhost:11651",
        "connection" : "keep-alive"
      },
      "cookies" : { },
      "browserProxyRequest" : false,
      "loggedDate" : 1500711718016,
      "bodyAsBase64" : "",
      "body" : "",
      "loggedDateString" : "2017-07-22T08:21:58Z"
    }
    Closest match:
    {
      "urlPath" : "/api/accounts",
      "method" : "GET",
      "headers" : {
        "authorization" : {
          "matches" : "^bearer"
        },
        "accept" : {
          "equalTo" : "application/json, application/*+json"
        },
        "user-agent" : {
          "equalTo" : "Java/1.8.0_121"
        },
        "host" : {
          "matches" : "^localhost:[0-9]{5}"
        },
        "connection" : {
          "equalTo" : "keep-alive"
        }
      },
      "queryParameters" : {
        "username" : {
          "matches" : "^[a-zA-Z0-9]*$"
        }
      }
    }
    

    Is the problem because of the difference of url and urlPath? I also tried to specify absoluteUrl in the Contract. but it is ignored. I guess because it is not defined in Contract DSL.

    The request side of the contract looks like this:

    request{
            method 'GET'
            url('/api/accounts'){
                queryParameters {
                    parameter('username', $(consumer(regex('^[a-zA-Z0-9]*$')), producer('defaultuser')))
                }
            }
            headers {
                header('authorization', $(consumer(regex('^bearer')), producer(execute('authClientBearer()'))))
                header('accept', $(consumer('application/json, application/*+json')))
                header('user-agent', $(consumer('Java/1.8.0_121')))
                header('host', $(consumer(regex('^localhost:[0-9]{5}'))))
                header('connection', $(consumer('keep-alive')))
            }
        }