]> git.proxmox.com Git - ovs.git/blame - tests/ovs-vsctl.at
Add support for limiting the number of flows in an OpenFlow flow table.
[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])
0b1fae1b 7 AT_CHECK([ovsdb-server --detach --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],
b524945e 18 [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket -- command
460aad80
BP
19])])
20m4_define([RUN_OVS_VSCTL_ONELINE],
b524945e 21 [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:ANY: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],
b524945e 28 [ovs-vsctl --timeout=5 --no-wait -vreconnect:ANY: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
8e58fa9a
BP
142dnl ----------------------------------------------------------------------
143AT_BANNER([ovs-vsctl unit tests -- real bridges])
144
3b135da3
BP
145AT_SETUP([add-br a])
146AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
147OVS_VSCTL_SETUP
148AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 149CHECK_BRIDGES([a, a, 0])
3b135da3
BP
150CHECK_PORTS([a])
151CHECK_IFACES([a])
c75d1511 152OVS_VSCTL_CLEANUP
3b135da3
BP
153AT_CLEANUP
154
1125a1b9
BP
155AT_SETUP([add-br a, add-br a])
156AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
157OVS_VSCTL_SETUP
158AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
159AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
160 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
c75d1511
BP
161], [OVS_VSCTL_CLEANUP])
162OVS_VSCTL_CLEANUP
1125a1b9
BP
163AT_CLEANUP
164
3b135da3
BP
165AT_SETUP([add-br a, add-br b])
166AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
167OVS_VSCTL_SETUP
168AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
169 [OVS_VSCTL_CLEANUP])
aeee85aa
BP
170AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
171 [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
172],
173 [OVS_VSCTL_CLEANUP])
8e58fa9a 174CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
175CHECK_PORTS([a])
176CHECK_IFACES([a])
177CHECK_PORTS([b])
178CHECK_IFACES([b])
c75d1511 179OVS_VSCTL_CLEANUP
3b135da3
BP
180AT_CLEANUP
181
182AT_SETUP([add-br a, add-br b, del-br a])
183AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
184OVS_VSCTL_SETUP
185AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
186 [OVS_VSCTL_CLEANUP])
8e58fa9a 187CHECK_BRIDGES([b, b, 0])
3b135da3
BP
188CHECK_PORTS([b])
189CHECK_IFACES([b])
c75d1511 190OVS_VSCTL_CLEANUP
3b135da3
BP
191AT_CLEANUP
192
28a14bf3
EJ
193AT_SETUP([add-br a, del-br a, add-br a])
194AT_KEYWORDS([ovs-vsctl])
195OVS_VSCTL_SETUP
196AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
197 [add-br a],
198 [del-br a],
199 [add-br a],
200 [set Interface a other_config:key=value],
201 [get Interface a other_config:key])], [0], [
202
203
204
205value
206], [], [OVS_VSCTL_CLEANUP])
207CHECK_BRIDGES([a, a, 0])
208CHECK_PORTS([a])
209CHECK_IFACES([a])
210OVS_VSCTL_CLEANUP
211AT_CLEANUP
212
2792c2ad
BP
213AT_SETUP([add-br a, add-port a a1, add-port a a2])
214AT_KEYWORDS([ovs-vsctl])
c75d1511 215OVS_VSCTL_SETUP
2792c2ad 216AT_CHECK([RUN_OVS_VSCTL(
dfbe07ba 217 [add-br a],
460aad80 218 [--if-exists del-br b],
2792c2ad 219 [add-port a a1],
c75d1511 220 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
221CHECK_BRIDGES([a, a, 0])
222CHECK_PORTS([a], [a1], [a2])
223CHECK_IFACES([a], [a1], [a2])
c75d1511 224OVS_VSCTL_CLEANUP
2792c2ad
BP
225AT_CLEANUP
226
1125a1b9
BP
227AT_SETUP([add-br a, add-port a a1, add-port a a1])
228AT_KEYWORDS([ovs-vsctl])
c75d1511 229OVS_VSCTL_SETUP
1125a1b9
BP
230AT_CHECK([RUN_OVS_VSCTL(
231 [add-br a],
c75d1511 232 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
233AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
234 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
c75d1511
BP
235], [OVS_VSCTL_CLEANUP])
236OVS_VSCTL_CLEANUP
1125a1b9
BP
237AT_CLEANUP
238
3b135da3
BP
239AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
240AT_KEYWORDS([ovs-vsctl])
c75d1511 241OVS_VSCTL_SETUP
4d14e30f 242AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
243 [add-br a],
244 [add-br b],
245 [add-port a a1],
246 [add-port b b1],
460aad80
BP
247 [--if-exists del-port b b2],
248 [del-br a])], [0], [
249
250
251
252
253
254], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 255CHECK_BRIDGES([b, b, 0])
3b135da3
BP
256CHECK_PORTS([b], [b1])
257CHECK_IFACES([b], [b1])
c75d1511 258OVS_VSCTL_CLEANUP
3b135da3
BP
259AT_CLEANUP
260
261AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
262AT_KEYWORDS([ovs-vsctl])
c75d1511 263OVS_VSCTL_SETUP
3b135da3
BP
264AT_CHECK([RUN_OVS_VSCTL(
265 [add-br a],
c75d1511 266 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
bb1c67c8
BP
267AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [],
268 [OVS_VSCTL_CLEANUP])
269AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
270 [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
271],
272 [OVS_VSCTL_CLEANUP])
8e58fa9a 273CHECK_BRIDGES([a, a, 0])
3b135da3
BP
274CHECK_PORTS([a], [bond0])
275CHECK_IFACES([a], [a1], [a2], [a3])
c75d1511 276OVS_VSCTL_CLEANUP
3b135da3
BP
277AT_CLEANUP
278
279AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
280AT_KEYWORDS([ovs-vsctl])
c75d1511 281OVS_VSCTL_SETUP
3b135da3
BP
282AT_CHECK([RUN_OVS_VSCTL(
283 [add-br a],
284 [add-br b],
18b239f5
BP
285 [add-port a a1 tag=9],
286 [get port a1 tag],
bb1c67c8 287 [--may-exist add-port b b1],
18b239f5
BP
288 [del-port a a1])], [0], [9
289], [], [OVS_VSCTL_CLEANUP])
bb1c67c8
BP
290AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],
291 [OVS_VSCTL_CLEANUP])
292AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
293 [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
294],
295 [OVS_VSCTL_CLEANUP])
8e58fa9a 296CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
297CHECK_PORTS([a])
298CHECK_IFACES([a])
299CHECK_PORTS([b], [b1])
300CHECK_IFACES([b], [b1])
c75d1511 301OVS_VSCTL_CLEANUP
3b135da3
BP
302AT_CLEANUP
303
3d1b9636 304AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
3b135da3 305AT_KEYWORDS([ovs-vsctl])
c75d1511 306OVS_VSCTL_SETUP
4d14e30f 307AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3 308 [add-br a],
18b239f5
BP
309 [add-bond a bond0 a1 a2 a3 tag=9],
310 [get Port bond0 tag],
460aad80
BP
311 [del-port bond0])], [0], [
312
18b239f5 3139
460aad80
BP
314
315], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 316CHECK_BRIDGES([a, a, 0])
3b135da3 317CHECK_PORTS([a])
c75d1511 318OVS_VSCTL_CLEANUP
3b135da3
BP
319AT_CLEANUP
320
457e1eb0
BP
321AT_SETUP([external IDs])
322AT_KEYWORDS([ovs-vsctl])
323OVS_VSCTL_SETUP
fbd8715e 324AT_CHECK([RUN_OVS_VSCTL_ONELINE(
460aad80 325 [add-br a],
457e1eb0
BP
326 [add-port a a1],
327 [add-bond a bond0 a2 a3],
328 [br-set-external-id a key0 value0],
e328faad
BP
329 [set port a1 external-ids:key1=value1],
330 [set interface a2 external-ids:key2=value2],
331 [set interface a2 external-ids:key3=value3],
332 [set interface a3 external-ids:key4=value4],
457e1eb0
BP
333 [br-get-external-id a],
334 [br-get-external-id a key0],
335 [br-get-external-id a key1],
336 [br-set-external-id a key0 othervalue],
337 [br-get-external-id a],
338 [br-set-external-id a key0],
339 [br-get-external-id a],
e328faad
BP
340 [get port a1 external-ids],
341 [get interface a2 external-ids],
342 [get interface a3 external-ids])], [0], [
457e1eb0
BP
343
344
345
346
347
348
349
350key0=value0
351value0
352
353
354key0=othervalue
355
356
e328faad
BP
357{"key1"="value1"}
358{"key2"="value2", "key3"="value3"}
359{"key4"="value4"}
457e1eb0
BP
360], [], [OVS_VSCTL_CLEANUP])
361AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 362 [br-get-external-id a],
e328faad
BP
363 [get port a1 external-ids],
364 [get interface a2 external-ids],
365 [get interface a3 external-ids])], [0],
457e1eb0 366[
e328faad
BP
367{"key1"="value1"}
368{"key2"="value2", "key3"="value3"}
369{"key4"="value4"}
457e1eb0
BP
370], [], [OVS_VSCTL_CLEANUP])
371CHECK_BRIDGES([a, a, 0])
372CHECK_PORTS([a], [a1], [bond0])
373CHECK_IFACES([a], [a1], [a2], [a3])
374OVS_VSCTL_CLEANUP
375AT_CLEANUP
376
76ce9432
BP
377AT_SETUP([controllers])
378AT_KEYWORDS([controller ovs-vsctl])
379OVS_VSCTL_SETUP
380AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
381 [add-br br0],
382
76ce9432 383 [get-controller br0],
76ce9432 384 [set-controller br0 tcp:4.5.6.7],
76ce9432
BP
385 [get-controller br0],
386
387 [del-controller br0],
76ce9432
BP
388 [get-controller br0],
389
390 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
76ce9432
BP
391 [get-controller br0])], [0], [
392
76ce9432 393
76ce9432
BP
394tcp:4.5.6.7
395
396
397
76ce9432
BP
398tcp:5.4.3.2\ntcp:8.9.10.11
399], [], [OVS_VSCTL_CLEANUP])
400OVS_VSCTL_CLEANUP
401AT_CLEANUP
402
8e58fa9a 403dnl ----------------------------------------------------------------------
3b135da3
BP
404AT_BANNER([ovs-vsctl unit tests -- fake bridges])
405
dfbe07ba
BP
406m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
407 [AT_CHECK(
408 [RUN_OVS_VSCTL(
409 [add-br xenbr0],
aeee85aa 410 [--may-exist add-br xenbr0],
dfbe07ba 411 [add-port xenbr0 eth0],
bb1c67c8 412 [--may-exist add-port xenbr0 eth0],
dfbe07ba 413 [add-br xapi1 xenbr0 9],
aeee85aa 414 [--may-exist add-br xapi1 xenbr0 9],
dfbe07ba
BP
415 [add-port xapi1 eth0.9])],
416 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
417
418AT_SETUP([simple fake bridge])
419AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 420OVS_VSCTL_SETUP
dfbe07ba 421OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
aeee85aa
BP
422AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
423 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN 9
424], [OVS_VSCTL_CLEANUP])
425AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx 9])], [1], [],
426 [ovs-vsctl: "--may-exist add-br xapi1 xxx 9" but xapi1 has the wrong parent xenbr0
427], [OVS_VSCTL_CLEANUP])
428AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
429 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN 9
430], [OVS_VSCTL_CLEANUP])
dfbe07ba 431CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
3b135da3
BP
432CHECK_PORTS([xenbr0], [eth0])
433CHECK_IFACES([xenbr0], [eth0])
434CHECK_PORTS([xapi1], [eth0.9])
435CHECK_IFACES([xapi1], [eth0.9])
c75d1511 436OVS_VSCTL_CLEANUP
3b135da3
BP
437AT_CLEANUP
438
439AT_SETUP([simple fake bridge + del-br fake bridge])
440AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 441OVS_VSCTL_SETUP
dfbe07ba
BP
442OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
443AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 444CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
445CHECK_PORTS([xenbr0], [eth0])
446CHECK_IFACES([xenbr0], [eth0])
c75d1511 447OVS_VSCTL_CLEANUP
3b135da3
BP
448AT_CLEANUP
449
450AT_SETUP([simple fake bridge + del-br real bridge])
451AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 452OVS_VSCTL_SETUP
dfbe07ba
BP
453OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
454AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
3b135da3 455CHECK_BRIDGES
c75d1511 456OVS_VSCTL_CLEANUP
3b135da3
BP
457AT_CLEANUP
458
457e1eb0
BP
459AT_SETUP([simple fake bridge + external IDs])
460AT_KEYWORDS([ovs-vsctl fake-bridge])
461OVS_VSCTL_SETUP
462OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
463AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 464 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
465 [br-set-external-id xapi1 key1 value1],
466 [br-get-external-id xenbr0],
467 [br-get-external-id xenbr0 key0],
468 [br-get-external-id xapi1],
469 [br-get-external-id xapi1 key1])], [0], [
470
471key0=value0
472value0
473key1=value1
474value1
475], [], [OVS_VSCTL_CLEANUP])
476CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
477CHECK_PORTS([xenbr0], [eth0])
478CHECK_IFACES([xenbr0], [eth0])
479CHECK_PORTS([xapi1], [eth0.9])
480CHECK_IFACES([xapi1], [eth0.9])
481OVS_VSCTL_CLEANUP
482AT_CLEANUP
483
dfbe07ba
BP
484m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
485 [AT_CHECK(
486 [RUN_OVS_VSCTL(
487 [add-br xapi1],
488 [add-bond xapi1 bond0 eth0 eth1],
489 [add-br xapi2 xapi1 11],
490 [add-port xapi2 bond0.11])],
491 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
492
493AT_SETUP([fake bridge on bond])
494AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 495OVS_VSCTL_SETUP
dfbe07ba 496OVS_VSCTL_SETUP_BOND_FAKE_CONF
8e58fa9a 497CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
498CHECK_PORTS([xapi1], [bond0])
499CHECK_IFACES([xapi1], [eth0], [eth1])
500CHECK_PORTS([xapi2], [bond0.11])
501CHECK_IFACES([xapi2], [bond0.11])
c75d1511 502OVS_VSCTL_CLEANUP
3b135da3
BP
503AT_CLEANUP
504
505AT_SETUP([fake bridge on bond + del-br fake bridge])
506AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 507OVS_VSCTL_SETUP
dfbe07ba 508OVS_VSCTL_SETUP_BOND_FAKE_CONF
460aad80 509AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
dfbe07ba 510], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 511CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
512CHECK_PORTS([xapi1], [bond0])
513CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 514OVS_VSCTL_CLEANUP
3b135da3
BP
515AT_CLEANUP
516
517AT_SETUP([fake bridge on bond + del-br real bridge])
518AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba
BP
519OVS_VSCTL_SETUP
520OVS_VSCTL_SETUP_BOND_FAKE_CONF
3b135da3
BP
521AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
522CHECK_BRIDGES
c75d1511 523OVS_VSCTL_CLEANUP
3b135da3 524AT_CLEANUP
5c414a2e 525
24b8b259
AE
526dnl ----------------------------------------------------------------------
527AT_BANNER([ovs-vsctl unit tests -- manager commands])
528
529AT_SETUP([managers])
530AT_KEYWORDS([manager ovs-vsctl])
531OVS_VSCTL_SETUP
532AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
533 [del-manager],
534 [get-manager],
535 [set-manager tcp:4.5.6.7],
536 [get-manager],
537 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
538 [get-manager],
539 [del-manager],
540 [get-manager])], [0], [
541
542
543tcp:4.5.6.7
544
545tcp:5.4.3.2\ntcp:8.9.10.11
546
547
548], [], [OVS_VSCTL_CLEANUP])
549OVS_VSCTL_CLEANUP
550AT_CLEANUP
551
5c414a2e
BP
552dnl ----------------------------------------------------------------------
553AT_BANNER([ovs-vsctl unit tests -- database commands])
554
555AT_SETUP([database commands -- positive checks])
556AT_KEYWORDS([ovs-vsctl])
557OVS_VSCTL_SETUP
c5f341ab
BP
558AT_CHECK(
559 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0],
560 [set o . bridges=@br0])],
5c414a2e
BP
561 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
562cp stdout out1
f40a9b61 563AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])],
5c414a2e
BP
564 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
565cp stdout out2
566AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0],
567 [[<0>
c5f341ab 568
bd76d25d
BP
569_uuid : <0>
570controller : []
571datapath_id : []
572datapath_type : ""
573external_ids : {}
31681a5d 574fail_mode : []
bd76d25d 575flood_vlans : []
254750ce 576flow_tables : {}
bd76d25d
BP
577mirrors : []
578name : "br0"
579netflow : []
580other_config : {}
581ports : []
582sflow : []
21f7563c
JP
583status : {}
584stp_enable : false
f40a9b61 585<0>
5c414a2e 586]], [ignore], [test ! -e pid || kill `cat pid`])
9591fefe
BP
587AT_CHECK(
588 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])],
589 [0],
590 [[fail_mode : []
591name : "br0"
592datapath_type : ""
593]], [ignore], [test ! -e pid || kill `cat pid`])
0a140468
BP
594AT_CHECK(
595 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])],
596 [0],
597 [[fail_mode : []
598name : "br0"
599datapath_type : ""
600]], [ignore], [test ! -e pid || kill `cat pid`])
c5f341ab
BP
601AT_CHECK([
602 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"],
603 [--id=@br2 create b name=br2 external-ids:bar=quux],
604 [add o . bridges @br1 @br2])],
0a140468
BP
605 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
606AT_CHECK(
607 [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout],
608 [ignore], [test ! -e pid || kill `cat pid`])
609AT_CHECK([sed -n '/./p' stdout | sort], [0],
610 [[name : "br0"
611name : "br2"
612]])
5c414a2e
BP
613AT_CHECK(
614 [RUN_OVS_VSCTL(
615 [set bridge br0 \
616 'other_config:datapath_id="0123456789ab"' \
617 'other_config:hwaddr="00:11:22:33:44:55"' \
d3f82921
BP
618 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
619 add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
5c414a2e
BP
620 [0], [], [], [OVS_VSCTL_CLEANUP])
621AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
d3f82921 622 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
5c414a2e
BP
623], [], [OVS_VSCTL_CLEANUP])
624AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
625 [0], ["00:11:22:33:44:55"
626
627], [], [OVS_VSCTL_CLEANUP])
628AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])],
629 [0], [{datapath_id="0123456789ab"}
630], [], [OVS_VSCTL_CLEANUP])
631AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])],
632 [0], [{}
633], [], [OVS_VSCTL_CLEANUP])
634AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])],
635 [0], [{}
636], [], [OVS_VSCTL_CLEANUP])
0a140468
BP
637AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0],
638 [destroy b br1],
c5f341ab
BP
639 [destroy b br2],
640 [clear o . bridges])],
5c414a2e
BP
641 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
642AT_CHECK([RUN_OVS_VSCTL([list b])],
643 [0], [], [], [OVS_VSCTL_CLEANUP])
644OVS_VSCTL_CLEANUP
645AT_CLEANUP
646
647AT_SETUP([database commands -- negative checks])
648AT_KEYWORDS([ovs-vsctl])
649OVS_VSCTL_SETUP
c5f341ab 650AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
5c414a2e
BP
651 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
652AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
653 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
654AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
655 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
c5f341ab
BP
656AT_CHECK([
657 RUN_OVS_VSCTL_TOGETHER([--id=@n create n targets='"1.2.3.4:567"'],
658 [set bridge br0 netflow=@n])],
5c414a2e
BP
659 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
660cp stdout netflow-uuid
661AT_CHECK([RUN_OVS_VSCTL([list n `cat netflow-uuid`])],
662 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
663AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
664 [[<0>
c5f341ab 665
bd76d25d
BP
666_uuid : <0>
667active_timeout : 0
668add_id_to_interface : false
669engine_id : []
670engine_type : []
13008eb3 671external_ids : {}
bd76d25d 672targets : ["1.2.3.4:567"]
5c414a2e
BP
673]], [ignore], [test ! -e pid || kill `cat pid`])
674AT_CHECK([RUN_OVS_VSCTL([list interx x])],
675 [1], [], [ovs-vsctl: unknown table "interx"
676], [OVS_VSCTL_CLEANUP])
677AT_CHECK([RUN_OVS_VSCTL([list b x])],
678 [1], [], [ovs-vsctl: no row "x" in table Bridge
679], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
680AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
681 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
682], [OVS_VSCTL_CLEANUP])
683AT_CHECK([RUN_OVS_VSCTL([get b br0 x])],
684 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
685], [OVS_VSCTL_CLEANUP])
686AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])],
687 [1], [], [ovs-vsctl: :y=z: missing column name
688], [OVS_VSCTL_CLEANUP])
689AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])],
e89e5374 690 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
5c414a2e 691], [OVS_VSCTL_CLEANUP])
7db03f7c
BP
692AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])],
693 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
694], [OVS_VSCTL_CLEANUP])
695AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])],
2a9537e2 696 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
7db03f7c 697], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
698AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])],
699 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
700], [OVS_VSCTL_CLEANUP])
701AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])],
702 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
703], [OVS_VSCTL_CLEANUP])
704AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])],
705 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
706], [OVS_VSCTL_CLEANUP])
707AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])],
bd76d25d 708 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
5c414a2e
BP
709], [OVS_VSCTL_CLEANUP])
710AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])],
bd76d25d 711 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
5c414a2e 712], [OVS_VSCTL_CLEANUP])
bfc96d9b
BP
713AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
714 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
715]], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
716AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
717 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
718], [OVS_VSCTL_CLEANUP])
bd76d25d 719AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])],
5c414a2e
BP
720 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
721], [OVS_VSCTL_CLEANUP])
5c414a2e 722AT_CHECK([RUN_OVS_VSCTL([remove n `cat netflow-uuid` targets '"1.2.3.4:567"'])],
f19f25a4 723 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
5c414a2e 724], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
725AT_CHECK([RUN_OVS_VSCTL([clear n `cat netflow-uuid` targets])],
726 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
727], [OVS_VSCTL_CLEANUP])
0d0f05b9 728AT_CHECK([RUN_OVS_VSCTL([destroy b br2])],
5c414a2e
BP
729 [1], [], [ovs-vsctl: no row "br2" in table Bridge
730], [OVS_VSCTL_CLEANUP])
731OVS_VSCTL_CLEANUP
732AT_CLEANUP
733
2a9537e2
BP
734AT_SETUP([database commands -- conditions])
735AT_KEYWORDS([ovs-vsctl])
736trap 'kill `cat pid`' 0
737OVS_VSCTL_SETUP
738AT_CHECK(
739 [RUN_OVS_VSCTL_TOGETHER(
740 [add-br br0],
741 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
742 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
743 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
744 [add-br br4], [set bridge br4 flood_vlans=2],
745 [add-br br5], [set bridge br5 flood_vlans=0,2],
746 [add-br br6], [set bridge br6 flood_vlans=1,2],
747 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762])
763m4_define([VSCTL_CHECK_FIND],
764 [AT_CHECK([ovs-vsctl --bare --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket -- --columns=name find bridge '$1' | sort | xargs echo], [0], [$2
765])])
766
767# Arithmetic relational operators without keys.
768VSCTL_CHECK_FIND([flood_vlans=0], [br1])
769VSCTL_CHECK_FIND([flood_vlans=1], [br2])
770VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
771VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
772VSCTL_CHECK_FIND([flood_vlans=3], [])
773
774VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
775VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
776VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
777VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
778VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
779
780VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
781VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
782VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
783VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
784VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
785VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
786VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
787VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
788
789# Set relational operators without keys.
790VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
791VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
792VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
793VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
794VSCTL_CHECK_FIND([flood_vlans{=}3], [])
795
796VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
797VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
798VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
799VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
800VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
801
802VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
803VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
804VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
805VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
806VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
807VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
808
809VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
810VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
811VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
812VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
813VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
814VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
815VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
816
817# Arithmetic relational operators with keys.
818VSCTL_CHECK_FIND([other-config:x=""], [br1])
819VSCTL_CHECK_FIND([other-config:x=y], [br2])
820VSCTL_CHECK_FIND([other-config:x=z], [br3])
821
822VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
823VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
824VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
825
826VSCTL_CHECK_FIND([other-config:x>y], [br3])
827VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
828VSCTL_CHECK_FIND([other-config:x<y], [br1])
829VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
830
831# Set relational operators with keys.
832VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
833VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
834VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
835VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
836
837VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
838VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
839VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
840VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
841
842VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
843VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
844VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
845VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
846VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
847VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
848
849VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
850VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
851VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
852VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
853VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
854
855VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
856VSCTL_CHECK_FIND([other-config:x{>=}x], [])
857VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
858VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
859VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
860
861VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
862VSCTL_CHECK_FIND([other-config:x{>}x], [])
863VSCTL_CHECK_FIND([other-config:x{>}""], [])
864VSCTL_CHECK_FIND([other-config:x{>}y], [])
865VSCTL_CHECK_FIND([other-config:x{>}z], [])
866AT_CLEANUP
867
7db03f7c
BP
868AT_SETUP([database commands -- wait-until immediately true])
869AT_KEYWORDS([ovs-vsctl])
870OVS_VSCTL_SETUP
871AT_CHECK([RUN_OVS_VSCTL(
872 [add-br br0],
873 [add-bond br0 bond0 eth0 eth1],
874 [set port bond0 bond_updelay=500 other-config:abc=def])],
875 [0], [], [], [OVS_VSCTL_CLEANUP])
289df16d 876AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])],
7db03f7c
BP
877 [0], [], [], [OVS_VSCTL_CLEANUP])
878AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])],
879 [0], [], [], [OVS_VSCTL_CLEANUP])
880AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])],
881 [0], [], [], [OVS_VSCTL_CLEANUP])
882AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])],
883 [0], [], [], [OVS_VSCTL_CLEANUP])
884OVS_VSCTL_CLEANUP
885AT_CLEANUP
886
887AT_SETUP([database commands -- wait-until must wait])
888AT_KEYWORDS([ovs-vsctl])
7454ec7a
BP
889
890# Disable lcov for this test. All the programs running in parallel
891# race badly on access to profiling data.
892DISABLE_LCOV=true
893export DISABLE_LCOV
894
7db03f7c
BP
895OVS_VSCTL_SETUP
896
897# Start ovs-vsctls in background.
898(RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
899(RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
900(RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
901(RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
902
903# Give the ovs-vsctls a chance to read the database
904sleep 1
905
e111e681 906AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
7db03f7c
BP
907RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])],
908 [0], [], [], [OVS_VSCTL_CLEANUP])
909
910# Wait for the ovs-vsctls to finish.
911wait
912
913# Check output
914AT_CHECK([cat stdout1], [0], [quux
915], [], [OVS_VSCTL_CLEANUP])
916AT_CHECK([cat stdout2], [0], [def
917], [], [OVS_VSCTL_CLEANUP])
918AT_CHECK([cat stdout3], [0], [{abc=def}
919], [], [OVS_VSCTL_CLEANUP])
920AT_CHECK([cat stdout4], [0], [500
921], [], [OVS_VSCTL_CLEANUP])
922
923OVS_VSCTL_CLEANUP
924AT_CLEANUP
925
aed133bf
BP
926AT_SETUP([--id option on create, get commands])
927AT_KEYWORDS([ovs-vsctl])
928OVS_VSCTL_SETUP
929AT_CHECK([RUN_OVS_VSCTL([add-br br0],
930 [add-port br0 eth0],
931 [add-port br0 eth1])])
932AT_CHECK(
933 [RUN_OVS_VSCTL_TOGETHER(
934 [set bridge br0 mirrors=@m],
935 [--id=@eth0 get port eth0],
936 [--id=@eth1 get port eth1],
937 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
938 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
939AT_CHECK(
940 [perl $srcdir/uuidfilt.pl stdout], [0], [dnl
941
942
943
944<0>
945],
946 [], [OVS_VSCTL_CLEANUP])
947AT_CHECK(
948 [RUN_OVS_VSCTL(
949 [list port eth0 eth1],
950 [list mirror],
951 [list bridge br0])],
952 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
953AT_CHECK(
954 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | $srcdir/uuidfilt.pl], [0], [dnl
955[_uuid : <0>
956name : "eth0"
957_uuid : <1>
958name : "eth1"
959_uuid : <2>
960name : mymirror
961output_port : <1>
962output_vlan : []
963select_all : false
964select_dst_port : [<0>]
965select_src_port : [<0>]
966select_vlan : []
967_uuid : <3>
968mirrors : [<2>]
969name : "br0"
970]],
971 [], [OVS_VSCTL_CLEANUP])
972OVS_VSCTL_CLEANUP
973AT_CLEANUP
974
c5f341ab
BP
975AT_SETUP([unreferenced record warnings])
976AT_KEYWORDS([ovs-vsctl])
977OVS_VSCTL_SETUP
978AT_CHECK(
979 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \
980 -- create Bridge name=br0 | $srcdir/uuidfilt.pl],
981 [0], [<0>
982], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect
983], [OVS_VSCTL_CLEANUP])
984AT_CHECK(
985 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \
986 -- --id=@br0 create Bridge name=br0 | $srcdir/uuidfilt.pl],
987 [0], [<0>
988], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
989], [OVS_VSCTL_CLEANUP])
990AT_CHECK(
991 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \
992 -- --id=@eth0_iface create Interface name=eth0 \
993 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
994 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
995 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
996 -- set Open_vSwitch . bridges=@br0 | $srcdir/uuidfilt.pl],
997 [0], [<0>
998<1>
999<2>
1000<3>
1001], [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
1002], [OVS_VSCTL_CLEANUP])
1003OVS_VSCTL_CLEANUP
1004AT_CLEANUP
1005
5c414a2e
BP
1006dnl This test really shows a bug -- "create" followed by "list" in
1007dnl the same execution shows the wrong UUID on the "list" command.
1008dnl The bug is documented in ovs-vsctl.8.
1009AT_SETUP([created row UUID is wrong in same execution])
1010AT_KEYWORDS([ovs-vsctl])
1011OVS_VSCTL_SETUP
c5f341ab 1012AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])],
5c414a2e
BP
1013 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1014AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0],
1015 [[<0>
bd76d25d
BP
1016_uuid : <1>
1017controller : []
1018datapath_id : []
1019datapath_type : ""
1020external_ids : {}
31681a5d 1021fail_mode : []
bd76d25d 1022flood_vlans : []
254750ce 1023flow_tables : {}
bd76d25d
BP
1024mirrors : []
1025name : "br0"
1026netflow : []
1027other_config : {}
1028ports : []
1029sflow : []
21f7563c
JP
1030status : {}
1031stp_enable : false
5c414a2e
BP
1032]], [ignore], [test ! -e pid || kill `cat pid`])
1033OVS_VSCTL_CLEANUP
1034AT_CLEANUP