Mercurial > hg-stable
view tests/test-serve.t @ 40479:197f092b2cd9 stable 4.8.2
server: always close http socket if responding with an error (issue6033)
It's possible for hgweb to respond _very_ early with an error if we're
catching certain types of errors. When we do, we need to tell the client
the socket is toast when there's a POST involved because otherwise there
can be lingering POST data on the socket that will confuse any future
requests on the socket. This manifested as a flaky failure on Linux in an
lfs extension test and a reliable failure on FreeBSD. With this patch
applied, test-lfs-serve-access.t now passes for me on FreeBSD.
Differential Revision: https://phab.mercurial-scm.org/D5498
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Sun, 06 Jan 2019 14:58:54 -0500 |
parents | 5abc47d4ca6b |
children | b1a1702262c9 |
line wrap: on
line source
#require serve $ hgserve() > { > hg serve -a localhost -d --pid-file=hg.pid -E errors.log -v $@ \ > | sed -e "s/:$HGPORT1\\([^0-9]\\)/:HGPORT1\1/g" \ > -e "s/:$HGPORT2\\([^0-9]\\)/:HGPORT2\1/g" \ > -e 's/http:\/\/[^/]*\//http:\/\/localhost\//' > if [ -f hg.pid ]; then > killdaemons.py hg.pid > fi > echo % errors > cat errors.log > } $ hg init test $ cd test $ echo '[web]' > .hg/hgrc $ echo 'accesslog = access.log' >> .hg/hgrc $ echo "port = $HGPORT1" >> .hg/hgrc Without -v $ hg serve -a localhost -p $HGPORT -d --pid-file=hg.pid -E errors.log $ cat hg.pid >> "$DAEMON_PIDS" $ if [ -f access.log ]; then > echo 'access log created - .hg/hgrc respected' > fi access log created - .hg/hgrc respected errors $ cat errors.log With -v $ hgserve listening at http://localhost/ (bound to *$LOCALIP*:HGPORT1) (glob) (?) % errors With -v and -p HGPORT2 $ hgserve -p "$HGPORT2" listening at http://localhost/ (bound to *$LOCALIP*:HGPORT2) (glob) (?) % errors With -v and -p daytime (should fail because low port) #if no-root no-windows $ KILLQUIETLY=Y $ hgserve -p daytime abort: cannot start server at 'localhost:13': Permission denied abort: child process failed to start % errors $ KILLQUIETLY=N #endif With --prefix foo $ hgserve --prefix foo listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?) % errors With --prefix /foo $ hgserve --prefix /foo listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?) % errors With --prefix foo/ $ hgserve --prefix foo/ listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?) % errors With --prefix /foo/ $ hgserve --prefix /foo/ listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?) % errors $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS With out of bounds accesses $ rm access.log $ hg serve -a localhost -p $HGPORT -d --prefix some/dir \ > --pid-file=hg.pid -E errors.log $ cat hg.pid >> "$DAEMON_PIDS" $ hg id http://localhost:$HGPORT/some/dir7 abort: HTTP Error 404: Not Found [255] $ hg id http://localhost:$HGPORT/some abort: HTTP Error 404: Not Found [255] $ cat access.log errors.log $LOCALIP - - [$LOGDATE$] "GET /some/dir7?cmd=capabilities HTTP/1.1" 404 - (glob) $LOCALIP - - [$LOGDATE$] "GET /some?cmd=capabilities HTTP/1.1" 404 - (glob) $ cd ..