From 7478424e577cc3f8660cdc0e4bc377380a7398fa Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sun, 24 Feb 2019 10:28:55 +0100 Subject: [PATCH 01/15] add targets 'quicker' these don't run dfinity tests but in turn now target 'quick' runs all dfinity dvm tests in parallel --- src/Makefile | 6 +++++- test/Makefile | 6 ++++-- test/dvm-db.sh | 25 +++++++++++++++++++++++++ test/dvm.sh | 2 +- test/run-dfinity/Makefile | 1 + test/run.sh | 21 ++++++++++++++++++--- 6 files changed, 54 insertions(+), 7 deletions(-) create mode 100755 test/dvm-db.sh diff --git a/src/Makefile b/src/Makefile index fd811340b00..c1b1f0e95bb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,11 +21,12 @@ OCAMLBUILD = ocamlbuild $(OCAML_FLAGS) \ $(OPAM_PACKAGES:%=-pkg %) \ -tags debug -.PHONY: all quick clean test test-quick +.PHONY: all quick clean test test-quick test-quicker all: $(NAME) test quick: $(NAME) test-quick +quicker: $(NAME) test-quicker $(NAME): $(MAIN).$(BUILD) mv $< $@ @@ -57,3 +58,6 @@ accept: $(NAME) test-quick: $(NAME) $(MAKE) -C ../test ASC=$(ASC) quick + +test-quicker: $(NAME) + $(MAKE) -C ../test ASC=$(ASC) quicker diff --git a/test/Makefile b/test/Makefile index 19b6c2eec37..96f1cf6addc 100644 --- a/test/Makefile +++ b/test/Makefile @@ -3,10 +3,12 @@ all: $(MAKE) -C run $(MAKE) -C run-dfinity -quick: +quicker: $(MAKE) --no-print-directory --load-average -j -C fail quick $(MAKE) --no-print-directory --load-average -j -C run quick - $(MAKE) --no-print-directory --load-average -j -C run-dfinity _out/chatpp.done + +quick: quicker + $(MAKE) --no-print-directory --load-average -j -C run-dfinity quick coverage: rm -rf _coverage diff --git a/test/dvm-db.sh b/test/dvm-db.sh new file mode 100755 index 00000000000..cfea133453c --- /dev/null +++ b/test/dvm-db.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +if [ -z "$1" -o -z "$2" ] +then + echo "Usage: $0 .wasm" + exit 1 +fi + +name="$(basename $2 .wasm)_0" + +export LANG=C +function dvm_ () { + # echo "\$ dvm $@" + + # hide the segmentation fault message + # hide leaked debug log + { dvm $@; } 2>&1 \ + | perl -pe 's,.*egmentation.*,Segmentation Fault,' \ + | perl -pe 's/Leaked.*!\n//m' \ + +} + +dvm_ -q --db $1 reset +dvm_ -q --db $1 new $2 +dvm_ -q --db $1 run $name start diff --git a/test/dvm.sh b/test/dvm.sh index 5ced2e91b6f..3e5420cd096 100755 --- a/test/dvm.sh +++ b/test/dvm.sh @@ -2,7 +2,7 @@ if [ -z "$1" ] then - echo "Usage: $0 foo.wasm" + echo "Usage: $0 .wasm" exit 1 fi diff --git a/test/run-dfinity/Makefile b/test/run-dfinity/Makefile index 356eab76f18..ea0f7bab3a7 100644 --- a/test/run-dfinity/Makefile +++ b/test/run-dfinity/Makefile @@ -9,4 +9,5 @@ accept: clean: rm -rf _out +_out/%.done: RUNFLAGS += -t include ../*.mk diff --git a/test/run.sh b/test/run.sh index 8a0367fabf1..7737386b0b2 100755 --- a/test/run.sh +++ b/test/run.sh @@ -8,9 +8,11 @@ # # -a: Update the files in ok/ # -d: Compile with --dfinity, use dvm to run +# -s: Be silent in sunny-day execution +# -t: Use individual temporary folder for dvm run # -realpath() { +function realpath() { [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}" } @@ -21,9 +23,11 @@ EXTRA_ASC_FLAGS= ASC=${ASC:-$(realpath $(dirname $0)/../src/asc)} WASM=${WASM:-wasm} DVM_WRAPPER=$(realpath $(dirname $0)/dvm.sh) +DVM_TMP=$TMP/dvm +DVM_EXTRA=true ECHO=echo -while getopts "ads" o; do +while getopts "adst" o; do case "${o}" in a) ACCEPT=yes @@ -35,6 +39,10 @@ while getopts "ads" o; do s) ECHO=true ;; + t) + DVM_EXTRA=make_tmpdir + DVM_WRAPPER=$(realpath $(dirname $0)/dvm-db.sh) + ;; esac done @@ -42,6 +50,13 @@ shift $((OPTIND-1)) failures=no +function make_tmpdir() { + tmpdir=$DVM_TMP/$(echo $(basename $1) | cut -f 1 -d '.') + rm -rf $tmpdir + mkdir $tmpdir + echo $tmpdir +} + for file in "$@"; do if ! [ -r $file ] @@ -118,7 +133,7 @@ do if [ $DFINITY = 'yes' ] then $ECHO -n " [dvm]" - $DVM_WRAPPER $out/$base.wasm > $out/$base.dvm-run 2>&1 + $DVM_WRAPPER $($DVM_EXTRA $file) $out/$base.wasm > $out/$base.dvm-run 2>&1 diff_files="$diff_files $base.dvm-run" else $ECHO -n " [wasm-run]" From 4999208bcd4017803dd971faa20707fa9768c895 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sun, 24 Feb 2019 11:31:45 +0100 Subject: [PATCH 02/15] tweak --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index c1b1f0e95bb..d1dff930f78 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,7 +21,7 @@ OCAMLBUILD = ocamlbuild $(OCAML_FLAGS) \ $(OPAM_PACKAGES:%=-pkg %) \ -tags debug -.PHONY: all quick clean test test-quick test-quicker +.PHONY: all quick quicker clean test test-quick test-quicker all: $(NAME) test From bc6018fed97943b4ec5bb1ad78779a8914127591 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Wed, 27 Feb 2019 15:02:24 +0100 Subject: [PATCH 03/15] review feedback there is now 'parallel' which runs all the tests in parallel, and 'quick' which does the same, but without the dfinity tests. Moved tmpdir-related logic into `dvm.sh`. --- src/Makefile | 10 +++++----- test/Makefile | 4 ++-- test/dvm-db.sh | 25 ------------------------- test/dvm.sh | 10 +++++++--- test/run-dfinity/Makefile | 1 - test/run.sh | 18 ++---------------- 6 files changed, 16 insertions(+), 52 deletions(-) delete mode 100755 test/dvm-db.sh diff --git a/src/Makefile b/src/Makefile index d1dff930f78..57286cf567e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,12 +21,12 @@ OCAMLBUILD = ocamlbuild $(OCAML_FLAGS) \ $(OPAM_PACKAGES:%=-pkg %) \ -tags debug -.PHONY: all quick quicker clean test test-quick test-quicker +.PHONY: all parallel quick clean test test-parallel test-quick all: $(NAME) test +parallel: $(NAME) test-parallel quick: $(NAME) test-quick -quicker: $(NAME) test-quicker $(NAME): $(MAIN).$(BUILD) mv $< $@ @@ -56,8 +56,8 @@ test: $(NAME) accept: $(NAME) $(MAKE) -C ../test ASC=$(ASC) accept +test-parallel: $(NAME) + $(MAKE) -C ../test ASC=$(ASC) parallel + test-quick: $(NAME) $(MAKE) -C ../test ASC=$(ASC) quick - -test-quicker: $(NAME) - $(MAKE) -C ../test ASC=$(ASC) quicker diff --git a/test/Makefile b/test/Makefile index 96f1cf6addc..3163c044c2f 100644 --- a/test/Makefile +++ b/test/Makefile @@ -3,11 +3,11 @@ all: $(MAKE) -C run $(MAKE) -C run-dfinity -quicker: +quick: $(MAKE) --no-print-directory --load-average -j -C fail quick $(MAKE) --no-print-directory --load-average -j -C run quick -quick: quicker +parallel: quick $(MAKE) --no-print-directory --load-average -j -C run-dfinity quick coverage: diff --git a/test/dvm-db.sh b/test/dvm-db.sh deleted file mode 100755 index cfea133453c..00000000000 --- a/test/dvm-db.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -if [ -z "$1" -o -z "$2" ] -then - echo "Usage: $0 .wasm" - exit 1 -fi - -name="$(basename $2 .wasm)_0" - -export LANG=C -function dvm_ () { - # echo "\$ dvm $@" - - # hide the segmentation fault message - # hide leaked debug log - { dvm $@; } 2>&1 \ - | perl -pe 's,.*egmentation.*,Segmentation Fault,' \ - | perl -pe 's/Leaked.*!\n//m' \ - -} - -dvm_ -q --db $1 reset -dvm_ -q --db $1 new $2 -dvm_ -q --db $1 run $name start diff --git a/test/dvm.sh b/test/dvm.sh index 3e5420cd096..8d12e38b3d4 100755 --- a/test/dvm.sh +++ b/test/dvm.sh @@ -7,6 +7,10 @@ then fi name="$(basename $1 .wasm)_0" +DVM_TMP="$TMP/dvm/$name" + +rm -rf $DVM_TMP +mkdir $DVM_TMP export LANG=C function dvm_ () { @@ -20,6 +24,6 @@ function dvm_ () { } -dvm_ -q reset -dvm_ -q new $1 -dvm_ -q run $name start +dvm_ -q --db $DVM_TMP reset +dvm_ -q --db $DVM_TMP new $1 +dvm_ -q --db $DVM_TMP run $name start diff --git a/test/run-dfinity/Makefile b/test/run-dfinity/Makefile index ea0f7bab3a7..356eab76f18 100644 --- a/test/run-dfinity/Makefile +++ b/test/run-dfinity/Makefile @@ -9,5 +9,4 @@ accept: clean: rm -rf _out -_out/%.done: RUNFLAGS += -t include ../*.mk diff --git a/test/run.sh b/test/run.sh index 7737386b0b2..38fa27d476b 100755 --- a/test/run.sh +++ b/test/run.sh @@ -9,7 +9,6 @@ # -a: Update the files in ok/ # -d: Compile with --dfinity, use dvm to run # -s: Be silent in sunny-day execution -# -t: Use individual temporary folder for dvm run # function realpath() { @@ -23,11 +22,9 @@ EXTRA_ASC_FLAGS= ASC=${ASC:-$(realpath $(dirname $0)/../src/asc)} WASM=${WASM:-wasm} DVM_WRAPPER=$(realpath $(dirname $0)/dvm.sh) -DVM_TMP=$TMP/dvm -DVM_EXTRA=true ECHO=echo -while getopts "adst" o; do +while getopts "ads" o; do case "${o}" in a) ACCEPT=yes @@ -39,10 +36,6 @@ while getopts "adst" o; do s) ECHO=true ;; - t) - DVM_EXTRA=make_tmpdir - DVM_WRAPPER=$(realpath $(dirname $0)/dvm-db.sh) - ;; esac done @@ -50,13 +43,6 @@ shift $((OPTIND-1)) failures=no -function make_tmpdir() { - tmpdir=$DVM_TMP/$(echo $(basename $1) | cut -f 1 -d '.') - rm -rf $tmpdir - mkdir $tmpdir - echo $tmpdir -} - for file in "$@"; do if ! [ -r $file ] @@ -133,7 +119,7 @@ do if [ $DFINITY = 'yes' ] then $ECHO -n " [dvm]" - $DVM_WRAPPER $($DVM_EXTRA $file) $out/$base.wasm > $out/$base.dvm-run 2>&1 + $DVM_WRAPPER $out/$base.wasm > $out/$base.dvm-run 2>&1 diff_files="$diff_files $base.dvm-run" else $ECHO -n " [wasm-run]" From 2a14343dde9711b665c18e57bee69ac1988eaf61 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Wed, 27 Feb 2019 15:15:13 +0100 Subject: [PATCH 04/15] review feedback run parallel tests from nix too --- default.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/default.nix b/default.nix index 0a4f8b7e7cf..60dd744a003 100644 --- a/default.nix +++ b/default.nix @@ -113,11 +113,10 @@ rec { patchShebangs . asc --version make -C samples ASC=asc all - make -C test/run VERBOSE=1 ASC=asc all - make -C test/fail VERBOSE=1 ASC=asc all + make -C test VERBOSE=1 ASC=asc quick '' + (if test-dvm then '' - make -C test/run-dfinity VERBOSE=1 ASC=asc all + make -C test VERBOSE=1 ASC=asc parallel '' else ""); installPhase = '' From 1308bad79c7de923677a34347fb162fad9825cf1 Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Wed, 27 Feb 2019 17:00:32 +0100 Subject: [PATCH 05/15] Make $(ASC) dependency of _out/%.done optional So that one can run make test ASC=asc where `asc` is on the PATH. --- test/quick.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/quick.mk b/test/quick.mk index 274061b9433..6c2efe00a24 100644 --- a/test/quick.mk +++ b/test/quick.mk @@ -5,6 +5,7 @@ TO-TEST = $(patsubst %.as,_out/%.done,$(wildcard *.as)) quick: $(TO-TEST) # run single test, e.g. make _out/AST-56.done -_out/%.done: %.as $(ASC) ../run.sh +.SECONDEXPANSION: +_out/%.done: %.as $$(wildcard $(ASC)) ../run.sh @ mkdir -p _out @ (../run.sh $(RUNFLAGS) $< > $@.tmp && mv $@.tmp $@) || (cat $@.tmp; rm -f $@.tmp; false) From bd2e7a9fa0451a1019d8b4e8dd6090baca03fbfb Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Wed, 27 Feb 2019 17:02:17 +0100 Subject: [PATCH 06/15] Use `mkdir -p` --- test/dvm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dvm.sh b/test/dvm.sh index 8d12e38b3d4..f5b006aa959 100755 --- a/test/dvm.sh +++ b/test/dvm.sh @@ -10,7 +10,7 @@ name="$(basename $1 .wasm)_0" DVM_TMP="$TMP/dvm/$name" rm -rf $DVM_TMP -mkdir $DVM_TMP +mkdir -p $DVM_TMP export LANG=C function dvm_ () { From e622174259fb00b1a3e4b6df0d88968b3f54fcaa Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Thu, 28 Feb 2019 21:12:10 +0100 Subject: [PATCH 07/15] use order-only prereq for _out --- test/quick.mk | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/quick.mk b/test/quick.mk index 6c2efe00a24..73fc6def5a0 100644 --- a/test/quick.mk +++ b/test/quick.mk @@ -2,10 +2,14 @@ TO-TEST = $(patsubst %.as,_out/%.done,$(wildcard *.as)) +.PHONY: quick + quick: $(TO-TEST) +_out: + @ mkdir -p $@ + # run single test, e.g. make _out/AST-56.done .SECONDEXPANSION: -_out/%.done: %.as $$(wildcard $(ASC)) ../run.sh - @ mkdir -p _out +_out/%.done: %.as $$(wildcard $(ASC)) ../run.sh | _out @ (../run.sh $(RUNFLAGS) $< > $@.tmp && mv $@.tmp $@) || (cat $@.tmp; rm -f $@.tmp; false) From b7323fcffa060d3f021011a7a31fd44b2d9baff3 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Thu, 28 Feb 2019 21:17:29 +0100 Subject: [PATCH 08/15] cheap cleanup --- test/dvm.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/dvm.sh b/test/dvm.sh index f5b006aa959..1fd37ecfd2c 100755 --- a/test/dvm.sh +++ b/test/dvm.sh @@ -27,3 +27,6 @@ function dvm_ () { dvm_ -q --db $DVM_TMP reset dvm_ -q --db $DVM_TMP new $1 dvm_ -q --db $DVM_TMP run $name start + +# cleanup +rm -rf $DVM_TMP From 09e7162f9ae258fb8fc616f4f6d0205105add5fb Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Thu, 28 Feb 2019 22:43:29 +0100 Subject: [PATCH 09/15] use mktemp to create and trap to clean up --- test/dvm.sh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/test/dvm.sh b/test/dvm.sh index 1fd37ecfd2c..3af0e0e5468 100755 --- a/test/dvm.sh +++ b/test/dvm.sh @@ -7,10 +7,8 @@ then fi name="$(basename $1 .wasm)_0" -DVM_TMP="$TMP/dvm/$name" - -rm -rf $DVM_TMP -mkdir -p $DVM_TMP +DVM_TMP=$(mktemp -d) +trap 'rm -rf $DVM_TMP' EXIT export LANG=C function dvm_ () { @@ -27,6 +25,3 @@ function dvm_ () { dvm_ -q --db $DVM_TMP reset dvm_ -q --db $DVM_TMP new $1 dvm_ -q --db $DVM_TMP run $name start - -# cleanup -rm -rf $DVM_TMP From b7eec0345ae0a0e373024dd471bec5eed258995c Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 9 Mar 2019 00:49:22 +0100 Subject: [PATCH 10/15] update output --- test/run-dfinity/ok/flatten-awaitables.dvm-run.ok | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/run-dfinity/ok/flatten-awaitables.dvm-run.ok b/test/run-dfinity/ok/flatten-awaitables.dvm-run.ok index b9d940dfe06..84cb71c9839 100644 --- a/test/run-dfinity/ok/flatten-awaitables.dvm-run.ok +++ b/test/run-dfinity/ok/flatten-awaitables.dvm-run.ok @@ -4,4 +4,4 @@ # Empty MaybeLocal. # -dvm.sh: line 12: Illegal instruction dvm $@ +dvm.sh: line 14: Illegal instruction dvm $@ From 59a976855dfdd25f20f19685afa03ae76566194f Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 9 Mar 2019 16:37:13 +0100 Subject: [PATCH 11/15] test an idea --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 4bd92940e8f..58c269f9a34 100644 --- a/default.nix +++ b/default.nix @@ -117,7 +117,7 @@ rec { make -C test VERBOSE=1 ASC=asc quick '' + (if test-dvm then '' - make -C test VERBOSE=1 ASC=asc parallel + make -C test/run-dfinity VERBOSE=1 ASC=asc quick '' else ""); installPhase = '' From 645e51bb5f1018d80553262032190117a146e9d9 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 9 Mar 2019 16:44:47 +0100 Subject: [PATCH 12/15] run run-dfinity in parallel --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 58c269f9a34..6e21fab62c1 100644 --- a/default.nix +++ b/default.nix @@ -117,7 +117,7 @@ rec { make -C test VERBOSE=1 ASC=asc quick '' + (if test-dvm then '' - make -C test/run-dfinity VERBOSE=1 ASC=asc quick + make --load-average -j -C test/run-dfinity VERBOSE=1 ASC=asc quick '' else ""); installPhase = '' From 16551b6b4ad9eb8801e8fa5cfd9e9652a2fbdee7 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 9 Mar 2019 16:49:41 +0100 Subject: [PATCH 13/15] just 2 jobs --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 6e21fab62c1..2f52f894e1e 100644 --- a/default.nix +++ b/default.nix @@ -117,7 +117,7 @@ rec { make -C test VERBOSE=1 ASC=asc quick '' + (if test-dvm then '' - make --load-average -j -C test/run-dfinity VERBOSE=1 ASC=asc quick + make --load-average -j2 -C test/run-dfinity VERBOSE=1 ASC=asc quick '' else ""); installPhase = '' From 26158f4af179a82ff8078617b2e115543cc4f499 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 9 Mar 2019 16:53:18 +0100 Subject: [PATCH 14/15] test 4 jobs --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 2f52f894e1e..3363f908a41 100644 --- a/default.nix +++ b/default.nix @@ -117,7 +117,7 @@ rec { make -C test VERBOSE=1 ASC=asc quick '' + (if test-dvm then '' - make --load-average -j2 -C test/run-dfinity VERBOSE=1 ASC=asc quick + make --load-average -j4 -C test/run-dfinity VERBOSE=1 ASC=asc quick '' else ""); installPhase = '' From 96b5707965cb2368713c3ed1e023ee0ec28ac2cc Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 9 Mar 2019 16:55:34 +0100 Subject: [PATCH 15/15] try 8 jobs --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 3363f908a41..c843d6a9560 100644 --- a/default.nix +++ b/default.nix @@ -117,7 +117,7 @@ rec { make -C test VERBOSE=1 ASC=asc quick '' + (if test-dvm then '' - make --load-average -j4 -C test/run-dfinity VERBOSE=1 ASC=asc quick + make --load-average -j8 -C test/run-dfinity VERBOSE=1 ASC=asc quick '' else ""); installPhase = ''