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