summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2016-10-05 10:06:16 +0200
committerMagnus Ahltorp <map@kth.se>2016-10-05 10:08:43 +0200
commit1d902cd5813a2df252b6976bdcdc9cd7531590b4 (patch)
treecef355f80032c5e15893a5d96c52728d9b71b7d8 /test
parent49b40a0170b80b204746ab3bc42a73c5c60bcf0c (diff)
Move tests to shell scripts
Diffstat (limited to 'test')
-rw-r--r--test/Makefile160
-rwxr-xr-xtest/scripts/light-system-test-prepare-merge-takeover.sh16
-rwxr-xr-xtest/scripts/light-system-test-prepare-redistribute-frontend.sh15
-rwxr-xr-xtest/scripts/light-system-test-run-1.sh53
-rwxr-xr-xtest/scripts/light-system-test-run-2.sh14
-rwxr-xr-xtest/scripts/light-system-test-run-3.sh17
-rwxr-xr-xtest/scripts/light-system-test-run-4.sh13
-rwxr-xr-xtest/scripts/light-system-test-start.sh33
-rwxr-xr-xtest/scripts/light-system-test-stop.sh13
-rwxr-xr-xtest/scripts/light-system-test.sh75
10 files changed, 253 insertions, 156 deletions
diff --git a/test/Makefile b/test/Makefile
index 892506b..f86ebf5 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -4,174 +4,22 @@ PREFIX=..
INSTDIR=$(PREFIX)/catlfish
SOFTHSM=/usr/local/bin/softhsm2-util
-tests-prepare:
- rm -r $(INSTDIR)/tests || true
- mkdir $(INSTDIR)/tests
- make tests-createca
- make tests-createcert
- mkdir $(INSTDIR)/tests/keys
- (cd $(INSTDIR)/tests/keys ; ../../../tools/create-key.sh logkey)
- openssl pkcs8 -topk8 -nocrypt -in $(INSTDIR)/tests/keys/logkey-private.pem -out $(INSTDIR)/tests/keys/logkey-private.pkcs8
- mkdir $(INSTDIR)/tests/mergedb
- touch $(INSTDIR)/tests/mergedb/logorder
- mkdir $(INSTDIR)/tests/mergedb-secondary
- touch $(INSTDIR)/tests/mergedb-secondary/logorder
- printf 0 > $(INSTDIR)/tests/mergedb-secondary/verifiedsize
- mkdir $(INSTDIR)/tests/known_roots
- cp $(PREFIX)/tools/testcerts/roots/* $(INSTDIR)/tests/known_roots
- @for machine in $(MACHINES); do \
- (cd $(INSTDIR)/tests; ../../tools/compileconfig.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-$$machine.cfg) && \
- mkdir -p $(INSTDIR)/tests/machine/machine-$$machine/db && \
- touch $(INSTDIR)/tests/machine/machine-$$machine/db/index && \
- touch $(INSTDIR)/tests/machine/machine-$$machine/db/newentries ; \
- done
- (cd $(INSTDIR)/tests; ../../tools/compileconfig.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-merge-2.cfg)
- (cd $(INSTDIR)/tests; ../../tools/compileconfig.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-signing.cfg)
- mkdir $(INSTDIR)/tests/privatekeys
- mkdir $(INSTDIR)/tests/publickeys
- @for node in $(NODES); do \
- (cd $(INSTDIR)/tests/privatekeys ; ../../../tools/create-key.sh $$node) ; \
- mv $(INSTDIR)/tests/privatekeys/$$node.pem $(INSTDIR)/tests/publickeys/ ; \
- mkdir -p $(INSTDIR)/tests/nodes/$$node/log ; \
- done
- (cd $(INSTDIR)/tests/privatekeys ; ../../../tools/create-key.sh merge-1)
- mv $(INSTDIR)/tests/privatekeys/merge-1.pem $(INSTDIR)/tests/publickeys/
- (cd $(INSTDIR)/tests/privatekeys ; ../../../tools/create-key.sh merge-2)
- mv $(INSTDIR)/tests/privatekeys/merge-2.pem $(INSTDIR)/tests/publickeys/
- -test -x $(SOFTHSM) && $(SOFTHSM) --init-token --slot=0 --label=mylabel --so-pin=ffff --pin=ffff
- -test -x $(SOFTHSM) && $(SOFTHSM) --import $(INSTDIR)/tests/keys/logkey-private.pkcs8 --slot 0 --label mylabel --pin ffff --id 00
-
tests-start:
- @for node in $(ERLANGNODES); do \
- (cd $(INSTDIR)/tests ; ../bin/run_erl -daemon nodes/$$node/ nodes/$$node/log/ "exec ../bin/erl -config $$node") \
- 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 \
- if curl -s --cacert $(INSTDIR)/tests/httpsca/demoCA/cacert.pem -4 https://$$testurl > /dev/null ; then : ; else allstarted=0 ; notstarted="$$testurl $$notstarted" ; fi ; \
- : ; \
- done ; \
- if [ $$allstarted -eq 1 ]; then break ; \
- elif [ $$i -eq 10 ]; then echo Not started: $$notstarted ; fi ; \
- done
-
-tests-run:
- @(cd $(INSTDIR) && python ../tools/testcase1.py https://localhost:8080/ tests/keys/logkey.pem tests/httpsca/demoCA/cacert.pem) || (echo "Tests failed" ; false)
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem) || (echo "Check failed" ; false)
- @(cd $(INSTDIR) && python ../tools/fetchallcerts.py $(BASEURL) --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert1.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert2.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert3.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert4.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert5.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/pre1.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/pre2.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
- @(cd $(INSTDIR) && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem) || (echo "Check failed" ; false)
- @(cd $(INSTDIR) && mkdir tests/fetchcertstore)
- @(cd $(INSTDIR) && python ../tools/fetchallcerts.py $(BASEURL) --store tests/fetchcertstore --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR)/tests/fetchcertstore && unzip 0000.zip)
- @(cd $(INSTDIR) && python ../tools/comparecert.py ../tools/testcerts/cert1.txt tests/fetchcertstore/00000000) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR) && python ../tools/comparecert.py ../tools/testcerts/cert2.txt tests/fetchcertstore/00000001) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR) && python ../tools/comparecert.py ../tools/testcerts/cert3.txt tests/fetchcertstore/00000002) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR) && python ../tools/comparecert.py ../tools/testcerts/cert4.txt tests/fetchcertstore/00000003) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR) && python ../tools/comparecert.py ../tools/testcerts/cert5.txt tests/fetchcertstore/00000004) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR) && python ../tools/comparecert.py ../tools/testcerts/pre1.txt:../tools/testcerts/pre2.txt tests/fetchcertstore/00000005:tests/fetchcertstore/00000006) || (echo "Verification failed" ; false)
- @(cd $(INSTDIR)/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
-
- @$(PREFIX)/tools/to_catlfish.py to_erl $(INSTDIR)/tests/nodes/merge-2/ "init:stop()"
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert6.txt --check-sct --sct-file=submittedcerts $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @echo NOTE: merge backup should fail with 111 Connection refused
- @(cd $(INSTDIR) && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
- @(cd $(INSTDIR) && treesize=$$(../tools/loginfo.py --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg --treesize https://localhost:8080/) ; \
- test "$$treesize" = "7" || (echo "Tree size $$treesize != expected 7" ; false))
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
- @(cd $(INSTDIR)/tests && ../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 $(INSTDIR)/tests/httpsca/demoCA/cacert.pem -4 https://localhost:8181 > /dev/null ; then break; fi ; \
- done
- @(cd $(INSTDIR) && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
- @(cd $(INSTDIR) && treesize=$$(../tools/loginfo.py --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg --treesize https://localhost:8080/) ; \
- test "$$treesize" = "8" || (echo "Tree size $$treesize != expected 8" ; false))
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
-
-tests-run2:
- @(cd $(INSTDIR) ; python ../tools/verifysct.py --sct-file=submittedcerts --parallel 1 $(BASEURL) --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || echo "Verification of SCT:s failed"
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
- @(cd $(INSTDIR)/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
-
-tests-prepare-merge-takeover:
- @echo $@
- mv $(INSTDIR)/tests/mergedb $(INSTDIR)/tests/mergedb-down
- mv $(INSTDIR)/tests/mergedb-secondary $(INSTDIR)/tests/mergedb
- mkdir $(INSTDIR)/tests/mergedb-secondary
- touch $(INSTDIR)/tests/mergedb-secondary/logorder
- printf 0 > $(INSTDIR)/tests/mergedb-secondary/verifiedsize
-
-tests-run3:
- @echo $@
- @(cd $(INSTDIR) && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
- @(cd $(INSTDIR)/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert7.txt --check-sct --sct-file=submittedcerts-7 $(BASEURL) --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
- @(cd $(INSTDIR) && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
- @(cd $(INSTDIR) ; python ../tools/verifysct.py --sct-file=submittedcerts --parallel 1 $(BASEURL) --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || echo "Verification of SCT:s failed"
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
-
-
-tests-prepare-redistribute-frontend:
- @echo $@
- mv $(INSTDIR)/tests/machine/machine-1 $(INSTDIR)/tests/machine/machine-1-down && \
- mkdir -p $(INSTDIR)/tests/machine/machine-1/db && \
- touch $(INSTDIR)/tests/machine/machine-1/db/index && \
- touch $(INSTDIR)/tests/machine/machine-1/db/newentries ; \
-
-tests-run4:
- @echo $@
- @(cd $(INSTDIR) && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
- @(cd $(INSTDIR)/tests && ../../tools/check-sth.py $(BASEURL) --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
+ ./scripts/light-system-test-start.sh
tests-stop:
- @for node in $(NODES); do \
- $(PREFIX)/tools/to_catlfish.py to_erl $(INSTDIR)/tests/nodes/$$node/ "init:stop()"; \
- done
+ ./scripts/light-system-test-stop.sh
tests-wait:
sleep 5
tests-makemk:
$(PREFIX)/tools/compileconfig.py --config=$(PREFIX)/test/catlfish-test.cfg --testmakefile=$(PREFIX)/test/test.mk --machines 1
+ $(PREFIX)/tools/compileconfig.py --config=$(PREFIX)/test/catlfish-test.cfg --testshellvars=$(PREFIX)/test/test.shvars --machines 1
tests:
@make tests-makemk
- @make tests-prepare
- @make tests-start
- @make tests-run || (sleep 5; make tests-stop ; false)
- @make tests-wait
- @make tests-stop
- @make tests-wait
- @make tests-start
- @make tests-run2 || (sleep 5; make tests-stop ; false)
- @make tests-wait
- @make tests-stop
- @make tests-wait
- @make tests-prepare-merge-takeover
- @make tests-start
- @make tests-run3 || (sleep 5; make tests-stop ; false)
- @make tests-wait
- @make tests-stop
- @make tests-wait
- @make tests-prepare-redistribute-frontend
- @make tests-start
- @make tests-run4 || (sleep 5; make tests-stop ; false)
- @make tests-wait
- @make tests-stop
+ ./scripts/light-system-test.sh
tests-createca:
mkdir $(INSTDIR)/tests/httpsca
diff --git a/test/scripts/light-system-test-prepare-merge-takeover.sh b/test/scripts/light-system-test-prepare-merge-takeover.sh
new file mode 100755
index 0000000..c292c9b
--- /dev/null
+++ b/test/scripts/light-system-test-prepare-merge-takeover.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+mv ${INSTDIR}/tests/mergedb ${INSTDIR}/tests/mergedb-down
+mv ${INSTDIR}/tests/mergedb-secondary ${INSTDIR}/tests/mergedb
+mkdir ${INSTDIR}/tests/mergedb-secondary
+touch ${INSTDIR}/tests/mergedb-secondary/logorder
+printf 0 > ${INSTDIR}/tests/mergedb-secondary/verifiedsize
diff --git a/test/scripts/light-system-test-prepare-redistribute-frontend.sh b/test/scripts/light-system-test-prepare-redistribute-frontend.sh
new file mode 100755
index 0000000..2a98674
--- /dev/null
+++ b/test/scripts/light-system-test-prepare-redistribute-frontend.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+mv ${INSTDIR}/tests/machine/machine-1 ${INSTDIR}/tests/machine/machine-1-down
+mkdir -p ${INSTDIR}/tests/machine/machine-1/db
+touch ${INSTDIR}/tests/machine/machine-1/db/index
+touch ${INSTDIR}/tests/machine/machine-1/db/newentries
diff --git a/test/scripts/light-system-test-run-1.sh b/test/scripts/light-system-test-run-1.sh
new file mode 100755
index 0000000..246acc0
--- /dev/null
+++ b/test/scripts/light-system-test-run-1.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+(cd ${INSTDIR} && python ../tools/testcase1.py https://localhost:8080/ tests/keys/logkey.pem tests/httpsca/demoCA/cacert.pem) || (echo "Tests failed" ; false)
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem) || (echo "Check failed" ; false)
+(cd ${INSTDIR} && python ../tools/fetchallcerts.py ${BASEURL} --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || (echo "Verification failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert1.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert2.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert3.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert4.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert5.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/pre1.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/pre2.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
+(cd ${INSTDIR} && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem) || (echo "Check failed" ; false)
+(cd ${INSTDIR} && mkdir tests/fetchcertstore)
+(cd ${INSTDIR} && python ../tools/fetchallcerts.py ${BASEURL} --store tests/fetchcertstore --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || (echo "Verification failed" ; false)
+(cd ${INSTDIR}/tests/fetchcertstore && unzip 0000.zip)
+(cd ${INSTDIR} && python ../tools/comparecert.py ../tools/testcerts/cert1.txt tests/fetchcertstore/00000000) || (echo "Verification failed" ; false)
+(cd ${INSTDIR} && python ../tools/comparecert.py ../tools/testcerts/cert2.txt tests/fetchcertstore/00000001) || (echo "Verification failed" ; false)
+(cd ${INSTDIR} && python ../tools/comparecert.py ../tools/testcerts/cert3.txt tests/fetchcertstore/00000002) || (echo "Verification failed" ; false)
+(cd ${INSTDIR} && python ../tools/comparecert.py ../tools/testcerts/cert4.txt tests/fetchcertstore/00000003) || (echo "Verification failed" ; false)
+(cd ${INSTDIR} && python ../tools/comparecert.py ../tools/testcerts/cert5.txt tests/fetchcertstore/00000004) || (echo "Verification failed" ; false)
+(cd ${INSTDIR} && python ../tools/comparecert.py ../tools/testcerts/pre1.txt:../tools/testcerts/pre2.txt tests/fetchcertstore/00000005:tests/fetchcertstore/00000006) || (echo "Verification failed" ; false)
+(cd ${INSTDIR}/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
+
+${PREFIX}/tools/to_catlfish.py to_erl ${INSTDIR}/tests/nodes/merge-2/ "init:stop()"
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert6.txt --check-sct --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+echo NOTE: merge backup should fail with 111 Connection refused
+(cd ${INSTDIR} && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
+(cd ${INSTDIR} && treesize=$(../tools/loginfo.py --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg --treesize https://localhost:8080/) ; \
+ test "${treesize}" = "7" || (echo "Tree size ${treesize} != expected 7" ; false))
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
+(cd ${INSTDIR}/tests && ../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 ${INSTDIR}/tests/httpsca/demoCA/cacert.pem -4 https://localhost:8181 > /dev/null ; then break; fi
+done
+(cd ${INSTDIR} && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
+(cd ${INSTDIR} && treesize=$(../tools/loginfo.py --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg --treesize https://localhost:8080/) ; \
+ test "${treesize}" = "8" || (echo "Tree size ${treesize} != expected 8" ; false))
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
diff --git a/test/scripts/light-system-test-run-2.sh b/test/scripts/light-system-test-run-2.sh
new file mode 100755
index 0000000..204266f
--- /dev/null
+++ b/test/scripts/light-system-test-run-2.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+(cd ${INSTDIR} && python ../tools/verifysct.py --sct-file=tests/submittedcerts --parallel 1 ${BASEURL} --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || (echo "Verification of SCT:s failed" ; false)
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
+(cd ${INSTDIR}/tests && python ../../tools/storagegc.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-1.cfg) || (echo "GC failed" ; false)
diff --git a/test/scripts/light-system-test-run-3.sh b/test/scripts/light-system-test-run-3.sh
new file mode 100755
index 0000000..c0969e9
--- /dev/null
+++ b/test/scripts/light-system-test-run-3.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+(cd ${INSTDIR} && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
+(cd ${INSTDIR}/tests && python ../../tools/submitcert.py --parallel=1 --store ../../tools/testcerts/cert7.txt --check-sct --sct-file=submittedcerts-7 ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem) || (echo "Submission failed" ; false)
+(cd ${INSTDIR} && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false)
+(cd ${INSTDIR} ; python ../tools/verifysct.py --sct-file=tests/submittedcerts --parallel 1 ${BASEURL} --publickey=tests/keys/logkey.pem --cafile tests/httpsca/demoCA/cacert.pem) || (echo "Verification of SCT:s failed"; false)
+(cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem)
diff --git a/test/scripts/light-system-test-run-4.sh b/test/scripts/light-system-test-run-4.sh
new file mode 100755
index 0000000..e2c9c3a
--- /dev/null
+++ b/test/scripts/light-system-test-run-4.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+cd ${INSTDIR} && ../tools/merge --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg || (echo "Merge failed" ; false)
+cd ${INSTDIR}/tests && ../../tools/check-sth.py ${BASEURL} --publickey=keys/logkey.pem --cur-sth=stored-sth --cafile httpsca/demoCA/cacert.pem
diff --git a/test/scripts/light-system-test-start.sh b/test/scripts/light-system-test-start.sh
new file mode 100755
index 0000000..38c50fc
--- /dev/null
+++ b/test/scripts/light-system-test-start.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+for node in ${ERLANGNODES}; do
+ (cd ${INSTDIR}/tests ; ../bin/run_erl -daemon nodes/${node}/ nodes/${node}/log/ "exec ../bin/erl -config ${node}")
+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
+ if curl -s --cacert ${INSTDIR}/tests/httpsca/demoCA/cacert.pem -4 https://${testurl} > /dev/null ; then
+ :
+ else
+ allstarted=0
+ notstarted="${testurl} ${notstarted}"
+ fi
+ :
+ done
+ if [ ${allstarted} -eq 1 ]; then
+ break
+ elif [ ${i} -eq 10 ]; then
+ echo Not started: ${notstarted}
+ fi
+done
diff --git a/test/scripts/light-system-test-stop.sh b/test/scripts/light-system-test-stop.sh
new file mode 100755
index 0000000..8f3447f
--- /dev/null
+++ b/test/scripts/light-system-test-stop.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+for node in ${ERLANGNODES}; do
+ ${PREFIX}/tools/to_catlfish.py to_erl ${INSTDIR}/tests/nodes/${node}/ "init:stop()"
+done
diff --git a/test/scripts/light-system-test.sh b/test/scripts/light-system-test.sh
new file mode 100755
index 0000000..7dd9fcf
--- /dev/null
+++ b/test/scripts/light-system-test.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+SOFTHSM=/usr/local/bin/softhsm2-util
+INSTDIR=../catlfish
+PREFIX=..
+
+. test.shvars
+
+tests_prepare() {
+ rm -r ${INSTDIR}/tests || true
+ mkdir ${INSTDIR}/tests
+ make tests-createca
+ make tests-createcert
+ mkdir ${INSTDIR}/tests/keys
+ (cd ${INSTDIR}/tests/keys ; ../../../tools/create-key.sh logkey)
+ openssl pkcs8 -topk8 -nocrypt -in ${INSTDIR}/tests/keys/logkey-private.pem -out ${INSTDIR}/tests/keys/logkey-private.pkcs8
+ mkdir ${INSTDIR}/tests/mergedb
+ touch ${INSTDIR}/tests/mergedb/logorder
+ mkdir ${INSTDIR}/tests/mergedb-secondary
+ touch ${INSTDIR}/tests/mergedb-secondary/logorder
+ printf 0 > ${INSTDIR}/tests/mergedb-secondary/verifiedsize
+ mkdir ${INSTDIR}/tests/known_roots
+ cp ../tools/testcerts/roots/* ${INSTDIR}/tests/known_roots
+ for machine in ${MACHINES}; do \
+ (cd ${INSTDIR}/tests; ../../tools/compileconfig.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-${machine}.cfg) && \
+ mkdir -p ${INSTDIR}/tests/machine/machine-${machine}/db && \
+ touch ${INSTDIR}/tests/machine/machine-${machine}/db/index && touch ${INSTDIR}/tests/machine/machine-${machine}/db/newentries
+ done
+ (cd ${INSTDIR}/tests; ../../tools/compileconfig.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-merge-2.cfg)
+ (cd ${INSTDIR}/tests; ../../tools/compileconfig.py --config ../../test/catlfish-test.cfg --localconfig ../../test/catlfish-test-local-signing.cfg)
+ mkdir ${INSTDIR}/tests/privatekeys
+ mkdir ${INSTDIR}/tests/publickeys
+ for node in ${NODES}; do \
+ (cd ${INSTDIR}/tests/privatekeys ; ../../../tools/create-key.sh ${node}) ; \
+ mv ${INSTDIR}/tests/privatekeys/${node}.pem ${INSTDIR}/tests/publickeys/ ; \
+ mkdir -p ${INSTDIR}/tests/nodes/${node}/log
+ done
+ (cd ${INSTDIR}/tests/privatekeys ; ../../../tools/create-key.sh merge-1)
+ mv ${INSTDIR}/tests/privatekeys/merge-1.pem ${INSTDIR}/tests/publickeys/
+ (cd ${INSTDIR}/tests/privatekeys ; ../../../tools/create-key.sh merge-2)
+ mv ${INSTDIR}/tests/privatekeys/merge-2.pem ${INSTDIR}/tests/publickeys/
+ test -x ${SOFTHSM} && ${SOFTHSM} --init-token --slot=0 --label=mylabel --so-pin=ffff --pin=ffff || true
+ test -x ${SOFTHSM} && ${SOFTHSM} --import ${INSTDIR}/tests/keys/logkey-private.pkcs8 --slot 0 --label mylabel --pin ffff --id 00 || true
+}
+
+tests_stop() {
+ ${PREFIX}/test/scripts/light-system-test-stop.sh
+}
+
+
+tests_prepare
+${PREFIX}/test/scripts/light-system-test-start.sh
+${PREFIX}/test/scripts/light-system-test-run-1.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+sleep 5
+tests_stop
+sleep 5
+${PREFIX}/test/scripts/light-system-test-start.sh
+${PREFIX}/test/scripts/light-system-test-run-2.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+sleep 5
+tests_stop
+sleep 5
+${PREFIX}/test/scripts/light-system-test-prepare-merge-takeover.sh
+${PREFIX}/test/scripts/light-system-test-start.sh
+${PREFIX}/test/scripts/light-system-test-run-3.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+sleep 5
+tests_stop
+sleep 5
+${PREFIX}/test/scripts/light-system-test-prepare-redistribute-frontend.sh
+${PREFIX}/test/scripts/light-system-test-start.sh
+${PREFIX}/test/scripts/light-system-test-run-4.sh || (echo "Tests failed"; sleep 5; tests_stop; false)
+sleep 5
+tests_stop