diff options
author | Magnus Ahltorp <map@kth.se> | 2016-10-05 10:06:16 +0200 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2016-10-05 10:06:16 +0200 |
commit | 83f6bea56508cd7afe9975aff79880f252371455 (patch) | |
tree | d385ed3cb38cc4a648085f401972896bc3051f5f | |
parent | de5a2c656e7b75b44a39e2f3865c078a4937c338 (diff) |
Move tests to shell scriptslarge-tests
-rw-r--r-- | test/Makefile | 160 | ||||
-rwxr-xr-x | test/scripts/light-system-test-prepare-merge-takeover.sh | 16 | ||||
-rwxr-xr-x | test/scripts/light-system-test-prepare-redistribute-frontend.sh | 15 | ||||
-rwxr-xr-x | test/scripts/light-system-test-run-1.sh | 53 | ||||
-rwxr-xr-x | test/scripts/light-system-test-run-2.sh | 14 | ||||
-rwxr-xr-x | test/scripts/light-system-test-run-3.sh | 17 | ||||
-rwxr-xr-x | test/scripts/light-system-test-run-4.sh | 13 | ||||
-rwxr-xr-x | test/scripts/light-system-test-start.sh | 33 | ||||
-rwxr-xr-x | test/scripts/light-system-test-stop.sh | 13 | ||||
-rwxr-xr-x | test/scripts/light-system-test.sh | 75 | ||||
-rwxr-xr-x | tools/compileconfig.py | 17 |
11 files changed, 264 insertions, 162 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 diff --git a/tools/compileconfig.py b/tools/compileconfig.py index 9acc702..cee9873 100755 --- a/tools/compileconfig.py +++ b/tools/compileconfig.py @@ -354,7 +354,7 @@ def gen_config(nodename, config, localconfig): configfile.close() -def gen_testmakefile(config, testmakefile, machines): +def gen_testmakefile(config, testmakefile, machines, shellvars=False): configfile = open(testmakefile, "w") frontendnodenames = set([node["name"] for node in config["frontendnodes"]]) storagenodenames = set([node["name"] for node in config["storagenodes"]]) @@ -368,11 +368,13 @@ def gen_testmakefile(config, testmakefile, machines): signingnodeaddresses = [node["address"] for node in config["signingnodes"]] mergenodeaddresses = [node["address"] for node in config["mergenodes"] if node["name"] != config["primarymergenode"]] - print >>configfile, "NODES=" + " ".join(frontendnodenames|storagenodenames|signingnodenames|mergenodenames) - print >>configfile, "ERLANGNODES=" + " ".join(erlangnodenames) - print >>configfile, "MACHINES=" + " ".join([str(e) for e in range(1, machines+1)]) - print >>configfile, "TESTURLS=" + " ".join(frontendnodeaddresses+storagenodeaddresses+signingnodeaddresses+mergenodeaddresses) - print >>configfile, "BASEURL=" + config["baseurl"] + delimiter = '"' if shellvars else '' + + print >>configfile, "NODES=" + delimiter + " ".join(frontendnodenames|storagenodenames|signingnodenames|mergenodenames) + delimiter + print >>configfile, "ERLANGNODES=" + delimiter + " ".join(erlangnodenames) + delimiter + print >>configfile, "MACHINES=" + delimiter + " ".join([str(e) for e in range(1, machines+1)]) + delimiter + print >>configfile, "TESTURLS=" + delimiter + " ".join(frontendnodeaddresses+storagenodeaddresses+signingnodeaddresses+mergenodeaddresses) + delimiter + print >>configfile, "BASEURL=" + delimiter + config["baseurl"] + delimiter configfile.close() @@ -382,12 +384,15 @@ def main(): parser.add_argument('--config', help="System configuration", required=True) parser.add_argument('--localconfig', help="Local configuration") parser.add_argument("--testmakefile", metavar="file", help="Generate makefile variables for test") + parser.add_argument("--testshellvars", metavar="file", help="Generate shell variable file for test") parser.add_argument("--machines", type=int, metavar="n", help="Number of machines") args = parser.parse_args() config = yaml.load(open(args.config)) if args.testmakefile and args.machines: gen_testmakefile(config, args.testmakefile, args.machines) + elif args.testshellvars and args.machines: + gen_testmakefile(config, args.testshellvars, args.machines, shellvars=True) elif args.localconfig: localconfig = yaml.load(open(args.localconfig)) localnodes = localconfig["localnodes"] |