diff tests/test-http-bad-server.t @ 32002:bf855efe5664

httppeer: wrap HTTPResponse.read() globally There were a handful of places in the code where HTTPResponse.read() was called with no explicit error handling or with inconsistent error handling. In order to eliminate this class of bug, we globally swap out HTTPResponse.read() with a unified error handler. I initially attempted to fix all call sites. However, after going down that rabbit hole, I figured it was best to just change read() to do what we want. This appears to be a worthwhile change, as the tests demonstrate many of our uncaught exceptions go away. To better represent this class of failure, we introduce a new error type. The main benefit over IOError is it can hold a hint. I'm receptive to tweaking its name or inheritance.
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 14 Apr 2017 00:33:56 -0700
parents c85f19c66e8d
children acc67cd7f508
line wrap: on
line diff
--- a/tests/test-http-bad-server.t	Thu Apr 13 22:19:28 2017 -0700
+++ b/tests/test-http-bad-server.t	Fri Apr 14 00:33:56 2017 -0700
@@ -267,10 +267,10 @@
   $ hg --config badserver.closeaftersendbytes=180 serve -p $HGPORT -d --pid-file=hg.pid -E error.log
   $ cat hg.pid > $DAEMON_PIDS
 
-TODO client spews a stack due to uncaught httplib.IncompleteRead
-
-  $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
-  [1]
+  $ hg clone http://localhost:$HGPORT/ clone
+  abort: HTTP request error (incomplete response; expected 385 bytes got 20)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
+  [255]
 
   $ killdaemons.py $DAEMON_PIDS
 
@@ -461,11 +461,11 @@
   $ hg --config badserver.closeaftersendbytes=933 serve -p $HGPORT -d --pid-file=hg.pid -E error.log
   $ cat hg.pid > $DAEMON_PIDS
 
-TODO client spews a stack due to uncaught httplib.IncompleteRead
-
-  $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
+  $ hg clone http://localhost:$HGPORT/ clone
   requesting all changes
-  [1]
+  abort: HTTP request error (incomplete response)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
+  [255]
 
   $ killdaemons.py $DAEMON_PIDS
 
@@ -525,11 +525,11 @@
   $ hg --config badserver.closeaftersendbytes=945 serve -p $HGPORT -d --pid-file=hg.pid -E error.log
   $ cat hg.pid > $DAEMON_PIDS
 
-TODO client spews a stack due to uncaught httplib.IncompleteRead
-
-  $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
+  $ hg clone http://localhost:$HGPORT/ clone
   requesting all changes
-  [1]
+  abort: HTTP request error (incomplete response; expected 1 bytes got 3)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
+  [255]
 
   $ killdaemons.py $DAEMON_PIDS
 
@@ -593,7 +593,8 @@
 
   $ hg clone http://localhost:$HGPORT/ clone
   requesting all changes
-  abort: connection ended unexpectedly
+  abort: HTTP request error (incomplete response; expected 1 bytes got 3)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   [255]
 
   $ killdaemons.py $DAEMON_PIDS
@@ -616,7 +617,8 @@
 
   $ hg clone http://localhost:$HGPORT/ clone
   requesting all changes
-  abort: connection ended unexpectedly
+  abort: HTTP request error (incomplete response; expected 1 bytes got 3)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   [255]
 
   $ killdaemons.py $DAEMON_PIDS
@@ -640,7 +642,8 @@
 
   $ hg clone http://localhost:$HGPORT/ clone
   requesting all changes
-  abort: connection ended unexpectedly
+  abort: HTTP request error (incomplete response)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   [255]
 
   $ killdaemons.py $DAEMON_PIDS
@@ -664,7 +667,8 @@
 
   $ hg clone http://localhost:$HGPORT/ clone
   requesting all changes
-  abort: connection ended unexpectedly
+  abort: HTTP request error (incomplete response)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   [255]
 
   $ killdaemons.py $DAEMON_PIDS
@@ -785,7 +789,8 @@
   added 1 changesets with 1 changes to 1 files
   transaction abort!
   rollback completed
-  abort: connection ended unexpectedly
+  abort: HTTP request error (incomplete response)
+  (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   [255]
 
   $ killdaemons.py $DAEMON_PIDS