From c62f79cbb2d5e52cefc11254eb8802631eee5877 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 12 Mar 2022 11:33:30 +0100 Subject: [PATCH] tests: add integration tests --- tests/CMakeLists.txt | 1 + tests/integration/CMakeLists.txt | 13 ++++++++++ tests/integration/test-output.sh | 43 ++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 tests/integration/CMakeLists.txt create mode 100755 tests/integration/test-output.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 269aea0..729c6ee 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1 +1,2 @@ +add_subdirectory(integration) add_subdirectory(unit) diff --git a/tests/integration/CMakeLists.txt b/tests/integration/CMakeLists.txt new file mode 100644 index 0000000..fbce60d --- /dev/null +++ b/tests/integration/CMakeLists.txt @@ -0,0 +1,13 @@ +find_program(BASH_PROGRAM bash) + +if (BASH_PROGRAM) + +add_test(test_output + ${BASH_PROGRAM} + ${CMAKE_CURRENT_SOURCE_DIR}/test-output.sh + ${CMAKE_SOURCE_DIR}/data/ + # FIXME: can't get it working $ + ${CMAKE_BINARY_DIR}/src/kraken +) + +endif (BASH_PROGRAM) diff --git a/tests/integration/test-output.sh b/tests/integration/test-output.sh new file mode 100755 index 0000000..c3071e9 --- /dev/null +++ b/tests/integration/test-output.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +if [ $# != 0 ]; then + DATA_DIR="$1" + KRAKEN="$2" +else + DATA_DIR=data/ + KRAKEN=build/src/kraken +fi + +if ! [ -x "$KRAKEN" ] || ! [ -d "$DATA_DIR" ]; then + printf 'KRAKEN ('\''%s'\'') or DATA_DIR ('\''%s'\'') incorrectly set\n' "$KRAKEN" "$DATA_DIR" + exit 1 +fi + +FAILURES=0 +SUCCESSES=0 + +# $1: should be the name of the input/output files couple, stripped of +# the data path prefix, or the `{in,out}.csv` suffix. +test_file() { + if ! diff="$(diff <("$KRAKEN" < "$DATA_DIR/inputs/$1.in.csv") "$DATA_DIR/outputs/$1.out.csv")"; then + ((FAILURES += 1)) + echo "$1: FAIL" + if [ -n "$VERBOSE" ]; then + printf '%s\n' "$diff" + fi + else + ((SUCCESSES += 1)) + echo "$1: OK" + fi +} + +for test_name in "$DATA_DIR"/inputs/*.in.csv; do + test_name="$(basename "$test_name")" + test_name="${test_name%%.in.csv}" + + test_file "$test_name" +done + +printf '\nSummary: %d successes, %d failures\n' "$SUCCESSES" "$FAILURES" + +exit "$((FAILURES != 0))"