mock-server / mockserver

MockServer enables easy mocking of any system you integrate with via HTTP or HTTPS with clients written in Java, JavaScript and Ruby. MockServer also includes a proxy that introspects all proxied traffic including encrypted SSL traffic and supports Port Forwarding, Web Proxying (i.e. HTTP proxy), HTTPS Tunneling Proxying (using HTTP CONNECT) and SOCKS Proxying (i.e. dynamic port forwarding).
http://mock-server.com
Apache License 2.0
4.59k stars 1.07k forks source link

MockServerClient does not match expectation set for path with query parameter #1070

Closed ruchirsachdeva closed 2 years ago

ruchirsachdeva commented 3 years ago

Describe the issue If an expectation (E1) is set for a Request (R1) with a path (P1) and another expectation (E2) is set for another Request (R2) same path(P1) and with a query parameter (QP1), then for an incoming request(R2) for the path (P1) with query parameter (QP1), the MockServerClient does not respect/match the expectation (E2) set for Request (R2) with path (P1) with query parameter (QP1), instead it matches the expectation (E1) set for the Request (R1) with path (P1) without query parameter.

What you are trying to do I am trying to use MockServerClient to set two expectations

  1. mock an HttpRequest with path = /api/path to return response = "{\n \"cursor\": \"abc\"}"
  2. mock an HttpRequest with path = /api/path with query param = ?cursor=abc to return empty response "{}"

Issue is that http://mock-server-1080/api/path?cursor=abc returns "{\n \"cursor\": \"abc\"}"

MockServer version 5.11.2

To Reproduce Steps to reproduce the issue:

1. How you are running MockServer (i.e maven plugin, docker, etc)

 <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>mockserver</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mock-server</groupId>
      <artifactId>mockserver-client-java</artifactId>
      <version>5.11.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
@org.testcontainers.junit.jupiter.Container
  private static final MockServerContainer mockServer =
     new  MockServerContainer(DockerImageName.parse("jamesdbloom/mockserver:mockserver-5.11.2"))
          .withExposedPorts(MOCK_PORT)
          .withNetworkAliases("mockserver")
                    .withLogConsumer(new Slf4jLogConsumer(LOG).withPrefix("mockServerContainer"))
          .withNetwork(network);

private static MockServerClient mockServerClient =
        new MockServerClient(
            mockServer.getContainerIpAddress(), mockServer.getMappedPort(MOCK_PORT));   

2. Code you used to create expectations

mockServerClient .when(new HttpRequest().withPath("/path")) .respond(new HttpResponse().withStatusCode(200).withBody("{\"cursor\":\"abc\"}"));

mockServerClient
    .when(new HttpRequest().withPath("/path")
        .withQueryStringParameter("cursor", "abc"))
    .respond(new HttpResponse().withStatusCode(200).withBody("{}"));

3. What error you saw

Request {
     "method" : "GET",
     "path" : "/api/path",
     "queryStringParameters" : {
       "cursor" : [ "abc" ]
     }
}

matches wrong expectation

matched expectation:

   {
     "id" : "7f9ca176-1729-43da-bfa2-9e5f42d43124",
     "priority" : 0,
     "httpRequest" : {
       "path" : "/api/path"
     },
     "times" : {
       "unlimited" : true
     },
     "timeToLive" : {
       "unlimited" : true
     },
     "httpResponse" : {
       "statusCode" : 200,
       "body" :"{\n  \"cursor\": \"abc\"}"
     }
   }

Expected behaviour

Request {
     "method" : "GET",
     "path" : "/api/path",
     "queryStringParameters" : {
       "cursor" : [ "abc" ]
     }
}

should match expectation

{
     "id" : "ad34dd60-7a96-4585-b88f-a279b8c4aad5",
     "priority" : 0,
     "httpRequest" : {
       "path" : "/api/path",
       "queryStringParameters" : {
         "cursor" : [ "abc" ]
       }
     },
     "times" : {
       "unlimited" : true
     },
     "timeToLive" : {
       "unlimited" : true
     },
     "httpResponse" : {
       "statusCode" : 200,
       "body" : "{}"
     }
   }

MockServer Log

