summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2013-02-26 16:21:20 +0100
committerDavid Lamparter <equinox@diac24.net>2013-04-14 16:01:05 +0200
commitf281ab9752393fcc7cbb54c50edb66f25c2a31fb (patch)
tree53be958c127d21c6bc0e2e2abd02f33a3fde16c2
parentf2b53dac4c72811c06779c596c6162b994eb427a (diff)
tests: add DejaGNU framework
DejaGNU seems to be the 'standard' GNU test framework (which by itself doesn't say much), but it seems relatively usable and the "remote system" capabilities might come in handy for virtualisation-based tests for kernel interactions or something. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rwxr-xr-xbuildtest.sh1
-rwxr-xr-xconfigure.ac16
-rw-r--r--tests/.gitignore5
-rw-r--r--tests/Makefile.am11
-rw-r--r--tests/config/unix.exp104
-rw-r--r--tests/global-conf.exp0
6 files changed, 135 insertions, 2 deletions
diff --git a/buildtest.sh b/buildtest.sh
index c9dd323f..de638f56 100755
--- a/buildtest.sh
+++ b/buildtest.sh
@@ -85,6 +85,7 @@ for cfg in ${CONFIGS:-$defconfigs}; do
cd "$bdir"
../sdist/configure $args
make -j5
+ make check
make DESTDIR="$TEMP/inst_$cfg" install
cd ..
done
diff --git a/configure.ac b/configure.ac
index 6e59037a..582f3572 100755
--- a/configure.ac
+++ b/configure.ac
@@ -1619,6 +1619,18 @@ fi
AC_SUBST(PICFLAGS)
AC_SUBST(PILDFLAGS)
+dnl -------
+dnl DejaGNU
+dnl -------
+if test x"$DEJAGNU" = x
+then
+ DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
+fi
+RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
+
+AC_SUBST(DEJAGNU)
+AC_SUBST(RUNTESTDEFAULTFLAGS)
+
dnl ------------------------------
dnl set paths for state directory
dnl ------------------------------
@@ -1691,8 +1703,8 @@ AC_MSG_RESULT($ac_cv_htonl_works)
AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
- doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
- redhat/Makefile
+ doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
+ redhat/Makefile
pkgsrc/Makefile
redhat/quagga.spec
lib/version.h
diff --git a/tests/.gitignore b/tests/.gitignore
index 93e886c0..8baea0a8 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -10,6 +10,10 @@ TAGS
*.lo
*.la
*.libs
+*.bak
+*.log
+*.sum
+*.xml
.arch-inventory
.arch-ids
aspathtest
@@ -27,3 +31,4 @@ testmemory
testprivs
testsig
teststream
+site.exp
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7bc880b5..14f7bef1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,3 +1,14 @@
+AUTOMAKE_OPTIONS = dejagnu
+export DEJAGNU
+
+SUBDIRS =
+
+EXTRA_DIST = \
+ config/unix.exp \
+ global-conf.exp
+
+DEJATOOL =
+
INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
DEFS = @DEFS@ $(LOCAL_OPTS) -DSYSCONFDIR=\"$(sysconfdir)/\"
diff --git a/tests/config/unix.exp b/tests/config/unix.exp
new file mode 100644
index 00000000..25ea97f4
--- /dev/null
+++ b/tests/config/unix.exp
@@ -0,0 +1,104 @@
+
+# every test should always be run and always return some status.
+# so, if we lose sync with a multi-test program, aborted will be used
+# to flag the remainder of the tests as untested.
+#set aborted 0
+
+# only match with color codes since "failed" / "OK" might otherwise
+# be part of the output...
+#set color 1
+
+set config_h [open "../config.h" "r"]
+set config_h_text [read $config_h]
+close $config_h
+set i [string first "#define HAVE_IPV6" $config_h_text]
+if { $i >= 0 } {
+ set have_ipv6 1
+} else {
+ set have_ipv6 0
+}
+send_user "IPv6 enabled: $have_ipv6\n"
+set xfail 0
+
+proc onetest { test_name note start } {
+ global aborted
+ global testprefix
+ global verbose
+ global color
+ global xfail
+
+ if { $aborted > 0 } {
+ untested "$testprefix$test_name"
+ return
+ }
+
+ if { $verbose > 0 } {
+ send_user "$testprefix$test_name$note\n"
+ }
+ expect {
+ "$start" { }
+
+ eof { unresolved "$testprefix$test_name"; set aborted 1; }
+ timeout { unresolved "$testprefix$test_name"; set aborted 1; }
+ }
+
+ if { $aborted > 0 } {
+ send_user "sync failed: $testprefix$test_name$note -- $testprefix aborted!\n"
+ return
+ }
+
+ if { $color } {
+ set pat "(32mOK|31mfailed)"
+ } else {
+ set pat "(OK|failed)"
+ }
+ expect {
+ # need this because otherwise expect will skip over a "failed" and
+ # grab the next "OK" (or the other way around)
+ -re "$pat" {
+ if { "$expect_out(0,string)" == "32mOK" || "$expect_out(0,string)" == "OK" } {
+ pass "$testprefix$test_name"
+ } else {
+ if { $xfail } {
+ xfail "$testprefix$test_name"
+ } else {
+ fail "$testprefix$test_name"
+ }
+ }
+ return
+ }
+
+ eof { unresolved "$testprefix$test_name"; set aborted 1; }
+ timeout { unresolved "$testprefix$test_name"; set aborted 1; }
+ }
+
+ if { $aborted > 0 } {
+ send_user "failed: $testprefix$test_name$note -- $testprefix aborted!\n"
+ return
+ }
+}
+
+proc headerline { line } {
+ global aborted
+ if { $aborted > 0 } { return; }
+ expect {
+ $line { return; }
+ eof { send_user "numbering mismatch!\n"; set aborted 1; }
+ timeout { send_user "numbering mismatch!\n"; set aborted 1; }
+ }
+}
+
+proc simpletest { start } {
+ onetest "$start" "" "$start"
+}
+
+proc simpletest_nov6 { start } {
+ global have_ipv6
+ global xfail
+
+ set xfail [expr 1-$have_ipv6]
+ onetest "$start" "" "$start"
+ set xfail 0
+}
+
+
diff --git a/tests/global-conf.exp b/tests/global-conf.exp
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/global-conf.exp