Use a random port for Pact provider tests

Issue #134 resolved
Kumar Gaurav created an issue

Tests currently use hard coded port 9999. Ideally we would use a random (unassigned) port instead.

Originally reported as:

Tests fail on master when run locally with maven. Anything I am missing? Thanks.

11:30:43.469 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Validating 1 consumers against API spec
11:30:43.471 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Validating consumer 'ExampleConsumer' against API spec
11:30:44.061 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Retrieving consumers from broker 'http://localhost:9999' for provider 'Provider'
11:30:44.278 [main] ERROR c.a.o.v.pact.PactProviderValidator - Exception occurred while retrieving consumers for provider 'Provider' from broker 'http://localhost:9999'
groovyx.net.http.HttpResponseException: Not Found
        at groovyx.net.http.RESTClient.defaultFailureHandler(RESTClient.java:263)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1082)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
        at groovy.lang.Closure.call(Closure.java:414)
        at groovyx.net.http.HTTPBuilder$1.handleResponse(HTTPBuilder.java:503)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:222)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164)
        at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515)
        at groovyx.net.http.RESTClient.get(RESTClient.java:119)
        at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
        at au.com.dius.pact.provider.broker.HalClient.fetch(HalClient.groovy:96)
        at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
        at au.com.dius.pact.provider.broker.HalClient.navigate(HalClient.groovy:49)
        at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
        at au.com.dius.pact.provider.broker.PactBrokerClient.fetchConsumers(PactBrokerClient.groovy:24)
        at com.atlassian.oai.validator.pact.PactProviderValidator$Builder.retrieveConsumers(PactProviderValidator.java:276)
        at com.atlassian.oai.validator.pact.PactProviderValidator$Builder.build(PactProviderValidator.java:258)
        at com.atlassian.oai.validator.pact.PactProviderValidatorTest.build_withValidBrokerUrl_hasConsumersForProvider(PactProviderValidatorTest.java:88)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at com.github.tomakehurst.wiremock.junit.WireMockRule$1.evaluate(WireMockRule.java:73)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
11:30:44.320 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Retrieving consumers from broker 'foo' for provider 'Provider'
11:30:44.325 [main] ERROR c.a.o.v.pact.PactProviderValidator - Exception occurred while retrieving consumers for provider 'Provider' from broker 'foo'
java.lang.IllegalStateException: Target host is null
        at org.apache.http.util.Asserts.notNull(Asserts.java:52)
        at org.apache.http.impl.conn.DefaultHttpRoutePlanner.determineRoute(DefaultHttpRoutePlanner.java:99)
        at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:763)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:382)
        at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:220)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164)
        at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515)
        at groovyx.net.http.RESTClient.get(RESTClient.java:119)
        at au.com.dius.pact.provider.broker.HalClient.fetch(HalClient.groovy:96)
        at au.com.dius.pact.provider.broker.HalClient.navigate(HalClient.groovy:49)
        at au.com.dius.pact.provider.broker.PactBrokerClient.fetchConsumers(PactBrokerClient.groovy:24)
        at com.atlassian.oai.validator.pact.PactProviderValidator$Builder.retrieveConsumers(PactProviderValidator.java:276)
        at com.atlassian.oai.validator.pact.PactProviderValidator$Builder.build(PactProviderValidator.java:258)
        at com.atlassian.oai.validator.pact.PactProviderValidatorTest.build_withInvalidBrokerUrl_hasNoConsumers(PactProviderValidatorTest.java:74)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at com.github.tomakehurst.wiremock.junit.WireMockRule$1.evaluate(WireMockRule.java:73)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
11:30:44.368 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Validating 1 consumers against API spec
11:30:44.368 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Validating consumer 'ExampleConsumer' against API spec
11:30:44.399 [main] DEBUG c.a.o.v.pact.PactProviderValidator - Retrieving consumers from broker 'http://localhost:9999' for provider 'Provider'
11:30:44.408 [main] ERROR c.a.o.v.pact.PactProviderValidator - Exception occurred while retrieving consumers for provider 'Provider' from broker 'http://localhost:9999'
groovyx.net.http.HttpResponseException: Not Found
        at groovyx.net.http.RESTClient.defaultFailureHandler(RESTClient.java:263)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1082)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
        at groovy.lang.Closure.call(Closure.java:414)
        at groovyx.net.http.HTTPBuilder$1.handleResponse(HTTPBuilder.java:503)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:222)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164)
        at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515)
        at groovyx.net.http.RESTClient.get(RESTClient.java:119)
        at au.com.dius.pact.provider.broker.HalClient.fetch(HalClient.groovy:96)
        at au.com.dius.pact.provider.broker.HalClient.navigate(HalClient.groovy:49)
        at au.com.dius.pact.provider.broker.PactBrokerClient.fetchConsumers(PactBrokerClient.groovy:24)
        at com.atlassian.oai.validator.pact.PactProviderValidator$Builder.retrieveConsumers(PactProviderValidator.java:276)
        at com.atlassian.oai.validator.pact.PactProviderValidator$Builder.build(PactProviderValidator.java:258)
        at com.atlassian.oai.validator.pact.PactProviderValidatorTest.build_withInvalidProviderId_hasNoConsumers(PactProviderValidatorTest.java:103)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at com.github.tomakehurst.wiremock.junit.WireMockRule$1.evaluate(WireMockRule.java:73)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
[ERROR] Tests run: 6, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.573 s <<< FAILURE! - in com.atlassian.oai.validator.pact.PactProviderValidatorTest
[ERROR] build_withValidBrokerUrl_hasConsumersForProvider(com.atlassian.oai.validator.pact.PactProviderValidatorTest)  Time elapsed: 0.268 s  <<< FAILURE!
java.lang.AssertionError: 

Expected: is <2>
     but: was <0>
        at com.atlassian.oai.validator.pact.PactProviderValidatorTest.build_withValidBrokerUrl_hasConsumersForProvider(PactProviderValidatorTest.java:90)

[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   PactProviderValidatorTest.build_withValidBrokerUrl_hasConsumersForProvider:90 
Expected: is <2>
     but: was <0>
[INFO] 
[ERROR] Tests run: 6, Failures: 1, Errors: 0, Skipped: 0

Comments (6)

  1. James Navin

    The tests here start a 'mock' broker on localhost:9999. Can you double check that that port is available when you run the tests (Ive seen errors like this when I have something else running on that port).

    If that is the problem it should be an easy fix to have that start on a random port.

  2. Kumar Gaurav reporter

    I see. There is something listening on 9999 already.

    ~/Documents $ lsof -Pn | grep LISTEN | grep 9999
    com.docke 79291 user   29u     IPv4 0x7b1001cb37bc3719         0t0        TCP *:9999 (LISTEN)
    com.docke 79291 user   30u     IPv6 0x7b1001cb1b0f2551         0t0        TCP [::1]:9999 (LISTEN)
    
  3. Kumar Gaurav reporter

    I can see one docker container using the port. Might be a good idea to start pact broker on random port. Thanks a lot.

  4. Log in to comment