tests/test-http-bad-server.t
branchstable
changeset 48796 c00d3ce4e94b
parent 48643 1e28c4209fff
child 48874 af0b21d5a930
equal deleted inserted replaced
48776:b84ff512b645 48796:c00d3ce4e94b
    28 Also disable compression because zstd is optional and causes output to vary
    28 Also disable compression because zstd is optional and causes output to vary
    29 and because debugging partial responses is hard when compression is involved
    29 and because debugging partial responses is hard when compression is involved
    30 
    30 
    31   $ cat > .hg/hgrc << EOF
    31   $ cat > .hg/hgrc << EOF
    32   > [extensions]
    32   > [extensions]
    33   > badserver = $TESTDIR/badserverext.py
    33   > badserver = $TESTDIR/testlib/badserverext.py
    34   > [server]
    34   > [server]
    35   > compressionengines = none
    35   > compressionengines = none
    36   > EOF
    36   > EOF
    37 
    37 
    38 Failure to accept() socket should result in connection related error message
    38 Failure to accept() socket should result in connection related error message
    39 
    39 ----------------------------------------------------------------------------
    40   $ hg serve --config badserver.closebeforeaccept=true -p $HGPORT -d --pid-file=hg.pid
    40 
       
    41   $ hg serve --config badserver.close-before-accept=true -p $HGPORT -d --pid-file=hg.pid
    41   $ cat hg.pid > $DAEMON_PIDS
    42   $ cat hg.pid > $DAEMON_PIDS
    42 
    43 
    43   $ hg clone http://localhost:$HGPORT/ clone
    44   $ hg clone http://localhost:$HGPORT/ clone
    44   abort: error: (\$ECONNRESET\$|\$EADDRNOTAVAIL\$) (re)
    45   abort: error: (\$ECONNRESET\$|\$EADDRNOTAVAIL\$) (re)
    45   [100]
    46   [100]
    48 So ensure the process is dead.)
    49 So ensure the process is dead.)
    49 
    50 
    50   $ killdaemons.py $DAEMON_PIDS
    51   $ killdaemons.py $DAEMON_PIDS
    51 
    52 
    52 Failure immediately after accept() should yield connection related error message
    53 Failure immediately after accept() should yield connection related error message
    53 
    54 --------------------------------------------------------------------------------
    54   $ hg serve --config badserver.closeafteraccept=true -p $HGPORT -d --pid-file=hg.pid
    55 
       
    56   $ hg serve --config badserver.close-after-accept=true -p $HGPORT -d --pid-file=hg.pid
    55   $ cat hg.pid > $DAEMON_PIDS
    57   $ cat hg.pid > $DAEMON_PIDS
    56 
    58 
    57 TODO: this usually outputs good results, but sometimes emits abort:
    59 TODO: this usually outputs good results, but sometimes emits abort:
    58 error: '' on FreeBSD and OS X.
    60 error: '' on FreeBSD and OS X.
    59 What we ideally want are:
    61 What we ideally want are:
    67   [100]
    69   [100]
    68 
    70 
    69   $ killdaemons.py $DAEMON_PIDS
    71   $ killdaemons.py $DAEMON_PIDS
    70 
    72 
    71 Failure to read all bytes in initial HTTP request should yield connection related error message
    73 Failure to read all bytes in initial HTTP request should yield connection related error message
    72 
    74 -----------------------------------------------------------------------------------------------
    73   $ hg serve --config badserver.closeafterrecvbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
    75 
       
    76   $ hg serve --config badserver.close-after-recv-bytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
    74   $ cat hg.pid > $DAEMON_PIDS
    77   $ cat hg.pid > $DAEMON_PIDS
    75 
    78 
    76   $ hg clone http://localhost:$HGPORT/ clone
    79   $ hg clone http://localhost:$HGPORT/ clone
    77   abort: error: bad HTTP status line: * (glob)
    80   abort: error: bad HTTP status line: * (glob)
    78   [100]
    81   [100]
    79 
    82 
    80   $ killdaemons.py $DAEMON_PIDS
    83   $ killdaemons.py $DAEMON_PIDS
    81 
    84 
    82   $ cat error.log
    85   $ cat error.log
    83   readline(1 from 65537) -> (1) G
    86   readline(1 from ~) -> (1) G
    84   read limit reached; closing socket
    87   read limit reached; closing socket
    85 
    88 
    86   $ rm -f error.log
    89   $ rm -f error.log
    87 
    90 
    88 Same failure, but server reads full HTTP request line
    91 Same failure, but server reads full HTTP request line
    89 
    92 -----------------------------------------------------
    90   $ hg serve --config badserver.closeafterrecvbytes=40 -p $HGPORT -d --pid-file=hg.pid -E error.log
    93 
       
    94   $ hg serve \
       
    95   > --config badserver.close-after-recv-patterns="GET /\?cmd=capabilities" \
       
    96   > --config badserver.close-after-recv-bytes=7 \
       
    97   > -p $HGPORT -d --pid-file=hg.pid -E error.log
    91   $ cat hg.pid > $DAEMON_PIDS
    98   $ cat hg.pid > $DAEMON_PIDS
    92   $ hg clone http://localhost:$HGPORT/ clone
    99   $ hg clone http://localhost:$HGPORT/ clone
    93   abort: error: bad HTTP status line: * (glob)
   100   abort: error: bad HTTP status line: * (glob)
    94   [100]
   101   [100]
    95 
   102 
    96   $ killdaemons.py $DAEMON_PIDS
   103   $ killdaemons.py $DAEMON_PIDS
    97 
   104 
    98   $ cat error.log
   105   $ cat error.log
    99   readline(40 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   106   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   100   readline(7 from *) -> (7) Accept- (glob)
   107   readline(7 from *) -> (7) Accept- (glob)
   101   read limit reached; closing socket
   108   read limit reached; closing socket
   102 
   109 
   103   $ rm -f error.log
   110   $ rm -f error.log
   104 
   111 
   105 Failure on subsequent HTTP request on the same socket (cmd?batch)
   112 Failure on subsequent HTTP request on the same socket (cmd?batch)
   106 
   113 -----------------------------------------------------------------
   107   $ hg serve --config badserver.closeafterrecvbytes=210,223 -p $HGPORT -d --pid-file=hg.pid -E error.log
   114 
       
   115   $ hg serve \
       
   116   > --config badserver.close-after-recv-patterns="GET /\?cmd=batch,GET /\?cmd=batch" \
       
   117   > --config badserver.close-after-recv-bytes=15,197 \
       
   118   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   108   $ cat hg.pid > $DAEMON_PIDS
   119   $ cat hg.pid > $DAEMON_PIDS
   109   $ hg clone http://localhost:$HGPORT/ clone
   120   $ hg clone http://localhost:$HGPORT/ clone
   110   abort: error: bad HTTP status line: * (glob)
   121   abort: error: bad HTTP status line: * (glob)
   111   [100]
   122   [100]
   112 
   123 
   113   $ killdaemons.py $DAEMON_PIDS
   124   $ killdaemons.py $DAEMON_PIDS
   114 
   125 
   115   $ cat error.log
   126   $ cat error.log
   116   readline(210 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   127   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   117   readline(177 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   128   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   118   readline(150 from *) -> (35) accept: application/mercurial-0.1\r\n (glob)
   129   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   119   readline(115 from *) -> (*) host: localhost:$HGPORT\r\n (glob)
   130   readline(*) -> (*) host: localhost:$HGPORT\r\n (glob)
   120   readline(* from *) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   131   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   121   readline(* from *) -> (2) \r\n (glob)
   132   readline(*) -> (2) \r\n (glob)
   122   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   133   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   123   sendall(431) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   134   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   124   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   135   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   125   write(431) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   136   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   126   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   137   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   127   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   138   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   128   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   139   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   129   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   140   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   130   write(21) -> Content-Length: 431\r\n (no-py3 !)
   141   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   131   write(2) -> \r\n (no-py3 !)
   142   write(2) -> \r\n (no-py3 !)
   132   write(431) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   143   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   133   readline(4? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
   144   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
   134   readline(1? from *) -> (1?) Accept-Encoding* (glob)
   145   readline(*) -> (1?) Accept-Encoding* (glob)
   135   read limit reached; closing socket
   146   read limit reached; closing socket
   136   readline(223 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   147   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   137   readline(197 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   148   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   138   readline(170 from *) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   149   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   139   readline(141 from *) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   150   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   140   readline(100 from *) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   151   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   141   readline(39 from *) -> (35) accept: application/mercurial-0.1\r\n (glob)
   152   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   142   readline(4 from *) -> (4) host (glob)
   153   readline(4 from *) -> (4) host (glob)
   143   read limit reached; closing socket
   154   read limit reached; closing socket
   144 
   155 
   145   $ rm -f error.log
   156   $ rm -f error.log
   146 
   157 
   147 Failure to read getbundle HTTP request
   158 Failure to read getbundle HTTP request
   148 
   159 --------------------------------------
   149   $ hg serve --config badserver.closeafterrecvbytes=308,317,304 -p $HGPORT -d --pid-file=hg.pid -E error.log
   160 
       
   161   $ hg serve \
       
   162   > --config badserver.close-after-recv-patterns="GET /\?cmd=batch,user-agent: mercurial/proto-1.0,GET /\?cmd=getbundle" \
       
   163   > --config badserver.close-after-recv-bytes=110,26,274 \
       
   164   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   150   $ cat hg.pid > $DAEMON_PIDS
   165   $ cat hg.pid > $DAEMON_PIDS
   151   $ hg clone http://localhost:$HGPORT/ clone
   166   $ hg clone http://localhost:$HGPORT/ clone
   152   requesting all changes
   167   requesting all changes
   153   abort: error: bad HTTP status line: * (glob)
   168   abort: error: bad HTTP status line: * (glob)
   154   [100]
   169   [100]
   156   $ killdaemons.py $DAEMON_PIDS
   171   $ killdaemons.py $DAEMON_PIDS
   157 
   172 
   158   $ cat error.log
   173   $ cat error.log
   159   readline(1 from -1) -> (1) x (?)
   174   readline(1 from -1) -> (1) x (?)
   160   readline(1 from -1) -> (1) x (?)
   175   readline(1 from -1) -> (1) x (?)
   161   readline(308 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   176   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   162   readline(275 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   177   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   163   readline(248 from *) -> (35) accept: application/mercurial-0.1\r\n (glob)
   178   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   164   readline(213 from *) -> (*) host: localhost:$HGPORT\r\n (glob)
   179   readline(*) -> (*) host: localhost:$HGPORT\r\n (glob)
   165   readline(* from *) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   180   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   166   readline(* from *) -> (2) \r\n (glob)
   181   readline(*) -> (2) \r\n (glob)
   167   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   182   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   168   sendall(431) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   183   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   169   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   184   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   170   write(431) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   185   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   171   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   186   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   172   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   187   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   173   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   188   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   174   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   189   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   175   write(21) -> Content-Length: 431\r\n (no-py3 !)
   190   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   176   write(2) -> \r\n (no-py3 !)
   191   write(2) -> \r\n (no-py3 !)
   177   write(431) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   192   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   178   readline(13? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
   193   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
   179   readline(1?? from *) -> (27) Accept-Encoding: identity\r\n (glob)
   194   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   180   readline(8? from *) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   195   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   181   readline(5? from *) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   196   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   182   readline(1? from *) -> (1?) x-hgproto-1:* (glob)
   197   readline(*) -> (1?) x-hgproto-1:* (glob)
   183   read limit reached; closing socket
   198   read limit reached; closing socket
   184   readline(317 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   199   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   185   readline(291 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   200   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   186   readline(264 from *) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   201   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   187   readline(235 from *) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   202   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   188   readline(194 from *) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   203   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   189   readline(133 from *) -> (35) accept: application/mercurial-0.1\r\n (glob)
   204   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   190   readline(98 from *) -> (*) host: localhost:$HGPORT\r\n (glob)
   205   readline(*) -> (*) host: localhost:$HGPORT\r\n (glob)
   191   readline(* from *) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   206   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   192   readline(* from *) -> (2) \r\n (glob)
   207   readline(*) -> (2) \r\n (glob)
   193   sendall(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   208   sendall(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   194   sendall(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   209   sendall(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   195   write(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   210   write(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   196   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py3 no-py36 !)
   211   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py3 no-py36 !)
   197   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   212   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   199   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   214   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   200   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   215   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   201   write(20) -> Content-Length: 42\r\n (no-py3 !)
   216   write(20) -> Content-Length: 42\r\n (no-py3 !)
   202   write(2) -> \r\n (no-py3 !)
   217   write(2) -> \r\n (no-py3 !)
   203   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   218   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   204   readline(* from 65537) -> (*) GET /?cmd=getbundle HTTP* (glob)
   219   readline(24 from ~) -> (*) GET /?cmd=getbundle HTTP* (glob)
   205   read limit reached; closing socket
   220   read limit reached; closing socket
   206   readline(304 from 65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   221   readline(~) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   207   readline(274 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   222   readline(274 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   208   readline(247 from *) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   223   readline(247 from *) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   209   readline(218 from *) -> (218) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtag (glob)
   224   readline(218 from *) -> (218) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtag (glob)
   210   read limit reached; closing socket
   225   read limit reached; closing socket
   211 
   226 
   212   $ rm -f error.log
   227   $ rm -f error.log
   213 
   228 
   214 Now do a variation using POST to send arguments
   229 Now do a variation using POST to send arguments
   215 
   230 ===============================================
   216   $ hg serve --config experimental.httppostargs=true --config badserver.closeafterrecvbytes=329,344 -p $HGPORT -d --pid-file=hg.pid -E error.log
   231 
       
   232   $ hg serve \
       
   233   > --config badserver.close-after-recv-patterns="x-hgargs-post:,user-agent: mercurial/proto-1.0" \
       
   234   > --config badserver.close-after-recv-bytes="14,26" \
       
   235   > --config experimental.httppostargs=true \
       
   236   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   217   $ cat hg.pid > $DAEMON_PIDS
   237   $ cat hg.pid > $DAEMON_PIDS
   218 
   238 
   219   $ hg clone http://localhost:$HGPORT/ clone
   239   $ hg clone http://localhost:$HGPORT/ clone
   220   abort: error: bad HTTP status line: * (glob)
   240   abort: error: bad HTTP status line: * (glob)
   221   [100]
   241   [100]
   222 
   242 
   223   $ killdaemons.py $DAEMON_PIDS
   243   $ killdaemons.py $DAEMON_PIDS
   224 
   244 
   225   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   245   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   226   readline(329 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   246   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   227   readline(296 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   247   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   228   readline(269 from *) -> (35) accept: application/mercurial-0.1\r\n (glob)
   248   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   229   readline(234 from *) -> (2?) host: localhost:$HGPORT\r\n (glob)
   249   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   230   readline(* from *) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   250   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   231   readline(* from *) -> (2) \r\n (glob)
   251   readline(*) -> (2) \r\n (glob)
   232   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 444\r\n\r\n (py36 !)
   252   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   233   sendall(444) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   253   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   234   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 444\r\n\r\n (py3 no-py36 !)
   254   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   235   write(444) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   255   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   236   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   256   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   237   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   257   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   238   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   258   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   239   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   259   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   240   write(21) -> Content-Length: 444\r\n (no-py3 !)
   260   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   241   write(2) -> \r\n (no-py3 !)
   261   write(2) -> \r\n (no-py3 !)
   242   write(444) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   262   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   243   readline(1?? from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n (glob)
   263   readline(~) -> (27) POST /?cmd=batch HTTP/1.1\r\n (glob)
   244   readline(1?? from *) -> (27) Accept-Encoding: identity\r\n (glob)
   264   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   245   readline(1?? from *) -> (41) content-type: application/mercurial-0.1\r\n (glob)
   265   readline(*) -> (41) content-type: application/mercurial-0.1\r\n (glob)
   246   readline(6? from *) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
   266   readline(*) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
   247   readline(3? from *) -> (19) x-hgargs-post: 28\r\n (glob)
   267   readline(*) -> (19) x-hgargs-post: 28\r\n (glob)
   248   readline(1? from *) -> (1?) x-hgproto-1: * (glob)
   268   readline(*) -> (1?) x-hgproto-1: * (glob)
   249   read limit reached; closing socket
   269   read limit reached; closing socket
   250   readline(344 from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n
   270   readline(~) -> (27) POST /?cmd=batch HTTP/1.1\r\n
   251   readline(317 from *) -> (27) Accept-Encoding: identity\r\n (glob)
   271   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   252   readline(290 from *) -> (41) content-type: application/mercurial-0.1\r\n (glob)
   272   readline(*) -> (41) content-type: application/mercurial-0.1\r\n (glob)
   253   readline(249 from *) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
   273   readline(*) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
   254   readline(216 from *) -> (19) x-hgargs-post: 28\r\n (glob)
   274   readline(*) -> (19) x-hgargs-post: 28\r\n (glob)
   255   readline(197 from *) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   275   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   256   readline(136 from *) -> (35) accept: application/mercurial-0.1\r\n (glob)
   276   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   257   readline(101 from *) -> (20) content-length: 28\r\n (glob)
   277   readline(*) -> (20) content-length: 28\r\n (glob)
   258   readline(81 from *) -> (*) host: localhost:$HGPORT\r\n (glob)
   278   readline(*) -> (*) host: localhost:$HGPORT\r\n (glob)
   259   readline(* from *) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   279   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   260   readline(* from *) -> (2) \r\n (glob)
   280   readline(*) -> (2) \r\n (glob)
   261   read(* from 28) -> (*) cmds=* (glob)
   281   read(24 from 28) -> (*) cmds=* (glob)
   262   read limit reached, closing socket
   282   read limit reached; closing socket
   263   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=batch': (glob)
   283   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=batch': (glob)
   264   Traceback (most recent call last):
   284   Traceback (most recent call last):
   265   Exception: connection closed after receiving N bytes
   285   Exception: connection closed after receiving N bytes
   266   
   286   
   267   write(126) -> HTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   287   write(126) -> HTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   268   write(36) -> HTTP/1.1 500 Internal Server Error\r\n (no-py3 !)
       
   269 
   288 
   270   $ rm -f error.log
   289   $ rm -f error.log
   271 
   290 
   272 Now move on to partial server responses
   291 Now move on to partial server responses
       
   292 =======================================
   273 
   293 
   274 Server sends a single character from the HTTP response line
   294 Server sends a single character from the HTTP response line
   275 
   295 -----------------------------------------------------------
   276   $ hg serve --config badserver.closeaftersendbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
   296 
       
   297   $ hg serve --config badserver.close-after-send-bytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
   277   $ cat hg.pid > $DAEMON_PIDS
   298   $ cat hg.pid > $DAEMON_PIDS
   278 
   299 
   279   $ hg clone http://localhost:$HGPORT/ clone
   300   $ hg clone http://localhost:$HGPORT/ clone
   280   abort: error: bad HTTP status line: H
   301   abort: error: bad HTTP status line: H
   281   [100]
   302   [100]
   282 
   303 
   283   $ killdaemons.py $DAEMON_PIDS
   304   $ killdaemons.py $DAEMON_PIDS
   284 
   305 
   285   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   306   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   286   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   307   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   287   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   308   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   288   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   309   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   289   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   310   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   290   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   311   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   291   readline(*) -> (2) \r\n (glob)
   312   readline(*) -> (2) \r\n (glob)
   295   write limit reached; closing socket
   316   write limit reached; closing socket
   296   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=capabilities': (glob)
   317   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=capabilities': (glob)
   297   Traceback (most recent call last):
   318   Traceback (most recent call last):
   298   Exception: connection closed after sending N bytes
   319   Exception: connection closed after sending N bytes
   299   
   320   
   300   write(286) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   321   write(286) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (glob) (py3 no-py36 !)
   301   write(36) -> HTTP/1.1 500 Internal Server Error\r\n (no-py3 !)
       
   302 
   322 
   303   $ rm -f error.log
   323   $ rm -f error.log
   304 
   324 
   305 Server sends an incomplete capabilities response body
   325 Server sends an incomplete capabilities response body
   306 
   326 -----------------------------------------------------
   307   $ hg serve --config badserver.closeaftersendbytes=180 -p $HGPORT -d --pid-file=hg.pid -E error.log
   327 
   308   $ cat hg.pid > $DAEMON_PIDS
   328   $ hg serve \
   309 
   329   > --config badserver.close-after-send-patterns='batch branchmap bund' \
   310   $ hg clone http://localhost:$HGPORT/ clone
   330   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   311   abort: HTTP request error (incomplete response; expected 431 bytes got 20)
   331   $ cat hg.pid > $DAEMON_PIDS
       
   332 
       
   333   $ hg clone http://localhost:$HGPORT/ clone
       
   334   abort: HTTP request error (incomplete response; expected * bytes got 20) (glob)
   312   (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   335   (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
   313   [255]
   336   [255]
   314 
   337 
   315   $ killdaemons.py $DAEMON_PIDS
   338   $ killdaemons.py $DAEMON_PIDS
   316 
   339 
   317   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   340   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   318   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   341   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   319   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   342   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   320   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   343   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   321   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   344   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   322   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   345   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   323   readline(*) -> (2) \r\n (glob)
   346   readline(*) -> (2) \r\n (glob)
   324   sendall(160 from 160) -> (20) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   347   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   325   sendall(20 from 431) -> (0) batch branchmap bund (py36 !)
   348   sendall(20 from *) -> (0) batch branchmap bund (glob) (py36 !)
   326   write(160 from 160) -> (20) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   349   write(160) -> (20) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   327   write(20 from 431) -> (0) batch branchmap bund (py3 no-py36 !)
   350   write(20 from *) -> (0) batch branchmap bund (glob) (py3 no-py36 !)
   328   write(36 from 36) -> (144) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   351   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   329   write(23 from 23) -> (121) Server: badhttpserver\r\n (no-py3 !)
   352   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   330   write(37 from 37) -> (84) Date: $HTTP_DATE$\r\n (no-py3 !)
   353   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   331   write(41 from 41) -> (43) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   354   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   332   write(21 from 21) -> (22) Content-Length: 431\r\n (no-py3 !)
   355   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   333   write(2 from 2) -> (20) \r\n (no-py3 !)
   356   write(2) -> \r\n (no-py3 !)
   334   write(20 from 431) -> (0) batch branchmap bund (no-py3 !)
   357   write(20 from *) -> (0) batch branchmap bund (glob) (no-py3 !)
   335   write limit reached; closing socket
   358   write limit reached; closing socket
   336   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=capabilities': (glob)
   359   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=capabilities': (glob)
   337   Traceback (most recent call last):
   360   Traceback (most recent call last):
   338   Exception: connection closed after sending N bytes
   361   Exception: connection closed after sending N bytes
   339   
   362   
   340 
   363 
   341   $ rm -f error.log
   364   $ rm -f error.log
   342 
   365 
   343 Server sends incomplete headers for batch request
   366 Server sends incomplete headers for batch request
   344 
   367 -------------------------------------------------
   345   $ hg serve --config badserver.closeaftersendbytes=709 -p $HGPORT -d --pid-file=hg.pid -E error.log
   368 
       
   369   $ hg serve \
       
   370   > --config badserver.close-after-send-patterns='(.*Content-Type: applicat){2}' \
       
   371   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   346   $ cat hg.pid > $DAEMON_PIDS
   372   $ cat hg.pid > $DAEMON_PIDS
   347 
   373 
   348 TODO this output is horrible
   374 TODO this output is horrible
   349 
   375 
   350   $ hg clone http://localhost:$HGPORT/ clone
   376   $ hg clone http://localhost:$HGPORT/ clone
   356   [255]
   382   [255]
   357 
   383 
   358   $ killdaemons.py $DAEMON_PIDS
   384   $ killdaemons.py $DAEMON_PIDS
   359 
   385 
   360   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   386   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   361   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   387   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   362   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   388   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   363   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   389   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   364   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   390   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   365   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   391   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   366   readline(*) -> (2) \r\n (glob)
   392   readline(*) -> (2) \r\n (glob)
   367   sendall(160 from 160) -> (549) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   393   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   368   sendall(431 from 431) -> (118) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   394   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   369   write(160 from 160) -> (568) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   395   write(160) -> (568) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   370   write(431 from 431) -> (118) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   396   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   371   write(36 from 36) -> (673) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   397   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   372   write(23 from 23) -> (650) Server: badhttpserver\r\n (no-py3 !)
   398   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   373   write(37 from 37) -> (613) Date: $HTTP_DATE$\r\n (no-py3 !)
   399   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   374   write(41 from 41) -> (572) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   400   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   375   write(21 from 21) -> (551) Content-Length: 431\r\n (no-py3 !)
   401   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   376   write(2 from 2) -> (549) \r\n (no-py3 !)
   402   write(2) -> \r\n (no-py3 !)
   377   write(431 from 431) -> (118) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   403   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   378   readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   404   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   379   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   405   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   380   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   406   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   381   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   407   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   382   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   408   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   383   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   409   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   384   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   410   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   385   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   411   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   386   readline(*) -> (2) \r\n (glob)
   412   readline(*) -> (2) \r\n (glob)
   387   sendall(118 from 159) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: applicat (py36 !)
   413   sendall(118 from 159) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: applicat (py36 !)
   388   write(118 from 159) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: applicat (py3 no-py36 !)
   414   write(118 from 159) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: applicat (py3 no-py36 !)
   389   write(36 from 36) -> (82) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   415   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   390   write(23 from 23) -> (59) Server: badhttpserver\r\n (no-py3 !)
   416   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   391   write(37 from 37) -> (22) Date: $HTTP_DATE$\r\n (no-py3 !)
   417   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   392   write(22 from 41) -> (0) Content-Type: applicat (no-py3 !)
   418   write(22 from 41) -> (0) Content-Type: applicat (no-py3 !)
   393   write limit reached; closing socket
   419   write limit reached; closing socket
   394   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=batch': (glob)
   420   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=batch': (glob)
   395   Traceback (most recent call last):
   421   Traceback (most recent call last):
   396   Exception: connection closed after sending N bytes
   422   Exception: connection closed after sending N bytes
   397   
   423   
   398   write(285) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   424   write(285) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   399   write(36) -> HTTP/1.1 500 Internal Server Error\r\n (no-py3 !)
       
   400 
   425 
   401   $ rm -f error.log
   426   $ rm -f error.log
   402 
   427 
   403 Server sends an incomplete HTTP response body to batch request
   428 Server sends an incomplete HTTP response body to batch request
   404 
   429 --------------------------------------------------------------
   405   $ hg serve --config badserver.closeaftersendbytes=774 -p $HGPORT -d --pid-file=hg.pid -E error.log
   430 
       
   431   $ hg serve \
       
   432   > --config badserver.close-after-send-patterns=96ee1d7354c4ad7372047672 \
       
   433   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   406   $ cat hg.pid > $DAEMON_PIDS
   434   $ cat hg.pid > $DAEMON_PIDS
   407 
   435 
   408 TODO client spews a stack due to uncaught ValueError in batch.results()
   436 TODO client spews a stack due to uncaught ValueError in batch.results()
   409 #if no-chg
   437 #if no-chg
   410   $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
   438   $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
   415 #endif
   443 #endif
   416 
   444 
   417   $ killdaemons.py $DAEMON_PIDS
   445   $ killdaemons.py $DAEMON_PIDS
   418 
   446 
   419   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   447   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   420   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   448   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   421   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   449   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   422   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   450   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   423   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   451   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   424   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   452   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   425   readline(*) -> (2) \r\n (glob)
   453   readline(*) -> (2) \r\n (glob)
   426   sendall(160 from 160) -> (614) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   454   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   427   sendall(431 from 431) -> (183) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   455   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   428   write(160 from 160) -> (633) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   456   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   429   write(431 from 431) -> (183) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   457   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   430   write(36 from 36) -> (738) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   458   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   431   write(23 from 23) -> (715) Server: badhttpserver\r\n (no-py3 !)
   459   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   432   write(37 from 37) -> (678) Date: $HTTP_DATE$\r\n (no-py3 !)
   460   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   433   write(41 from 41) -> (637) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   461   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   434   write(21 from 21) -> (616) Content-Length: 431\r\n (no-py3 !)
   462   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   435   write(2 from 2) -> (614) \r\n (no-py3 !)
   463   write(2) -> \r\n (no-py3 !)
   436   write(431 from 431) -> (183) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   464   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   437   readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   465   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   438   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   466   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   439   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   467   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   440   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   468   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   441   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   469   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   442   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   470   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   443   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   471   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   444   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   472   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   445   readline(*) -> (2) \r\n (glob)
   473   readline(*) -> (2) \r\n (glob)
   446   sendall(159 from 159) -> (24) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   474   sendall(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   447   sendall(24 from 42) -> (0) 96ee1d7354c4ad7372047672 (py36 !)
   475   sendall(24 from 42) -> (0) 96ee1d7354c4ad7372047672 (py36 !)
   448   write(159 from 159) -> (24) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   476   write(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   449   write(24 from 42) -> (0) 96ee1d7354c4ad7372047672 (py3 no-py36 !)
   477   write(24 from 42) -> (0) 96ee1d7354c4ad7372047672 (py3 no-py36 !)
   450   write(36 from 36) -> (147) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   478   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   451   write(23 from 23) -> (124) Server: badhttpserver\r\n (no-py3 !)
   479   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   452   write(37 from 37) -> (87) Date: $HTTP_DATE$\r\n (no-py3 !)
   480   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   453   write(41 from 41) -> (46) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   481   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   454   write(20 from 20) -> (26) Content-Length: 42\r\n (no-py3 !)
   482   write(20) -> Content-Length: 42\r\n (no-py3 !)
   455   write(2 from 2) -> (24) \r\n (no-py3 !)
   483   write(2) -> \r\n (no-py3 !)
   456   write(24 from 42) -> (0) 96ee1d7354c4ad7372047672 (no-py3 !)
   484   write(24 from 42) -> (0) 96ee1d7354c4ad7372047672 (no-py3 !)
   457   write limit reached; closing socket
   485   write limit reached; closing socket
   458   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=batch': (glob)
   486   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=batch': (glob)
   459   Traceback (most recent call last):
   487   Traceback (most recent call last):
   460   Exception: connection closed after sending N bytes
   488   Exception: connection closed after sending N bytes
   461   
   489   
   462 
   490 
   463   $ rm -f error.log
   491   $ rm -f error.log
   464 
   492 
   465 Server sends incomplete headers for getbundle response
   493 Server sends incomplete headers for getbundle response
   466 
   494 ------------------------------------------------------
   467   $ hg serve --config badserver.closeaftersendbytes=921 -p $HGPORT -d --pid-file=hg.pid -E error.log
   495 
       
   496   $ hg serve \
       
   497   > --config badserver.close-after-send-patterns='(.*Content-Type: application/mercuri){3}' \
       
   498   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   468   $ cat hg.pid > $DAEMON_PIDS
   499   $ cat hg.pid > $DAEMON_PIDS
   469 
   500 
   470 TODO this output is terrible
   501 TODO this output is terrible
   471 
   502 
   472   $ hg clone http://localhost:$HGPORT/ clone
   503   $ hg clone http://localhost:$HGPORT/ clone
   479   [255]
   510   [255]
   480 
   511 
   481   $ killdaemons.py $DAEMON_PIDS
   512   $ killdaemons.py $DAEMON_PIDS
   482 
   513 
   483   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   514   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   484   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   515   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   485   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   516   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   486   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   517   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   487   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   518   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   488   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   519   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   489   readline(*) -> (2) \r\n (glob)
   520   readline(*) -> (2) \r\n (glob)
   490   sendall(160 from 160) -> (761) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   521   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   491   sendall(431 from 431) -> (330) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   522   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   492   write(160 from 160) -> (780) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   523   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   493   write(431 from 431) -> (330) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   524   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   494   write(36 from 36) -> (885) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   525   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   495   write(23 from 23) -> (862) Server: badhttpserver\r\n (no-py3 !)
   526   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   496   write(37 from 37) -> (825) Date: $HTTP_DATE$\r\n (no-py3 !)
   527   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   497   write(41 from 41) -> (784) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   528   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   498   write(21 from 21) -> (763) Content-Length: 431\r\n (no-py3 !)
   529   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   499   write(2 from 2) -> (761) \r\n (no-py3 !)
   530   write(2) -> \r\n (no-py3 !)
   500   write(431 from 431) -> (330) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   531   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   501   readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   532   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   502   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   533   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   503   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   534   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   504   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   535   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   505   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   536   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   506   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   537   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   507   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   538   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   508   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   539   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   509   readline(*) -> (2) \r\n (glob)
   540   readline(*) -> (2) \r\n (glob)
   510   sendall(159 from 159) -> (171) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   541   sendall(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   511   sendall(42 from 42) -> (129) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   542   sendall(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   512   write(159 from 159) -> (171) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   543   write(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   513   write(42 from 42) -> (129) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py3 no-py36 !)
   544   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py3 no-py36 !)
   514   write(36 from 36) -> (294) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   545   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   515   write(23 from 23) -> (271) Server: badhttpserver\r\n (no-py3 !)
   546   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   516   write(37 from 37) -> (234) Date: $HTTP_DATE$\r\n (no-py3 !)
   547   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   517   write(41 from 41) -> (193) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   548   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   518   write(20 from 20) -> (173) Content-Length: 42\r\n (no-py3 !)
   549   write(20) -> Content-Length: 42\r\n (no-py3 !)
   519   write(2 from 2) -> (171) \r\n (no-py3 !)
   550   write(2) -> \r\n (no-py3 !)
   520   write(42 from 42) -> (129) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   551   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   521   readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   552   readline(~) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   522   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   553   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   523   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   554   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   524   readline(*) -> (440) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n (glob)
   555   readline(*) -> (440) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n (glob)
   525   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   556   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   526   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   557   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   527   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   558   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   528   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   559   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   529   readline(*) -> (2) \r\n (glob)
   560   readline(*) -> (2) \r\n (glob)
   530   sendall(129 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercuri (py36 !)
   561   sendall(129 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercuri (py36 !)
   531   write(129 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercuri (py3 no-py36 !)
   562   write(129 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercuri (py3 no-py36 !)
   532   write(36 from 36) -> (93) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   563   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   533   write(23 from 23) -> (70) Server: badhttpserver\r\n (no-py3 !)
   564   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   534   write(37 from 37) -> (33) Date: $HTTP_DATE$\r\n (no-py3 !)
   565   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   535   write(33 from 41) -> (0) Content-Type: application/mercuri (no-py3 !)
   566   write(33 from 41) -> (0) Content-Type: application/mercuri (no-py3 !)
   536   write limit reached; closing socket
   567   write limit reached; closing socket
   537   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   568   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   538   Traceback (most recent call last):
   569   Traceback (most recent call last):
   539   Exception: connection closed after sending N bytes
   570   Exception: connection closed after sending N bytes
   540   
   571   
   541   write(293) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   572   write(293) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   542   write(36) -> HTTP/1.1 500 Internal Server Error\r\n (no-py3 !)
       
   543 
   573 
   544   $ rm -f error.log
   574   $ rm -f error.log
   545 
   575 
   546 Server stops before it sends transfer encoding
   576 Server stops before it sends transfer encoding
   547 
   577 ----------------------------------------------
   548   $ hg serve --config badserver.closeaftersendbytes=954 -p $HGPORT -d --pid-file=hg.pid -E error.log
   578 
       
   579   $ hg serve \
       
   580   > --config badserver.close-after-send-patterns="Transfer-Encoding: chunke" \
       
   581   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   549   $ cat hg.pid > $DAEMON_PIDS
   582   $ cat hg.pid > $DAEMON_PIDS
   550 
   583 
   551   $ hg clone http://localhost:$HGPORT/ clone
   584   $ hg clone http://localhost:$HGPORT/ clone
   552   requesting all changes
   585   requesting all changes
   553   abort: stream ended unexpectedly (got 0 bytes, expected 1)
   586   abort: stream ended unexpectedly (got 0 bytes, expected 1)
   554   [255]
   587   [255]
   555 
   588 
   556   $ killdaemons.py $DAEMON_PIDS
   589   $ killdaemons.py $DAEMON_PIDS
   557 
   590 
   558 #if py36
   591 #if py36
   559   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -3
   592   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -6
       
   593   sendall(162 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunke
       
   594   write limit reached; closing socket
       
   595   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   560   Traceback (most recent call last):
   596   Traceback (most recent call last):
   561   Exception: connection closed after sending N bytes
   597   Exception: connection closed after sending N bytes
   562   
   598   
   563 
   599 
   564 #else
   600 #else
   565   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -4
   601   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -7
   566   Traceback (most recent call last):
   602   write(41) -> Content-Type: application/mercurial-0.2\r\n
   567   Exception: connection closed after sending N bytes
   603   write(25 from 28) -> (0) Transfer-Encoding: chunke
   568   
   604   write limit reached; closing socket
       
   605   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
       
   606   Traceback (most recent call last):
       
   607   Exception: connection closed after sending N bytes
   569   write(293) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   608   write(293) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   570   write(36) -> HTTP/1.1 500 Internal Server Error\r\n (no-py3 !)
   609   
   571 #endif
   610 #endif
   572 
   611 
   573   $ rm -f error.log
   612   $ rm -f error.log
   574 
   613 
   575 Server sends empty HTTP body for getbundle
   614 Server sends empty HTTP body for getbundle
   576 
   615 ------------------------------------------
   577   $ hg serve --config badserver.closeaftersendbytes=959 -p $HGPORT -d --pid-file=hg.pid -E error.log
   616 
       
   617   $ hg serve \
       
   618   > --config badserver.close-after-send-patterns='Transfer-Encoding: chunked\r\n\r\n' \
       
   619   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   578   $ cat hg.pid > $DAEMON_PIDS
   620   $ cat hg.pid > $DAEMON_PIDS
   579 
   621 
   580   $ hg clone http://localhost:$HGPORT/ clone
   622   $ hg clone http://localhost:$HGPORT/ clone
   581   requesting all changes
   623   requesting all changes
   582   abort: HTTP request error (incomplete response)
   624   abort: HTTP request error (incomplete response)
   584   [255]
   626   [255]
   585 
   627 
   586   $ killdaemons.py $DAEMON_PIDS
   628   $ killdaemons.py $DAEMON_PIDS
   587 
   629 
   588   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   630   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   589   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   631   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   590   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   632   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   591   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   633   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   592   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   634   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   593   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   635   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   594   readline(*) -> (2) \r\n (glob)
   636   readline(*) -> (2) \r\n (glob)
   595   sendall(160 from 160) -> (799) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   637   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   596   sendall(431 from 431) -> (368) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   638   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   597   write(160 from 160) -> (818) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   639   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   598   write(431 from 431) -> (368) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   640   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   599   write(36 from 36) -> (923) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   641   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   600   write(23 from 23) -> (900) Server: badhttpserver\r\n (no-py3 !)
   642   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   601   write(37 from 37) -> (863) Date: $HTTP_DATE$\r\n (no-py3 !)
   643   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   602   write(41 from 41) -> (822) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   644   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   603   write(21 from 21) -> (801) Content-Length: 431\r\n (no-py3 !)
   645   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   604   write(2 from 2) -> (799) \r\n (no-py3 !)
   646   write(2) -> \r\n (no-py3 !)
   605   write(431 from 431) -> (368) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   647   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   606   readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   648   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   607   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   649   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   608   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   650   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   609   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   651   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   610   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   652   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   611   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   653   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   612   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   654   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   613   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   655   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   614   readline(*) -> (2) \r\n (glob)
   656   readline(*) -> (2) \r\n (glob)
   615   sendall(159 from 159) -> (209) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   657   sendall(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   616   sendall(42 from 42) -> (167) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   658   sendall(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   617   write(159 from 159) -> (209) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   659   write(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   618   write(42 from 42) -> (167) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py3 no-py36 !)
   660   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py3 no-py36 !)
   619   write(36 from 36) -> (332) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   661   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   620   write(23 from 23) -> (309) Server: badhttpserver\r\n (no-py3 !)
   662   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   621   write(37 from 37) -> (272) Date: $HTTP_DATE$\r\n (no-py3 !)
   663   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   622   write(41 from 41) -> (231) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   664   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   623   write(20 from 20) -> (211) Content-Length: 42\r\n (no-py3 !)
   665   write(20) -> Content-Length: 42\r\n (no-py3 !)
   624   write(2 from 2) -> (209) \r\n (no-py3 !)
   666   write(2) -> \r\n (no-py3 !)
   625   write(42 from 42) -> (167) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   667   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   626   readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   668   readline(~) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   627   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   669   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   628   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   670   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   629   readline(*) -> (440) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n (glob)
   671   readline(*) -> (440) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n (glob)
   630   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   672   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   631   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   673   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   632   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   674   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   633   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   675   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   634   readline(*) -> (2) \r\n (glob)
   676   readline(*) -> (2) \r\n (glob)
   635   sendall(167 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py36 !)
   677   sendall(167 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py36 !)
   636   write(167 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   678   write(167 from 167) -> (0) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   637   write(36 from 36) -> (131) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   679   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   638   write(23 from 23) -> (108) Server: badhttpserver\r\n (no-py3 !)
   680   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   639   write(37 from 37) -> (71) Date: $HTTP_DATE$\r\n (no-py3 !)
   681   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   640   write(41 from 41) -> (30) Content-Type: application/mercurial-0.2\r\n (no-py3 !)
   682   write(41) -> Content-Type: application/mercurial-0.2\r\n (no-py3 !)
   641   write(28 from 28) -> (2) Transfer-Encoding: chunked\r\n (no-py3 !)
   683   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   642   write(2 from 2) -> (0) \r\n (no-py3 !)
   684   write(2 from 2) -> (0) \r\n (no-py3 !)
   643   write limit reached; closing socket
   685   write limit reached; closing socket
   644   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   686   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   645   Traceback (most recent call last):
   687   Traceback (most recent call last):
   646   Exception: connection closed after sending N bytes
   688   Exception: connection closed after sending N bytes
   647   
   689   
   648   write(293) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   690   write(293) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\nHTTP/1.1 500 Internal Server Error\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   649   write(36) -> HTTP/1.1 500 Internal Server Error\r\n (no-py3 !)
       
   650 
   691 
   651   $ rm -f error.log
   692   $ rm -f error.log
   652 
   693 
   653 Server sends partial compression string
   694 Server sends partial compression string
   654 
   695 ---------------------------------------
   655   $ hg serve --config badserver.closeaftersendbytes=983 -p $HGPORT -d --pid-file=hg.pid -E error.log
   696 
       
   697   $ hg serve \
       
   698   > --config badserver.close-after-send-patterns='4\r\nHG20\r\n' \
       
   699   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   656   $ cat hg.pid > $DAEMON_PIDS
   700   $ cat hg.pid > $DAEMON_PIDS
   657 
   701 
   658   $ hg clone http://localhost:$HGPORT/ clone
   702   $ hg clone http://localhost:$HGPORT/ clone
   659   requesting all changes
   703   requesting all changes
   660   abort: HTTP request error (incomplete response)
   704   abort: HTTP request error (incomplete response)
   662   [255]
   706   [255]
   663 
   707 
   664   $ killdaemons.py $DAEMON_PIDS
   708   $ killdaemons.py $DAEMON_PIDS
   665 
   709 
   666   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   710   $ cat error.log | "$PYTHON" $TESTDIR/filtertraceback.py
   667   readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   711   readline(~) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
   668   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   712   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   669   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   713   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   670   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   714   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   671   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   715   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   672   readline(*) -> (2) \r\n (glob)
   716   readline(*) -> (2) \r\n (glob)
   673   sendall(160 from 160) -> (823) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py36 !)
   717   sendall(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py36 !)
   674   sendall(431 from 431) -> (392) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py36 !)
   718   sendall(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py36 !)
   675   write(160 from 160) -> (842) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 431\r\n\r\n (py3 no-py36 !)
   719   write(160) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: *\r\n\r\n (glob) (py3 no-py36 !)
   676   write(431 from 431) -> (392) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (py3 no-py36 !)
   720   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (py3 no-py36 !)
   677   write(36 from 36) -> (947) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   721   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   678   write(23 from 23) -> (924) Server: badhttpserver\r\n (no-py3 !)
   722   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   679   write(37 from 37) -> (887) Date: $HTTP_DATE$\r\n (no-py3 !)
   723   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   680   write(41 from 41) -> (846) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   724   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   681   write(21 from 21) -> (825) Content-Length: 431\r\n (no-py3 !)
   725   write(21) -> Content-Length: *\r\n (glob) (no-py3 !)
   682   write(2 from 2) -> (823) \r\n (no-py3 !)
   726   write(2) -> \r\n (no-py3 !)
   683   write(431 from 431) -> (392) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-py3 !)
   727   write(*) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=* unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) (no-py3 !)
   684   readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   728   readline(~) -> (26) GET /?cmd=batch HTTP/1.1\r\n
   685   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   729   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   686   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   730   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   687   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   731   readline(*) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
   688   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   732   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   689   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   733   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   690   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   734   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   691   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   735   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   692   readline(*) -> (2) \r\n (glob)
   736   readline(*) -> (2) \r\n (glob)
   693   sendall(159 from 159) -> (233) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   737   sendall(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py36 !)
   694   sendall(42 from 42) -> (191) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   738   sendall(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (py36 !)
   695   write(159 from 159) -> (233) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   739   write(159) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.1\r\nContent-Length: 42\r\n\r\n (py3 no-py36 !)
   696   write(36 from 36) -> (356) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   740   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   697   write(23 from 23) -> (333) Server: badhttpserver\r\n (no-py3 !)
   741   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   698   write(37 from 37) -> (296) Date: $HTTP_DATE$\r\n (no-py3 !)
   742   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   699   write(41 from 41) -> (255) Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   743   write(41) -> Content-Type: application/mercurial-0.1\r\n (no-py3 !)
   700   write(20 from 20) -> (235) Content-Length: 42\r\n (no-py3 !)
   744   write(20) -> Content-Length: 42\r\n (no-py3 !)
   701   write(2 from 2) -> (233) \r\n (no-py3 !)
   745   write(2) -> \r\n (no-py3 !)
   702   write(42 from 42) -> (191) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   746   write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n; (no-py3 !)
   703   readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   747   readline(~) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
   704   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   748   readline(*) -> (27) Accept-Encoding: identity\r\n (glob)
   705   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   749   readline(*) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
   706   readline(*) -> (440) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n (glob)
   750   readline(*) -> (440) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n (glob)
   707   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   751   readline(*) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n (glob)
   708   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   752   readline(*) -> (35) accept: application/mercurial-0.1\r\n (glob)
   709   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   753   readline(*) -> (2?) host: localhost:$HGPORT\r\n (glob)
   710   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   754   readline(*) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
   711   readline(*) -> (2) \r\n (glob)
   755   readline(*) -> (2) \r\n (glob)
   712   sendall(167 from 167) -> (24) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py36 !)
   756   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py36 !)
   713   sendall(6 from 6) -> (18) 1\\r\\n\x04\\r\\n (esc) (py36 !)
   757   sendall(6) -> 1\\r\\n\x04\\r\\n (esc) (py36 !)
   714   sendall(9 from 9) -> (9) 4\r\nnone\r\n (py36 !)
   758   sendall(9) -> 4\r\nnone\r\n (py36 !)
   715   sendall(9 from 9) -> (0) 4\r\nHG20\r\n (py36 !)
   759   sendall(9 from 9) -> (0) 4\r\nHG20\r\n (py36 !)
   716   write(167 from 167) -> (24) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   760   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 no-py36 !)
   717   write(36 from 36) -> (155) HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   761   write(36) -> HTTP/1.1 200 Script output follows\r\n (no-py3 !)
   718   write(23 from 23) -> (132) Server: badhttpserver\r\n (no-py3 !)
   762   write(23) -> Server: badhttpserver\r\n (no-py3 !)
   719   write(37 from 37) -> (95) Date: $HTTP_DATE$\r\n (no-py3 !)
   763   write(37) -> Date: $HTTP_DATE$\r\n (no-py3 !)
   720   write(41 from 41) -> (54) Content-Type: application/mercurial-0.2\r\n (no-py3 !)
   764   write(41) -> Content-Type: application/mercurial-0.2\r\n (no-py3 !)
   721   write(28 from 28) -> (26) Transfer-Encoding: chunked\r\n (no-py3 !)
   765   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   722   write(2 from 2) -> (24) \r\n (no-py3 !)
   766   write(2) -> \r\n (no-py3 !)
   723   write(6 from 6) -> (18) 1\\r\\n\x04\\r\\n (esc) (no-py3 !)
   767   write(6) -> 1\\r\\n\x04\\r\\n (esc) (no-py3 !)
   724   write(9 from 9) -> (9) 4\r\nnone\r\n (no-py3 !)
   768   write(9) -> 4\r\nnone\r\n (no-py3 !)
   725   write(9 from 9) -> (0) 4\r\nHG20\r\n (no-py3 !)
   769   write(9 from 9) -> (0) 4\r\nHG20\r\n (no-py3 !)
   726   write limit reached; closing socket
   770   write limit reached; closing socket
   727   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   771   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   728   Traceback (most recent call last):
   772   Traceback (most recent call last):
   729   Exception: connection closed after sending N bytes
   773   Exception: connection closed after sending N bytes
   730   
   774   
   731   write(27) -> 15\r\nInternal Server Error\r\n (no-py3 !)
       
   732 
   775 
   733   $ rm -f error.log
   776   $ rm -f error.log
   734 
   777 
   735 Server sends partial bundle2 header magic
   778 Server sends partial bundle2 header magic
   736 
   779 -----------------------------------------
   737   $ hg serve --config badserver.closeaftersendbytes=980 -p $HGPORT -d --pid-file=hg.pid -E error.log
   780 
       
   781   $ hg serve \
       
   782   > --config badserver.close-after-send-patterns='4\r\nHG2' \
       
   783   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   738   $ cat hg.pid > $DAEMON_PIDS
   784   $ cat hg.pid > $DAEMON_PIDS
   739 
   785 
   740   $ hg clone http://localhost:$HGPORT/ clone
   786   $ hg clone http://localhost:$HGPORT/ clone
   741   requesting all changes
   787   requesting all changes
   742   abort: HTTP request error (incomplete response) (py3 !)
   788   abort: HTTP request error (incomplete response) (py3 !)
   746 
   792 
   747   $ killdaemons.py $DAEMON_PIDS
   793   $ killdaemons.py $DAEMON_PIDS
   748 
   794 
   749 #if py36
   795 #if py36
   750   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -9
   796   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -9
   751   sendall(167 from 167) -> (21) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   797   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   752   sendall(6 from 6) -> (15) 1\\r\\n\x04\\r\\n (esc)
   798   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
   753   sendall(9 from 9) -> (6) 4\r\nnone\r\n
   799   sendall(9) -> 4\r\nnone\r\n
   754   sendall(6 from 9) -> (0) 4\r\nHG2
   800   sendall(6 from 9) -> (0) 4\r\nHG2
   755   write limit reached; closing socket
   801   write limit reached; closing socket
   756   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   802   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   757   Traceback (most recent call last):
   803   Traceback (most recent call last):
   758   Exception: connection closed after sending N bytes
   804   Exception: connection closed after sending N bytes
   759   
   805   
   760 
   806 
   761 #else
   807 #else
   762   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -11
   808   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -11
   763   readline(65537) -> (2) \r\n (py3 !)
   809   readline(~) -> (2) \r\n (py3 !)
   764   write(167 from 167) -> (21) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   810   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   765   write(28 from 28) -> (23) Transfer-Encoding: chunked\r\n (no-py3 !)
   811   write(41) -> Content-Type: application/mercurial-0.2\r\n (no-py3 !)
   766   write(2 from 2) -> (21) \r\n (no-py3 !)
   812   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   767   write(6 from 6) -> (15) 1\\r\\n\x04\\r\\n (esc)
   813   write(2) -> \r\n (no-py3 !)
   768   write(9 from 9) -> (6) 4\r\nnone\r\n
   814   write(6) -> 1\\r\\n\x04\\r\\n (esc)
       
   815   write(9) -> 4\r\nnone\r\n
   769   write(6 from 9) -> (0) 4\r\nHG2
   816   write(6 from 9) -> (0) 4\r\nHG2
   770   write limit reached; closing socket
   817   write limit reached; closing socket
   771   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   818   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   772   Traceback (most recent call last):
   819   Traceback (most recent call last):
   773   Exception: connection closed after sending N bytes
   820   Exception: connection closed after sending N bytes
   774   
   821   
   775   write(27) -> 15\r\nInternal Server Error\r\n
       
   776 #endif
   822 #endif
   777 
   823 
   778   $ rm -f error.log
   824   $ rm -f error.log
   779 
   825 
   780 Server sends incomplete bundle2 stream params length
   826 Server sends incomplete bundle2 stream params length
   781 
   827 ----------------------------------------------------
   782   $ hg serve --config badserver.closeaftersendbytes=989 -p $HGPORT -d --pid-file=hg.pid -E error.log
   828 
       
   829   $ hg serve \
       
   830   > --config badserver.close-after-send-patterns='4\r\n\0\0\0' \
       
   831   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   783   $ cat hg.pid > $DAEMON_PIDS
   832   $ cat hg.pid > $DAEMON_PIDS
   784 
   833 
   785   $ hg clone http://localhost:$HGPORT/ clone
   834   $ hg clone http://localhost:$HGPORT/ clone
   786   requesting all changes
   835   requesting all changes
   787   abort: HTTP request error (incomplete response) (py3 !)
   836   abort: HTTP request error (incomplete response) (py3 !)
   791 
   840 
   792   $ killdaemons.py $DAEMON_PIDS
   841   $ killdaemons.py $DAEMON_PIDS
   793 
   842 
   794 #if py36
   843 #if py36
   795   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -10
   844   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -10
   796   sendall(167 from 167) -> (30) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   845   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   797   sendall(6 from 6) -> (24) 1\\r\\n\x04\\r\\n (esc)
   846   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
   798   sendall(9 from 9) -> (15) 4\r\nnone\r\n
   847   sendall(9) -> 4\r\nnone\r\n
   799   sendall(9 from 9) -> (6) 4\r\nHG20\r\n
   848   sendall(9) -> 4\r\nHG20\r\n
   800   sendall(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
   849   sendall(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
   801   write limit reached; closing socket
   850   write limit reached; closing socket
   802   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   851   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   803   Traceback (most recent call last):
   852   Traceback (most recent call last):
   804   Exception: connection closed after sending N bytes
   853   Exception: connection closed after sending N bytes
   805   
   854   
   806 
   855 
   807 #else
   856 #else
   808   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -12
   857   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -12
   809   readline(65537) -> (2) \r\n (py3 !)
   858   readline(~) -> (2) \r\n (py3 !)
   810   write(167 from 167) -> (30) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   859   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   811   write(28 from 28) -> (32) Transfer-Encoding: chunked\r\n (no-py3 !)
   860   write(41) -> Content-Type: application/mercurial-0.2\r\n
   812   write(2 from 2) -> (30) \r\n (no-py3 !)
   861   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   813   write(6 from 6) -> (24) 1\\r\\n\x04\\r\\n (esc)
   862   write(2) -> \r\n (no-py3 !)
   814   write(9 from 9) -> (15) 4\r\nnone\r\n
   863   write(6) -> 1\\r\\n\x04\\r\\n (esc)
   815   write(9 from 9) -> (6) 4\r\nHG20\r\n
   864   write(9) -> 4\r\nnone\r\n
       
   865   write(9) -> 4\r\nHG20\r\n
   816   write(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
   866   write(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
   817   write limit reached; closing socket
   867   write limit reached; closing socket
   818   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   868   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   819   Traceback (most recent call last):
   869   Traceback (most recent call last):
   820   Exception: connection closed after sending N bytes
   870   Exception: connection closed after sending N bytes
   821   
   871   
   822   write(27) -> 15\r\nInternal Server Error\r\n
       
   823 #endif
   872 #endif
   824 
   873 
   825   $ rm -f error.log
   874   $ rm -f error.log
   826 
   875 
   827 Servers stops after bundle2 stream params header
   876 Servers stops after bundle2 stream params header
   828 
   877 ------------------------------------------------
   829   $ hg serve --config badserver.closeaftersendbytes=992 -p $HGPORT -d --pid-file=hg.pid -E error.log
   878 
       
   879   $ hg serve \
       
   880   > --config badserver.close-after-send-patterns='4\r\n\0\0\0\0\r\n' \
       
   881   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   830   $ cat hg.pid > $DAEMON_PIDS
   882   $ cat hg.pid > $DAEMON_PIDS
   831 
   883 
   832   $ hg clone http://localhost:$HGPORT/ clone
   884   $ hg clone http://localhost:$HGPORT/ clone
   833   requesting all changes
   885   requesting all changes
   834   abort: HTTP request error (incomplete response)
   886   abort: HTTP request error (incomplete response)
   837 
   889 
   838   $ killdaemons.py $DAEMON_PIDS
   890   $ killdaemons.py $DAEMON_PIDS
   839 
   891 
   840 #if py36
   892 #if py36
   841   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -10
   893   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -10
   842   sendall(167 from 167) -> (33) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   894   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   843   sendall(6 from 6) -> (27) 1\\r\\n\x04\\r\\n (esc)
   895   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
   844   sendall(9 from 9) -> (18) 4\r\nnone\r\n
   896   sendall(9) -> 4\r\nnone\r\n
   845   sendall(9 from 9) -> (9) 4\r\nHG20\r\n
   897   sendall(9) -> 4\r\nHG20\r\n
   846   sendall(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   898   sendall(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   847   write limit reached; closing socket
   899   write limit reached; closing socket
   848   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   900   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   849   Traceback (most recent call last):
   901   Traceback (most recent call last):
   850   Exception: connection closed after sending N bytes
   902   Exception: connection closed after sending N bytes
   851   
   903   
   852 
   904 
   853 #else
   905 #else
   854   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -12
   906   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -12
   855   readline(65537) -> (2) \r\n (py3 !)
   907   readline(~) -> (2) \r\n (py3 !)
   856   write(167 from 167) -> (33) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   908   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   857   write(28 from 28) -> (35) Transfer-Encoding: chunked\r\n (no-py3 !)
   909   write(41) -> Content-Type: application/mercurial-0.2\r\n
   858   write(2 from 2) -> (33) \r\n (no-py3 !)
   910   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   859   write(6 from 6) -> (27) 1\\r\\n\x04\\r\\n (esc)
   911   write(2) -> \r\n (no-py3 !)
   860   write(9 from 9) -> (18) 4\r\nnone\r\n
   912   write(6) -> 1\\r\\n\x04\\r\\n (esc)
   861   write(9 from 9) -> (9) 4\r\nHG20\r\n
   913   write(9) -> 4\r\nnone\r\n
       
   914   write(9) -> 4\r\nHG20\r\n
   862   write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   915   write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   863   write limit reached; closing socket
   916   write limit reached; closing socket
   864   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   917   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   865   Traceback (most recent call last):
   918   Traceback (most recent call last):
   866   Exception: connection closed after sending N bytes
   919   Exception: connection closed after sending N bytes
   867   
   920   
   868   write(27) -> 15\r\nInternal Server Error\r\n
       
   869 #endif
   921 #endif
   870 
   922 
   871   $ rm -f error.log
   923   $ rm -f error.log
   872 
   924 
   873 Server stops sending after bundle2 part header length
   925 Server stops sending after bundle2 part header length
   874 
   926 -----------------------------------------------------
   875   $ hg serve --config badserver.closeaftersendbytes=1001 -p $HGPORT -d --pid-file=hg.pid -E error.log
   927 
       
   928   $ hg serve \
       
   929   > --config badserver.close-after-send-patterns='4\r\n\0\0\0\)\r\n' \
       
   930   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   876   $ cat hg.pid > $DAEMON_PIDS
   931   $ cat hg.pid > $DAEMON_PIDS
   877 
   932 
   878   $ hg clone http://localhost:$HGPORT/ clone
   933   $ hg clone http://localhost:$HGPORT/ clone
   879   requesting all changes
   934   requesting all changes
   880   abort: HTTP request error (incomplete response)
   935   abort: HTTP request error (incomplete response)
   883 
   938 
   884   $ killdaemons.py $DAEMON_PIDS
   939   $ killdaemons.py $DAEMON_PIDS
   885 
   940 
   886 #if py36
   941 #if py36
   887   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -11
   942   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -11
   888   sendall(167 from 167) -> (42) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   943   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   889   sendall(6 from 6) -> (36) 1\\r\\n\x04\\r\\n (esc)
   944   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
   890   sendall(9 from 9) -> (27) 4\r\nnone\r\n
   945   sendall(9) -> 4\r\nnone\r\n
   891   sendall(9 from 9) -> (18) 4\r\nHG20\r\n
   946   sendall(9) -> 4\r\nHG20\r\n
   892   sendall(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   947   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   893   sendall(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
   948   sendall(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
   894   write limit reached; closing socket
   949   write limit reached; closing socket
   895   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   950   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   896   Traceback (most recent call last):
   951   Traceback (most recent call last):
   897   Exception: connection closed after sending N bytes
   952   Exception: connection closed after sending N bytes
   898   
   953   
   899 
   954 
   900 #else
   955 #else
   901 
   956 
   902   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -13
   957   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -13
   903   readline(65537) -> (2) \r\n (py3 !)
   958   readline(~) -> (2) \r\n (py3 !)
   904   write(167 from 167) -> (42) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   959   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   905   write(28 from 28) -> (44) Transfer-Encoding: chunked\r\n (no-py3 !)
   960   write(41) -> Content-Type: application/mercurial-0.2\r\n
   906   write(2 from 2) -> (42) \r\n (no-py3 !)
   961   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   907   write(6 from 6) -> (36) 1\\r\\n\x04\\r\\n (esc)
   962   write(2) -> \r\n (no-py3 !)
   908   write(9 from 9) -> (27) 4\r\nnone\r\n
   963   write(6) -> 1\\r\\n\x04\\r\\n (esc)
   909   write(9 from 9) -> (18) 4\r\nHG20\r\n
   964   write(9) -> 4\r\nnone\r\n
   910   write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   965   write(9) -> 4\r\nHG20\r\n
       
   966   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   911   write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
   967   write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
   912   write limit reached; closing socket
   968   write limit reached; closing socket
   913   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   969   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   914   Traceback (most recent call last):
   970   Traceback (most recent call last):
   915   Exception: connection closed after sending N bytes
   971   Exception: connection closed after sending N bytes
   916   
   972   
   917   write(27) -> 15\r\nInternal Server Error\r\n
       
   918 #endif
   973 #endif
   919 
   974 
   920   $ rm -f error.log
   975   $ rm -f error.log
   921 
   976 
   922 Server stops sending after bundle2 part header
   977 Server stops sending after bundle2 part header
   923 
   978 ----------------------------------------------
   924   $ hg serve --config badserver.closeaftersendbytes=1048 -p $HGPORT -d --pid-file=hg.pid -E error.log
   979 
       
   980   $ hg serve \
       
   981   > --config badserver.close-after-send-patterns="version02nbchanges1\\r\\n" \
       
   982   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   925   $ cat hg.pid > $DAEMON_PIDS
   983   $ cat hg.pid > $DAEMON_PIDS
   926 
   984 
   927   $ hg clone http://localhost:$HGPORT/ clone
   985   $ hg clone http://localhost:$HGPORT/ clone
   928   requesting all changes
   986   requesting all changes
   929   adding changesets
   987   adding changesets
   935 
   993 
   936   $ killdaemons.py $DAEMON_PIDS
   994   $ killdaemons.py $DAEMON_PIDS
   937 
   995 
   938 #if py36
   996 #if py36
   939   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -12
   997   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -12
   940   sendall(167 from 167) -> (89) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   998   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   941   sendall(6 from 6) -> (83) 1\\r\\n\x04\\r\\n (esc)
   999   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
   942   sendall(9 from 9) -> (74) 4\r\nnone\r\n
  1000   sendall(9) -> 4\r\nnone\r\n
   943   sendall(9 from 9) -> (65) 4\r\nHG20\r\n
  1001   sendall(9) -> 4\r\nHG20\r\n
   944   sendall(9 from 9) -> (56) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1002   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   945   sendall(9 from 9) -> (47) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1003   sendall(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
   946   sendall(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1004   sendall(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
   947   write limit reached; closing socket
  1005   write limit reached; closing socket
   948   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1006   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   949   Traceback (most recent call last):
  1007   Traceback (most recent call last):
   950   Exception: connection closed after sending N bytes
  1008   Exception: connection closed after sending N bytes
   951   
  1009   
   952 
  1010 
   953 #else
  1011 #else
   954   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -14
  1012   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -14
   955   readline(65537) -> (2) \r\n (py3 !)
  1013   readline(~) -> (2) \r\n (py3 !)
   956   write(167 from 167) -> (89) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
  1014   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
   957   write(28 from 28) -> (91) Transfer-Encoding: chunked\r\n (no-py3 !)
  1015   write(41) -> Content-Type: application/mercurial-0.2\r\n
   958   write(2 from 2) -> (89) \r\n (no-py3 !)
  1016   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
   959   write(6 from 6) -> (83) 1\\r\\n\x04\\r\\n (esc)
  1017   write(2) -> \r\n (no-py3 !)
   960   write(9 from 9) -> (74) 4\r\nnone\r\n
  1018   write(6) -> 1\\r\\n\x04\\r\\n (esc)
   961   write(9 from 9) -> (65) 4\r\nHG20\r\n
  1019   write(9) -> 4\r\nnone\r\n
   962   write(9 from 9) -> (56) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1020   write(9) -> 4\r\nHG20\r\n
   963   write(9 from 9) -> (47) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1021   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
       
  1022   write(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
   964   write(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1023   write(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
   965   write limit reached; closing socket
  1024   write limit reached; closing socket
   966   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1025   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
   967   Traceback (most recent call last):
  1026   Traceback (most recent call last):
   968   Exception: connection closed after sending N bytes
  1027   Exception: connection closed after sending N bytes
   969   
  1028   
   970   write(27) -> 15\r\nInternal Server Error\r\n
       
   971 #endif
  1029 #endif
   972 
  1030 
   973   $ rm -f error.log
  1031   $ rm -f error.log
   974 
  1032 
   975 Server stops after bundle2 part payload chunk size
  1033 Server stops after bundle2 part payload chunk size
   976 
  1034 --------------------------------------------------
   977   $ hg serve --config badserver.closeaftersendbytes=1069 -p $HGPORT -d --pid-file=hg.pid -E error.log
  1035 
       
  1036   $ hg serve \
       
  1037   > --config badserver.close-after-send-patterns='1d2\r\n.......' \
       
  1038   > -p $HGPORT -d --pid-file=hg.pid -E error.log
   978   $ cat hg.pid > $DAEMON_PIDS
  1039   $ cat hg.pid > $DAEMON_PIDS
   979 
  1040 
   980   $ hg clone http://localhost:$HGPORT/ clone
  1041   $ hg clone http://localhost:$HGPORT/ clone
   981   requesting all changes
  1042   requesting all changes
   982   adding changesets
  1043   adding changesets
   989 
  1050 
   990   $ killdaemons.py $DAEMON_PIDS
  1051   $ killdaemons.py $DAEMON_PIDS
   991 
  1052 
   992 #if py36
  1053 #if py36
   993   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -14
  1054   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -14
   994   sendall(167 from 167) -> (110) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
  1055   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
   995   sendall(6 from 6) -> (104) 1\\r\\n\x04\\r\\n (esc)
  1056   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
   996   sendall(9 from 9) -> (95) 4\r\nnone\r\n
  1057   sendall(9) -> 4\r\nnone\r\n
   997   sendall(9 from 9) -> (86) 4\r\nHG20\r\n
  1058   sendall(9) -> 4\r\nHG20\r\n
   998   sendall(9 from 9) -> (77) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1059   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
   999   sendall(9 from 9) -> (68) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1060   sendall(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1000   sendall(47 from 47) -> (21) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1061   sendall(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1001   sendall(9 from 9) -> (12) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1062   sendall(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1002   sendall(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
  1063   sendall(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
  1003   write limit reached; closing socket
  1064   write limit reached; closing socket
  1004   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1065   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1005   Traceback (most recent call last):
  1066   Traceback (most recent call last):
  1006   Exception: connection closed after sending N bytes
  1067   Exception: connection closed after sending N bytes
  1007   
  1068   
  1008 
  1069 
  1009 #else
  1070 #else
  1010   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -15
  1071   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -15
  1011   write(167 from 167) -> (110) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
  1072   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
  1012   write(2 from 2) -> (110) \r\n (no-py3 !)
  1073   write(28) -> Transfer-Encoding: chunked\r\n
  1013   write(6 from 6) -> (104) 1\\r\\n\x04\\r\\n (esc)
  1074   write(2) -> \r\n (no-py3 !)
  1014   write(9 from 9) -> (95) 4\r\nnone\r\n
  1075   write(6) -> 1\\r\\n\x04\\r\\n (esc)
  1015   write(9 from 9) -> (86) 4\r\nHG20\r\n
  1076   write(9) -> 4\r\nnone\r\n
  1016   write(9 from 9) -> (77) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1077   write(9) -> 4\r\nHG20\r\n
  1017   write(9 from 9) -> (68) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1078   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1018   write(47 from 47) -> (21) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1079   write(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1019   write(9 from 9) -> (12) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1080   write(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
       
  1081   write(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1020   write(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
  1082   write(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
  1021   write limit reached; closing socket
  1083   write limit reached; closing socket
  1022   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1084   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1023   Traceback (most recent call last):
  1085   Traceback (most recent call last):
  1024   Exception: connection closed after sending N bytes
  1086   Exception: connection closed after sending N bytes
  1025   
  1087   
  1026   write(27) -> 15\r\nInternal Server Error\r\n
       
  1027 #endif
  1088 #endif
  1028 
  1089 
  1029   $ rm -f error.log
  1090   $ rm -f error.log
  1030 
  1091 
  1031 Server stops sending in middle of bundle2 payload chunk
  1092 Server stops sending in middle of bundle2 payload chunk
  1032 
  1093 -------------------------------------------------------
  1033   $ hg serve --config badserver.closeaftersendbytes=1530 -p $HGPORT -d --pid-file=hg.pid -E error.log
  1094 
       
  1095   $ hg serve \
       
  1096   > --config badserver.close-after-send-patterns=':jL\0\0\x00\0\0\0\0\0\r\n' \
       
  1097   > -p $HGPORT -d --pid-file=hg.pid -E error.log
  1034   $ cat hg.pid > $DAEMON_PIDS
  1098   $ cat hg.pid > $DAEMON_PIDS
  1035 
  1099 
  1036   $ hg clone http://localhost:$HGPORT/ clone
  1100   $ hg clone http://localhost:$HGPORT/ clone
  1037   requesting all changes
  1101   requesting all changes
  1038   adding changesets
  1102   adding changesets
  1044 
  1108 
  1045   $ killdaemons.py $DAEMON_PIDS
  1109   $ killdaemons.py $DAEMON_PIDS
  1046 
  1110 
  1047 #if py36
  1111 #if py36
  1048   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -14
  1112   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -14
  1049   sendall(167 from 167) -> (571) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
  1113   sendall(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n
  1050   sendall(6 from 6) -> (565) 1\\r\\n\x04\\r\\n (esc)
  1114   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
  1051   sendall(9 from 9) -> (556) 4\r\nnone\r\n
  1115   sendall(9) -> 4\r\nnone\r\n
  1052   sendall(9 from 9) -> (547) 4\r\nHG20\r\n
  1116   sendall(9) -> 4\r\nHG20\r\n
  1053   sendall(9 from 9) -> (538) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1117   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1054   sendall(9 from 9) -> (529) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1118   sendall(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1055   sendall(47 from 47) -> (482) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1119   sendall(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1056   sendall(9 from 9) -> (473) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1120   sendall(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1057   sendall(473 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1121   sendall(473 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1058   write limit reached; closing socket
  1122   write limit reached; closing socket
  1059   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1123   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1060   Traceback (most recent call last):
  1124   Traceback (most recent call last):
  1061   Exception: connection closed after sending N bytes
  1125   Exception: connection closed after sending N bytes
  1062   
  1126   
  1063 
  1127 
  1064 #else
  1128 #else
  1065   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -16
  1129   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -16
  1066   readline(65537) -> (2) \r\n (py3 !)
  1130   readline(~) -> (2) \r\n (py3 !)
  1067   write(167 from 167) -> (571) HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
  1131   write(167) -> HTTP/1.1 200 Script output follows\r\nServer: badhttpserver\r\nDate: $HTTP_DATE$\r\nContent-Type: application/mercurial-0.2\r\nTransfer-Encoding: chunked\r\n\r\n (py3 !)
  1068   write(28 from 28) -> (573) Transfer-Encoding: chunked\r\n (no-py3 !)
  1132   write(41) -> Content-Type: application/mercurial-0.2\r\n
  1069   write(2 from 2) -> (571) \r\n (no-py3 !)
  1133   write(28) -> Transfer-Encoding: chunked\r\n (no-py3 !)
  1070   write(6 from 6) -> (565) 1\\r\\n\x04\\r\\n (esc)
  1134   write(2) -> \r\n (no-py3 !)
  1071   write(9 from 9) -> (556) 4\r\nnone\r\n
  1135   write(6) -> 1\\r\\n\x04\\r\\n (esc)
  1072   write(9 from 9) -> (547) 4\r\nHG20\r\n
  1136   write(9) -> 4\r\nnone\r\n
  1073   write(9 from 9) -> (538) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1137   write(9) -> 4\r\nHG20\r\n
  1074   write(9 from 9) -> (529) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1138   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1075   write(47 from 47) -> (482) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1139   write(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1076   write(9 from 9) -> (473) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1140   write(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
       
  1141   write(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1077   write(473 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1142   write(473 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1078   write limit reached; closing socket
  1143   write limit reached; closing socket
  1079   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1144   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1080   Traceback (most recent call last):
  1145   Traceback (most recent call last):
  1081   Exception: connection closed after sending N bytes
  1146   Exception: connection closed after sending N bytes
  1082   
  1147   
  1083   write(27) -> 15\r\nInternal Server Error\r\n
       
  1084 #endif
  1148 #endif
  1085 
  1149 
  1086   $ rm -f error.log
  1150   $ rm -f error.log
  1087 
  1151 
  1088 Server stops sending after 0 length payload chunk size
  1152 Server stops sending after 0 length payload chunk size
  1089 
  1153 ------------------------------------------------------
  1090   $ hg serve --config badserver.closeaftersendbytes=1561 -p $HGPORT -d --pid-file=hg.pid -E error.log
  1154 
       
  1155   $ hg serve \
       
  1156   > --config badserver.close-after-send-patterns=LISTKEYS \
       
  1157   > -p $HGPORT -d --pid-file=hg.pid -E error.log
  1091   $ cat hg.pid > $DAEMON_PIDS
  1158   $ cat hg.pid > $DAEMON_PIDS
  1092 
  1159 
  1093   $ hg clone http://localhost:$HGPORT/ clone
  1160   $ hg clone http://localhost:$HGPORT/ clone
  1094   requesting all changes
  1161   requesting all changes
  1095   adding changesets
  1162   adding changesets
  1104 
  1171 
  1105   $ killdaemons.py $DAEMON_PIDS
  1172   $ killdaemons.py $DAEMON_PIDS
  1106 
  1173 
  1107 #if py36
  1174 #if py36
  1108   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -16
  1175   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -16
  1109   sendall(6 from 6) -> (596) 1\\r\\n\x04\\r\\n (esc)
  1176   sendall(6) -> 1\\r\\n\x04\\r\\n (esc)
  1110   sendall(9 from 9) -> (587) 4\r\nnone\r\n
  1177   sendall(9) -> 4\r\nnone\r\n
  1111   sendall(9 from 9) -> (578) 4\r\nHG20\r\n
  1178   sendall(9) -> 4\r\nHG20\r\n
  1112   sendall(9 from 9) -> (569) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1179   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1113   sendall(9 from 9) -> (560) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1180   sendall(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1114   sendall(47 from 47) -> (513) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1181   sendall(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1115   sendall(9 from 9) -> (504) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1182   sendall(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1116   sendall(473 from 473) -> (31) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1183   sendall(473) -> 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1117   sendall(9 from 9) -> (22) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1184   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1118   sendall(9 from 9) -> (13) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1185   sendall(9) -> 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1119   sendall(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
  1186   sendall(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
  1120   write limit reached; closing socket
  1187   write limit reached; closing socket
  1121   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1188   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1122   Traceback (most recent call last):
  1189   Traceback (most recent call last):
  1123   Exception: connection closed after sending N bytes
  1190   Exception: connection closed after sending N bytes
  1124   
  1191   
  1125 
  1192 
  1126 #else
  1193 #else
  1127   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -17
  1194   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -17
  1128   write(6 from 6) -> (596) 1\\r\\n\x04\\r\\n (esc)
  1195   write(2) -> \r\n
  1129   write(9 from 9) -> (587) 4\r\nnone\r\n
  1196   write(6) -> 1\\r\\n\x04\\r\\n (esc)
  1130   write(9 from 9) -> (578) 4\r\nHG20\r\n
  1197   write(9) -> 4\r\nnone\r\n
  1131   write(9 from 9) -> (569) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1198   write(9) -> 4\r\nHG20\r\n
  1132   write(9 from 9) -> (560) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1199   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1133   write(47 from 47) -> (513) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1200   write(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1134   write(9 from 9) -> (504) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1201   write(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1135   write(473 from 473) -> (31) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1202   write(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1136   write(9 from 9) -> (22) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1203   write(473) -> 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1137   write(9 from 9) -> (13) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1204   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
       
  1205   write(9) -> 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1138   write(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
  1206   write(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
  1139   write limit reached; closing socket
  1207   write limit reached; closing socket
  1140   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1208   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1141   Traceback (most recent call last):
  1209   Traceback (most recent call last):
  1142   Exception: connection closed after sending N bytes
  1210   Exception: connection closed after sending N bytes
  1143   
  1211   
  1144   write(27) -> 15\r\nInternal Server Error\r\n
       
  1145 #endif
  1212 #endif
  1146 
  1213 
  1147   $ rm -f error.log
  1214   $ rm -f error.log
  1148 
  1215 
  1149 Server stops sending after 0 part bundle part header (indicating end of bundle2 payload)
  1216 Server stops sending after 0 part bundle part header (indicating end of bundle2 payload)
       
  1217 ----------------------------------------------------------------------------------------
       
  1218 
  1150 This is before the 0 size chunked transfer part that signals end of HTTP response.
  1219 This is before the 0 size chunked transfer part that signals end of HTTP response.
  1151 
  1220 
  1152   $ hg serve --config badserver.closeaftersendbytes=1736 -p $HGPORT -d --pid-file=hg.pid -E error.log
  1221   $ hg serve \
       
  1222   > --config badserver.close-after-send-patterns='(.*4\r\n\0\0\0\0\r\n){5}' \
       
  1223   > -p $HGPORT -d --pid-file=hg.pid -E error.log
  1153   $ cat hg.pid > $DAEMON_PIDS
  1224   $ cat hg.pid > $DAEMON_PIDS
  1154 
  1225 
  1155   $ hg clone http://localhost:$HGPORT/ clone
  1226   $ hg clone http://localhost:$HGPORT/ clone
  1156   requesting all changes
  1227   requesting all changes
  1157   adding changesets
  1228   adding changesets
  1164 
  1235 
  1165   $ killdaemons.py $DAEMON_PIDS
  1236   $ killdaemons.py $DAEMON_PIDS
  1166 
  1237 
  1167 #if py36
  1238 #if py36
  1168   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -20
  1239   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -20
  1169   sendall(9 from 9) -> (744) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1240   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1170   sendall(9 from 9) -> (735) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1241   sendall(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1171   sendall(47 from 47) -> (688) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1242   sendall(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1172   sendall(9 from 9) -> (679) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1243   sendall(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1173   sendall(473 from 473) -> (206) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1244   sendall(473) -> 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1174   sendall(9 from 9) -> (197) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1245   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1175   sendall(9 from 9) -> (188) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1246   sendall(9) -> 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1176   sendall(38 from 38) -> (150) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1247   sendall(38) -> 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1177   sendall(9 from 9) -> (141) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1248   sendall(9) -> 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1178   sendall(64 from 64) -> (77) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1249   sendall(64) -> 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1179   sendall(9 from 9) -> (68) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1250   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1180   sendall(9 from 9) -> (59) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1251   sendall(9) -> 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1181   sendall(41 from 41) -> (18) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1252   sendall(41) -> 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1182   sendall(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1253   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1183   sendall(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1254   sendall(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1184   write limit reached; closing socket
  1255   write limit reached; closing socket
  1185   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1256   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1186   Traceback (most recent call last):
  1257   Traceback (most recent call last):
  1187   Exception: connection closed after sending N bytes
  1258   Exception: connection closed after sending N bytes
  1188   
  1259   
  1189 
  1260 
  1190 #else
  1261 #else
  1191   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -21
  1262   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -21
  1192   write(9 from 9) -> (744) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1263   write(9) -> 4\r\nHG20\r\n
  1193   write(9 from 9) -> (735) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1264   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1194   write(47 from 47) -> (688) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1265   write(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1195   write(9 from 9) -> (679) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1266   write(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1196   write(473 from 473) -> (206) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1267   write(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1197   write(9 from 9) -> (197) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1268   write(473) -> 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1198   write(9 from 9) -> (188) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1269   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1199   write(38 from 38) -> (150) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1270   write(9) -> 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1200   write(9 from 9) -> (141) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1271   write(38) -> 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1201   write(64 from 64) -> (77) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1272   write(9) -> 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1202   write(9 from 9) -> (68) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1273   write(64) -> 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1203   write(9 from 9) -> (59) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1274   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1204   write(41 from 41) -> (18) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1275   write(9) -> 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1205   write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1276   write(41) -> 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
       
  1277   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1206   write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1278   write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1207   write limit reached; closing socket
  1279   write limit reached; closing socket
  1208   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1280   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1209   Traceback (most recent call last):
  1281   Traceback (most recent call last):
  1210   Exception: connection closed after sending N bytes
  1282   Exception: connection closed after sending N bytes
  1211   
  1283   
  1212   write(27) -> 15\r\nInternal Server Error\r\n
       
  1213 #endif
  1284 #endif
  1214 
  1285 
  1215   $ rm -f error.log
  1286   $ rm -f error.log
  1216   $ rm -rf clone
  1287   $ rm -rf clone
  1217 
  1288 
  1218 Server sends a size 0 chunked-transfer size without terminating \r\n
  1289 Server sends a size 0 chunked-transfer size without terminating \r\n
  1219 
  1290 --------------------------------------------------------------------
  1220   $ hg serve --config badserver.closeaftersendbytes=1739 -p $HGPORT -d --pid-file=hg.pid -E error.log
  1291 
       
  1292   $ hg serve \
       
  1293   > --config badserver.close-after-send-patterns="(.*4\\r\\n\0\0\0\0\\r\\n0\r\n)" \
       
  1294   > -p $HGPORT -d --pid-file=hg.pid -E error.log
  1221   $ cat hg.pid > $DAEMON_PIDS
  1295   $ cat hg.pid > $DAEMON_PIDS
  1222 
  1296 
  1223   $ hg clone http://localhost:$HGPORT/ clone
  1297   $ hg clone http://localhost:$HGPORT/ clone
  1224   requesting all changes
  1298   requesting all changes
  1225   adding changesets
  1299   adding changesets
  1232 
  1306 
  1233   $ killdaemons.py $DAEMON_PIDS
  1307   $ killdaemons.py $DAEMON_PIDS
  1234 
  1308 
  1235 #if py36
  1309 #if py36
  1236   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -21
  1310   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -21
  1237   sendall(9 from 9) -> (747) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1311   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1238   sendall(9 from 9) -> (738) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1312   sendall(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1239   sendall(47 from 47) -> (691) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1313   sendall(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1240   sendall(9 from 9) -> (682) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1314   sendall(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1241   sendall(473 from 473) -> (209) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1315   sendall(473) -> 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1242   sendall(9 from 9) -> (200) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1316   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1243   sendall(9 from 9) -> (191) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1317   sendall(9) -> 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1244   sendall(38 from 38) -> (153) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1318   sendall(38) -> 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1245   sendall(9 from 9) -> (144) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1319   sendall(9) -> 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1246   sendall(64 from 64) -> (80) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1320   sendall(64) -> 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1247   sendall(9 from 9) -> (71) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1321   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1248   sendall(9 from 9) -> (62) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1322   sendall(9) -> 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1249   sendall(41 from 41) -> (21) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1323   sendall(41) -> 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1250   sendall(9 from 9) -> (12) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1324   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1251   sendall(9 from 9) -> (3) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1325   sendall(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1252   sendall(3 from 5) -> (0) 0\r\n
  1326   sendall(3 from 5) -> (0) 0\r\n
  1253   write limit reached; closing socket
  1327   write limit reached; closing socket
  1254   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1328   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1255   Traceback (most recent call last):
  1329   Traceback (most recent call last):
  1256   Exception: connection closed after sending N bytes
  1330   Exception: connection closed after sending N bytes
  1257   
  1331   
  1258 
  1332 
  1259 #else
  1333 #else
  1260   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -22
  1334   $ "$PYTHON" $TESTDIR/filtertraceback.py < error.log | tail -22
  1261   write(9 from 9) -> (747) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1335   write(9) -> 4\r\nHG20\r\n
  1262   write(9 from 9) -> (738) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1336   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1263   write(47 from 47) -> (691) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1337   write(9) -> 4\\r\\n\x00\x00\x00)\\r\\n (esc)
  1264   write(9 from 9) -> (682) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1338   write(47) -> 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02	\x01version02nbchanges1\\r\\n (esc)
  1265   write(473 from 473) -> (209) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1339   write(9) -> 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
  1266   write(9 from 9) -> (200) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1340   write(473) -> 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
  1267   write(9 from 9) -> (191) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1341   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1268   write(38 from 38) -> (153) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1342   write(9) -> 4\\r\\n\x00\x00\x00 \\r\\n (esc)
  1269   write(9 from 9) -> (144) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1343   write(38) -> 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00	\x06namespacephases\\r\\n (esc)
  1270   write(64 from 64) -> (80) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1344   write(9) -> 4\\r\\n\x00\x00\x00:\\r\\n (esc)
  1271   write(9 from 9) -> (71) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1345   write(64) -> 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c	1\npublishing	True\r\n
  1272   write(9 from 9) -> (62) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1346   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1273   write(41 from 41) -> (21) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1347   write(9) -> 4\\r\\n\x00\x00\x00#\\r\\n (esc)
  1274   write(9 from 9) -> (12) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1348   write(41) -> 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00		namespacebookmarks\\r\\n (esc)
  1275   write(9 from 9) -> (3) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1349   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
       
  1350   write(9) -> 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
  1276   write(3 from 5) -> (0) 0\r\n
  1351   write(3 from 5) -> (0) 0\r\n
  1277   write limit reached; closing socket
  1352   write limit reached; closing socket
  1278   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1353   $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=getbundle': (glob)
  1279   Traceback (most recent call last):
  1354   Traceback (most recent call last):
  1280   Exception: connection closed after sending N bytes
  1355   Exception: connection closed after sending N bytes
  1281   
  1356   
  1282   write(27) -> 15\r\nInternal Server Error\r\n
       
  1283 #endif
  1357 #endif
  1284 
  1358 
  1285   $ rm -f error.log
  1359   $ rm -f error.log
  1286   $ rm -rf clone
  1360   $ rm -rf clone