Merge "master" into "ovn".
[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     kill () {
41         case "$1" in
42             -0)
43                 shift
44                 for i in $*; do
45                     # tasklist will always have return code 0.
46                     # If pid does exist, there will be a line with the pid.
47                     if tasklist //fi "PID eq $i" | grep $i >/dev/null; then
48                         :
49                     else
50                         return 1
51                     fi
52                 done
53                 return 0
54                 ;;
55             -[1-9]*)
56                 shift
57                 for i in $*; do
58                     if tasklist //fi "PID eq $i" | grep $i >/dev/null; then
59                         tskill $i
60                     fi
61                 done
62                 ;;
63             [1-9][0-9]*)
64                 for i in $*; do
65                     if tasklist //fi "PID eq $i" | grep $i >/dev/null; then
66                         tskill $i
67                     fi
68                 done
69                 ;;
70         esac
71     }
72 fi
73 ]
74 m4_divert_pop([PREPARE_TESTS])
75
76 m4_define([OVS_WAIT],
77   [AT_CHECK(
78      [ovs_wait_cond () { $1
79 }
80 ovs_wait], [0], [ignore], [ignore], [$2])])
81 m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])])
82 m4_define([OVS_WAIT_WHILE],
83   [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])])
84
85 dnl OVS_APP_EXIT_AND_WAIT(DAEMON)
86 dnl
87 dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then waits for it
88 dnl to exit.
89 m4_define([OVS_APP_EXIT_AND_WAIT],
90   [ovs-appctl -t $1 exit
91    OVS_WAIT_WHILE([test -e $1.pid])])
92
93 m4_define([ON_EXIT__], [trap '. ./cleanup' 0; cat - cleanup << $2 > __cleanup
94 $1
95 EOF
96 mv __cleanup cleanup
97 ])
98
99 dnl ON_EXIT([COMMANDS])
100 dnl ON_EXIT_UNQUOTED([COMMANDS])
101 dnl
102 dnl Add the shell COMMANDS to a collection executed when the current test
103 dnl completes, as a cleanup action.  (The most common use is to kill a
104 dnl daemon started by the test.  This is important to prevent tests that
105 dnl start daemons from hanging at exit.)
106 dnl
107 dnl The only difference between ON_EXIT and ON_EXIT_UNQUOTED is that only the
108 dnl latter performs shell variable (e.g. $var) substitution, command
109 dnl substitution (e.g. `command`), and backslash escaping (e.g. \\ becomes \)
110 dnl in COMMANDS at the time that ON_EXIT_UNQUOTED is encountered.  ON_EXIT,
111 dnl in contrast, copies the literal COMMANDS and only executes shell expansion
112 dnl at cleanup time.
113 dnl
114 dnl Cleanup commands are executed in the reverse order of execution of
115 dnl these macros.
116 m4_define([ON_EXIT], [ON_EXIT__([$1], ['EOF'])])
117 m4_define([ON_EXIT_UNQUOTED], [ON_EXIT__([$1], [EOF])])