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.
--- 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 ..