15:11:23.734  INFO [           main] ?.11.2] : Container jamesdbloom/mockserver:mockserver-5.11.2 is starting: 60391bcef61589b6b50adc7226a5c58316338737ba9655d5fb3c4a8ed580c72d
15:11:23.749  INFO [           main] o.t.c.wait.strategy.HttpWaitStrategy     : /stupefied_ellis: Waiting for 60 seconds for URL: http://localhost:34895/mockserver/status (where port 34895 maps to container port 1080)
15:11:26.144  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:26 5.11.2 INFO logger level is INFO, change using:
15:11:26.144  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  - 'ConfigurationProperties.logLevel(String level)' in Java code,
15:11:26.145  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  - '-logLevel' command line argument,
15:11:26.145  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  - 'mockserver.logLevel' JVM system property or,
15:11:26.145  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  - 'mockserver.logLevel' property value in 'mockserver.properties' 
15:11:26.146  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:26 5.11.2 INFO 1080 started on port: 1080 
15:11:29.316  INFO [           main] ?.11.2]                                  : Container jamesdbloom/mockserver:mockserver-5.11.2 started in PT6.669738S
15:11:33.116  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:33 5.11.2 INFO 1080 creating expectation:
15:11:33.116  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:33.117  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:33.117  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "id" : "7f9ca176-1729-43da-bfa2-9e5f42d43124",
15:11:33.117  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "priority" : 0,
15:11:33.117  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpRequest" : {
15:11:33.118  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "path" : "/api/path"
15:11:33.118  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:33.118  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "times" : {
15:11:33.118  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:33.119  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:33.119  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "timeToLive" : {
15:11:33.119  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:33.120  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:33.120  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpResponse" : {
15:11:33.120  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "statusCode" : 200,
15:11:33.120  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "body" : "{\n  \"cursor\": \"abc\"}"
15:11:33.121  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     }
15:11:33.121  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:33.121  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:33.121  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  with id:
15:11:33.121  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:33.122  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   7f9ca176-1729-43da-bfa2-9e5f42d43124
15:11:33.122  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
Loading JavaScript to validate ECMA262 regular expression in JsonSchema because java.util.regex package in Java does not match ECMA262
Warning: Nashorn engine is planned to be removed from a future JDK release
15:11:35.332  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:35 5.11.2 INFO 1080 creating expectation:
15:11:35.332  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:35.333  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:35.333  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "id" : "ad34dd60-7a96-4585-b88f-a279b8c4aad5",
15:11:35.333  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "priority" : 0,
15:11:35.333  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpRequest" : {
15:11:35.333  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "path" : "/api/path",
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "queryStringParameters" : {
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:         "cursor" : [ "abc" ]
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       }
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "times" : {
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:35.334  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:35.335  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "timeToLive" : {
15:11:35.335  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:35.335  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:35.335  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpResponse" : {
15:11:35.335  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "statusCode" : 200,
15:11:35.335  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "body" : "{}"
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     }
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  with id:
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   ad34dd60-7a96-4585-b88f-a279b8c4aad5
15:11:35.336  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
15:11:35.463  INFO [           main] .i.0.1-SNAPSHOT-20210909T114840-fc746eb] : Creating container for image: gcr.io/mo-lyrics/voc:0.0.1-SNAPSHOT-20210909T114840-fc746eb
15:11:37.857  INFO [           main] .i.0.1-SNAPSHOT-20210909T114840-fc746eb] : Starting container with ID: 0ba9cc08596ac6e1460a949d99247aed99024da61b64a377dd2d259b2b2932bc
15:11:39.069  INFO [           main] .i.0.1-SNAPSHOT-20210909T114840-fc746eb] : Container gcr.io/mo-lyrics/voc:0.0.1-SNAPSHOT-20210909T114840-fc746eb is starting: 0ba9cc08596ac6e1460a949d99247aed99024da61b64a377dd2d259b2b2932bc
15:11:39.106  INFO [           main] o.t.c.wait.strategy.HttpWaitStrategy     : /angry_ganguly: Waiting for 180 seconds for URL: http://localhost:34896/_meta/0/info (where port 34896 maps to container port 8080)
15:11:54.023  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:54 5.11.2 INFO 1080 received request:
15:11:54.024  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.025  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:54.025  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "method" : "GET",
15:11:54.026  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "path" : "/api/path",
15:11:54.026  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "headers" : {
15:11:54.027  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "spot-service-identity" : [ "voc" ],
15:11:54.027  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Host" : [ "mockserver:1080" ],
15:11:54.027  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Connection" : [ "Keep-Alive" ],
15:11:54.028  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Accept-Encoding" : [ "gzip" ],
15:11:54.028  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "User-Agent" : [ "okhttp/2.7.5" ],
15:11:54.028  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "content-length" : [ "0" ]
15:11:54.028  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:54.028  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "keepAlive" : true,
15:11:54.029  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "secure" : false
15:11:54.029  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:54.029  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
15:11:54.035  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:54 5.11.2 INFO 1080 request:
15:11:54.036  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.036  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:54.036  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "method" : "GET",
15:11:54.037  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "path" : "/api/path",
15:11:54.037  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "headers" : {
15:11:54.037  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "spot-service-identity" : [ "voc" ],
15:11:54.037  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Host" : [ "mockserver:1080" ],
15:11:54.038  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Connection" : [ "Keep-Alive" ],
15:11:54.038  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Accept-Encoding" : [ "gzip" ],
15:11:54.038  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "User-Agent" : [ "okhttp/2.7.5" ],
15:11:54.038  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "content-length" : [ "0" ]
15:11:54.039  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:54.040  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "keepAlive" : true,
15:11:54.040  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "secure" : false
15:11:54.041  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:54.041  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.041  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  matched expectation:
15:11:54.042  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.042  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:54.043  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "id" : "7f9ca176-1729-43da-bfa2-9e5f42d43124",
15:11:54.044  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "priority" : 0,
15:11:54.046  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpRequest" : {
15:11:54.046  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "path" : "/api/path"
15:11:54.047  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:54.049  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "times" : {
15:11:54.051  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:54.051  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:54.052  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "timeToLive" : {
15:11:54.052  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:54.052  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:54.052  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpResponse" : {
15:11:54.052  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "statusCode" : 200,
15:11:54.053  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "body" : "{\n  \"cursor\": \"abc\"}"
15:11:54.053  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     }
15:11:54.053  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:54.054  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
15:11:54.068  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:54 5.11.2 INFO 1080 returning response:
15:11:54.069  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.070  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:54.070  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "statusCode" : 200,
15:11:54.071  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "body" : "{\n  \"cursor\": \"abc\"}"
15:11:54.071  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:54.071  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.072  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  for request:
15:11:54.072  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.072  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:54.072  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "method" : "GET",
15:11:54.073  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "path" : "/api/path",
15:11:54.073  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "headers" : {
15:11:54.073  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "spot-service-identity" : [ "voc" ],
15:11:54.073  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Host" : [ "mockserver:1080" ],
15:11:54.074  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Connection" : [ "Keep-Alive" ],
15:11:54.074  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Accept-Encoding" : [ "gzip" ],
15:11:54.074  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "User-Agent" : [ "okhttp/2.7.5" ],
15:11:54.074  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "content-length" : [ "0" ]
15:11:54.074  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:54.075  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "keepAlive" : true,
15:11:54.075  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "secure" : false
15:11:54.075  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:54.075  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.075  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  for action:
15:11:54.076  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.076  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:54.076  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "statusCode" : 200,
15:11:54.077  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "body" : "{\n  \"cursor\": \"abc\"}"
15:11:54.077  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:54.077  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.077  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  from expectation:
15:11:54.077  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:54.077  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   7f9ca176-1729-43da-bfa2-9e5f42d43124
15:11:54.078  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
15:11:56.875  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:56 5.11.2 INFO 1080 received request:
15:11:56.876  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.877  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:56.879  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "method" : "GET",
15:11:56.881  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "path" : "/api/path",
15:11:56.881  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "queryStringParameters" : {
15:11:56.882  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "cursor" : [ "abc" ]
15:11:56.882  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.882  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "headers" : {
15:11:56.882  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "spot-service-identity" : [ "voc" ],
15:11:56.883  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Host" : [ "mockserver:1080" ],
15:11:56.883  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Connection" : [ "Keep-Alive" ],
15:11:56.883  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Accept-Encoding" : [ "gzip" ],
15:11:56.883  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "User-Agent" : [ "okhttp/2.7.5" ],
15:11:56.883  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "content-length" : [ "0" ]
15:11:56.884  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.884  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "keepAlive" : true,
15:11:56.884  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "secure" : false
15:11:56.884  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:56.884  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
15:11:56.891  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:56 5.11.2 INFO 1080 request:
15:11:56.891  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.892  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:56.892  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "method" : "GET",
15:11:56.893  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "path" : "/api/path",
15:11:56.893  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "queryStringParameters" : {
15:11:56.893  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "cursor" : [ "abc" ]
15:11:56.894  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.894  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "headers" : {
15:11:56.895  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "spot-service-identity" : [ "voc" ],
15:11:56.895  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Host" : [ "mockserver:1080" ],
15:11:56.895  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Connection" : [ "Keep-Alive" ],
15:11:56.895  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Accept-Encoding" : [ "gzip" ],
15:11:56.895  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "User-Agent" : [ "okhttp/2.7.5" ],
15:11:56.896  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "content-length" : [ "0" ]
15:11:56.896  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.896  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "keepAlive" : true,
15:11:56.896  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "secure" : false
15:11:56.897  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:56.897  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.897  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  matched expectation:
15:11:56.897  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.897  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:56.897  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "id" : "7f9ca176-1729-43da-bfa2-9e5f42d43124",
15:11:56.898  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "priority" : 0,
15:11:56.898  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpRequest" : {
15:11:56.898  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "path" : "/api/path"
15:11:56.898  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.898  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "times" : {
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "timeToLive" : {
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "unlimited" : true
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "httpResponse" : {
15:11:56.899  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "statusCode" : 200,
15:11:56.900  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "body" :"{\n  \"cursor\": \"abc\"}"
15:11:56.900  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     }
15:11:56.900  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:56.900  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  
15:11:56.923  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 2021-09-09 13:11:56 5.11.2 INFO 1080 returning response:
15:11:56.923  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.923  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "statusCode" : 200,
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "body" : "{\n  \"cursor\": \"abc\"}"
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  for request:
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.924  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "method" : "GET",
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "path" : "/api/path",
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "queryStringParameters" : {
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "cursor" : [ "abc" ]
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "headers" : {
15:11:56.925  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "spot-service-identity" : [ "voc" ],
15:11:56.926  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Host" : [ "mockserver:1080" ],
15:11:56.926  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Connection" : [ "Keep-Alive" ],
15:11:56.926  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "Accept-Encoding" : [ "gzip" ],
15:11:56.926  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "User-Agent" : [ "okhttp/2.7.5" ],
15:11:56.926  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:       "content-length" : [ "0" ]
15:11:56.926  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     },
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "keepAlive" : true,
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "secure" : false
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  for action:
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   {
15:11:56.927  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "statusCode" : 200,
15:11:56.928  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:     "body" : "{\n  \"cursor\": \"abc\"}"
15:11:56.928  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   }
15:11:56.928  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.928  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:  from expectation:
15:11:56.928  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT: 
15:11:56.928  INFO [eam--1365788226] com.spot.voc.ContainerIT     : [mockServerContainer] STDOUT:   7f9ca176-1729-43da-bfa2-9e5f42d43124
ruchirsachdeva commented 3 years ago

When I reverse the order of setting expectations, it works! :what: i.e

  1. mock an HttpRequest with path = /api/path with pagination query param = ?cursor=abc to return empty response "{}"
  2. mock an HttpRequest with path = /api/path to return response = "{\n \"cursor\": \"abc\"}"

WORKS! and http://mock-server-1080/api/path?cursor=abc returns "{}"

jamesdbloom commented 2 years ago

MockServer will just perform the action of the first matching expectation as described here: https://mock-server.com/mock_server/creating_expectations.html#matching_order

If you want the first expectation to only be matched when the query parameter is not present you need to use a not matcher for the query parameter to express that is should not be present. For more details of not matchers see here: https://mock-server.com/mock_server/creating_expectations.html#button_match_request_by_not_matching_headers this example shows how to use a not matcher for a header but the same approach can be used for query parameters.