Uploaded image for project: 'Undertow'
  1. Undertow
  2. UNDERTOW-1523 Review and fix tests that keep failing
  3. UNDERTOW-2257

"Bind address already in use" related to AbstractLoadBalancingProxyTestCase

    XMLWordPrintable

Details

    • Sub-task
    • Resolution: Done
    • Major
    • 2.2.11.Final
    • None
    • None
    • None

    Description

      The subclass of this test are creating ssl servers independently of DefaultServer and are causing the issue. Even though on teardown the test closes the servers, it mistakenly verifies if worker is shutdown, while it should verify if it is terminated. There is a small window of time where shutdown is requested but the worker is not terminated yet. And, because we are incrementing latch count only if the worker is not shutdown, we also skip the sleep that serves as a double protection against the "Address alread in use" issue.

      See the failures below:

      [INFO] Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.821 s - in io.undertow.server.handlers.proxy.LoadBalancingProxyAJPTestCase
      [INFO] Running io.undertow.server.handlers.proxy.LoadBalancerConnectionPoolingTestCase
      Error:  Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 s <<< FAILURE! - in io.undertow.server.handlers.proxy.LoadBalancerConnectionPoolingTestCase
      Error:  io.undertow.server.handlers.proxy.LoadBalancerConnectionPoolingTestCase  Time elapsed: 0.003 s  <<< ERROR!
      java.lang.RuntimeException: java.net.BindException: Address already in use
      	at io.undertow.Undertow.start(Undertow.java:254)
      	at io.undertow.server.handlers.proxy.LoadBalancerConnectionPoolingTestCase.before(LoadBalancerConnectionPoolingTestCase.java:60)
      	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
      	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
      	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
      	at org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
      	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
      	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
      	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
      	at io.undertow.testutils.RunDefaultServer.evaluate(RunDefaultServer.java:74)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
      	at io.undertow.testutils.DefaultServer.run(DefaultServer.java:382)
      	at org.junit.runners.Suite.runChild(Suite.java:128)
      	at org.junit.runners.Suite.runChild(Suite.java:27)
      	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
      	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
      	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
      	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
      	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
      	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
      	at org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:107)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:83)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75)
      	at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:158)
      	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:383)
      	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:344)
      	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:125)
      	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:417)
      Caused by: java.net.BindException: Address already in use
      	at java.base/sun.nio.ch.Net.bind0(Native Method)
      	at java.base/sun.nio.ch.Net.bind(Net.java:459)
      	at java.base/sun.nio.ch.Net.bind(Net.java:448)
      	at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
      	at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
      	at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:178)
      	at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:310)
      	at io.undertow.Undertow.start(Undertow.java:196)
      	... 34 more
      
      [INFO] Running io.undertow.server.handlers.proxy.LoadBalancingProxyTestCase
      Warning:  Tests run: 9, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 9.677 s - in io.undertow.server.handlers.proxy.LoadBalancingProxyTestCase
      [INFO] Running io.undertow.server.handlers.proxy.LoadBalancingProxyHttpsTestCase
      Error:  Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.005 s <<< FAILURE! - in io.undertow.server.handlers.proxy.LoadBalancingProxyHttpsTestCase
      Error:  io.undertow.server.handlers.proxy.LoadBalancingProxyHttpsTestCase  Time elapsed: 0 s  <<< ERROR!
      java.lang.RuntimeException: java.net.BindException: Address already in use
      	at io.undertow.Undertow.start(Undertow.java:254)
      	at io.undertow.server.handlers.proxy.LoadBalancingProxyHttpsTestCase.setup(LoadBalancingProxyHttpsTestCase.java:62)
      	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:59)
      	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
      	at org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
      	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
      	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
      	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
      	at io.undertow.testutils.RunDefaultServer.evaluate(RunDefaultServer.java:74)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
      	at io.undertow.testutils.DefaultServer.run(DefaultServer.java:382)
      	at org.junit.runners.Suite.runChild(Suite.java:128)
      	at org.junit.runners.Suite.runChild(Suite.java:27)
      	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
      	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
      	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
      	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
      	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
      	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
      	at org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:107)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:83)
      	at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75)
      	at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:158)
      	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:383)
      	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:344)
      	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:125)
      	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:417)
      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:461)
      	at sun.nio.ch.Net.bind(Net.java:453)
      	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222)
      	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
      	at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:178)
      	at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:310)
      	at io.undertow.protocols.ssl.UndertowXnioSsl.createSslConnectionServer(UndertowXnioSsl.java:446)
      	at io.undertow.Undertow.start(Undertow.java:239)
      	... 34 more
      

      Attachments

        Issue Links

          Activity

            People

              flaviarnn Flavia Rainone
              flaviarnn Flavia Rainone
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: