From 142b19cda6f9c6133c3559f320bb96b10447fb3b Mon Sep 17 00:00:00 2001
From: Magnus Ahltorp <map@kth.se>
Date: Tue, 7 Feb 2017 16:29:46 +0100
Subject: Improve start and stop of Erlang nodes

---
 test/scripts/light-system-test-run-1.sh | 13 +++++-----
 test/scripts/light-system-test-start.sh | 27 +++++++++++----------
 test/scripts/light-system-test-stop.sh  | 16 +++++++++----
 test/scripts/light-system-test.sh       | 38 +++++++++++++++++------------
 tools/compileconfig.py                  |  8 +++++--
 tools/testcase1.py                      | 42 +++++++++++++++++++++++++++++----
 6 files changed, 97 insertions(+), 47 deletions(-)

diff --git a/test/scripts/light-system-test-run-1.sh b/test/scripts/light-system-test-run-1.sh
index 585a829..7d52ed7 100755
--- a/test/scripts/light-system-test-run-1.sh
+++ b/test/scripts/light-system-test-run-1.sh
@@ -32,7 +32,8 @@ python ${top_srcdir}/tools/comparecert.py ${top_srcdir}/tools/testcerts/cert5.tx
 python ${top_srcdir}/tools/comparecert.py ${top_srcdir}/tools/testcerts/pre1.txt:${top_srcdir}/tools/testcerts/pre2.txt fetchcertstore/00000005:fetchcertstore/00000006 || fail"Verification failed"
 python ${top_srcdir}/tools/storagegc.py --config machine/machine-1/catlfish-test.cfg --localconfig machine/machine-1/catlfish-test-local-1.cfg || fail "GC failed"
 
-${top_srcdir}/tools/to_catlfish.py to_erl nodes/merge-2/ "init:stop()"
+${top_srcdir}/test/scripts/light-system-test-stop.sh mergesecondary
+
 python ${top_srcdir}/tools/submitcert.py --parallel=1 --store ${top_srcdir}/tools/testcerts/cert6.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem || fail "Submission failed"
 echo NOTE: merge backup should fail with 111 Connection refused
 
@@ -42,12 +43,10 @@ sleep 3
 assert_equal "Tree size" "$(get_treesize)" 7
 
 check_sth
-../bin/run_erl -daemon nodes/merge-2/ nodes/merge-2/log/ "exec ../bin/erl -config merge-2"
-for i in 1 2 3 4 5 6 7 8 9 10; do
-    echo "waiting for system to start" ; \
-    sleep 0.5 ; \
-    if curl -s --cacert httpsca/demoCA/cacert.pem -4 https://localhost:8181 > /dev/null ; then break; fi
-done
+
+
+${top_srcdir}/test/scripts/light-system-test-start.sh mergesecondary
+
 do_merge 8
 
 assert_equal "Tree size" "$(get_treesize)" 8
diff --git a/test/scripts/light-system-test-start.sh b/test/scripts/light-system-test-start.sh
index cdfda8c..51d38ac 100755
--- a/test/scripts/light-system-test-start.sh
+++ b/test/scripts/light-system-test-start.sh
@@ -7,6 +7,8 @@ top_srcdir=$(cd $(dirname $0)/../..; pwd)
 
 . ${top_srcdir}/test/scripts/testutils.sh
 
+nodetypes="$@"
+
 start_node() {
     node=$1
     node_app=$2
@@ -14,18 +16,24 @@ start_node() {
                    "exec ../bin/erl -boot ${node_app} -config ${node}"
 }
 
-for nodegroup in $SIGNINGNODES $MERGESECONDARYNODES $STORAGENODES $FRONTENDNODES; do
-    for node in $nodegroup; do
-        echo "starting $node"
-        start_node $(echo $node | tr ':' ' ')
-    done
+nodes=
+testurls=
+for nodetype in $nodetypes; do
+    nodetype_uc=$(echo $nodetype | tr a-z A-Z)
+    nodes="$nodes $(eval echo \$${nodetype_uc}NODES)"
+    testurls="$testurls $(eval echo \$${nodetype_uc}TESTURLS)"
+done
+
+for node in $nodes; do
+    echo "starting $node"
+    start_node $(echo $node | tr ':' ' ')
 done
 for i in 1 2 3 4 5 6 7 8 9 10; do
     echo "waiting for system to start"
     sleep 0.5
     allstarted=1
     notstarted=
-    for testurl in ${TESTURLS}; do
+    for testurl in ${testurls}; do
 	if curl -s --cacert httpsca/demoCA/cacert.pem -4 https://${testurl} > /dev/null ; then
             :
         else
@@ -40,10 +48,3 @@ for i in 1 2 3 4 5 6 7 8 9 10; do
         echo Not started: ${notstarted}
     fi
 done
-
-if [ $# -gt 0 ] && [ "$1" = "initlog" ]; then
-    shift 1
-    $top_srcdir/tools/initlog.py --config machine/merge/catlfish-test.cfg --localconfig machine/merge/catlfish-test-local-merge.cfg $@
-fi
-
-start_node $(echo ${MERGEPRIMARYNODE} | tr ':' ' ')
diff --git a/test/scripts/light-system-test-stop.sh b/test/scripts/light-system-test-stop.sh
index aef9c76..a946079 100755
--- a/test/scripts/light-system-test-stop.sh
+++ b/test/scripts/light-system-test-stop.sh
@@ -7,14 +7,20 @@ top_srcdir=$(cd $(dirname $0)/../..; pwd)
 
 . ${top_srcdir}/test/scripts/testutils.sh
 
+nodetypes="$@"
+
 stop_node() {
     node=$1
     ${top_srcdir}/tools/to_catlfish.py to_erl nodes/${node}/ "init:stop()"
 }
 
-for nodegroup in $FRONTENDNODES $MERGEPRIMARYNODE $STORAGENODES $MERGESECONDARYNODES $SIGNINGNODES; do
-    for node in $nodegroup; do
-        echo "stopping $node"
-        stop_node $(echo $node | tr ':' ' ')
-    done
+nodes=
+for nodetype in $nodetypes; do
+    nodetype_uc=$(echo $nodetype | tr a-z A-Z)
+    nodes="$nodes $(eval echo \$${nodetype_uc}NODES)"
+done
+
+for node in $nodes; do
+    echo "stopping $node"
+    stop_node $(echo $node | tr ':' ' ')
 done
diff --git a/test/scripts/light-system-test.sh b/test/scripts/light-system-test.sh
index ad3daca..217fb2c 100755
--- a/test/scripts/light-system-test.sh
+++ b/test/scripts/light-system-test.sh
@@ -10,18 +10,24 @@ top_srcdir=$(cd $(dirname $0)/../..; pwd)
 SCRIPTS=${top_srcdir}/test/scripts
 
 tests_start() {
-    ${SCRIPTS}/light-system-test-start.sh $@
+    ${SCRIPTS}/light-system-test-start.sh "$@"
 }
 
 tests_stop() {
-    ${SCRIPTS}/light-system-test-stop.sh
+    ${SCRIPTS}/light-system-test-stop.sh "$@"
+}
+
+tests_stop_all() {
+    ${SCRIPTS}/light-system-test-stop.sh mergeprimary mergesecondary frontend storage signing
 }
 
 ${SCRIPTS}/light-system-test-prepare.sh
-tests_start initlog
-${SCRIPTS}/light-system-test-run-1.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+tests_start signing mergesecondary storage frontend
+${top_srcdir}/tools/initlog.py --config machine/merge/catlfish-test.cfg --localconfig machine/merge/catlfish-test-local-merge.cfg
+tests_start mergeprimary
+${SCRIPTS}/light-system-test-run-1.sh || (echo "Tests failed"; sleep 5; tests_stop_all; false)
 sleep 5
-tests_stop
+tests_stop_all
 sleep 5
 echo
 echo
@@ -33,10 +39,10 @@ echo
 echo
 echo
 echo
-tests_start
-${SCRIPTS}/light-system-test-run-2.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+tests_start signing mergesecondary storage frontend mergeprimary
+${SCRIPTS}/light-system-test-run-2.sh || (echo "Tests failed"; sleep 5; tests_stop_all; false)
 sleep 5
-tests_stop
+tests_stop_all
 sleep 5
 echo
 echo
@@ -49,10 +55,12 @@ echo
 echo
 echo
 ${SCRIPTS}/light-system-test-prepare-merge-takeover.sh
-tests_start initlog --promote-secondary
-${SCRIPTS}/light-system-test-run-3.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+tests_start signing mergesecondary storage frontend
+${top_srcdir}/tools/initlog.py --config machine/merge/catlfish-test.cfg --localconfig machine/merge/catlfish-test-local-merge.cfg --promote-secondary
+tests_start mergeprimary
+${SCRIPTS}/light-system-test-run-3.sh || (echo "Tests failed"; sleep 5; tests_stop_all; false)
 sleep 5
-tests_stop
+tests_stop_all
 sleep 5
 echo
 echo
@@ -65,8 +73,8 @@ echo
 echo
 echo
 ${SCRIPTS}/light-system-test-prepare-redistribute-frontend.sh
-tests_start
-${SCRIPTS}/light-system-test-run-4.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+tests_start signing mergesecondary storage frontend mergeprimary
+${SCRIPTS}/light-system-test-run-4.sh || (echo "Tests failed"; sleep 5; tests_stop_all; false)
 
 echo
 echo
@@ -80,6 +88,6 @@ echo
 echo
 
 
-${SCRIPTS}/light-system-test-run-5.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+${SCRIPTS}/light-system-test-run-5.sh || (echo "Tests failed"; sleep 5; tests_stop_all; false)
 sleep 5
-tests_stop
+tests_stop_all
diff --git a/tools/compileconfig.py b/tools/compileconfig.py
index 84b2a4a..9169639 100755
--- a/tools/compileconfig.py
+++ b/tools/compileconfig.py
@@ -448,10 +448,14 @@ def gen_testmakefile(config, testmakefile, machines, shellvars=False):
     print >>configfile, "STORAGENODES=" + delimiter + " ".join(['%s:%s' % (name, 'catlfish') for name in storagenodenames if name not in frontendnodenames]) + delimiter
     print >>configfile, "SIGNINGNODES=" + delimiter + " ".join(['%s:%s' % (name, 'catlfish') for name in signingnodenames]) + delimiter
     print >>configfile, "MERGESECONDARYNODES=" + delimiter + " ".join(['%s:%s' % (name, 'catlfish') for name in mergesecondarynodenames]) + delimiter
-    print >>configfile, "MERGEPRIMARYNODE=" '%s:%s' % (config["primarymergenode"], 'merge')
+    print >>configfile, "MERGEPRIMARYNODES=" + delimiter + '%s:%s' % (config["primarymergenode"], 'merge') + delimiter
 
     print >>configfile, "MACHINES=" + delimiter + " ".join([str(e) for e in range(1, machines+1)]) + delimiter
-    print >>configfile, "TESTURLS=" + delimiter + " ".join(frontendnodeaddresses+storagenodeaddresses+signingnodeaddresses+mergesecondarynodeaddresses) + delimiter
+    print >>configfile, "FRONTENDTESTURLS=" + delimiter + " ".join(frontendnodeaddresses) + delimiter
+    print >>configfile, "STORAGETESTURLS=" + delimiter + " ".join(storagenodeaddresses) + delimiter
+    print >>configfile, "SIGNINGTESTURLS=" + delimiter + " ".join(signingnodeaddresses) + delimiter
+    print >>configfile, "MERGESECONDARYTESTURLS=" + delimiter + " ".join(mergesecondarynodeaddresses) + delimiter
+    print >>configfile, "MERGEPRIMARYTESTURLS=" + delimiter + " ".join([]) + delimiter
     print >>configfile, "BASEURL=" + delimiter + config["baseurl"] + delimiter
 
     configfile.close()
diff --git a/tools/testcase1.py b/tools/testcase1.py
index 6a12301..63be2e1 100755
--- a/tools/testcase1.py
+++ b/tools/testcase1.py
@@ -165,18 +165,50 @@ def correct_tree_size(expected):
             return False
     return True
 
+import readconfig
+
+def mergestatus(configfile, localconfigfile):
+    localconfig = readconfig.read_config(localconfigfile)
+    config = readconfig.verify_and_read_config(configfile, localconfig["logadminkey"])
+
+    paths = localconfig["paths"]
+    mergenodes = config.get("mergenodes", [])
+    mergedb = paths["mergedb"]
+    sthfile = mergedb + "/sth"
+    currentsizefile = mergedb + "/fetched"
+
+    sth = json.loads(open(sthfile, "r").read())
+    currentsize = json.loads(open(currentsizefile, "r").read())
+    
+    print >>sys.stderr, currentsize["index"]+1,
+    
+    for mergenode in mergenodes:
+        if mergenode["name"] == config["primarymergenode"]:
+            continue
+        verifiedfile = mergedb + "/verified." + mergenode["name"]
+        try:
+            tree = json.loads(open(verifiedfile, "r").read())
+            print >>sys.stderr, tree["tree_size"],
+        except (IOError, ValueError):
+            pass
+    print >>sys.stderr, sth["tree_size"],
+    print
+
+
 def merge(expected=None, wait=0):
+    rv = subprocess.call([toolsdir + "/merge", "--config", testdir + "/catlfish-test.cfg",
+                          "--localconfig", testdir + "/catlfish-test-local-merge.cfg"])
+    if rv:
+        return rv
     for i in range(10):
-        rv = subprocess.call([toolsdir + "/merge", "--config", testdir + "/catlfish-test.cfg",
-                                "--localconfig", testdir + "/catlfish-test-local-merge.cfg"])
-        if rv:
-            return rv
+        mergestatus(testdir + "/catlfish-test.cfg", testdir + "/catlfish-test-local-merge.cfg")
         if i < wait:
             sleep(1)
             continue
         if correct_tree_size(expected):
             return 0
-    return 0
+        sleep(1)
+    return 1
 
 mergeresult = merge(expected=0, wait=3)
 assert_equal(mergeresult, 0, "merge", quiet=True, fatal=True)
-- 
cgit v1.1