Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

test/simple/test-http-destroyed-socket-write2.js - test issue #9234

Closed
mhdawson opened this issue Feb 17, 2015 · 2 comments
Closed

test/simple/test-http-destroyed-socket-write2.js - test issue #9234

mhdawson opened this issue Feb 17, 2015 · 2 comments

Comments

@mhdawson
Copy link
Member

This test validates that you get an appropriate error when trying to write to a request when the response on the other side has been destroyed.

The test uses http.request to get a request and then keeps writing to it until either it hits 128 writes or gets the expected error. Since the writes are asynchronous we see that the writes just end up adding events to the event loop, which then later get processed once the connection supporting the request is fully ready.

The test is timing dependent and if takes too long for the connection to be made the limit of 128 writes is exceeded and the test fails. The fact that the test allows a number of writes is probably to allow some delay for the connection to be ready for writing.

On AIX, in the default configuration using the loopback interface is slower and the test fails because the delay is such that many more writes can be queued up before the connection takes place. If we use the host ip instead of defaulting to the loopback then the test passes.

The test needs to be made more robust to delays. Since each write simply enqueues an additional write to the event queue there is probably no point in doing the second write until the first has completed. This patch schedules the next write when the first one completes and allows the test to pass even if it takes longer for the connection to be ready for writing:

diff --git a/test/simple/test-http-destroyed-socket-write2.js b/test/simple/test-http-destroyed-socket-write2.js
index 3347f3c..ebb80c9 100644
--- a/test/simple/test-http-destroyed-socket-write2.js
+++ b/test/simple/test-http-destroyed-socket-write2.js
@@ -49,8 +49,9 @@ server.listen(common.PORT, function() {
       req.end();
       test();
     } else {
-      timer = setImmediate(write);
-      req.write('hello');
+      req.write('hello', function() {
+        timer = setImmediate(write);
+      });
     }
   }

With this patch the test passes as expected on AIX using the loopback.

If this is the right fix let me know and I'll create a pull request.

@cjihrig
Copy link

cjihrig commented Feb 17, 2015

Seems fine to me.

@mhdawson
Copy link
Member Author

Created pull request here: #9270

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants