]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tests: add DejaGNU framework
authorDavid Lamparter <equinox@opensourcerouting.org>
Tue, 26 Feb 2013 15:21:20 +0000 (16:21 +0100)
committerDavid Lamparter <equinox@diac24.net>
Sun, 14 Apr 2013 14:01:05 +0000 (16:01 +0200)
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>
buildtest.sh
configure.ac
tests/.gitignore
tests/Makefile.am
tests/config/unix.exp [new file with mode: 0644]
tests/global-conf.exp [new file with mode: 0644]

index c9dd323f85e6eaf30550f6563cf52638a5209880..de638f5625f87b5fecf6137da0351794710c48b0 100755 (executable)
@@ -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
index 6e59037abc29977694a2c1e2d02bec275b040a4a..582f357282fa63e756bc9a2508dad11e3d4fb266 100755 (executable)
@@ -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
index 93e886c0417252d776d29079d60d01caab8f37b2..8baea0a87c0f0545b77c67ca9253bf8e9fa0f0eb 100644 (file)
@@ -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
index 7bc880b5f73ff27224c14b6a0dfb654eccafb202..14f7bef1a46dd6e913ad9ee206d8e94d969dfb41 100644 (file)
@@ -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 (file)
index 0000000..25ea97f
--- /dev/null
@@ -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 (file)
index 0000000..e69de29