X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=tests%2Fovs-macros.at;h=bfd06818b199df5dfd151bf1cf9ce163825af218;hb=56085be5fed24dbc44e01b6c72adcafe2328846f;hp=c583c3d40774cc5c4c3126d99027a00ce4fcf8aa;hpb=5e65e080ad4d57eb3fcb7b53980cf6a4d1e8ae19;p=cascardo%2Fovs.git diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at index c583c3d40..bfd06818b 100644 --- a/tests/ovs-macros.at +++ b/tests/ovs-macros.at @@ -4,20 +4,55 @@ AT_TESTED([perl]) m4_include([m4/compat.at]) +dnl Make AT_SETUP automatically run the ovs_init() shell function +dnl as the first step in every test. +m4_rename([AT_SETUP], [OVS_AT_SETUP]) +m4_define([AT_SETUP], [OVS_AT_SETUP($@) +ovs_init +]) m4_divert_push([PREPARE_TESTS]) [ +# Set ovs_base to the base directory in which the test is running and +# initialize the OVS_*DIR environment variables to point to this +# directory. +ovs_init() { + ovs_base=`pwd` + trap '. "$ovs_base/cleanup"' 0 + : > cleanup + ovs_setenv +} + +# With no parameter or an empty parameter, sets the OVS_*DIR +# environment variables to point to $ovs_base, the base directory in +# which the test is running. +# +# With a parameter, sets them to $ovs_base/$1. +ovs_setenv() { + sandbox=$1 + ovs_dir=$ovs_base${1:+/$1} + OVS_RUNDIR=$ovs_dir; export OVS_RUNDIR + OVS_LOGDIR=$ovs_dir; export OVS_LOGDIR + OVS_DBDIR=$ovs_dir; export OVS_DBDIR + OVS_SYSCONFDIR=$ovs_dir; export OVS_SYSCONFDIR + OVS_PKGDATADIR=$ovs_dir; export OVS_PKGDATADIR +} + ovs_wait () { - # First try a quick sleep, so that the test completes very quickly + # First try the condition without waiting. + ovs_wait_cond && return 0 + + # Try a quick sleep, so that the test completes very quickly # in the normal case. POSIX doesn't require fractional times to # work, so this might not work. sleep 0.1 - ovs_wait_cond && exit 0 + ovs_wait_cond && return 0 + # Then wait up to 10 seconds. for d in 0 1 2 3 4 5 6 7 8 9; do sleep 1 - ovs_wait_cond && exit 0 + ovs_wait_cond && return 0 done - exit 1 + return 1 } # Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout. @@ -37,48 +72,61 @@ if test "$IS_WIN32" = "yes"; then command diff --strip-trailing-cr "$@" } + # tskill is more effective than taskkill but it isn't always installed. + if (tskill //?) >/dev/null 2>&1; then :; else + tskill () { taskkill //F //PID $1 >/dev/null; } + fi + kill () { - case "$1" in - -0) - shift - for i in $*; do - # tasklist will always have return code 0. - # If pid does exist, there will be a line with the pid. - if tasklist //fi "PID eq $i" | grep $i >/dev/null; then - : - else - return 1 - fi - done - return 0 - ;; - -[1-9]*) - shift - for i in $*; do - if tasklist //fi "PID eq $i" | grep $i >/dev/null; then - tskill $i - fi - done - ;; + signal= + retval=0 + for arg; do + case $arg in + -*) signal=$arg ;; [1-9][0-9]*) - for i in $*; do - if tasklist //fi "PID eq $i" | grep $i >/dev/null; then - tskill $i + # tasklist always returns 0. + # If pid does exist, there will be a line with the pid. + if tasklist //fi "PID eq $arg" | grep $arg >/dev/null; then + if test "X$signal" != "X-0"; then + tskill $arg fi - done + else + retval=1 + fi ;; - esac + esac + done + return $retval } fi ] m4_divert_pop([PREPARE_TESTS]) -m4_define([OVS_WAIT], - [AT_CHECK( - [ovs_wait_cond () { $1 +m4_define([OVS_WAIT], [dnl +ovs_wait_cond () { + $1 } -ovs_wait], [0], [ignore], [ignore], [$2])]) +if ovs_wait; then : +else + $2 + AT_FAIL_IF([:]) +fi +]) + +dnl OVS_WAIT_UNTIL(COMMAND) +dnl +dnl Executes shell COMMAND in a loop until it returns +dnl zero return code. If COMMAND did not return +dnl zero code within reasonable time limit, then +dnl the test fails. m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])]) + +dnl OVS_WAIT_WHILE(COMMAND) +dnl +dnl Executes shell COMMAND in a loop until it returns +dnl non-zero return code. If COMMAND did not return +dnl non-zero code within reasonable time limit, then +dnl the test fails. m4_define([OVS_WAIT_WHILE], [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])]) @@ -90,28 +138,18 @@ m4_define([OVS_APP_EXIT_AND_WAIT], [ovs-appctl -t $1 exit OVS_WAIT_WHILE([test -e $1.pid])]) -m4_define([ON_EXIT__], [trap '. ./cleanup' 0; cat - cleanup << $2 > __cleanup -$1 -EOF -mv __cleanup cleanup -]) - -dnl ON_EXIT([COMMANDS]) -dnl ON_EXIT_UNQUOTED([COMMANDS]) +dnl on_exit "COMMAND" dnl -dnl Add the shell COMMANDS to a collection executed when the current test +dnl Add the shell COMMAND to a collection executed when the current test dnl completes, as a cleanup action. (The most common use is to kill a dnl daemon started by the test. This is important to prevent tests that dnl start daemons from hanging at exit.) dnl -dnl The only difference between ON_EXIT and ON_EXIT_UNQUOTED is that only the -dnl latter performs shell variable (e.g. $var) substitution, command -dnl substitution (e.g. `command`), and backslash escaping (e.g. \\ becomes \) -dnl in COMMANDS at the time that ON_EXIT_UNQUOTED is encountered. ON_EXIT, -dnl in contrast, copies the literal COMMANDS and only executes shell expansion -dnl at cleanup time. -dnl -dnl Cleanup commands are executed in the reverse order of execution of -dnl these macros. -m4_define([ON_EXIT], [ON_EXIT__([$1], ['EOF'])]) -m4_define([ON_EXIT_UNQUOTED], [ON_EXIT__([$1], [EOF])]) +dnl Cleanup commands are executed in the reverse order of calls to this +dnl function. +m4_divert_text([PREPARE_TESTS], [dnl +on_exit () { + (echo "$1"; cat cleanup) > cleanup.tmp + mv cleanup.tmp cleanup +} +])