]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovs-vsctl.at
ovs-vsctl: Add --may-exist option for add-br command.
[mirror_ovs.git] / tests / ovs-vsctl.at
CommitLineData
c75d1511
BP
1dnl OVS_VSCTL_SETUP
2dnl
3dnl Creates an empty database in the current directory and then starts
4dnl an ovsdb-server on it for ovs-vsctl to connect to.
5m4_define([OVS_VSCTL_SETUP],
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],
b54e22e9 18 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket -- command
460aad80
BP
19])])
20m4_define([RUN_OVS_VSCTL_ONELINE],
b54e22e9 21 [m4_foreach([command], [$@], [ovs-vsctl --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],
b54e22e9 28 [ovs-vsctl --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])
8e58fa9a 247CHECK_BRIDGES([a, a, 0])
3b135da3
BP
248CHECK_PORTS([a], [bond0])
249CHECK_IFACES([a], [a1], [a2], [a3])
c75d1511 250OVS_VSCTL_CLEANUP
3b135da3
BP
251AT_CLEANUP
252
253AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
254AT_KEYWORDS([ovs-vsctl])
c75d1511 255OVS_VSCTL_SETUP
3b135da3
BP
256AT_CHECK([RUN_OVS_VSCTL(
257 [add-br a],
258 [add-br b],
259 [add-port a a1],
260 [add-port b b1],
c75d1511 261 [del-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 262CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
263CHECK_PORTS([a])
264CHECK_IFACES([a])
265CHECK_PORTS([b], [b1])
266CHECK_IFACES([b], [b1])
c75d1511 267OVS_VSCTL_CLEANUP
3b135da3
BP
268AT_CLEANUP
269
3d1b9636 270AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
3b135da3 271AT_KEYWORDS([ovs-vsctl])
c75d1511 272OVS_VSCTL_SETUP
4d14e30f 273AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
274 [add-br a],
275 [add-bond a bond0 a1 a2 a3],
460aad80
BP
276 [del-port bond0])], [0], [
277
278
279], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 280CHECK_BRIDGES([a, a, 0])
3b135da3 281CHECK_PORTS([a])
c75d1511 282OVS_VSCTL_CLEANUP
3b135da3
BP
283AT_CLEANUP
284
457e1eb0
BP
285AT_SETUP([external IDs])
286AT_KEYWORDS([ovs-vsctl])
287OVS_VSCTL_SETUP
288AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 289 [add-br a],
457e1eb0
BP
290 [add-port a a1],
291 [add-bond a bond0 a2 a3],
292 [br-set-external-id a key0 value0],
e328faad
BP
293 [set port a1 external-ids:key1=value1],
294 [set interface a2 external-ids:key2=value2],
295 [set interface a2 external-ids:key3=value3],
296 [set interface a3 external-ids:key4=value4],
457e1eb0
BP
297 [br-get-external-id a],
298 [br-get-external-id a key0],
299 [br-get-external-id a key1],
300 [br-set-external-id a key0 othervalue],
301 [br-get-external-id a],
302 [br-set-external-id a key0],
303 [br-get-external-id a],
e328faad
BP
304 [get port a1 external-ids],
305 [get interface a2 external-ids],
306 [get interface a3 external-ids])], [0], [
457e1eb0
BP
307
308
309
310
311
312
313
314key0=value0
315value0
316
317
318key0=othervalue
319
320
e328faad
BP
321{"key1"="value1"}
322{"key2"="value2", "key3"="value3"}
323{"key4"="value4"}
457e1eb0
BP
324], [], [OVS_VSCTL_CLEANUP])
325AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 326 [br-get-external-id a],
e328faad
BP
327 [get port a1 external-ids],
328 [get interface a2 external-ids],
329 [get interface a3 external-ids])], [0],
457e1eb0 330[
e328faad
BP
331{"key1"="value1"}
332{"key2"="value2", "key3"="value3"}
333{"key4"="value4"}
457e1eb0
BP
334], [], [OVS_VSCTL_CLEANUP])
335CHECK_BRIDGES([a, a, 0])
336CHECK_PORTS([a], [a1], [bond0])
337CHECK_IFACES([a], [a1], [a2], [a3])
338OVS_VSCTL_CLEANUP
339AT_CLEANUP
340
8e58fa9a 341dnl ----------------------------------------------------------------------
3b135da3
BP
342AT_BANNER([ovs-vsctl unit tests -- fake bridges])
343
dfbe07ba
BP
344m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
345 [AT_CHECK(
346 [RUN_OVS_VSCTL(
347 [add-br xenbr0],
aeee85aa 348 [--may-exist add-br xenbr0],
dfbe07ba
BP
349 [add-port xenbr0 eth0],
350 [add-br xapi1 xenbr0 9],
aeee85aa 351 [--may-exist add-br xapi1 xenbr0 9],
dfbe07ba
BP
352 [add-port xapi1 eth0.9])],
353 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
354
355AT_SETUP([simple fake bridge])
356AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 357OVS_VSCTL_SETUP
dfbe07ba 358OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
aeee85aa
BP
359AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
360 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN 9
361], [OVS_VSCTL_CLEANUP])
362AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx 9])], [1], [],
363 [ovs-vsctl: "--may-exist add-br xapi1 xxx 9" but xapi1 has the wrong parent xenbr0
364], [OVS_VSCTL_CLEANUP])
365AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
366 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN 9
367], [OVS_VSCTL_CLEANUP])
dfbe07ba 368CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
3b135da3
BP
369CHECK_PORTS([xenbr0], [eth0])
370CHECK_IFACES([xenbr0], [eth0])
371CHECK_PORTS([xapi1], [eth0.9])
372CHECK_IFACES([xapi1], [eth0.9])
c75d1511 373OVS_VSCTL_CLEANUP
3b135da3
BP
374AT_CLEANUP
375
376AT_SETUP([simple fake bridge + del-br fake bridge])
377AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 378OVS_VSCTL_SETUP
dfbe07ba
BP
379OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
380AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 381CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
382CHECK_PORTS([xenbr0], [eth0])
383CHECK_IFACES([xenbr0], [eth0])
c75d1511 384OVS_VSCTL_CLEANUP
3b135da3
BP
385AT_CLEANUP
386
387AT_SETUP([simple fake bridge + del-br real bridge])
388AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 389OVS_VSCTL_SETUP
dfbe07ba
BP
390OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
391AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
3b135da3 392CHECK_BRIDGES
c75d1511 393OVS_VSCTL_CLEANUP
3b135da3
BP
394AT_CLEANUP
395
457e1eb0
BP
396AT_SETUP([simple fake bridge + external IDs])
397AT_KEYWORDS([ovs-vsctl fake-bridge])
398OVS_VSCTL_SETUP
399OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
400AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 401 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
402 [br-set-external-id xapi1 key1 value1],
403 [br-get-external-id xenbr0],
404 [br-get-external-id xenbr0 key0],
405 [br-get-external-id xapi1],
406 [br-get-external-id xapi1 key1])], [0], [
407
408key0=value0
409value0
410key1=value1
411value1
412], [], [OVS_VSCTL_CLEANUP])
413CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
414CHECK_PORTS([xenbr0], [eth0])
415CHECK_IFACES([xenbr0], [eth0])
416CHECK_PORTS([xapi1], [eth0.9])
417CHECK_IFACES([xapi1], [eth0.9])
418OVS_VSCTL_CLEANUP
419AT_CLEANUP
420
dfbe07ba
BP
421m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
422 [AT_CHECK(
423 [RUN_OVS_VSCTL(
424 [add-br xapi1],
425 [add-bond xapi1 bond0 eth0 eth1],
426 [add-br xapi2 xapi1 11],
427 [add-port xapi2 bond0.11])],
428 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
429
430AT_SETUP([fake bridge on bond])
431AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 432OVS_VSCTL_SETUP
dfbe07ba 433OVS_VSCTL_SETUP_BOND_FAKE_CONF
8e58fa9a 434CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
435CHECK_PORTS([xapi1], [bond0])
436CHECK_IFACES([xapi1], [eth0], [eth1])
437CHECK_PORTS([xapi2], [bond0.11])
438CHECK_IFACES([xapi2], [bond0.11])
c75d1511 439OVS_VSCTL_CLEANUP
3b135da3
BP
440AT_CLEANUP
441
442AT_SETUP([fake bridge on bond + del-br fake bridge])
443AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 444OVS_VSCTL_SETUP
dfbe07ba 445OVS_VSCTL_SETUP_BOND_FAKE_CONF
460aad80 446AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
dfbe07ba 447], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 448CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
449CHECK_PORTS([xapi1], [bond0])
450CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 451OVS_VSCTL_CLEANUP
3b135da3
BP
452AT_CLEANUP
453
454AT_SETUP([fake bridge on bond + del-br real bridge])
455AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba
BP
456OVS_VSCTL_SETUP
457OVS_VSCTL_SETUP_BOND_FAKE_CONF
3b135da3
BP
458AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
459CHECK_BRIDGES
c75d1511 460OVS_VSCTL_CLEANUP
3b135da3 461AT_CLEANUP
5c414a2e
BP
462
463dnl ----------------------------------------------------------------------
464AT_BANNER([ovs-vsctl unit tests -- database commands])
465
466AT_SETUP([database commands -- positive checks])
467AT_KEYWORDS([ovs-vsctl])
468OVS_VSCTL_SETUP
0d0f05b9 469AT_CHECK([RUN_OVS_VSCTL([create b name=br0])],
5c414a2e
BP
470 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
471cp stdout out1
472AT_CHECK([RUN_OVS_VSCTL([list b])],
473 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
474cp stdout out2
475AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0],
476 [[<0>
bd76d25d
BP
477_uuid : <0>
478controller : []
479datapath_id : []
480datapath_type : ""
481external_ids : {}
482flood_vlans : []
483mirrors : []
484name : "br0"
485netflow : []
486other_config : {}
487ports : []
488sflow : []
5c414a2e
BP
489]], [ignore], [test ! -e pid || kill `cat pid`])
490AT_CHECK(
491 [RUN_OVS_VSCTL(
492 [set bridge br0 \
493 'other_config:datapath_id="0123456789ab"' \
494 'other_config:hwaddr="00:11:22:33:44:55"' \
495 'external-ids={"xs-network-uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
496 add bridge br0 external_ids '"xs-network-names"="local; remote; cloud"'])],
497 [0], [], [], [OVS_VSCTL_CLEANUP])
498AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
499 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{xs-network-names="local; remote; cloud", xs-network-uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
500], [], [OVS_VSCTL_CLEANUP])
501AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
502 [0], ["00:11:22:33:44:55"
503
504], [], [OVS_VSCTL_CLEANUP])
505AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])],
506 [0], [{datapath_id="0123456789ab"}
507], [], [OVS_VSCTL_CLEANUP])
508AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])],
509 [0], [{}
510], [], [OVS_VSCTL_CLEANUP])
511AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])],
512 [0], [{}
513], [], [OVS_VSCTL_CLEANUP])
0d0f05b9 514AT_CHECK([RUN_OVS_VSCTL([destroy b br0])],
5c414a2e
BP
515 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
516AT_CHECK([RUN_OVS_VSCTL([list b])],
517 [0], [], [], [OVS_VSCTL_CLEANUP])
518OVS_VSCTL_CLEANUP
519AT_CLEANUP
520
521AT_SETUP([database commands -- negative checks])
522AT_KEYWORDS([ovs-vsctl])
523OVS_VSCTL_SETUP
0d0f05b9 524AT_CHECK([RUN_OVS_VSCTL([create b name=br0])],
5c414a2e
BP
525 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
526AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
527 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
528AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
529 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
0d0f05b9 530AT_CHECK([RUN_OVS_VSCTL([create n targets='"1.2.3.4:567"'])],
5c414a2e
BP
531 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
532cp stdout netflow-uuid
533AT_CHECK([RUN_OVS_VSCTL([list n `cat netflow-uuid`])],
534 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
535AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
536 [[<0>
bd76d25d
BP
537_uuid : <0>
538active_timeout : 0
539add_id_to_interface : false
540engine_id : []
541engine_type : []
542targets : ["1.2.3.4:567"]
5c414a2e
BP
543]], [ignore], [test ! -e pid || kill `cat pid`])
544AT_CHECK([RUN_OVS_VSCTL([list interx x])],
545 [1], [], [ovs-vsctl: unknown table "interx"
546], [OVS_VSCTL_CLEANUP])
547AT_CHECK([RUN_OVS_VSCTL([list b x])],
548 [1], [], [ovs-vsctl: no row "x" in table Bridge
549], [OVS_VSCTL_CLEANUP])
550AT_CHECK([RUN_OVS_VSCTL([list b br])],
551 [1], [], [ovs-vsctl: multiple rows in Bridge match "br"
552], [OVS_VSCTL_CLEANUP])
553AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
554 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
555], [OVS_VSCTL_CLEANUP])
556AT_CHECK([RUN_OVS_VSCTL([get b br0 x])],
557 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
558], [OVS_VSCTL_CLEANUP])
559AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])],
560 [1], [], [ovs-vsctl: :y=z: missing column name
561], [OVS_VSCTL_CLEANUP])
562AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])],
563 [1], [], [ovs-vsctl: datapath_id:y=z: value not accepted here
564], [OVS_VSCTL_CLEANUP])
565AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])],
566 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
567], [OVS_VSCTL_CLEANUP])
568AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])],
569 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
570], [OVS_VSCTL_CLEANUP])
571AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])],
572 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
573], [OVS_VSCTL_CLEANUP])
574AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])],
bd76d25d 575 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
5c414a2e
BP
576], [OVS_VSCTL_CLEANUP])
577AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])],
bd76d25d 578 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
5c414a2e 579], [OVS_VSCTL_CLEANUP])
bfe8e67a
BP
580if test "$HAVE_PCRE" = yes; then
581 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
582 [1], [], [ovs-vsctl: constraint violation: "xyz" is not a either "in-band" or "out-of-band"
5c414a2e 583], [OVS_VSCTL_CLEANUP])
bfe8e67a
BP
584else
585 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
586 [0], [], [], [OVS_VSCTL_CLEANUP])
587fi
5c414a2e
BP
588AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
589 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
590], [OVS_VSCTL_CLEANUP])
bd76d25d 591AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])],
5c414a2e
BP
592 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
593], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
594AT_CHECK([RUN_OVS_VSCTL([remove n `cat netflow-uuid` targets '"1.2.3.4:567"'])],
595 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimun number is 1
596], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
597AT_CHECK([RUN_OVS_VSCTL([clear n `cat netflow-uuid` targets])],
598 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
599], [OVS_VSCTL_CLEANUP])
0d0f05b9 600AT_CHECK([RUN_OVS_VSCTL([destroy b br2])],
5c414a2e
BP
601 [1], [], [ovs-vsctl: no row "br2" in table Bridge
602], [OVS_VSCTL_CLEANUP])
603OVS_VSCTL_CLEANUP
604AT_CLEANUP
605
606dnl This test really shows a bug -- "create" followed by "list" in
607dnl the same execution shows the wrong UUID on the "list" command.
608dnl The bug is documented in ovs-vsctl.8.
609AT_SETUP([created row UUID is wrong in same execution])
610AT_KEYWORDS([ovs-vsctl])
611OVS_VSCTL_SETUP
0d0f05b9 612AT_CHECK([RUN_OVS_VSCTL([create Bridge name=br0 -- list b])],
5c414a2e
BP
613 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
614AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0],
615 [[<0>
bd76d25d
BP
616_uuid : <1>
617controller : []
618datapath_id : []
619datapath_type : ""
620external_ids : {}
621flood_vlans : []
622mirrors : []
623name : "br0"
624netflow : []
625other_config : {}
626ports : []
627sflow : []
5c414a2e
BP
628]], [ignore], [test ! -e pid || kill `cat pid`])
629OVS_VSCTL_CLEANUP
630AT_CLEANUP