]> git.proxmox.com Git - ovs.git/blame - tests/ovs-vsctl.at
Implement IPFIX export
[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],
24c8ae53 6 [OVSDB_INIT([db])
77a922c7 7 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
c75d1511
BP
8
9dnl OVS_VSCTL_CLEANUP
10dnl
11dnl Kills off the database server.
028cbd99 12m4_define([OVS_VSCTL_CLEANUP], [OVSDB_SERVER_SHUTDOWN])
c75d1511 13
3b135da3
BP
14dnl RUN_OVS_VSCTL(COMMAND, ...)
15dnl
c75d1511 16dnl Executes each ovs-vsctl COMMAND.
3b135da3 17m4_define([RUN_OVS_VSCTL],
fba6bd1d 18 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket command
460aad80
BP
19])])
20m4_define([RUN_OVS_VSCTL_ONELINE],
fba6bd1d 21 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket --oneline -- command
3b135da3
BP
22])])
23
4d14e30f
BP
24dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
25dnl
c75d1511 26dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
4d14e30f 27m4_define([RUN_OVS_VSCTL_TOGETHER],
fba6bd1d 28 [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket --oneline dnl
460aad80 29m4_foreach([command], [$@], [ -- command])])
4d14e30f 30
8e58fa9a 31dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
3b135da3
BP
32dnl
33dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
8e58fa9a
BP
34dnl which must be in alphabetical order. Also checks that each BRIDGE has the
35dnl specified PARENT and is on the given VLAN.
36m4_define([_CHECK_BRIDGE],
37 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
c75d1511 38], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
39
40 # Check br-to-vlan, without --oneline.
8e58fa9a 41 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
c75d1511 42], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
43 # Check br-to-vlan, with --oneline.
44 # (This particular test is interesting with --oneline because it returns
45 # an integer instead of a string and that can cause type mismatches inside
46 # python if not done carefully.)
460aad80 47 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
c75d1511 48], [], [OVS_VSCTL_CLEANUP])
4d14e30f
BP
49
50 # Check multiple queries in a single run.
51 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
52[$2
53$3
c75d1511 54], [], [OVS_VSCTL_CLEANUP])])
3b135da3 55m4_define([CHECK_BRIDGES],
2792c2ad 56 [dnl Check that the bridges appear on list-br, without --oneline.
8e58fa9a 57 AT_CHECK(
3b135da3
BP
58 [RUN_OVS_VSCTL([list-br])],
59 [0],
8e58fa9a 60 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
c75d1511
BP
61])],
62 [],
63 [OVS_VSCTL_CLEANUP])
8e58fa9a 64
2792c2ad
BP
65 dnl Check that the bridges appear on list-br, with --oneline.
66 AT_CHECK(
460aad80 67 [RUN_OVS_VSCTL_ONELINE([list-br])],
2792c2ad
BP
68 [0],
69 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
c75d1511
BP
70],
71 [],
72 [OVS_VSCTL_CLEANUP])
2792c2ad 73
8e58fa9a
BP
74 dnl Check that each bridge exists according to br-exists and that
75 dnl a bridge that should not exist does not.
76 m4_foreach([brinfo], [$@],
c75d1511
BP
77 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])], [0], [],
78 [], [OVS_VSCTL_CLEANUP])])
79 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2], [], [],
80 [OVS_VSCTL_CLEANUP])
8e58fa9a
BP
81
82 dnl Check that each bridge has the expected parent and VLAN.
83 m4_map([_CHECK_BRIDGE], [$@])])
3b135da3
BP
84
85dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
86dnl
87dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
88dnl list of ports, which must be in alphabetical order. Also checks
89dnl that "ovs-vsctl port-to-br" reports that each port is
90dnl in BRIDGE.
91m4_define([CHECK_PORTS],
2792c2ad
BP
92 [dnl Check ports without --oneline.
93 AT_CHECK(
3b135da3
BP
94 [RUN_OVS_VSCTL([list-ports $1])],
95 [0],
96 [m4_foreach([port], m4_cdr($@), [port
c75d1511
BP
97])],
98 [],
99 [OVS_VSCTL_CLEANUP])
2792c2ad
BP
100
101 dnl Check ports with --oneline.
102 AT_CHECK(
460aad80 103 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
2792c2ad
BP
104 [0],
105 [m4_join([\n], m4_shift($@))
c75d1511
BP
106],
107 [],
108 [OVS_VSCTL_CLEANUP])
109 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
110 [ovs-vsctl: no port named $1
111],
112 [OVS_VSCTL_CLEANUP])
3b135da3
BP
113 m4_foreach(
114 [port], m4_cdr($@),
115 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
c75d1511 116], [], [OVS_VSCTL_CLEANUP])])])
3b135da3
BP
117
118dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
119dnl
120dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
121dnl list of ifaces, which must be in alphabetical order. Also checks
122dnl that "ovs-vsctl iface-to-br" reports that each interface is
123dnl in BRIDGE.
124m4_define([CHECK_IFACES],
125 [AT_CHECK(
126 [RUN_OVS_VSCTL([list-ifaces $1])],
127 [0],
128 [m4_foreach([iface], m4_cdr($@), [iface
dfbe07ba
BP
129])],
130 [],
131 [OVS_VSCTL_CLEANUP])
c75d1511
BP
132 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
133 [ovs-vsctl: no interface named $1
134],
135 [OVS_VSCTL_CLEANUP])
3b135da3
BP
136 m4_foreach(
137 [iface], m4_cdr($@),
138 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
c75d1511
BP
139],
140 [], [OVS_VSCTL_CLEANUP])])])
3b135da3 141
fba6bd1d
BP
142dnl ----------------------------------------------------------------------
143AT_BANNER([ovs-vsctl unit tests])
144
145AT_SETUP([ovs-vsctl connection retry])
146OVS_RUNDIR=$PWD; export OVS_RUNDIR
147
148dnl Without --retry, there should be no retry for active connections.
149AT_CHECK([ovs-vsctl --db=unix:foo --timeout=10 -vreconnect:emer -- init],
150 [1], [], [stderr])
151AT_CHECK([[sed 's/([^()]*)/(...reason...)/' stderr]], [0],
152 [ovs-vsctl: unix:foo: database connection failed (...reason...)
153])
154
155dnl With --retry, we should retry for active connections.
156AT_CHECK(
157 [ovs-vsctl --db=unix:foo --timeout=1 --retry -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
158 echo $? > status],
159 [0], [], [stderr])
160AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
161])
162AT_CHECK([kill -l `cat status`], [0], [ALRM
163])
164
165dnl Without --retry, we should retry for passive connections.
166AT_CHECK(
167 [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
168 echo $? > status],
169 [0], [], [stderr])
170AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
171])
172AT_CHECK([kill -l `cat status`], [0], [ALRM
173])
174AT_CLEANUP
175
8e58fa9a
BP
176dnl ----------------------------------------------------------------------
177AT_BANNER([ovs-vsctl unit tests -- real bridges])
178
3b135da3
BP
179AT_SETUP([add-br a])
180AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
181OVS_VSCTL_SETUP
182AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 183CHECK_BRIDGES([a, a, 0])
3b135da3
BP
184CHECK_PORTS([a])
185CHECK_IFACES([a])
c75d1511 186OVS_VSCTL_CLEANUP
3b135da3
BP
187AT_CLEANUP
188
1125a1b9
BP
189AT_SETUP([add-br a, add-br a])
190AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
191OVS_VSCTL_SETUP
192AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
193AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
194 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
c75d1511
BP
195], [OVS_VSCTL_CLEANUP])
196OVS_VSCTL_CLEANUP
1125a1b9
BP
197AT_CLEANUP
198
3b135da3
BP
199AT_SETUP([add-br a, add-br b])
200AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
201OVS_VSCTL_SETUP
202AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
203 [OVS_VSCTL_CLEANUP])
aeee85aa
BP
204AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
205 [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
206],
207 [OVS_VSCTL_CLEANUP])
8e58fa9a 208CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
209CHECK_PORTS([a])
210CHECK_IFACES([a])
211CHECK_PORTS([b])
212CHECK_IFACES([b])
c75d1511 213OVS_VSCTL_CLEANUP
3b135da3
BP
214AT_CLEANUP
215
216AT_SETUP([add-br a, add-br b, del-br a])
217AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
218OVS_VSCTL_SETUP
219AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
220 [OVS_VSCTL_CLEANUP])
8e58fa9a 221CHECK_BRIDGES([b, b, 0])
3b135da3
BP
222CHECK_PORTS([b])
223CHECK_IFACES([b])
c75d1511 224OVS_VSCTL_CLEANUP
3b135da3
BP
225AT_CLEANUP
226
28a14bf3
EJ
227AT_SETUP([add-br a, del-br a, add-br a])
228AT_KEYWORDS([ovs-vsctl])
229OVS_VSCTL_SETUP
230AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
231 [add-br a],
232 [del-br a],
233 [add-br a],
234 [set Interface a other_config:key=value],
235 [get Interface a other_config:key])], [0], [
236
237
238
239value
240], [], [OVS_VSCTL_CLEANUP])
241CHECK_BRIDGES([a, a, 0])
242CHECK_PORTS([a])
243CHECK_IFACES([a])
244OVS_VSCTL_CLEANUP
245AT_CLEANUP
246
2792c2ad
BP
247AT_SETUP([add-br a, add-port a a1, add-port a a2])
248AT_KEYWORDS([ovs-vsctl])
c75d1511 249OVS_VSCTL_SETUP
2792c2ad 250AT_CHECK([RUN_OVS_VSCTL(
dfbe07ba 251 [add-br a],
460aad80 252 [--if-exists del-br b],
2792c2ad 253 [add-port a a1],
c75d1511 254 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
255CHECK_BRIDGES([a, a, 0])
256CHECK_PORTS([a], [a1], [a2])
257CHECK_IFACES([a], [a1], [a2])
c75d1511 258OVS_VSCTL_CLEANUP
2792c2ad
BP
259AT_CLEANUP
260
1125a1b9
BP
261AT_SETUP([add-br a, add-port a a1, add-port a a1])
262AT_KEYWORDS([ovs-vsctl])
c75d1511 263OVS_VSCTL_SETUP
1125a1b9
BP
264AT_CHECK([RUN_OVS_VSCTL(
265 [add-br a],
c75d1511 266 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
267AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
268 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
c75d1511
BP
269], [OVS_VSCTL_CLEANUP])
270OVS_VSCTL_CLEANUP
1125a1b9
BP
271AT_CLEANUP
272
3b135da3
BP
273AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
274AT_KEYWORDS([ovs-vsctl])
c75d1511 275OVS_VSCTL_SETUP
4d14e30f 276AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
277 [add-br a],
278 [add-br b],
279 [add-port a a1],
280 [add-port b b1],
460aad80
BP
281 [--if-exists del-port b b2],
282 [del-br a])], [0], [
283
284
285
286
287
288], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 289CHECK_BRIDGES([b, b, 0])
3b135da3
BP
290CHECK_PORTS([b], [b1])
291CHECK_IFACES([b], [b1])
c75d1511 292OVS_VSCTL_CLEANUP
3b135da3
BP
293AT_CLEANUP
294
295AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
296AT_KEYWORDS([ovs-vsctl])
c75d1511 297OVS_VSCTL_SETUP
3b135da3
BP
298AT_CHECK([RUN_OVS_VSCTL(
299 [add-br a],
c75d1511 300 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
bb1c67c8
BP
301AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [],
302 [OVS_VSCTL_CLEANUP])
303AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
304 [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
305],
306 [OVS_VSCTL_CLEANUP])
8e58fa9a 307CHECK_BRIDGES([a, a, 0])
3b135da3
BP
308CHECK_PORTS([a], [bond0])
309CHECK_IFACES([a], [a1], [a2], [a3])
c75d1511 310OVS_VSCTL_CLEANUP
3b135da3
BP
311AT_CLEANUP
312
313AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
314AT_KEYWORDS([ovs-vsctl])
c75d1511 315OVS_VSCTL_SETUP
3b135da3
BP
316AT_CHECK([RUN_OVS_VSCTL(
317 [add-br a],
318 [add-br b],
18b239f5
BP
319 [add-port a a1 tag=9],
320 [get port a1 tag],
bb1c67c8 321 [--may-exist add-port b b1],
18b239f5
BP
322 [del-port a a1])], [0], [9
323], [], [OVS_VSCTL_CLEANUP])
bb1c67c8
BP
324AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],
325 [OVS_VSCTL_CLEANUP])
326AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
327 [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
328],
329 [OVS_VSCTL_CLEANUP])
8e58fa9a 330CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
331CHECK_PORTS([a])
332CHECK_IFACES([a])
333CHECK_PORTS([b], [b1])
334CHECK_IFACES([b], [b1])
c75d1511 335OVS_VSCTL_CLEANUP
3b135da3
BP
336AT_CLEANUP
337
3d1b9636 338AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
3b135da3 339AT_KEYWORDS([ovs-vsctl])
c75d1511 340OVS_VSCTL_SETUP
4d14e30f 341AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3 342 [add-br a],
18b239f5
BP
343 [add-bond a bond0 a1 a2 a3 tag=9],
344 [get Port bond0 tag],
460aad80
BP
345 [del-port bond0])], [0], [
346
18b239f5 3479
460aad80
BP
348
349], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 350CHECK_BRIDGES([a, a, 0])
3b135da3 351CHECK_PORTS([a])
c75d1511 352OVS_VSCTL_CLEANUP
3b135da3
BP
353AT_CLEANUP
354
457e1eb0
BP
355AT_SETUP([external IDs])
356AT_KEYWORDS([ovs-vsctl])
357OVS_VSCTL_SETUP
fbd8715e 358AT_CHECK([RUN_OVS_VSCTL_ONELINE(
460aad80 359 [add-br a],
457e1eb0
BP
360 [add-port a a1],
361 [add-bond a bond0 a2 a3],
362 [br-set-external-id a key0 value0],
e328faad
BP
363 [set port a1 external-ids:key1=value1],
364 [set interface a2 external-ids:key2=value2],
365 [set interface a2 external-ids:key3=value3],
366 [set interface a3 external-ids:key4=value4],
457e1eb0
BP
367 [br-get-external-id a],
368 [br-get-external-id a key0],
369 [br-get-external-id a key1],
370 [br-set-external-id a key0 othervalue],
371 [br-get-external-id a],
372 [br-set-external-id a key0],
373 [br-get-external-id a],
e328faad
BP
374 [get port a1 external-ids],
375 [get interface a2 external-ids],
376 [get interface a3 external-ids])], [0], [
457e1eb0
BP
377
378
379
380
381
382
383
384key0=value0
385value0
386
387
388key0=othervalue
389
390
e328faad
BP
391{"key1"="value1"}
392{"key2"="value2", "key3"="value3"}
393{"key4"="value4"}
457e1eb0
BP
394], [], [OVS_VSCTL_CLEANUP])
395AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 396 [br-get-external-id a],
e328faad
BP
397 [get port a1 external-ids],
398 [get interface a2 external-ids],
399 [get interface a3 external-ids])], [0],
457e1eb0 400[
e328faad
BP
401{"key1"="value1"}
402{"key2"="value2", "key3"="value3"}
403{"key4"="value4"}
457e1eb0
BP
404], [], [OVS_VSCTL_CLEANUP])
405CHECK_BRIDGES([a, a, 0])
406CHECK_PORTS([a], [a1], [bond0])
407CHECK_IFACES([a], [a1], [a2], [a3])
408OVS_VSCTL_CLEANUP
409AT_CLEANUP
410
76ce9432
BP
411AT_SETUP([controllers])
412AT_KEYWORDS([controller ovs-vsctl])
413OVS_VSCTL_SETUP
414AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
e44768b7 415 [add-br br0],
76ce9432 416
76ce9432 417 [get-controller br0],
76ce9432 418 [set-controller br0 tcp:4.5.6.7],
76ce9432
BP
419 [get-controller br0],
420
421 [del-controller br0],
76ce9432
BP
422 [get-controller br0],
423
424 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
76ce9432
BP
425 [get-controller br0])], [0], [
426
76ce9432 427
76ce9432
BP
428tcp:4.5.6.7
429
430
431
76ce9432
BP
432tcp:5.4.3.2\ntcp:8.9.10.11
433], [], [OVS_VSCTL_CLEANUP])
434OVS_VSCTL_CLEANUP
435AT_CLEANUP
436
8e58fa9a 437dnl ----------------------------------------------------------------------
5341d046 438dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
dfbe07ba
BP
439m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
440 [AT_CHECK(
441 [RUN_OVS_VSCTL(
442 [add-br xenbr0],
aeee85aa 443 [--may-exist add-br xenbr0],
dfbe07ba 444 [add-port xenbr0 eth0],
bb1c67c8 445 [--may-exist add-port xenbr0 eth0],
5341d046
BP
446 [add-br xapi1 xenbr0 $1],
447 [--may-exist add-br xapi1 xenbr0 $1],
448 [add-port xapi1 eth0.$1])],
dfbe07ba 449 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3 450
5341d046
BP
451dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
452m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
453AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
454
455AT_SETUP([simple fake bridge (VLAN $1)])
3b135da3 456AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 457OVS_VSCTL_SETUP
5341d046 458OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
aeee85aa 459AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
5341d046 460 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
aeee85aa 461], [OVS_VSCTL_CLEANUP])
5341d046
BP
462AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
463 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
aeee85aa
BP
464], [OVS_VSCTL_CLEANUP])
465AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
5341d046 466 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
aeee85aa 467], [OVS_VSCTL_CLEANUP])
5341d046 468CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
3b135da3
BP
469CHECK_PORTS([xenbr0], [eth0])
470CHECK_IFACES([xenbr0], [eth0])
5341d046
BP
471CHECK_PORTS([xapi1], [eth0.$1])
472CHECK_IFACES([xapi1], [eth0.$1])
c75d1511 473OVS_VSCTL_CLEANUP
3b135da3
BP
474AT_CLEANUP
475
515d830a
JP
476AT_SETUP([list bridges -- real and fake (VLAN $1)])
477AT_KEYWORDS([ovs-vsctl fake-bridge])
478OVS_VSCTL_SETUP
479OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
480AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
481 [xapi1\nxenbr0
482], [], [OVS_VSCTL_CLEANUP])
483AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
484 [xenbr0
485], [], [OVS_VSCTL_CLEANUP])
486AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
487 [xapi1
488], [], [OVS_VSCTL_CLEANUP])
489OVS_VSCTL_CLEANUP
490AT_CLEANUP
491
5341d046 492AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
3b135da3 493AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 494OVS_VSCTL_SETUP
5341d046 495OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
dfbe07ba 496AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 497CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
498CHECK_PORTS([xenbr0], [eth0])
499CHECK_IFACES([xenbr0], [eth0])
c75d1511 500OVS_VSCTL_CLEANUP
3b135da3
BP
501AT_CLEANUP
502
5341d046 503AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
3b135da3 504AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 505OVS_VSCTL_SETUP
5341d046 506OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
dfbe07ba 507AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
3b135da3 508CHECK_BRIDGES
c75d1511 509OVS_VSCTL_CLEANUP
3b135da3
BP
510AT_CLEANUP
511
5341d046 512AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
457e1eb0
BP
513AT_KEYWORDS([ovs-vsctl fake-bridge])
514OVS_VSCTL_SETUP
5341d046 515OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
457e1eb0 516AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 517 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
518 [br-set-external-id xapi1 key1 value1],
519 [br-get-external-id xenbr0],
520 [br-get-external-id xenbr0 key0],
521 [br-get-external-id xapi1],
522 [br-get-external-id xapi1 key1])], [0], [
523
524key0=value0
525value0
526key1=value1
527value1
528], [], [OVS_VSCTL_CLEANUP])
5341d046 529CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
457e1eb0
BP
530CHECK_PORTS([xenbr0], [eth0])
531CHECK_IFACES([xenbr0], [eth0])
5341d046
BP
532CHECK_PORTS([xapi1], [eth0.$1])
533CHECK_IFACES([xapi1], [eth0.$1])
457e1eb0
BP
534OVS_VSCTL_CLEANUP
535AT_CLEANUP
5341d046
BP
536]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
537
538OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
539OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
457e1eb0 540
5341d046 541dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
dfbe07ba
BP
542m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
543 [AT_CHECK(
544 [RUN_OVS_VSCTL(
545 [add-br xapi1],
546 [add-bond xapi1 bond0 eth0 eth1],
5341d046
BP
547 [add-br xapi2 xapi1 $1],
548 [add-port xapi2 bond0.$1])],
dfbe07ba 549 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
550
551AT_SETUP([fake bridge on bond])
552AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 553OVS_VSCTL_SETUP
5341d046 554OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
8e58fa9a 555CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
556CHECK_PORTS([xapi1], [bond0])
557CHECK_IFACES([xapi1], [eth0], [eth1])
558CHECK_PORTS([xapi2], [bond0.11])
559CHECK_IFACES([xapi2], [bond0.11])
c75d1511 560OVS_VSCTL_CLEANUP
3b135da3
BP
561AT_CLEANUP
562
563AT_SETUP([fake bridge on bond + del-br fake bridge])
564AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 565OVS_VSCTL_SETUP
5341d046 566OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
460aad80 567AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
dfbe07ba 568], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 569CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
570CHECK_PORTS([xapi1], [bond0])
571CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 572OVS_VSCTL_CLEANUP
3b135da3
BP
573AT_CLEANUP
574
575AT_SETUP([fake bridge on bond + del-br real bridge])
576AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba 577OVS_VSCTL_SETUP
5341d046 578OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
3b135da3
BP
579AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
580CHECK_BRIDGES
c75d1511 581OVS_VSCTL_CLEANUP
3b135da3 582AT_CLEANUP
5c414a2e 583
24b8b259
AE
584dnl ----------------------------------------------------------------------
585AT_BANNER([ovs-vsctl unit tests -- manager commands])
586
587AT_SETUP([managers])
588AT_KEYWORDS([manager ovs-vsctl])
589OVS_VSCTL_SETUP
590AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
591 [del-manager],
592 [get-manager],
593 [set-manager tcp:4.5.6.7],
594 [get-manager],
595 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
596 [get-manager],
597 [del-manager],
598 [get-manager])], [0], [
599
600
601tcp:4.5.6.7
602
603tcp:5.4.3.2\ntcp:8.9.10.11
604
605
606], [], [OVS_VSCTL_CLEANUP])
607OVS_VSCTL_CLEANUP
608AT_CLEANUP
609
5c414a2e
BP
610dnl ----------------------------------------------------------------------
611AT_BANNER([ovs-vsctl unit tests -- database commands])
612
613AT_SETUP([database commands -- positive checks])
614AT_KEYWORDS([ovs-vsctl])
615OVS_VSCTL_SETUP
c5f341ab
BP
616AT_CHECK(
617 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0],
618 [set o . bridges=@br0])],
5c414a2e
BP
619 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
620cp stdout out1
e44768b7 621AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])],
5c414a2e
BP
622 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
623cp stdout out2
5c6d0628 624AT_CHECK([${PERL} $srcdir/uuidfilt.pl out1 out2], [0],
5c414a2e 625 [[<0>
c5f341ab 626
bd76d25d
BP
627_uuid : <0>
628controller : []
629datapath_id : []
630datapath_type : ""
631external_ids : {}
31681a5d 632fail_mode : []
bd76d25d 633flood_vlans : []
254750ce 634flow_tables : {}
29089a54 635ipfix : []
bd76d25d
BP
636mirrors : []
637name : "br0"
638netflow : []
639other_config : {}
640ports : []
7beaa082 641protocols : []
bd76d25d 642sflow : []
21f7563c
JP
643status : {}
644stp_enable : false
f40a9b61 645<0>
5c414a2e 646]], [ignore], [test ! -e pid || kill `cat pid`])
9591fefe
BP
647AT_CHECK(
648 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])],
649 [0],
650 [[fail_mode : []
651name : "br0"
652datapath_type : ""
653]], [ignore], [test ! -e pid || kill `cat pid`])
0a140468
BP
654AT_CHECK(
655 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])],
656 [0],
657 [[fail_mode : []
658name : "br0"
659datapath_type : ""
660]], [ignore], [test ! -e pid || kill `cat pid`])
c5f341ab
BP
661AT_CHECK([
662 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"],
663 [--id=@br2 create b name=br2 external-ids:bar=quux],
664 [add o . bridges @br1 @br2])],
0a140468
BP
665 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
666AT_CHECK(
667 [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout],
668 [ignore], [test ! -e pid || kill `cat pid`])
669AT_CHECK([sed -n '/./p' stdout | sort], [0],
670 [[name : "br0"
671name : "br2"
672]])
5c414a2e
BP
673AT_CHECK(
674 [RUN_OVS_VSCTL(
675 [set bridge br0 \
676 'other_config:datapath_id="0123456789ab"' \
677 'other_config:hwaddr="00:11:22:33:44:55"' \
d3f82921 678 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
e44768b7 679 add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
5c414a2e 680 [0], [], [], [OVS_VSCTL_CLEANUP])
e44768b7 681AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
d3f82921 682 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
5c414a2e 683], [], [OVS_VSCTL_CLEANUP])
e44768b7 684AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
5c414a2e
BP
685 [0], ["00:11:22:33:44:55"
686
687], [], [OVS_VSCTL_CLEANUP])
688AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])],
689 [0], [{datapath_id="0123456789ab"}
690], [], [OVS_VSCTL_CLEANUP])
691AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])],
692 [0], [{}
693], [], [OVS_VSCTL_CLEANUP])
694AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])],
695 [0], [{}
696], [], [OVS_VSCTL_CLEANUP])
0a140468
BP
697AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0],
698 [destroy b br1],
c5f341ab
BP
699 [destroy b br2],
700 [clear o . bridges])],
5c414a2e
BP
701 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
702AT_CHECK([RUN_OVS_VSCTL([list b])],
703 [0], [], [], [OVS_VSCTL_CLEANUP])
e99d41f7
BP
704AT_CHECK([RUN_OVS_VSCTL([--if-exists get b x datapath_id])],
705 [0], [], [], [OVS_VSCTL_CLEANUP])
706AT_CHECK([RUN_OVS_VSCTL([--if-exists list b x])],
707 [0], [], [], [OVS_VSCTL_CLEANUP])
708AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])],
709 [0], [], [], [OVS_VSCTL_CLEANUP])
710AT_CHECK(
711 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])],
712 [0], [], [], [OVS_VSCTL_CLEANUP])
713AT_CHECK(
714 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])],
715 [0], [], [], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
716OVS_VSCTL_CLEANUP
717AT_CLEANUP
718
719AT_SETUP([database commands -- negative checks])
720AT_KEYWORDS([ovs-vsctl])
721OVS_VSCTL_SETUP
401d5a6d
BP
722
723AT_CHECK([ovs-vsctl --may-exist],
724 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
725], [OVS_VSCTL_CLEANUP])
726AT_CHECK([ovs-vsctl --may-exist --],
727 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
728], [OVS_VSCTL_CLEANUP])
729AT_CHECK([ovs-vsctl -- --may-exist],
730 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
731], [OVS_VSCTL_CLEANUP])
732
c5f341ab 733AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
5c414a2e
BP
734 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
735AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
736 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
737AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
738 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
c5f341ab 739AT_CHECK([
eed8052c 740 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
c5f341ab 741 [set bridge br0 netflow=@n])],
5c414a2e
BP
742 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
743cp stdout netflow-uuid
eed8052c 744AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])],
5c414a2e 745 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
5c6d0628 746AT_CHECK([${PERL} $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
5c414a2e 747 [[<0>
c5f341ab 748
bd76d25d
BP
749_uuid : <0>
750active_timeout : 0
751add_id_to_interface : false
752engine_id : []
753engine_type : []
13008eb3 754external_ids : {}
bd76d25d 755targets : ["1.2.3.4:567"]
5c414a2e
BP
756]], [ignore], [test ! -e pid || kill `cat pid`])
757AT_CHECK([RUN_OVS_VSCTL([list interx x])],
758 [1], [], [ovs-vsctl: unknown table "interx"
759], [OVS_VSCTL_CLEANUP])
760AT_CHECK([RUN_OVS_VSCTL([list b x])],
761 [1], [], [ovs-vsctl: no row "x" in table Bridge
762], [OVS_VSCTL_CLEANUP])
e99d41f7
BP
763AT_CHECK([RUN_OVS_VSCTL([get b x datapath_id])],
764 [1], [], [ovs-vsctl: no row "x" in table Bridge
765], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
766AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
767 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
768], [OVS_VSCTL_CLEANUP])
769AT_CHECK([RUN_OVS_VSCTL([get b br0 x])],
770 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
771], [OVS_VSCTL_CLEANUP])
772AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])],
773 [1], [], [ovs-vsctl: :y=z: missing column name
774], [OVS_VSCTL_CLEANUP])
775AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])],
e89e5374 776 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
5c414a2e 777], [OVS_VSCTL_CLEANUP])
7db03f7c
BP
778AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])],
779 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
780], [OVS_VSCTL_CLEANUP])
e99d41f7
BP
781AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
782 [1], [], [ovs-vsctl: no row "x" in table Controller
783], [OVS_VSCTL_CLEANUP])
7db03f7c 784AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])],
2a9537e2 785 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
7db03f7c 786], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
787AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])],
788 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
789], [OVS_VSCTL_CLEANUP])
790AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])],
791 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
792], [OVS_VSCTL_CLEANUP])
793AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])],
794 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
795], [OVS_VSCTL_CLEANUP])
796AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])],
bd76d25d 797 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
5c414a2e
BP
798], [OVS_VSCTL_CLEANUP])
799AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])],
bd76d25d 800 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
5c414a2e 801], [OVS_VSCTL_CLEANUP])
bfc96d9b
BP
802AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
803 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
804]], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
805AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
806 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
807], [OVS_VSCTL_CLEANUP])
bd76d25d 808AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])],
5c414a2e
BP
809 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
810], [OVS_VSCTL_CLEANUP])
eed8052c 811AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
f19f25a4 812 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
5c414a2e 813], [OVS_VSCTL_CLEANUP])
e99d41f7
BP
814AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
815 [1], [], [ovs-vsctl: no row "x" in table NetFlow
816], [OVS_VSCTL_CLEANUP])
817AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
818 [1], [], [ovs-vsctl: no row "x" in table NetFlow
819], [OVS_VSCTL_CLEANUP])
eed8052c 820AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
5c414a2e
BP
821 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
822], [OVS_VSCTL_CLEANUP])
0d0f05b9 823AT_CHECK([RUN_OVS_VSCTL([destroy b br2])],
5c414a2e
BP
824 [1], [], [ovs-vsctl: no row "br2" in table Bridge
825], [OVS_VSCTL_CLEANUP])
29089a54 826AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
341c4e59
BP
827 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
828], [OVS_VSCTL_CLEANUP])
829AT_CHECK([RUN_OVS_VSCTL([set port br1 name br2])],
830 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
831], [OVS_VSCTL_CLEANUP])
832AT_CHECK([RUN_OVS_VSCTL([remove b br1 name br1])],
833 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
834], [OVS_VSCTL_CLEANUP])
835AT_CHECK([RUN_OVS_VSCTL([clear b br1 name])],
836 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
837], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
838OVS_VSCTL_CLEANUP
839AT_CLEANUP
840
2a9537e2
BP
841AT_SETUP([database commands -- conditions])
842AT_KEYWORDS([ovs-vsctl])
0b7140bb 843ON_EXIT([kill `cat pid`])
2a9537e2
BP
844OVS_VSCTL_SETUP
845AT_CHECK(
846 [RUN_OVS_VSCTL_TOGETHER(
847 [add-br br0],
848 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
849 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
850 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
851 [add-br br4], [set bridge br4 flood_vlans=2],
852 [add-br br5], [set bridge br5 flood_vlans=0,2],
853 [add-br br6], [set bridge br6 flood_vlans=1,2],
854 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869])
870m4_define([VSCTL_CHECK_FIND],
fba6bd1d 871 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer --db=unix:socket -- --columns=name find bridge '$1' | sort`], [0], [$2
2a9537e2
BP
872])])
873
874# Arithmetic relational operators without keys.
875VSCTL_CHECK_FIND([flood_vlans=0], [br1])
876VSCTL_CHECK_FIND([flood_vlans=1], [br2])
877VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
878VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
879VSCTL_CHECK_FIND([flood_vlans=3], [])
880
881VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
882VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
883VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
884VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
885VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
886
887VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
888VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
889VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
890VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
891VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
892VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
893VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
894VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
895
896# Set relational operators without keys.
897VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
898VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
899VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
900VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
901VSCTL_CHECK_FIND([flood_vlans{=}3], [])
902
903VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
904VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
905VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
906VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
907VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
908
909VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
910VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
911VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
912VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
913VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
914VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
915
916VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
917VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
918VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
919VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
920VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
921VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
922VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
923
924# Arithmetic relational operators with keys.
925VSCTL_CHECK_FIND([other-config:x=""], [br1])
926VSCTL_CHECK_FIND([other-config:x=y], [br2])
927VSCTL_CHECK_FIND([other-config:x=z], [br3])
928
929VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
930VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
931VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
932
933VSCTL_CHECK_FIND([other-config:x>y], [br3])
934VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
935VSCTL_CHECK_FIND([other-config:x<y], [br1])
936VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
937
938# Set relational operators with keys.
939VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
940VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
941VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
942VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
943
944VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
945VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
946VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
947VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
948
949VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
950VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
951VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
952VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
953VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
954VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
955
956VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
957VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
958VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
959VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
960VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
961
962VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
963VSCTL_CHECK_FIND([other-config:x{>=}x], [])
964VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
965VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
966VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
967
968VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
969VSCTL_CHECK_FIND([other-config:x{>}x], [])
970VSCTL_CHECK_FIND([other-config:x{>}""], [])
971VSCTL_CHECK_FIND([other-config:x{>}y], [])
972VSCTL_CHECK_FIND([other-config:x{>}z], [])
94c33672 973OVS_VSCTL_CLEANUP
2a9537e2
BP
974AT_CLEANUP
975
7db03f7c
BP
976AT_SETUP([database commands -- wait-until immediately true])
977AT_KEYWORDS([ovs-vsctl])
978OVS_VSCTL_SETUP
979AT_CHECK([RUN_OVS_VSCTL(
980 [add-br br0],
981 [add-bond br0 bond0 eth0 eth1],
982 [set port bond0 bond_updelay=500 other-config:abc=def])],
983 [0], [], [], [OVS_VSCTL_CLEANUP])
289df16d 984AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])],
7db03f7c
BP
985 [0], [], [], [OVS_VSCTL_CLEANUP])
986AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])],
987 [0], [], [], [OVS_VSCTL_CLEANUP])
988AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])],
989 [0], [], [], [OVS_VSCTL_CLEANUP])
990AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])],
991 [0], [], [], [OVS_VSCTL_CLEANUP])
992OVS_VSCTL_CLEANUP
993AT_CLEANUP
994
995AT_SETUP([database commands -- wait-until must wait])
996AT_KEYWORDS([ovs-vsctl])
7454ec7a 997
7db03f7c
BP
998OVS_VSCTL_SETUP
999
1000# Start ovs-vsctls in background.
1001(RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1002(RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1003(RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1004(RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1005
1006# Give the ovs-vsctls a chance to read the database
1007sleep 1
1008
e111e681 1009AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
7db03f7c
BP
1010RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])],
1011 [0], [], [], [OVS_VSCTL_CLEANUP])
1012
1013# Wait for the ovs-vsctls to finish.
1014wait
1015
1016# Check output
1017AT_CHECK([cat stdout1], [0], [quux
1018], [], [OVS_VSCTL_CLEANUP])
1019AT_CHECK([cat stdout2], [0], [def
1020], [], [OVS_VSCTL_CLEANUP])
1021AT_CHECK([cat stdout3], [0], [{abc=def}
1022], [], [OVS_VSCTL_CLEANUP])
1023AT_CHECK([cat stdout4], [0], [500
1024], [], [OVS_VSCTL_CLEANUP])
1025
1026OVS_VSCTL_CLEANUP
1027AT_CLEANUP
1028
aed133bf
BP
1029AT_SETUP([--id option on create, get commands])
1030AT_KEYWORDS([ovs-vsctl])
1031OVS_VSCTL_SETUP
1032AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1033 [add-port br0 eth0],
1034 [add-port br0 eth1])])
1035AT_CHECK(
1036 [RUN_OVS_VSCTL_TOGETHER(
1037 [set bridge br0 mirrors=@m],
1038 [--id=@eth0 get port eth0],
1039 [--id=@eth1 get port eth1],
1040 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1041 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1042AT_CHECK(
5c6d0628 1043 [${PERL} $srcdir/uuidfilt.pl stdout], [0], [dnl
aed133bf
BP
1044
1045
1046
1047<0>
1048],
1049 [], [OVS_VSCTL_CLEANUP])
1050AT_CHECK(
1051 [RUN_OVS_VSCTL(
1052 [list port eth0 eth1],
1053 [list mirror],
1054 [list bridge br0])],
1055 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1056AT_CHECK(
5c6d0628 1057 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
aed133bf
BP
1058[_uuid : <0>
1059name : "eth0"
1060_uuid : <1>
1061name : "eth1"
1062_uuid : <2>
1063name : mymirror
1064output_port : <1>
1065output_vlan : []
1066select_all : false
1067select_dst_port : [<0>]
1068select_src_port : [<0>]
1069select_vlan : []
1070_uuid : <3>
1071mirrors : [<2>]
1072name : "br0"
1073]],
1074 [], [OVS_VSCTL_CLEANUP])
1075OVS_VSCTL_CLEANUP
1076AT_CLEANUP
1077
c5f341ab
BP
1078AT_SETUP([unreferenced record warnings])
1079AT_KEYWORDS([ovs-vsctl])
1080OVS_VSCTL_SETUP
1081AT_CHECK(
fba6bd1d 1082 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
5c6d0628 1083 -- create Bridge name=br0 | ${PERL} $srcdir/uuidfilt.pl],
c5f341ab
BP
1084 [0], [<0>
1085], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect
1086], [OVS_VSCTL_CLEANUP])
1087AT_CHECK(
fba6bd1d 1088 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
5c6d0628 1089 -- --id=@br0 create Bridge name=br0 | ${PERL} $srcdir/uuidfilt.pl],
c5f341ab
BP
1090 [0], [<0>
1091], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1092], [OVS_VSCTL_CLEANUP])
1093AT_CHECK(
fba6bd1d 1094 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
c5f341ab
BP
1095 -- --id=@eth0_iface create Interface name=eth0 \
1096 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1097 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1098 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
5c6d0628 1099 -- set Open_vSwitch . bridges=@br0 | ${PERL} $srcdir/uuidfilt.pl],
c5f341ab
BP
1100 [0], [<0>
1101<1>
1102<2>
1103<3>
1104], [vsctl|WARN|row id "@eth0" was created but only a weak reference to it was inserted, so it will not actually appear in the database
1105], [OVS_VSCTL_CLEANUP])
1106OVS_VSCTL_CLEANUP
1107AT_CLEANUP
1108
5c414a2e
BP
1109dnl This test really shows a bug -- "create" followed by "list" in
1110dnl the same execution shows the wrong UUID on the "list" command.
1111dnl The bug is documented in ovs-vsctl.8.
1112AT_SETUP([created row UUID is wrong in same execution])
1113AT_KEYWORDS([ovs-vsctl])
1114OVS_VSCTL_SETUP
c5f341ab 1115AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])],
5c414a2e 1116 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
5c6d0628 1117AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0],
5c414a2e 1118 [[<0>
bd76d25d
BP
1119_uuid : <1>
1120controller : []
1121datapath_id : []
1122datapath_type : ""
1123external_ids : {}
31681a5d 1124fail_mode : []
bd76d25d 1125flood_vlans : []
254750ce 1126flow_tables : {}
29089a54 1127ipfix : []
bd76d25d
BP
1128mirrors : []
1129name : "br0"
1130netflow : []
1131other_config : {}
1132ports : []
7beaa082 1133protocols : []
bd76d25d 1134sflow : []
21f7563c
JP
1135status : {}
1136stp_enable : false
5c414a2e
BP
1137]], [ignore], [test ! -e pid || kill `cat pid`])
1138OVS_VSCTL_CLEANUP
1139AT_CLEANUP
eeb8467e
AS
1140
1141dnl This test will create a linux-htb QoS record that
1142dnl points to a few queues and use it on a1 and a2 port.
1143dnl It also destroys all records from Qos and Queue table.
1144AT_SETUP([--all option on destroy command])
1145AT_KEYWORDS([ovs-vsctl])
1146OVS_VSCTL_SETUP
1147AT_CHECK([RUN_OVS_VSCTL(
1148 [add-br a],
1149 [add-port a a1],
1150 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
1151CHECK_BRIDGES([a, a, 0])
1152CHECK_PORTS([a], [a1], [a2])
1153CHECK_IFACES([a], [a1], [a2])
1154AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1155 [set Port a1 qos=@newqos],
1156 [set Port a2 qos=@newqos],
1157 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1158 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1159 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore], [], [OVS_VSCTL_CLEANUP])
1160AT_CHECK([RUN_OVS_VSCTL(
1161 [--columns=other_config,type list Qos])], [0],
1162[other_config : {max-rate="1000000000"}
1163type : linux-htb
1164], [], [OVS_VSCTL_CLEANUP])
1165AT_CHECK([RUN_OVS_VSCTL(
1166 [--columns=other_config list Queue | sort | xargs echo])], [0],
1167[other_config : {max-rate=100000000, min-rate=100000000} other_config : {min-rate=500000000}
1168], [], [OVS_VSCTL_CLEANUP])
1169AT_CHECK([RUN_OVS_VSCTL(
1170 [clear Port a1 qos],
1171 [clear Port a2 qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1172AT_CHECK([RUN_OVS_VSCTL(
1173 [--columns=qos list Port a1 a2])], [0],
1174[[qos : []
1175
1176qos : []
1177]], [], [OVS_VSCTL_CLEANUP])
1178AT_CHECK([RUN_OVS_VSCTL(
1179 [--all destroy Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1180AT_CHECK([RUN_OVS_VSCTL(
1181 [-- list Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1182AT_CHECK([RUN_OVS_VSCTL(
1183 [--all destroy Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1184AT_CHECK([RUN_OVS_VSCTL(
1185 [-- list Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1186OVS_VSCTL_CLEANUP
1187AT_CLEANUP