]>
Commit | Line | Data |
---|---|---|
1 | AT_TESTED([ovs-vswitchd]) | |
2 | AT_TESTED([ovs-vsctl]) | |
3 | AT_TESTED([perl]) | |
4 | ||
5 | m4_include([m4/compat.m4]) | |
6 | ||
7 | dnl Make AT_SETUP automatically run the ovs_init() shell function | |
8 | dnl as the first step in every test. | |
9 | m4_rename([AT_SETUP], [OVS_AT_SETUP]) | |
10 | m4_define([AT_SETUP], [OVS_AT_SETUP($@) | |
11 | ovs_init | |
12 | ]) | |
13 | m4_divert_push([PREPARE_TESTS]) | |
14 | [ | |
15 | # Set ovs_base to the base directory in which the test is running and | |
16 | # initialize the OVS_*DIR environment variables to point to this | |
17 | # directory. | |
18 | ovs_init() { | |
19 | ovs_base=`pwd` | |
20 | trap '. "$ovs_base/cleanup"' 0 | |
21 | : > cleanup | |
22 | ovs_setenv | |
23 | } | |
24 | ||
25 | # With no parameter or an empty parameter, sets the OVS_*DIR | |
26 | # environment variables to point to $ovs_base, the base directory in | |
27 | # which the test is running. | |
28 | # | |
29 | # With a parameter, sets them to $ovs_base/$1. | |
30 | ovs_setenv() { | |
31 | sandbox=$1 | |
32 | ovs_dir=$ovs_base${1:+/$1} | |
33 | OVS_RUNDIR=$ovs_dir; export OVS_RUNDIR | |
34 | OVS_LOGDIR=$ovs_dir; export OVS_LOGDIR | |
35 | OVS_DBDIR=$ovs_dir; export OVS_DBDIR | |
36 | OVS_SYSCONFDIR=$ovs_dir; export OVS_SYSCONFDIR | |
37 | OVS_PKGDATADIR=$ovs_dir; export OVS_PKGDATADIR | |
38 | } | |
39 | ||
40 | ovs_wait () { | |
41 | # First try the condition without waiting. | |
42 | ovs_wait_cond && return 0 | |
43 | ||
44 | # Try a quick sleep, so that the test completes very quickly | |
45 | # in the normal case. POSIX doesn't require fractional times to | |
46 | # work, so this might not work. | |
47 | sleep 0.1 | |
48 | ovs_wait_cond && return 0 | |
49 | ||
50 | # Then wait up to 10 seconds. | |
51 | for d in 0 1 2 3 4 5 6 7 8 9; do | |
52 | sleep 1 | |
53 | ovs_wait_cond && return 0 | |
54 | done | |
55 | return 1 | |
56 | } | |
57 | ||
58 | # Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout. | |
59 | seq () { | |
60 | while test $1 -le $2; do | |
61 | echo $1 | |
62 | set `expr $1 + ${3-1}` $2 $3 | |
63 | done | |
64 | } | |
65 | ||
66 | if test "$IS_WIN32" = "yes"; then | |
67 | pwd () { | |
68 | command pwd -W "$@" | |
69 | } | |
70 | ||
71 | diff () { | |
72 | command diff --strip-trailing-cr "$@" | |
73 | } | |
74 | ||
75 | # tskill is more effective than taskkill but it isn't always installed. | |
76 | if (tskill //?) >/dev/null 2>&1; then :; else | |
77 | tskill () { taskkill //F //PID $1 >/dev/null; } | |
78 | fi | |
79 | ||
80 | kill () { | |
81 | signal= | |
82 | retval=0 | |
83 | for arg; do | |
84 | case $arg in | |
85 | -*) signal=$arg ;; | |
86 | [1-9][0-9]*) | |
87 | # tasklist always returns 0. | |
88 | # If pid does exist, there will be a line with the pid. | |
89 | if tasklist //fi "PID eq $arg" | grep $arg >/dev/null; then | |
90 | if test "X$signal" != "X-0"; then | |
91 | tskill $arg | |
92 | fi | |
93 | else | |
94 | retval=1 | |
95 | fi | |
96 | ;; | |
97 | esac | |
98 | done | |
99 | return $retval | |
100 | } | |
101 | fi | |
102 | ] | |
103 | m4_divert_pop([PREPARE_TESTS]) | |
104 | ||
105 | m4_define([OVS_WAIT], [dnl | |
106 | ovs_wait_cond () { | |
107 | $1 | |
108 | } | |
109 | if ovs_wait; then : | |
110 | else | |
111 | $2 | |
112 | AT_FAIL_IF([:]) | |
113 | fi | |
114 | ]) | |
115 | ||
116 | dnl OVS_WAIT_UNTIL(COMMAND) | |
117 | dnl | |
118 | dnl Executes shell COMMAND in a loop until it returns | |
119 | dnl zero return code. If COMMAND did not return | |
120 | dnl zero code within reasonable time limit, then | |
121 | dnl the test fails. | |
122 | m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])]) | |
123 | ||
124 | dnl OVS_WAIT_WHILE(COMMAND) | |
125 | dnl | |
126 | dnl Executes shell COMMAND in a loop until it returns | |
127 | dnl non-zero return code. If COMMAND did not return | |
128 | dnl non-zero code within reasonable time limit, then | |
129 | dnl the test fails. | |
130 | m4_define([OVS_WAIT_WHILE], | |
131 | [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])]) | |
132 | ||
133 | dnl OVS_APP_EXIT_AND_WAIT(DAEMON) | |
134 | dnl | |
135 | dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then wait for it | |
136 | dnl to exit. | |
137 | m4_define([OVS_APP_EXIT_AND_WAIT], | |
138 | [AT_CHECK([test -e $OVS_RUNDIR/$1.pid]) | |
139 | TMPPID=$(cat $OVS_RUNDIR/$1.pid) | |
140 | AT_CHECK([ovs-appctl -t $1 exit]) | |
141 | OVS_WAIT_WHILE([kill -0 $TMPPID 2>/dev/null])]) | |
142 | ||
143 | dnl OVS_APP_EXIT_AND_WAIT_BY_TARGET(TARGET, PIDFILE) | |
144 | dnl | |
145 | dnl Ask the daemon identified by TARGET to exit, via ovs-appctl (using the target | |
146 | dnl argument), and then wait for it to exit. | |
147 | m4_define([OVS_APP_EXIT_AND_WAIT_BY_TARGET], | |
148 | [AT_CHECK([test -e $2]) | |
149 | TMPPID=$(cat $2) | |
150 | AT_CHECK([ovs-appctl --target=$1 exit]) | |
151 | OVS_WAIT_WHILE([kill -0 $TMPPID 2>/dev/null])]) | |
152 | ||
153 | dnl on_exit "COMMAND" | |
154 | dnl | |
155 | dnl Add the shell COMMAND to a collection executed when the current test | |
156 | dnl completes, as a cleanup action. (The most common use is to kill a | |
157 | dnl daemon started by the test. This is important to prevent tests that | |
158 | dnl start daemons from hanging at exit.) | |
159 | dnl | |
160 | dnl Cleanup commands are executed in the reverse order of calls to this | |
161 | dnl function. | |
162 | m4_divert_text([PREPARE_TESTS], [dnl | |
163 | on_exit () { | |
164 | (echo "$1"; cat cleanup) > cleanup.tmp | |
165 | mv cleanup.tmp cleanup | |
166 | } | |
167 | ]) | |
168 | ||
169 | dnl Autoconf 2.63 compatibility verison of macro introduced in Autoconf 2.64: | |
170 | m4_ifndef([AS_VAR_APPEND], | |
171 | [m4_divert_text([PREPARE_TESTS], | |
172 | [as_var_append () { | |
173 | eval $1=\$$1\$2 | |
174 | } | |
175 | ]) | |
176 | m4_define([AS_VAR_APPEND], [as_var_append $1 $2])]) | |
177 | ||
178 | dnl Autoconf 2.63 compatibility verison of macro introduced in Autoconf 2.64: | |
179 | m4_ifndef([AT_CHECK_UNQUOTED], | |
180 | [m4_define([AT_CHECK_UNQUOTED], | |
181 | [_AT_CHECK([$1], [$2], AS_ESCAPE(m4_dquote(m4_expand([$3])), [""]), | |
182 | AS_ESCAPE(m4_dquote(m4_expand([$4])),[""]), [$5], [$6])])]) | |
183 | ||
184 | dnl Autoconf 2.63 compatibility verison of macro introduced in Autoconf 2.64: | |
185 | m4_ifndef([AT_SKIP_IF], | |
186 | [m4_define([AT_SKIP_IF], | |
187 | [AT_CHECK([($1) \ | |
188 | && exit 77 || exit 0], [0], [ignore], [ignore])])]) | |
189 | ||
190 | dnl Autoconf 2.63 compatibility verison of macro introduced in Autoconf 2.64: | |
191 | m4_ifndef([AT_FAIL_IF], | |
192 | [m4_define([AT_FAIL_IF], | |
193 | [AT_CHECK([($1) \ | |
194 | && exit 99 || exit 0], [0], [ignore], [ignore])])]) |