summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authormirabilos <tg@mirbsd.org>2015-05-24 19:21:54 +0200
committerWaldemar Brodkorb <wbx@uclibc-ng.org>2015-05-25 15:46:38 +0200
commitef28300bbc27306fca5bb1af155e94af32fc7fef (patch)
tree990e7d58ee17df4bd9c378d9658ff17563d16a96 /test
parent650380248eaad577445c88b7314307d3acd166fc (diff)
implement experimental pure-sh testsuite runner and generation
Diffstat (limited to 'test')
-rw-r--r--test/Makefile5
-rw-r--r--test/Test.mak14
-rw-r--r--test/uclibcng-testrunner.sh62
3 files changed, 80 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index e4f64181e..a1fa7280c 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -47,6 +47,10 @@ test check all: run
run: subdirs_run
+gen:
+ -rm -f $(top_builddir)/test/uclibcng-testrunner.in
+ $(MAKE) run UCLIBCNG_GENERATE_TESTRUNNER=1
+
compile: $(top_builddir)$(LOCAL_INSTALL_PATH) subdirs_compile
$(top_builddir)$(LOCAL_INSTALL_PATH):
@@ -68,6 +72,7 @@ $(patsubst %, _dir_%, $(DIRS)) : dummy
$(patsubst %, _dirrun_%, $(DIRS)) : dummy
$(Q)$(MAKE) -C $(patsubst _dirrun_%, %, $@) run \
+ UCLIBCNG_TEST_SUBDIR=$(strip $(patsubst _dirrun_%, %, $@)) \
KCONFIG_CONFIG=$(KCONFIG_CONFIG)
$(patsubst %, _dircompile_%, $(DIRS)) : dummy
diff --git a/test/Test.mak b/test/Test.mak
index a56a20165..52992a70a 100644
--- a/test/Test.mak
+++ b/test/Test.mak
@@ -4,6 +4,8 @@
#
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+shellescape='$(subst ','\'',$(1))'
+
ifeq ($(TESTS),)
TESTS := $(patsubst %.c,%,$(wildcard *.c))
endif
@@ -76,7 +78,7 @@ define exec_test
test -z "$$expected_ret" && export expected_ret=0 ; \
if ! test $$ret -eq $$expected_ret ; then \
echo "ret == $$ret ; expected_ret == $$expected_ret" ; \
- echo "The output of failed test is:"; \
+ echo "The output of the failed test is:"; \
cat "$(binary_name).out"; \
exit 1 ; \
fi
@@ -89,11 +91,21 @@ run: $(RUN_TARGETS)
$(addsuffix .exe,$(U_TARGETS)): SIMULATOR:=$(SIMULATOR_uclibc)
$(addsuffix .exe,$(G_TARGETS)): SIMULATOR:=$(SIMULATOR_glibc)
$(RUN_TARGETS):
+ifeq (1,$(UCLIBCNG_GENERATE_TESTRUNNER))
+ expected_ret="$(RET_$(tst_src_name))"; echo \
+ "$${expected_ret:-0}" \
+ $(call shellescape,$(tst_src_name)) \
+ $(call shellescape,$(binary_name)) \
+ $(call shellescape,$(UCLIBCNG_TEST_SUBDIR)) \
+ $(call shellescape,$(WRAPPER) $(WRAPPER_$(tst_src_name)) ./$(binary_name) $(OPTS) $(OPTS_$(tst_src_name))) \
+ >>$(top_builddir)/test/uclibcng-testrunner.in
+else
$(exec_test)
$(diff_test)
ifeq ($(UCLIBC_ONLY),)
$(uclibc_glibc_diff_test)
endif
+endif
compile: $(COMPILE_TARGETS)
diff --git a/test/uclibcng-testrunner.sh b/test/uclibcng-testrunner.sh
new file mode 100644
index 000000000..943c95086
--- /dev/null
+++ b/test/uclibcng-testrunner.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+#-
+# Copyright (c) 2015
+# Thorsten "mirabilos" Glaser <tg@mirbsd.org>
+#
+# Provided that these terms and disclaimer and all copyright notices
+# are retained or reproduced in an accompanying document, permission
+# is granted to deal in this work without restriction, including un-
+# limited rights to use, publicly perform, distribute, sell, modify,
+# merge, give away, or sublicence.
+#
+# This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
+# the utmost extent permitted by applicable law, neither express nor
+# implied; without malicious intent or gross negligence. In no event
+# may a licensor, author or contributor be held liable for indirect,
+# direct, other damage, loss, or other issues arising in any way out
+# of dealing in the work, even if advised of the possibility of such
+# damage or existence of a defect, except proven that it results out
+# of said person's immediate fault when using the work as intended.
+#-
+# Testsuite runner
+
+die() {
+ echo >&2 E: "$*"
+ exit 1
+}
+
+test -s uclibcng-testrunner.in || die uclibcng-testrunner.in not found
+
+nfail=0
+npass=0
+while read expected_ret tst_src_name binary_name subdir cmd; do
+ printf '.... %s\r' "$binary_name"
+ (cd $subdir && eval "$cmd" >$binary_name.out 2>&1) </dev/null
+ ret=$?
+ test $ret = "$expected_ret" || {
+ echo "FAIL $binary_name got $ret expected $expected_ret"
+ nfail=`expr $nfail + 1`
+ sed 's/^/ /' <$subdir/$binary_name.out
+ continue
+ }
+ for x in $binary_name.out $test_src_name.out -; do
+ if test x"$x" = x"-"; then
+ echo "PASS $binary_name"
+ npass=`expr $npass + 1`
+ break
+ fi
+ test -e "$subdir/$x.good" || continue
+ if d=`diff -u "$subdir/$binary_name.out" "$subdir/$x.good"`; then
+ echo "PASS $binary_name"
+ npass=`expr $npass + 1`
+ else
+ echo "FAIL $binary_name expected output differs"
+ nfail=`expr $nfail + 1`
+ echo "$d" | sed 's/^/ /'
+ fi
+ break
+ done
+done <uclibcng-testrunner.in
+echo Total failed: $nfail
+echo Total passed: $npass
+test $nfail = 0