]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovs-vsctl.at
fatal-signal: After fork, clear hooks instead of disabling them.
[mirror_ovs.git] / tests / ovs-vsctl.at
CommitLineData
c75d1511
BP
1dnl OVS_VSCTL_SETUP
2dnl
3dnl Creates an empty database in the current directory and then starts
4dnl an ovsdb-server on it for ovs-vsctl to connect to.
5m4_define([OVS_VSCTL_SETUP],
6 [OVS_CHECK_LCOV(
8419883d
BP
7 [SCHEMA=$abs_top_builddir/vswitchd/vswitch-idl.ovsschema
8 if test ! -e $SCHEMA; then
9 SCHEMA=$abs_top_srcdir/vswitchd/vswitch-idl.ovsschema
10 if test ! -e $SCHEMA; then
11 echo 'Failed to find vswitch-idl.ovsschema'
12 exit 1
13 fi
14 fi
15 ovsdb-tool create db $SCHEMA],
c75d1511
BP
16 [0], [stdout], [ignore])
17 OVS_CHECK_LCOV(
18 [[ovsdb-tool transact db \
19 '[{"op": "insert",
20 "table": "Open_vSwitch",
21 "row": {}}]']],
22 [0], [ignore], [ignore])
0b1fae1b 23 AT_CHECK([ovsdb-server --detach --pidfile=$PWD/pid --remote=punix:socket --unixctl=$PWD/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
c75d1511
BP
24
25dnl OVS_VSCTL_CLEANUP
26dnl
27dnl Kills off the database server.
28m4_define([OVS_VSCTL_CLEANUP], [test ! -e pid || kill `cat pid`])
29
3b135da3
BP
30dnl RUN_OVS_VSCTL(COMMAND, ...)
31dnl
c75d1511 32dnl Executes each ovs-vsctl COMMAND.
3b135da3 33m4_define([RUN_OVS_VSCTL],
b54e22e9 34 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket -- command
460aad80
BP
35])])
36m4_define([RUN_OVS_VSCTL_ONELINE],
b54e22e9 37 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline -- command
3b135da3
BP
38])])
39
4d14e30f
BP
40dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
41dnl
c75d1511 42dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
4d14e30f 43m4_define([RUN_OVS_VSCTL_TOGETHER],
b54e22e9 44 [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline dnl
460aad80 45m4_foreach([command], [$@], [ -- command])])
4d14e30f 46
8e58fa9a 47dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
3b135da3
BP
48dnl
49dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
8e58fa9a
BP
50dnl which must be in alphabetical order. Also checks that each BRIDGE has the
51dnl specified PARENT and is on the given VLAN.
52m4_define([_CHECK_BRIDGE],
53 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
c75d1511 54], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
55
56 # Check br-to-vlan, without --oneline.
8e58fa9a 57 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
c75d1511 58], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
59 # Check br-to-vlan, with --oneline.
60 # (This particular test is interesting with --oneline because it returns
61 # an integer instead of a string and that can cause type mismatches inside
62 # python if not done carefully.)
460aad80 63 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
c75d1511 64], [], [OVS_VSCTL_CLEANUP])
4d14e30f
BP
65
66 # Check multiple queries in a single run.
67 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
68[$2
69$3
c75d1511 70], [], [OVS_VSCTL_CLEANUP])])
3b135da3 71m4_define([CHECK_BRIDGES],
2792c2ad 72 [dnl Check that the bridges appear on list-br, without --oneline.
8e58fa9a 73 AT_CHECK(
3b135da3
BP
74 [RUN_OVS_VSCTL([list-br])],
75 [0],
8e58fa9a 76 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
c75d1511
BP
77])],
78 [],
79 [OVS_VSCTL_CLEANUP])
8e58fa9a 80
2792c2ad
BP
81 dnl Check that the bridges appear on list-br, with --oneline.
82 AT_CHECK(
460aad80 83 [RUN_OVS_VSCTL_ONELINE([list-br])],
2792c2ad
BP
84 [0],
85 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
c75d1511
BP
86],
87 [],
88 [OVS_VSCTL_CLEANUP])
2792c2ad 89
8e58fa9a
BP
90 dnl Check that each bridge exists according to br-exists and that
91 dnl a bridge that should not exist does not.
92 m4_foreach([brinfo], [$@],
c75d1511
BP
93 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])], [0], [],
94 [], [OVS_VSCTL_CLEANUP])])
95 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2], [], [],
96 [OVS_VSCTL_CLEANUP])
8e58fa9a
BP
97
98 dnl Check that each bridge has the expected parent and VLAN.
99 m4_map([_CHECK_BRIDGE], [$@])])
3b135da3
BP
100
101dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
102dnl
103dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
104dnl list of ports, which must be in alphabetical order. Also checks
105dnl that "ovs-vsctl port-to-br" reports that each port is
106dnl in BRIDGE.
107m4_define([CHECK_PORTS],
2792c2ad
BP
108 [dnl Check ports without --oneline.
109 AT_CHECK(
3b135da3
BP
110 [RUN_OVS_VSCTL([list-ports $1])],
111 [0],
112 [m4_foreach([port], m4_cdr($@), [port
c75d1511
BP
113])],
114 [],
115 [OVS_VSCTL_CLEANUP])
2792c2ad
BP
116
117 dnl Check ports with --oneline.
118 AT_CHECK(
460aad80 119 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
2792c2ad
BP
120 [0],
121 [m4_join([\n], m4_shift($@))
c75d1511
BP
122],
123 [],
124 [OVS_VSCTL_CLEANUP])
125 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
126 [ovs-vsctl: no port named $1
127],
128 [OVS_VSCTL_CLEANUP])
3b135da3
BP
129 m4_foreach(
130 [port], m4_cdr($@),
131 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
c75d1511 132], [], [OVS_VSCTL_CLEANUP])])])
3b135da3
BP
133
134dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
135dnl
136dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
137dnl list of ifaces, which must be in alphabetical order. Also checks
138dnl that "ovs-vsctl iface-to-br" reports that each interface is
139dnl in BRIDGE.
140m4_define([CHECK_IFACES],
141 [AT_CHECK(
142 [RUN_OVS_VSCTL([list-ifaces $1])],
143 [0],
144 [m4_foreach([iface], m4_cdr($@), [iface
dfbe07ba
BP
145])],
146 [],
147 [OVS_VSCTL_CLEANUP])
c75d1511
BP
148 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
149 [ovs-vsctl: no interface named $1
150],
151 [OVS_VSCTL_CLEANUP])
3b135da3
BP
152 m4_foreach(
153 [iface], m4_cdr($@),
154 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
c75d1511
BP
155],
156 [], [OVS_VSCTL_CLEANUP])])])
3b135da3 157
8e58fa9a
BP
158dnl ----------------------------------------------------------------------
159AT_BANNER([ovs-vsctl unit tests -- real bridges])
160
3b135da3
BP
161AT_SETUP([add-br a])
162AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
163OVS_VSCTL_SETUP
164AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 165CHECK_BRIDGES([a, a, 0])
3b135da3
BP
166CHECK_PORTS([a])
167CHECK_IFACES([a])
c75d1511 168OVS_VSCTL_CLEANUP
3b135da3
BP
169AT_CLEANUP
170
1125a1b9
BP
171AT_SETUP([add-br a, add-br a])
172AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
173OVS_VSCTL_SETUP
174AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
175AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
176 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
c75d1511
BP
177], [OVS_VSCTL_CLEANUP])
178OVS_VSCTL_CLEANUP
1125a1b9
BP
179AT_CLEANUP
180
3b135da3
BP
181AT_SETUP([add-br a, add-br b])
182AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
183OVS_VSCTL_SETUP
184AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
185 [OVS_VSCTL_CLEANUP])
8e58fa9a 186CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
187CHECK_PORTS([a])
188CHECK_IFACES([a])
189CHECK_PORTS([b])
190CHECK_IFACES([b])
c75d1511 191OVS_VSCTL_CLEANUP
3b135da3
BP
192AT_CLEANUP
193
194AT_SETUP([add-br a, add-br b, del-br a])
195AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
196OVS_VSCTL_SETUP
197AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
198 [OVS_VSCTL_CLEANUP])
8e58fa9a 199CHECK_BRIDGES([b, b, 0])
3b135da3
BP
200CHECK_PORTS([b])
201CHECK_IFACES([b])
c75d1511 202OVS_VSCTL_CLEANUP
3b135da3
BP
203AT_CLEANUP
204
2792c2ad
BP
205AT_SETUP([add-br a, add-port a a1, add-port a a2])
206AT_KEYWORDS([ovs-vsctl])
c75d1511 207OVS_VSCTL_SETUP
2792c2ad 208AT_CHECK([RUN_OVS_VSCTL(
dfbe07ba 209 [add-br a],
460aad80 210 [--if-exists del-br b],
2792c2ad 211 [add-port a a1],
c75d1511 212 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
213CHECK_BRIDGES([a, a, 0])
214CHECK_PORTS([a], [a1], [a2])
215CHECK_IFACES([a], [a1], [a2])
c75d1511 216OVS_VSCTL_CLEANUP
2792c2ad
BP
217AT_CLEANUP
218
1125a1b9
BP
219AT_SETUP([add-br a, add-port a a1, add-port a a1])
220AT_KEYWORDS([ovs-vsctl])
c75d1511 221OVS_VSCTL_SETUP
1125a1b9
BP
222AT_CHECK([RUN_OVS_VSCTL(
223 [add-br a],
c75d1511 224 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
225AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
226 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
c75d1511
BP
227], [OVS_VSCTL_CLEANUP])
228OVS_VSCTL_CLEANUP
1125a1b9
BP
229AT_CLEANUP
230
3b135da3
BP
231AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
232AT_KEYWORDS([ovs-vsctl])
c75d1511 233OVS_VSCTL_SETUP
4d14e30f 234AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
235 [add-br a],
236 [add-br b],
237 [add-port a a1],
238 [add-port b b1],
460aad80
BP
239 [--if-exists del-port b b2],
240 [del-br a])], [0], [
241
242
243
244
245
246], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 247CHECK_BRIDGES([b, b, 0])
3b135da3
BP
248CHECK_PORTS([b], [b1])
249CHECK_IFACES([b], [b1])
c75d1511 250OVS_VSCTL_CLEANUP
3b135da3
BP
251AT_CLEANUP
252
253AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
254AT_KEYWORDS([ovs-vsctl])
c75d1511 255OVS_VSCTL_SETUP
3b135da3
BP
256AT_CHECK([RUN_OVS_VSCTL(
257 [add-br a],
c75d1511 258 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 259CHECK_BRIDGES([a, a, 0])
3b135da3
BP
260CHECK_PORTS([a], [bond0])
261CHECK_IFACES([a], [a1], [a2], [a3])
c75d1511 262OVS_VSCTL_CLEANUP
3b135da3
BP
263AT_CLEANUP
264
265AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
266AT_KEYWORDS([ovs-vsctl])
c75d1511 267OVS_VSCTL_SETUP
3b135da3
BP
268AT_CHECK([RUN_OVS_VSCTL(
269 [add-br a],
270 [add-br b],
271 [add-port a a1],
272 [add-port b b1],
c75d1511 273 [del-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 274CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
275CHECK_PORTS([a])
276CHECK_IFACES([a])
277CHECK_PORTS([b], [b1])
278CHECK_IFACES([b], [b1])
c75d1511 279OVS_VSCTL_CLEANUP
3b135da3
BP
280AT_CLEANUP
281
3d1b9636 282AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
3b135da3 283AT_KEYWORDS([ovs-vsctl])
c75d1511 284OVS_VSCTL_SETUP
4d14e30f 285AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
286 [add-br a],
287 [add-bond a bond0 a1 a2 a3],
460aad80
BP
288 [del-port bond0])], [0], [
289
290
291], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 292CHECK_BRIDGES([a, a, 0])
3b135da3 293CHECK_PORTS([a])
c75d1511 294OVS_VSCTL_CLEANUP
3b135da3
BP
295AT_CLEANUP
296
457e1eb0
BP
297AT_SETUP([external IDs])
298AT_KEYWORDS([ovs-vsctl])
299OVS_VSCTL_SETUP
300AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 301 [add-br a],
457e1eb0
BP
302 [add-port a a1],
303 [add-bond a bond0 a2 a3],
304 [br-set-external-id a key0 value0],
305 [port-set-external-id a1 key1 value1],
306 [iface-set-external-id a2 key2 value2],
307 [iface-set-external-id a2 key3 value3],
308 [iface-set-external-id a3 key4 value4],
309 [br-get-external-id a],
310 [br-get-external-id a key0],
311 [br-get-external-id a key1],
312 [br-set-external-id a key0 othervalue],
313 [br-get-external-id a],
314 [br-set-external-id a key0],
315 [br-get-external-id a],
316 [port-get-external-id a1],
317 [iface-get-external-id a2],
318 [iface-get-external-id a3])], [0], [
319
320
321
322
323
324
325
326key0=value0
327value0
328
329
330key0=othervalue
331
332
333key1=value1
334key2=value2\nkey3=value3
335key4=value4
336], [], [OVS_VSCTL_CLEANUP])
337AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 338 [br-get-external-id a],
457e1eb0
BP
339 [port-get-external-id a1],
340 [iface-get-external-id a2],
341 [iface-get-external-id a3])], [0],
342[
343key1=value1
344key2=value2\nkey3=value3
345key4=value4
346], [], [OVS_VSCTL_CLEANUP])
347CHECK_BRIDGES([a, a, 0])
348CHECK_PORTS([a], [a1], [bond0])
349CHECK_IFACES([a], [a1], [a2], [a3])
350OVS_VSCTL_CLEANUP
351AT_CLEANUP
352
8e58fa9a 353dnl ----------------------------------------------------------------------
3b135da3
BP
354AT_BANNER([ovs-vsctl unit tests -- fake bridges])
355
dfbe07ba
BP
356m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
357 [AT_CHECK(
358 [RUN_OVS_VSCTL(
359 [add-br xenbr0],
360 [add-port xenbr0 eth0],
361 [add-br xapi1 xenbr0 9],
362 [add-port xapi1 eth0.9])],
363 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
364
365AT_SETUP([simple fake bridge])
366AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 367OVS_VSCTL_SETUP
dfbe07ba
BP
368OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
369CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
3b135da3
BP
370CHECK_PORTS([xenbr0], [eth0])
371CHECK_IFACES([xenbr0], [eth0])
372CHECK_PORTS([xapi1], [eth0.9])
373CHECK_IFACES([xapi1], [eth0.9])
c75d1511 374OVS_VSCTL_CLEANUP
3b135da3
BP
375AT_CLEANUP
376
377AT_SETUP([simple fake bridge + del-br fake bridge])
378AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 379OVS_VSCTL_SETUP
dfbe07ba
BP
380OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
381AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 382CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
383CHECK_PORTS([xenbr0], [eth0])
384CHECK_IFACES([xenbr0], [eth0])
c75d1511 385OVS_VSCTL_CLEANUP
3b135da3
BP
386AT_CLEANUP
387
388AT_SETUP([simple fake bridge + del-br real bridge])
389AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 390OVS_VSCTL_SETUP
dfbe07ba
BP
391OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
392AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
3b135da3 393CHECK_BRIDGES
c75d1511 394OVS_VSCTL_CLEANUP
3b135da3
BP
395AT_CLEANUP
396
457e1eb0
BP
397AT_SETUP([simple fake bridge + external IDs])
398AT_KEYWORDS([ovs-vsctl fake-bridge])
399OVS_VSCTL_SETUP
400OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
401AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 402 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
403 [br-set-external-id xapi1 key1 value1],
404 [br-get-external-id xenbr0],
405 [br-get-external-id xenbr0 key0],
406 [br-get-external-id xapi1],
407 [br-get-external-id xapi1 key1])], [0], [
408
409key0=value0
410value0
411key1=value1
412value1
413], [], [OVS_VSCTL_CLEANUP])
414CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
415CHECK_PORTS([xenbr0], [eth0])
416CHECK_IFACES([xenbr0], [eth0])
417CHECK_PORTS([xapi1], [eth0.9])
418CHECK_IFACES([xapi1], [eth0.9])
419OVS_VSCTL_CLEANUP
420AT_CLEANUP
421
dfbe07ba
BP
422m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
423 [AT_CHECK(
424 [RUN_OVS_VSCTL(
425 [add-br xapi1],
426 [add-bond xapi1 bond0 eth0 eth1],
427 [add-br xapi2 xapi1 11],
428 [add-port xapi2 bond0.11])],
429 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
430
431AT_SETUP([fake bridge on bond])
432AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 433OVS_VSCTL_SETUP
dfbe07ba 434OVS_VSCTL_SETUP_BOND_FAKE_CONF
8e58fa9a 435CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
436CHECK_PORTS([xapi1], [bond0])
437CHECK_IFACES([xapi1], [eth0], [eth1])
438CHECK_PORTS([xapi2], [bond0.11])
439CHECK_IFACES([xapi2], [bond0.11])
c75d1511 440OVS_VSCTL_CLEANUP
3b135da3
BP
441AT_CLEANUP
442
443AT_SETUP([fake bridge on bond + del-br fake bridge])
444AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 445OVS_VSCTL_SETUP
dfbe07ba 446OVS_VSCTL_SETUP_BOND_FAKE_CONF
460aad80 447AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
dfbe07ba 448], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 449CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
450CHECK_PORTS([xapi1], [bond0])
451CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 452OVS_VSCTL_CLEANUP
3b135da3
BP
453AT_CLEANUP
454
455AT_SETUP([fake bridge on bond + del-br real bridge])
456AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba
BP
457OVS_VSCTL_SETUP
458OVS_VSCTL_SETUP_BOND_FAKE_CONF
3b135da3
BP
459AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
460CHECK_BRIDGES
c75d1511 461OVS_VSCTL_CLEANUP
3b135da3 462AT_CLEANUP