dpif-netlink: Fix compiler warning.
[cascardo/ovs.git] / tests / ovs-macros.at
1 AT_TESTED([ovs-vswitchd])
2 AT_TESTED([ovs-vsctl])
3 AT_TESTED([perl])
4
5 m4_include([m4/compat.at])
6
7 m4_divert_push([PREPARE_TESTS])
8 [
9 ovs_wait () {
10     # First try a quick sleep, so that the test completes very quickly
11     # in the normal case.  POSIX doesn't require fractional times to
12     # work, so this might not work.
13     sleep 0.1
14     ovs_wait_cond && exit 0
15     # Then wait up to 10 seconds.
16     for d in 0 1 2 3 4 5 6 7 8 9; do
17         sleep 1
18         ovs_wait_cond && exit 0
19     done
20     exit 1
21 }
22
23 # Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout.
24 seq () {
25     while test $1 -le $2; do
26         echo $1
27         set `expr $1 + ${3-1}` $2 $3
28     done
29 }
30
31 if test "$IS_WIN32" = "yes"; then
32     pwd () {
33         command pwd -W "$@"
34     }
35
36     diff () {
37         command diff --strip-trailing-cr "$@"
38     }
39
40     # tskill is more effective than taskkill but it isn't always installed.
41     if (tskill //?) >/dev/null 2>&1; then :; else
42         tskill () { taskkill //F //PID $1 >/dev/null; }
43     fi
44
45     kill () {
46         signal=
47         retval=0
48         for arg; do
49             case $arg in
50             -*) signal=$arg ;;
51             [1-9][0-9]*)
52                 # tasklist always returns 0.
53                 # If pid does exist, there will be a line with the pid.
54                 if tasklist //fi "PID eq $arg" | grep $arg >/dev/null; then
55                     if test "X$signal" != "X-0"; then
56                         tskill $arg
57                     fi
58                 else
59                     retval=1
60                 fi
61                 ;;
62             esac
63         done
64         return $retval
65     }
66 fi
67 ]
68 m4_divert_pop([PREPARE_TESTS])
69
70 m4_define([OVS_WAIT],
71   [AT_CHECK(
72      [ovs_wait_cond () { $1
73 }
74 ovs_wait], [0], [ignore], [ignore], [$2])])
75 m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])])
76 m4_define([OVS_WAIT_WHILE],
77   [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])])
78
79 dnl OVS_APP_EXIT_AND_WAIT(DAEMON)
80 dnl
81 dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then waits for it
82 dnl to exit.
83 m4_define([OVS_APP_EXIT_AND_WAIT],
84   [ovs-appctl -t $1 exit
85    OVS_WAIT_WHILE([test -e $1.pid])])
86
87 m4_define([ON_EXIT__], [trap '. ./cleanup' 0; cat - cleanup << $2 > __cleanup
88 $1
89 EOF
90 mv __cleanup cleanup
91 ])
92
93 dnl ON_EXIT([COMMANDS])
94 dnl ON_EXIT_UNQUOTED([COMMANDS])
95 dnl
96 dnl Add the shell COMMANDS to a collection executed when the current test
97 dnl completes, as a cleanup action.  (The most common use is to kill a
98 dnl daemon started by the test.  This is important to prevent tests that
99 dnl start daemons from hanging at exit.)
100 dnl
101 dnl The only difference between ON_EXIT and ON_EXIT_UNQUOTED is that only the
102 dnl latter performs shell variable (e.g. $var) substitution, command
103 dnl substitution (e.g. `command`), and backslash escaping (e.g. \\ becomes \)
104 dnl in COMMANDS at the time that ON_EXIT_UNQUOTED is encountered.  ON_EXIT,
105 dnl in contrast, copies the literal COMMANDS and only executes shell expansion
106 dnl at cleanup time.
107 dnl
108 dnl Cleanup commands are executed in the reverse order of execution of
109 dnl these macros.
110 m4_define([ON_EXIT], [ON_EXIT__([$1], ['EOF'])])
111 m4_define([ON_EXIT_UNQUOTED], [ON_EXIT__([$1], [EOF])])