commit 0d479abebe09253e8fbc24a5d16a57ee636a7e19
parent bf541343ecc270e0e24ce7f7807a8f67da83dad3
Author: Richard Ipsum <richardipsum@fastmail.co.uk>
Date: Sun, 2 Apr 2017 13:34:28 +0100
Add some cli regression tests
Also move the tests from a directory named 'yarn' to a directory named 'test'.
Diffstat:
8 files changed, 133 insertions(+), 82 deletions(-)
diff --git a/check b/check
@@ -3,10 +3,11 @@
set -e
set -u
+# psst: --snapshot is your friend if you're debugging the tests
+
run_yarn_suite() {
- PATH="$(realpath $(dirname check)):$PATH" yarn yarns/sparsemap.yarn \
- yarns/implementations.yarn --stop-on-first-fail -s yarns/shell_lib \
- --snapshot --shell='/bin/bash' "$@"
+ PATH="$(realpath $(dirname check)):$PATH" yarn tests/*.yarn \
+ --stop-on-first-fail -s tests/shell_lib --shell='/bin/bash' "$@"
}
run_yarn_suite "$@"
diff --git a/tests/implementations.yarn b/tests/implementations.yarn
@@ -0,0 +1,28 @@
+ IMPLEMENTS GIVEN a sparse file (\S+) with a hole size (\d+) and data size (\d+) with spec ([a-zA-z,]+)
+ set -e -o pipefail
+ echo "$MATCH_4" | mksparse "$DATADIR/$MATCH_1" --hole-size "$MATCH_2" --data-size "$MATCH_3"
+
+ IMPLEMENTS WHEN we run sparsemap on (\w+)
+ run_sparsemap "$DATADIR/$MATCH_1"
+
+ IMPLEMENTS WHEN we attempt to run (\w+) without any arguments
+ set +e
+ eval run_$MATCH_1
+ echo $? > "$DATADIR/EXITCODE"
+ set -e
+
+ IMPLEMENTS WHEN we attempt to run (\w+) (?:on|with) (.+)
+ set +e
+ eval run_$MATCH_1 "$DATADIR/$MATCH_2"
+ echo $? > "$DATADIR/EXITCODE"
+ set -e
+
+ IMPLEMENTS THEN the exit code is (\d+)
+ exit_code=$(cat "$DATADIR/EXITCODE")
+ [[ $exit_code -eq $MATCH_1 ]]
+
+ IMPLEMENTS THEN stderr contains '(.+)'
+ grep -i "$MATCH_1" "$DATADIR/STDERR"
+
+ IMPLEMENTS THEN stdout contains exactly (.+)
+ diff -u <(echo -e "$MATCH_1") "$DATADIR/STDOUT"
diff --git a/tests/mksparse.yarn b/tests/mksparse.yarn
@@ -0,0 +1,17 @@
+mksparse tests
+==============
+
+mksparse is mostly tested by the sparsemap tests, but these yarns
+will just make sure that basic command line handling is working.
+
+ SCENARIO error if no output file
+ WHEN we attempt to run mksparse without any arguments
+ THEN the exit code is 2
+
+ SCENARIO error if more than one output file
+ WHEN we attempt to run mksparse with S T
+ THEN the exit code is 2
+
+ SCENARIO error if bad options
+ WHEN we attempt to run mksparse with --explode-kittens S
+ THEN the exit code is 2
diff --git a/tests/shell_lib b/tests/shell_lib
@@ -0,0 +1,9 @@
+set -e -u -o pipefail
+
+run_sparsemap() {
+ sparsemap $@ > "$DATADIR/STDOUT"
+}
+
+run_mksparse() {
+ mksparse $@ > "$DATADIR/STDOUT"
+}
diff --git a/tests/sparsemap.yarn b/tests/sparsemap.yarn
@@ -0,0 +1,75 @@
+sparsemap tests
+===============
+
+Please note that these tests will depend very much on the file
+system, it is up to the file system to decide how many zeroes
+are required before it decides to represent the hole as an actual
+hole rather than just a run of zeroes.
+
+At time of writing (2017) these tests pass on ext4,
+where the default block size is 4096 bytes.
+
+ SCENARIO sparsemap single data followed by single hole
+ GIVEN a sparse file S with a hole size 4096 and data size 8192 with spec data,hole
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 8192\nHOLE 4096
+
+ SCENARIO sparsemap single hole followed by single data
+ GIVEN a sparse file S with a hole size 4096 and data size 8192 with spec hole,data
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly HOLE 4096\nDATA 8192
+
+ SCENARIO sparsemap hole followed by data followed by hole
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec hole,data,hole
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly HOLE 8192\nDATA 4096\nHOLE 8192
+
+ SCENARIO tiny hole can look like data
+ GIVEN a sparse file S with a hole size 6 and data size 4096 with spec hole,data,hole
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 4108
+
+ SCENARIO sparsemap data followed by hole followed by data
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data,hole,data
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 4096\nHOLE 8192\nDATA 4096
+
+ SCENARIO sparsemap sequence of holes
+ GIVEN a sparse file S with a hole size 4096 and data size 8192 with spec data,hole,hole,data
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 8192\nHOLE 8192\nDATA 8192
+
+ SCENARIO sparsemap sequence of holes (ending with hole)
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data,hole,hole,hole
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 4096\nHOLE 24576
+
+ SCENARIO sparsemap file with only data
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 4096
+
+ SCENARIO sparsemap file with only hole
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec hole
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly HOLE 8192
+
+ SCENARIO sparsemap file with data,hole,data,hole,data
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data,hole,data,hole,data
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly DATA 4096\nHOLE 8192\nDATA 4096\nHOLE 8192\nDATA 4096
+
+ SCENARIO sparsemap file with hole,data,hole,data,hole
+ GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec hole,data,hole,data,hole
+ WHEN we run sparsemap on S
+ THEN stdout contains exactly HOLE 8192\nDATA 4096\nHOLE 8192\nDATA 4096\nHOLE 8192
+
+Generic commandline handling stuff,
+
+ SCENARIO sparsemap errs on no FILE arg
+ WHEN we attempt to run sparsemap without any arguments
+ THEN the exit code is 2
+
+ SCENARIO sparsemap errs if more than one arg
+ WHEN we attempt to run sparsemap on S T
+ THEN the exit code is 2
diff --git a/yarns/implementations.yarn b/yarns/implementations.yarn
@@ -1,9 +0,0 @@
- IMPLEMENTS GIVEN a sparse file (\S+) with a hole size (\d+) and data size (\d+) with spec ([a-zA-z,]+)
- set -e -o pipefail
- echo "$MATCH_4" | mksparse "$DATADIR/$MATCH_1" --hole-size "$MATCH_2" --data-size "$MATCH_3"
-
- IMPLEMENTS WHEN we run sparsemap on (\w+)
- run_sparsemap "$DATADIR/$MATCH_1"
-
- IMPLEMENTS THEN stdout contains exactly (.+)
- diff -u <(echo -e "$MATCH_1") "$DATADIR/STDOUT"
diff --git a/yarns/shell_lib b/yarns/shell_lib
@@ -1,5 +0,0 @@
-set -e -u -o pipefail
-
-run_sparsemap() {
- sparsemap $@ > "$DATADIR/STDOUT"
-}
diff --git a/yarns/sparsemap.yarn b/yarns/sparsemap.yarn
@@ -1,65 +0,0 @@
-sparse map tests
-================
-
-Please note that these tests will depend very much on the file
-system, it is up to the file system to decide how many zeroes
-are required before it decides to represent the hole as an actual
-hole rather than just a run of zeroes.
-
-At time of writing (2017) these tests pass on ext4,
-where the default block size is 4096 bytes.
-
- SCENARIO sparsemap single data followed by single hole
- GIVEN a sparse file S with a hole size 4096 and data size 8192 with spec data,hole
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 8192\nHOLE 4096
-
- SCENARIO sparsemap single hole followed by single data
- GIVEN a sparse file S with a hole size 4096 and data size 8192 with spec hole,data
- WHEN we run sparsemap on S
- THEN stdout contains exactly HOLE 4096\nDATA 8192
-
- SCENARIO sparsemap hole followed by data followed by hole
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec hole,data,hole
- WHEN we run sparsemap on S
- THEN stdout contains exactly HOLE 8192\nDATA 4096\nHOLE 8192
-
- SCENARIO tiny hole can look like data
- GIVEN a sparse file S with a hole size 6 and data size 4096 with spec hole,data,hole
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 4108
-
- SCENARIO sparsemap data followed by hole followed by data
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data,hole,data
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 4096\nHOLE 8192\nDATA 4096
-
- SCENARIO sparsemap sequence of holes
- GIVEN a sparse file S with a hole size 4096 and data size 8192 with spec data,hole,hole,data
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 8192\nHOLE 8192\nDATA 8192
-
- SCENARIO sparsemap sequence of holes (ending with hole)
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data,hole,hole,hole
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 4096\nHOLE 24576
-
- SCENARIO sparsemap file with only data
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 4096
-
- SCENARIO sparsemap file with only hole
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec hole
- WHEN we run sparsemap on S
- THEN stdout contains exactly HOLE 8192
-
- SCENARIO sparsemap file with data,hole,data,hole,data
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec data,hole,data,hole,data
- WHEN we run sparsemap on S
- THEN stdout contains exactly DATA 4096\nHOLE 8192\nDATA 4096\nHOLE 8192\nDATA 4096
-
- SCENARIO sparsemap file with hole,data,hole,data,hole
- GIVEN a sparse file S with a hole size 8192 and data size 4096 with spec hole,data,hole,data,hole
- WHEN we run sparsemap on S
- THEN stdout contains exactly HOLE 8192\nDATA 4096\nHOLE 8192\nDATA 4096\nHOLE 8192