2017-10-15 3 views
0

Ich habe einen Junit-Test, in dem ich WireMock verwende. durchlaufen die Tests vor Ort, sondern auf Jenkins komme ich einen Fehler von java.lang.RuntimeException: java.net.BindException: Address already in useWireMock in Junit in Jenkins - BindException: Adresse bereits verwendet

Im WireMock Konfiguration I gesetzt dynamicHttpsPort() (die nach docs „Randomly dem HTTPS-Port beim Start asssign“) und ihre lokal arbeiten, aber auf Jenkins schlägt fehl.

Meine WireMock Konfiguration ist

@Rule 
    public WireMockRule wireMockRule = new WireMockRule(wireMockConfig() 
      .dynamicHttpsPort() 
      .keystorePath(certsDir.resolve("server.jks").toString()) 
      .keystorePassword(MY_PASS) 
      .keystoreType("JKS") 
    ); 

I 2 JUnit-Klassen haben, in dem ich eine neue WireMockRule schaffen, und sie können gleichzeitig ausgeführt werden. In einer der Klassen habe ich 4 Tests und in der anderen habe ich einen Test. Alle 5 Tests schlagen fehl.

Und der volle Stack-Trace ist:

com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.net.BindException: Address already in use 
    at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:146) 
    at com.github.tomakehurst.wiremock.junit.WireMockRule$1.evaluate(WireMockRule.java:68) 
    at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    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.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:104) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70) 
Caused by: java.lang.RuntimeException: java.net.BindException: Address already in use 
    at com.github.tomakehurst.wiremock.jetty9.JettyHttpServer.start(JettyHttpServer.java:139) 
    at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:144) 
    ... 23 more 
Caused by: java.net.BindException: Address already in use 
    at sun.nio.ch.Net.bind0(Native Method) 
    at sun.nio.ch.Net.bind(Net.java:433) 
    at sun.nio.ch.Net.bind(Net.java:425) 
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) 
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
    at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:321) 
    at wiremock.org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) 
    at wiremock.org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236) 
    at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
    at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:366) 
    at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
    at com.github.tomakehurst.wiremock.jetty9.JettyHttpServer.start(JettyHttpServer.java:137) 
    ... 24 more 

Antwort

0

die Lösung gefunden here:

Das Problem ist, dass Sie nicht den HTTP-Port entweder auf Einstellung, die immer aktiv sein wird und Standard ist 8080 (daher kollidieren sie). Wenn Sie beiden Konfigurationen dynamicPort() hinzufügen, sollte es behoben werden.

So Zugabe dynamicPort() es fest:

@Rule 
    public WireMockRule wireMockRule = new WireMockRule(wireMockConfig() 
      .dynamicPort() 
      .dynamicHttpsPort() 
      .keystorePath(certsDir.resolve("server.jks").toString()) 
      .keystorePassword(MY_PASS) 
      .keystoreType("JKS") 
    ); 
Verwandte Themen