Mercurial > hg
changeset 29275:e53f961ac75f
test-chg: add basic tests for server lifecycle
I'm going to move around the codes in AutoExitMixIn. This test should catch
a subtle bug of unlinking sockets which I made in draft patches.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 21 May 2016 21:43:29 +0900 |
parents | 148a9a5379f0 |
children | 4dd530df4742 |
files | tests/test-chg.t |
diffstat | 1 files changed, 72 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/test-chg.t Sun Mar 20 14:59:03 2016 -0700 +++ b/tests/test-chg.t Sat May 21 21:43:29 2016 +0900 @@ -1,5 +1,7 @@ #require chg + $ cp $HGRCPATH $HGRCPATH.orig + init repo $ chg init foo @@ -32,3 +34,73 @@ P1 $ A=2 chg printa P2 + + $ cp $HGRCPATH.orig $HGRCPATH + $ cd .. + +server lifecycle +---------------- + +chg server should be restarted on code change, and old server will shut down +automatically. In this test, we use the following time parameters: + + - "sleep 1" to make mtime different + - "sleep 2" to notice mtime change (polling interval is 1 sec) + +set up repository with an extension: + + $ chg init extreload + $ cd extreload + $ touch dummyext.py + $ cat <<EOF >> .hg/hgrc + > [extensions] + > dummyext = dummyext.py + > EOF + +isolate socket directory for stable result: + + $ OLDCHGSOCKNAME=$CHGSOCKNAME + $ mkdir chgsock + $ CHGSOCKNAME=`pwd`/chgsock/server + +warm up server: + + $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start' + chg: debug: start cmdserver at $TESTTMP/extreload/chgsock/server + +new server should be started if extension modified: + + $ sleep 1 + $ touch dummyext.py + $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start' + chg: debug: instruction: unlink $TESTTMP/extreload/chgsock/server-* (glob) + chg: debug: instruction: reconnect + chg: debug: start cmdserver at $TESTTMP/extreload/chgsock/server + +old server will shut down, while new server should still be reachable: + + $ sleep 2 + $ CHGDEBUG= chg log 2>&1 | (egrep 'instruction|start' || true) + +socket file should never be unlinked by old server: +(simulates unowned socket by updating mtime, which makes sure server exits +at polling cycle) + + $ ls chgsock/server-* + chgsock/server-* (glob) + $ touch chgsock/server-* + $ sleep 2 + $ ls chgsock/server-* + chgsock/server-* (glob) + +since no server is reachable from socket file, new server should be started: +(this test makes sure that old server shut down automatically) + + $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start' + chg: debug: start cmdserver at $TESTTMP/extreload/chgsock/server + +shut down servers and restore environment: + + $ rm -R chgsock + $ CHGSOCKNAME=$OLDCHGSOCKNAME + $ cd ..