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.58k stars 1.07k forks source link

mockWithCallback doesn't work on 5.15.0 but only works on 5.4.1. #1636

Open BoHuCB opened 1 year ago

BoHuCB commented 1 year ago

Describe the issue mockWithCallback doesn't work on 5.15.0 but only works on 5.4.1.

What you are trying to do I want to register a path with mockWithCallback

MockServer version 5.15.0

To Reproduce Steps to reproduce the issue:

  1. How you are running MockServer (i.e maven plugin, docker, etc) I use node to run MockServer with "mockserver-client": "5.15.0" and "mockserver-node": "5.15.0"
  2. Code you used to create expectations this is the code I use to register a mockWithCallback and mockAnyResponse

`var mockserver = require("mockserver-node"); var mockServerClient = require("mockserver-client").mockServerClient; var mockserver_port = 1080; var instance = mockServerClient("localhost", mockserver_port);

var callback = function (request) { if (request.method === "POST") { return { statusCode: 200, body: JSON.stringify({ name: "POST" }), }; } else { console.log("Callback received NOT BY POST"); return { statusCode: 200, body: JSON.stringify({ name: "not POST" }), }; } };

mockserver .start_mockserver({ serverPort: mockserver_port, verbose: true }) .then(function () { instance .mockWithCallback( { path: "/somepath/callback", }, callback, { remainingTimes: 5, unlimited: true, } ) .then( function () { console.log("/somepath/callback expectation created"); }, function (error) { console.log(error); } );

instance
  .mockAnyResponse({
    httpRequest: {
      path: "/somepath/one",
    },
    httpResponse: {
      statusCode: 200,
      body: JSON.stringify({ name: "one" }),
      delay: {
        timeUnit: "MILLISECONDS",
        value: 250,
      },
    },
  })
  .then(
    function () {
      console.log('created "/somepath/one" expectation');
    },
    function (error) {
      console.log("testhost failed");
      console.log(error);

      console.log(error.body);
    }
  );

}); `

  1. What error you saw I don't see "/somepath/callback" expectation created from the terminal logs and only see "/somepath/one" path created in the logs. And can't ping "/somepath/callback" postman. But if I use "mockserver-client": "5.4.1" and "mockserver-node": "5.4.1", I see both paths created in the logs and are able to ping both paths from postman.

Expected behaviour mockWithCallback should work with the latest release, "mockserver-client": "5.15.0" and "mockserver-node": "5.15.0".

MockServer Log Log when use "mockserver-client": "5.15.0" and "mockserver-node": "5.15.0" `node ./server.js Skipping { "host": "oss.sonatype.org", "path": "/content/repositories/releases/org/mock-server/mockserver-netty/5.15.0/mockserver-netty-5.15.0-jar-with-dependencies.jar", "port": 443 } as file already downloaded Running 'java -Dfile.encoding=UTF-8 -jar node_modules/mockserver-node/mockserver-netty-5.15.0-jar-with-dependencies.jar -serverPort 1080 -logLevel DEBUG' waiting for MockServer to start retries remaining: 110 waiting for MockServer to start retries remaining: 109 waiting for MockServer to start retries remaining: 108 waiting for MockServer to start retries remaining: 107 waiting for MockServer to start retries remaining: 106 waiting for MockServer to start retries remaining: 105 2023-01-16 09:27:57 5.15.0 INFO using environment variables:

[

]

and system properties:

[

]

and command line options:

[ logLevel=DEBUG, serverPort=1080 ]

waiting for MockServer to start retries remaining: 104 waiting for MockServer to start retries remaining: 103 waiting for MockServer to start retries remaining: 102 waiting for MockServer to start retries remaining: 101 waiting for MockServer to start retries remaining: 100 2023-01-16 09:27:58 5.15.0 FINE logger level is DEBUG, change using:

Fetching { "protocol": "https:", "method": "GET", "host": "raw.githubusercontent.com", "path": "/mock-server/mockserver/master/mockserver-core/src/main/resources/org/mockserver/socket/CertificateAuthorityCertificate.pem", "port": 443 } failed with error Error: self signed certificate in certificate chain created "/somepath/one" expectation 2023-01-16 09:27:59 5.15.0 INFO 1080 creating expectation:

{ "httpRequest" : { "path" : "/somepath/one" }, "httpResponse" : { "statusCode" : 200, "body" : "{\"name\":\"one\"}", "delay" : { "timeUnit" : "MILLISECONDS", "value" : 250 } }, "id" : "ad15eaec-a625-44d3-a409-c87f0191a413", "priority" : 0, "timeToLive" : { "unlimited" : true }, "times" : { "unlimited" : true } }

with id:

ad15eaec-a625-44d3-a409-c87f0191a413

`

### Log when use "mockserver-client": "5.4.1" and "mockserver-node": "5.4.1"

`node ./server.js Skipping {"host":"oss.sonatype.org","path":"/content/repositories/releases/org/mock-server/mockserver-netty/5.4.1/mockserver-netty-5.4.1-jar-with-dependencies.jar","port":443} as file already downloaded Running 'java -Dfile.encoding=UTF-8 -Dmockserver.logLevel=INFO -jar node_modules/mockserver-node/mockserver-netty-5.4.1-jar-with-dependencies.jar -serverPort 1080' waiting for MockServer to start retries remaining: 100 waiting for MockServer to start retries remaining: 99 waiting for MockServer to start retries remaining: 98 waiting for MockServer to start retries remaining: 97 waiting for MockServer to start retries remaining: 96 waiting for MockServer to start retries remaining: 95 waiting for MockServer to start retries remaining: 94 waiting for MockServer to start retries remaining: 93 waiting for MockServer to start retries remaining: 92 waiting for MockServer to start retries remaining: 91 2023-01-16 09:34:34,978 INFO o.m.m.HttpStateHandler started on port: 1080 waiting for MockServer to start retries remaining: 90 2023-01-16 09:34:35,053 INFO o.m.m.HttpStateHandler resetting all expectations and request logs 2023-01-16 09:34:35,634 INFO o.m.m.HttpStateHandler creating expectation:

{
  "httpRequest" : {
    "path" : "/somepath/callback"
  },
  "times" : {
    "unlimited" : true
  },
  "timeToLive" : {
    "unlimited" : true
  },
  "httpResponseObjectCallback" : {
    "clientId" : "6504e1ef-bfd5-4066-9005-d7531b7d46c7"
  }
}

/somepath/callback expectation created 2023-01-16 09:34:35,642 INFO o.m.m.HttpStateHandler creating expectation:

{
  "httpRequest" : {
    "path" : "/somepath/one"
  },
  "times" : {
    "unlimited" : true
  },
  "timeToLive" : {
    "unlimited" : true
  },
  "httpResponse" : {
    "statusCode" : 200,
    "headers" : {
      "Content-Type" : [ "application/json; charset=utf-8" ],
      "Cache-Control" : [ "no-cache, no-store" ]
    },
    "body" : "{\"name\":\"one\"}",
    "delay" : {
      "timeUnit" : "MILLISECONDS",
      "value" : 250
    }
  }
}

created "/somepath/one" expectation`

wwn494049650 commented 1 year ago

same problem any solutions?

shawnzhu commented 7 months ago

I had similar problem when using mockserver-client@5.15.0 node module. mockWithCallback() works w/ mockserver-client@5.5.1.

I used docker image mockserver/mockserver:mockserver-5.11.1 and mockserver/mockserver:mockserver-5.15.0. didn't make a difference.

Ended up using mockserver-client@5.5.1 instead