Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-18501

Fitnesse Plugin - java.net.SocketTimeoutException: Read timed out

    Details

    • Similar Issues:

      Description

      We get this socket timeout the odd occasion, as you can see we have tried setting the HttpTimeout to a big number but it doesn't seem to help.

      12:59:36 hudson.plugins.fitnesse.FitnesseBuilder:

      {fitnesseTargetPage=PayrollTeam.ModulePayroll.AaTaxArea.NewZealandTax, fitnesseTargetIsSuite=true, fitnesseHost=Private, fitnesseHttpTimeout=2700000, fitnessePortRemote=8886, fitnesseStart=False, fitnessePathToXmlResultsOut=C:\PayGlobal\FitNesse\Results\XESuiteNZTax_Results.xml}

      12:59:36 Connnecting to http://PAYFIT003:8886/PayrollTeam.ModulePayroll.AaTaxArea.NewZealandTax?suite&format=xml&includehtml
      12:59:36 Connected: 200/OK
      13:44:46 java.net.SocketTimeoutException: Read timed out
      13:44:46 at java.net.SocketInputStream.socketRead0(Native Method)
      13:44:46 at java.net.SocketInputStream.read(Unknown Source)
      13:44:46 at java.net.SocketInputStream.read(Unknown Source)
      13:44:46 at java.io.BufferedInputStream.fill(Unknown Source)
      13:44:46 at java.io.BufferedInputStream.read1(Unknown Source)
      13:44:46 at java.io.BufferedInputStream.read(Unknown Source)
      13:44:46 at sun.net.www.http.ChunkedInputStream.readAheadBlocking(Unknown Source)
      13:44:46 at sun.net.www.http.ChunkedInputStream.readAhead(Unknown Source)
      13:44:46 at sun.net.www.http.ChunkedInputStream.read(Unknown Source)
      13:44:46 at java.io.FilterInputStream.read(Unknown Source)
      13:44:46 at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      13:44:46 at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      13:44:46 at hudson.plugins.fitnesse.FitnesseExecutor.getHttpBytes(FitnesseExecutor.java:230)
      13:44:46 at hudson.plugins.fitnesse.FitnesseExecutor$1.run(FitnesseExecutor.java:201)
      13:44:46 at java.lang.Thread.run(Unknown Source)

      I've had a quick look at the code and I'm pretty sure this is where it is crashing:

      try {
      log.println("Connnecting to " + pageCmdTarget);
      HttpURLConnection connection = (HttpURLConnection) pageCmdTarget.openConnection();
      connection.setReadTimeout(httpTimeout);
      log.println("Connected: " + connection.getResponseCode() + "/" + connection.getResponseMessage());

      inputStream = connection.getInputStream();
      long recvd = 0, lastLogged = 0;
      byte[] buf = new byte[4096];
      int lastRead;
      while ((lastRead = inputStream.read(buf)) > 0) {
      bucket.write(buf, 0, lastRead);
      timeout.reset();
      recvd += lastRead;
      if (recvd - lastLogged > 1024)

      { log.println(recvd/1024 + "k..."); lastLogged = recvd; }

      }
      } catch (IOException e)

      { // this may be a "premature EOF" caused by e.g. incorrect content-length HTTP header // so it may be non-fatal -- try to recover e.printStackTrace(log); }

      finally {
      if (inputStream != null) {
      try

      { inputStream.close(); }

      catch (Exception e)

      { // swallow }

      }
      }

      I'm not very good with networking code so would someone please be able to look at this for me and see if there is an issue or suggest something environmentally we could do to avoid these timeouts?

      Cheers,
      Sam

        Attachments

          Activity

          Hide
          samj Sam Jessop added a comment -

          Hey all, me and another developer here have been looking into this further and we see that there is only 1 variable used for the httpTimeout and the tests timeout. This is not good in our case as it may take 45 minutes to run a test (big reports) but it also means it will take 45 minutes for the test to fail if the http fails to connect and timeout.

          Also it doesn't seem to retry to connect if it fails to connect the first time?

          Show
          samj Sam Jessop added a comment - Hey all, me and another developer here have been looking into this further and we see that there is only 1 variable used for the httpTimeout and the tests timeout. This is not good in our case as it may take 45 minutes to run a test (big reports) but it also means it will take 45 minutes for the test to fail if the http fails to connect and timeout. Also it doesn't seem to retry to connect if it fails to connect the first time?
          Hide
          geekinfinity Heng Wang added a comment -

          Have you tried to increase the HTTP Timeout (ms) and Test Timeout (ms) in the FitNesse Plugin ?

          I solved this Java Read time out issue by increasing the HTTP Timeout (ms) and Test Timeout (ms), put it long enough to finish all you test suite

          Show
          geekinfinity Heng Wang added a comment - Have you tried to increase the HTTP Timeout (ms) and Test Timeout (ms) in the FitNesse Plugin ? I solved this Java Read time out issue by increasing the HTTP Timeout (ms) and Test Timeout (ms), put it long enough to finish all you test suite
          Hide
          antoine_aumjaud Antoine Aumjaud added a comment -

          fixed in version 1.7

          Show
          antoine_aumjaud Antoine Aumjaud added a comment - fixed in version 1.7
          Hide
          daniel_the_builder Daniel Eichert added a comment -

          Hi guys,

          I have to reopen this ticket, because I have the same Problem over and over. In my Project I execute four FitNesse tests (one after another). To get to the bottom of it, I use a different port for every single FitNesse Test. I also use different slim.ports in the FitNesse environment.

          The SocketTimeoutException doesn't appear on every run, but usually on one out of the four. I can tell you that in the case where the exception appears:

          • FitNesse process is running
          • The Server opened the port that was specified
          • There are no FitNesse tests executed

          So the main reason is that the FitNesse tests aren't executed and that causes the SocketTimeoutException. Do you have any idea?

           

          hudson.plugins.fitnesse.FitnesseBuilder: {fitnessePathToRoot=sl_instance/fitnesse.project/FitNesseRoot, additionalFitnesseOptions=-f ./../../launcher/plugin.properties.jenkins, fitnesseTestTimeout=600000, fitnesseJdk=, fitnesseStart=True, fitnesseHttpTimeout=600000, fitnesseTargetIsSuite=true, fitnesseJavaOpts=-Xmx128M, fitnessePathToJar=sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar, fitnesseTargetPage=integration.testBase.AccessTestSuite, fitnessePathToXmlResultsOut=sl_instance/reports/fitnesse/fitnesse-results.xml, fitnessePortLocal=28002, fitnesseJavaWorkingDirectory=sl_instance/fitnesse.project/libs/fitnesse}
          /var/lib/jenkins/jobs/integrationTest/workspace
          Starting new Fitnesse instance...
          [fitnesse] $ java -Xmx128M -jar /var/lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar -d /var/lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project -r FitNesseRoot -p 28002 -f ./../../launcher/plugin.properties.jenkins
          Wait for Fitnesse Server start
          .Bootstrapping FitNesse, the fully integrated standalone wiki and acceptance testing framework.
          root page: fitnesse.wiki.fs.WikiFilePage: FitNesseRoot
          logger: none
          authenticator: fitnesse.authentication.PromiscuousAuthenticator
          page factory: fitnesse.html.template.PageFactory
          page theme: bootstrap
          Starting FitNesse on port: 28002
          
          Fitnesse server started in 1000ms.
          Can't find target file: sl_instance/reports/fitnesse/fitnesse-results.xml with working directory: /var/lib/jenkins/jobs/integrationTest/workspace
          Connnecting to http://localhost:28002/integration.testBase.AccessTestSuite?suite&format=xml&includehtml
          Connected: 200/OK
          java.net.SocketTimeoutException: Read timed out
           at java.net.SocketInputStream.socketRead0(Native Method)
           at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
           at java.net.SocketInputStream.read(SocketInputStream.java:171)
           at java.net.SocketInputStream.read(SocketInputStream.java:141)
           at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
           at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
           at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
           at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552)
           at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609)
           at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696)
           at java.io.FilterInputStream.read(FilterInputStream.java:133)
           at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3375)
           at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3368)
           at hudson.plugins.fitnesse.FitnesseExecutor.getHttpBytes(FitnesseExecutor.java:253)
           at hudson.plugins.fitnesse.FitnesseExecutor$1.run(FitnesseExecutor.java:231)
           at java.lang.Thread.run(Thread.java:745)
          Force close of input stream.
          Xml results saved as UTF-8 to /var/lib/jenkins/jobs/integrationTest/workspace/sl_instance/reports/fitnesse/fitnesse-results.xml
          
          Show
          daniel_the_builder Daniel Eichert added a comment - Hi guys, I have to reopen this ticket, because I have the same Problem over and over. In my Project I execute four FitNesse tests (one after another). To get to the bottom of it, I use a different port for every single FitNesse Test. I also use different slim.ports in the FitNesse environment. The SocketTimeoutException doesn't appear on every run, but usually on one out of the four. I can tell you that in the case where the exception appears: FitNesse process is running The Server opened the port that was specified There are no FitNesse tests executed So the main reason is that the FitNesse tests aren't executed and that causes the SocketTimeoutException. Do you have any idea?   hudson.plugins.fitnesse.FitnesseBuilder: {fitnessePathToRoot=sl_instance/fitnesse.project/FitNesseRoot, additionalFitnesseOptions=-f ./../../launcher/plugin.properties.jenkins, fitnesseTestTimeout=600000, fitnesseJdk=, fitnesseStart=True, fitnesseHttpTimeout=600000, fitnesseTargetIsSuite= true , fitnesseJavaOpts=-Xmx128M, fitnessePathToJar=sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar, fitnesseTargetPage=integration.testBase.AccessTestSuite, fitnessePathToXmlResultsOut=sl_instance/reports/fitnesse/fitnesse-results.xml, fitnessePortLocal=28002, fitnesseJavaWorkingDirectory=sl_instance/fitnesse.project/libs/fitnesse} / var /lib/jenkins/jobs/integrationTest/workspace Starting new Fitnesse instance... [fitnesse] $ java -Xmx128M -jar / var /lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar -d / var /lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project -r FitNesseRoot -p 28002 -f ./../../launcher/plugin.properties.jenkins Wait for Fitnesse Server start .Bootstrapping FitNesse, the fully integrated standalone wiki and acceptance testing framework. root page: fitnesse.wiki.fs.WikiFilePage: FitNesseRoot logger: none authenticator: fitnesse.authentication.PromiscuousAuthenticator page factory: fitnesse.html.template.PageFactory page theme: bootstrap Starting FitNesse on port: 28002 Fitnesse server started in 1000ms. Can't find target file: sl_instance/reports/fitnesse/fitnesse-results.xml with working directory: / var /lib/jenkins/jobs/integrationTest/workspace Connnecting to http: //localhost:28002/integration.testBase.AccessTestSuite?suite&format=xml&includehtml Connected: 200/OK java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552) at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609) at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696) at java.io.FilterInputStream.read(FilterInputStream.java:133) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3375) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3368) at hudson.plugins.fitnesse.FitnesseExecutor.getHttpBytes(FitnesseExecutor.java:253) at hudson.plugins.fitnesse.FitnesseExecutor$1.run(FitnesseExecutor.java:231) at java.lang. Thread .run( Thread .java:745) Force close of input stream. Xml results saved as UTF-8 to / var /lib/jenkins/jobs/integrationTest/workspace/sl_instance/reports/fitnesse/fitnesse-results.xml
          Hide
          daniel_the_builder Daniel Eichert added a comment -

          Hi there,

          yesterday I removed the FitNesse Buildstep and replaced it with an ant-call. This ant-call creates a FitNesse instance and tests a Suite. But I still get the timeout on some of the tests. I can see that the FitNesse instance is running and the Chrome instance as well, but there is no Chrome visible and therefore no test will be executed.

          Seems like this problem occures in the  FitNesse instance itself and has nothing to do with the FitNesse Plugin...

          Show
          daniel_the_builder Daniel Eichert added a comment - Hi there, yesterday I removed the FitNesse Buildstep and replaced it with an ant-call. This ant-call creates a FitNesse instance and tests a Suite. But I still get the timeout on some of the tests. I can see that the FitNesse instance is running and the Chrome instance as well, but there is no Chrome visible and therefore no test will be executed. Seems like this problem occures in the  FitNesse instance itself and has nothing to do with the FitNesse Plugin...

            People

            • Assignee:
              Unassigned
              Reporter:
              samj Sam Jessop
            • Votes:
              1 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated: