]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovs-vsctl.at
ovsdb: Enforce immutability of immutable columns.
[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])
77a922c7 7 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
c75d1511
BP
8
9dnl OVS_VSCTL_CLEANUP
10dnl
11dnl Kills off the database server.
028cbd99 12m4_define([OVS_VSCTL_CLEANUP], [OVSDB_SERVER_SHUTDOWN])
c75d1511 13
3b135da3
BP
14dnl RUN_OVS_VSCTL(COMMAND, ...)
15dnl
c75d1511 16dnl Executes each ovs-vsctl COMMAND.
3b135da3 17m4_define([RUN_OVS_VSCTL],
ea523221 18 [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:emer --db=unix:socket -- command
460aad80
BP
19])])
20m4_define([RUN_OVS_VSCTL_ONELINE],
ea523221 21 [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:emer --db=unix:socket --oneline -- command
3b135da3
BP
22])])
23
4d14e30f
BP
24dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
25dnl
c75d1511 26dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
4d14e30f 27m4_define([RUN_OVS_VSCTL_TOGETHER],
ea523221 28 [ovs-vsctl --timeout=5 --no-wait -vreconnect:emer --db=unix:socket --oneline dnl
460aad80 29m4_foreach([command], [$@], [ -- command])])
4d14e30f 30
8e58fa9a 31dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
3b135da3
BP
32dnl
33dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
8e58fa9a
BP
34dnl which must be in alphabetical order. Also checks that each BRIDGE has the
35dnl specified PARENT and is on the given VLAN.
36m4_define([_CHECK_BRIDGE],
37 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
c75d1511 38], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
39
40 # Check br-to-vlan, without --oneline.
8e58fa9a 41 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
c75d1511 42], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
43 # Check br-to-vlan, with --oneline.
44 # (This particular test is interesting with --oneline because it returns
45 # an integer instead of a string and that can cause type mismatches inside
46 # python if not done carefully.)
460aad80 47 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
c75d1511 48], [], [OVS_VSCTL_CLEANUP])
4d14e30f
BP
49
50 # Check multiple queries in a single run.
51 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
52[$2
53$3
c75d1511 54], [], [OVS_VSCTL_CLEANUP])])
3b135da3 55m4_define([CHECK_BRIDGES],
2792c2ad 56 [dnl Check that the bridges appear on list-br, without --oneline.
8e58fa9a 57 AT_CHECK(
3b135da3
BP
58 [RUN_OVS_VSCTL([list-br])],
59 [0],
8e58fa9a 60 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
c75d1511
BP
61])],
62 [],
63 [OVS_VSCTL_CLEANUP])
8e58fa9a 64
2792c2ad
BP
65 dnl Check that the bridges appear on list-br, with --oneline.
66 AT_CHECK(
460aad80 67 [RUN_OVS_VSCTL_ONELINE([list-br])],
2792c2ad
BP
68 [0],
69 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
c75d1511
BP
70],
71 [],
72 [OVS_VSCTL_CLEANUP])
2792c2ad 73
8e58fa9a
BP
74 dnl Check that each bridge exists according to br-exists and that
75 dnl a bridge that should not exist does not.
76 m4_foreach([brinfo], [$@],
c75d1511
BP
77 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])], [0], [],
78 [], [OVS_VSCTL_CLEANUP])])
79 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2], [], [],
80 [OVS_VSCTL_CLEANUP])
8e58fa9a
BP
81
82 dnl Check that each bridge has the expected parent and VLAN.
83 m4_map([_CHECK_BRIDGE], [$@])])
3b135da3
BP
84
85dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
86dnl
87dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
88dnl list of ports, which must be in alphabetical order. Also checks
89dnl that "ovs-vsctl port-to-br" reports that each port is
90dnl in BRIDGE.
91m4_define([CHECK_PORTS],
2792c2ad
BP
92 [dnl Check ports without --oneline.
93 AT_CHECK(
3b135da3
BP
94 [RUN_OVS_VSCTL([list-ports $1])],
95 [0],
96 [m4_foreach([port], m4_cdr($@), [port
c75d1511
BP
97])],
98 [],
99 [OVS_VSCTL_CLEANUP])
2792c2ad
BP
100
101 dnl Check ports with --oneline.
102 AT_CHECK(
460aad80 103 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
2792c2ad
BP
104 [0],
105 [m4_join([\n], m4_shift($@))
c75d1511
BP
106],
107 [],
108 [OVS_VSCTL_CLEANUP])
109 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
110 [ovs-vsctl: no port named $1
111],
112 [OVS_VSCTL_CLEANUP])
3b135da3
BP
113 m4_foreach(
114 [port], m4_cdr($@),
115 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
c75d1511 116], [], [OVS_VSCTL_CLEANUP])])])
3b135da3
BP
117
118dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
119dnl
120dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
121dnl list of ifaces, which must be in alphabetical order. Also checks
122dnl that "ovs-vsctl iface-to-br" reports that each interface is
123dnl in BRIDGE.
124m4_define([CHECK_IFACES],
125 [AT_CHECK(
126 [RUN_OVS_VSCTL([list-ifaces $1])],
127 [0],
128 [m4_foreach([iface], m4_cdr($@), [iface
dfbe07ba
BP
129])],
130 [],
131 [OVS_VSCTL_CLEANUP])
c75d1511
BP
132 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
133 [ovs-vsctl: no interface named $1
134],
135 [OVS_VSCTL_CLEANUP])
3b135da3
BP
136 m4_foreach(
137 [iface], m4_cdr($@),
138 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
c75d1511
BP
139],
140 [], [OVS_VSCTL_CLEANUP])])])
3b135da3 141
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 ----------------------------------------------------------------------
5341d046 404dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
dfbe07ba
BP
405m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
406 [AT_CHECK(
407 [RUN_OVS_VSCTL(
408 [add-br xenbr0],
aeee85aa 409 [--may-exist add-br xenbr0],
dfbe07ba 410 [add-port xenbr0 eth0],
bb1c67c8 411 [--may-exist add-port xenbr0 eth0],
5341d046
BP
412 [add-br xapi1 xenbr0 $1],
413 [--may-exist add-br xapi1 xenbr0 $1],
414 [add-port xapi1 eth0.$1])],
dfbe07ba 415 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3 416
5341d046
BP
417dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
418m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
419AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
420
421AT_SETUP([simple fake bridge (VLAN $1)])
3b135da3 422AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 423OVS_VSCTL_SETUP
5341d046 424OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
aeee85aa 425AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
5341d046 426 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
aeee85aa 427], [OVS_VSCTL_CLEANUP])
5341d046
BP
428AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
429 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
aeee85aa
BP
430], [OVS_VSCTL_CLEANUP])
431AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
5341d046 432 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
aeee85aa 433], [OVS_VSCTL_CLEANUP])
5341d046 434CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
3b135da3
BP
435CHECK_PORTS([xenbr0], [eth0])
436CHECK_IFACES([xenbr0], [eth0])
5341d046
BP
437CHECK_PORTS([xapi1], [eth0.$1])
438CHECK_IFACES([xapi1], [eth0.$1])
c75d1511 439OVS_VSCTL_CLEANUP
3b135da3
BP
440AT_CLEANUP
441
5341d046 442AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
3b135da3 443AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 444OVS_VSCTL_SETUP
5341d046 445OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
dfbe07ba 446AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 447CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
448CHECK_PORTS([xenbr0], [eth0])
449CHECK_IFACES([xenbr0], [eth0])
c75d1511 450OVS_VSCTL_CLEANUP
3b135da3
BP
451AT_CLEANUP
452
5341d046 453AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
3b135da3 454AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 455OVS_VSCTL_SETUP
5341d046 456OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
dfbe07ba 457AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
3b135da3 458CHECK_BRIDGES
c75d1511 459OVS_VSCTL_CLEANUP
3b135da3
BP
460AT_CLEANUP
461
5341d046 462AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
457e1eb0
BP
463AT_KEYWORDS([ovs-vsctl fake-bridge])
464OVS_VSCTL_SETUP
5341d046 465OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
457e1eb0 466AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 467 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
468 [br-set-external-id xapi1 key1 value1],
469 [br-get-external-id xenbr0],
470 [br-get-external-id xenbr0 key0],
471 [br-get-external-id xapi1],
472 [br-get-external-id xapi1 key1])], [0], [
473
474key0=value0
475value0
476key1=value1
477value1
478], [], [OVS_VSCTL_CLEANUP])
5341d046 479CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
457e1eb0
BP
480CHECK_PORTS([xenbr0], [eth0])
481CHECK_IFACES([xenbr0], [eth0])
5341d046
BP
482CHECK_PORTS([xapi1], [eth0.$1])
483CHECK_IFACES([xapi1], [eth0.$1])
457e1eb0
BP
484OVS_VSCTL_CLEANUP
485AT_CLEANUP
5341d046
BP
486]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
487
488OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
489OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
457e1eb0 490
5341d046 491dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
dfbe07ba
BP
492m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
493 [AT_CHECK(
494 [RUN_OVS_VSCTL(
495 [add-br xapi1],
496 [add-bond xapi1 bond0 eth0 eth1],
5341d046
BP
497 [add-br xapi2 xapi1 $1],
498 [add-port xapi2 bond0.$1])],
dfbe07ba 499 [0], [], [], [OVS_VSCTL_CLEANUP])])
3b135da3
BP
500
501AT_SETUP([fake bridge on bond])
502AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 503OVS_VSCTL_SETUP
5341d046 504OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
8e58fa9a 505CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
506CHECK_PORTS([xapi1], [bond0])
507CHECK_IFACES([xapi1], [eth0], [eth1])
508CHECK_PORTS([xapi2], [bond0.11])
509CHECK_IFACES([xapi2], [bond0.11])
c75d1511 510OVS_VSCTL_CLEANUP
3b135da3
BP
511AT_CLEANUP
512
513AT_SETUP([fake bridge on bond + del-br fake bridge])
514AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 515OVS_VSCTL_SETUP
5341d046 516OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
460aad80 517AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
dfbe07ba 518], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 519CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
520CHECK_PORTS([xapi1], [bond0])
521CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 522OVS_VSCTL_CLEANUP
3b135da3
BP
523AT_CLEANUP
524
525AT_SETUP([fake bridge on bond + del-br real bridge])
526AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba 527OVS_VSCTL_SETUP
5341d046 528OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
3b135da3
BP
529AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
530CHECK_BRIDGES
c75d1511 531OVS_VSCTL_CLEANUP
3b135da3 532AT_CLEANUP
5c414a2e 533
24b8b259
AE
534dnl ----------------------------------------------------------------------
535AT_BANNER([ovs-vsctl unit tests -- manager commands])
536
537AT_SETUP([managers])
538AT_KEYWORDS([manager ovs-vsctl])
539OVS_VSCTL_SETUP
540AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
541 [del-manager],
542 [get-manager],
543 [set-manager tcp:4.5.6.7],
544 [get-manager],
545 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
546 [get-manager],
547 [del-manager],
548 [get-manager])], [0], [
549
550
551tcp:4.5.6.7
552
553tcp:5.4.3.2\ntcp:8.9.10.11
554
555
556], [], [OVS_VSCTL_CLEANUP])
557OVS_VSCTL_CLEANUP
558AT_CLEANUP
559
5c414a2e
BP
560dnl ----------------------------------------------------------------------
561AT_BANNER([ovs-vsctl unit tests -- database commands])
562
563AT_SETUP([database commands -- positive checks])
564AT_KEYWORDS([ovs-vsctl])
565OVS_VSCTL_SETUP
c5f341ab
BP
566AT_CHECK(
567 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0],
568 [set o . bridges=@br0])],
5c414a2e
BP
569 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
570cp stdout out1
f40a9b61 571AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])],
5c414a2e
BP
572 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
573cp stdout out2
574AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0],
575 [[<0>
c5f341ab 576
bd76d25d
BP
577_uuid : <0>
578controller : []
579datapath_id : []
580datapath_type : ""
581external_ids : {}
31681a5d 582fail_mode : []
bd76d25d 583flood_vlans : []
254750ce 584flow_tables : {}
bd76d25d
BP
585mirrors : []
586name : "br0"
587netflow : []
588other_config : {}
589ports : []
590sflow : []
21f7563c
JP
591status : {}
592stp_enable : false
f40a9b61 593<0>
5c414a2e 594]], [ignore], [test ! -e pid || kill `cat pid`])
9591fefe
BP
595AT_CHECK(
596 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])],
597 [0],
598 [[fail_mode : []
599name : "br0"
600datapath_type : ""
601]], [ignore], [test ! -e pid || kill `cat pid`])
0a140468
BP
602AT_CHECK(
603 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])],
604 [0],
605 [[fail_mode : []
606name : "br0"
607datapath_type : ""
608]], [ignore], [test ! -e pid || kill `cat pid`])
c5f341ab
BP
609AT_CHECK([
610 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"],
611 [--id=@br2 create b name=br2 external-ids:bar=quux],
612 [add o . bridges @br1 @br2])],
0a140468
BP
613 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
614AT_CHECK(
615 [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout],
616 [ignore], [test ! -e pid || kill `cat pid`])
617AT_CHECK([sed -n '/./p' stdout | sort], [0],
618 [[name : "br0"
619name : "br2"
620]])
5c414a2e
BP
621AT_CHECK(
622 [RUN_OVS_VSCTL(
623 [set bridge br0 \
624 'other_config:datapath_id="0123456789ab"' \
625 'other_config:hwaddr="00:11:22:33:44:55"' \
d3f82921
BP
626 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
627 add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
5c414a2e
BP
628 [0], [], [], [OVS_VSCTL_CLEANUP])
629AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
d3f82921 630 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
5c414a2e
BP
631], [], [OVS_VSCTL_CLEANUP])
632AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
633 [0], ["00:11:22:33:44:55"
634
635], [], [OVS_VSCTL_CLEANUP])
636AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])],
637 [0], [{datapath_id="0123456789ab"}
638], [], [OVS_VSCTL_CLEANUP])
639AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])],
640 [0], [{}
641], [], [OVS_VSCTL_CLEANUP])
642AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])],
643 [0], [{}
644], [], [OVS_VSCTL_CLEANUP])
0a140468
BP
645AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0],
646 [destroy b br1],
c5f341ab
BP
647 [destroy b br2],
648 [clear o . bridges])],
5c414a2e
BP
649 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
650AT_CHECK([RUN_OVS_VSCTL([list b])],
651 [0], [], [], [OVS_VSCTL_CLEANUP])
652OVS_VSCTL_CLEANUP
653AT_CLEANUP
654
655AT_SETUP([database commands -- negative checks])
656AT_KEYWORDS([ovs-vsctl])
657OVS_VSCTL_SETUP
c5f341ab 658AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
5c414a2e
BP
659 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
660AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
661 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
662AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
663 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
c5f341ab 664AT_CHECK([
eed8052c 665 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
c5f341ab 666 [set bridge br0 netflow=@n])],
5c414a2e
BP
667 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
668cp stdout netflow-uuid
eed8052c 669AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])],
5c414a2e
BP
670 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
671AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
672 [[<0>
c5f341ab 673
bd76d25d
BP
674_uuid : <0>
675active_timeout : 0
676add_id_to_interface : false
677engine_id : []
678engine_type : []
13008eb3 679external_ids : {}
bd76d25d 680targets : ["1.2.3.4:567"]
5c414a2e
BP
681]], [ignore], [test ! -e pid || kill `cat pid`])
682AT_CHECK([RUN_OVS_VSCTL([list interx x])],
683 [1], [], [ovs-vsctl: unknown table "interx"
684], [OVS_VSCTL_CLEANUP])
685AT_CHECK([RUN_OVS_VSCTL([list b x])],
686 [1], [], [ovs-vsctl: no row "x" in table Bridge
687], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
688AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
689 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
690], [OVS_VSCTL_CLEANUP])
691AT_CHECK([RUN_OVS_VSCTL([get b br0 x])],
692 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
693], [OVS_VSCTL_CLEANUP])
694AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])],
695 [1], [], [ovs-vsctl: :y=z: missing column name
696], [OVS_VSCTL_CLEANUP])
697AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])],
e89e5374 698 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
5c414a2e 699], [OVS_VSCTL_CLEANUP])
7db03f7c
BP
700AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])],
701 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
702], [OVS_VSCTL_CLEANUP])
703AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])],
2a9537e2 704 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
7db03f7c 705], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
706AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])],
707 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
708], [OVS_VSCTL_CLEANUP])
709AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])],
710 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
711], [OVS_VSCTL_CLEANUP])
712AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])],
713 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
714], [OVS_VSCTL_CLEANUP])
715AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])],
bd76d25d 716 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
5c414a2e
BP
717], [OVS_VSCTL_CLEANUP])
718AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])],
bd76d25d 719 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
5c414a2e 720], [OVS_VSCTL_CLEANUP])
bfc96d9b
BP
721AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
722 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
723]], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
724AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
725 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
726], [OVS_VSCTL_CLEANUP])
bd76d25d 727AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])],
5c414a2e
BP
728 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
729], [OVS_VSCTL_CLEANUP])
eed8052c 730AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
f19f25a4 731 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
5c414a2e 732], [OVS_VSCTL_CLEANUP])
eed8052c 733AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
5c414a2e
BP
734 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
735], [OVS_VSCTL_CLEANUP])
0d0f05b9 736AT_CHECK([RUN_OVS_VSCTL([destroy b br2])],
5c414a2e
BP
737 [1], [], [ovs-vsctl: no row "br2" in table Bridge
738], [OVS_VSCTL_CLEANUP])
341c4e59
BP
739AT_CHECK([RUN_OVS_VSCTL([add i br1 name x])],
740 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
741], [OVS_VSCTL_CLEANUP])
742AT_CHECK([RUN_OVS_VSCTL([set port br1 name br2])],
743 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
744], [OVS_VSCTL_CLEANUP])
745AT_CHECK([RUN_OVS_VSCTL([remove b br1 name br1])],
746 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
747], [OVS_VSCTL_CLEANUP])
748AT_CHECK([RUN_OVS_VSCTL([clear b br1 name])],
749 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
750], [OVS_VSCTL_CLEANUP])
5c414a2e
BP
751OVS_VSCTL_CLEANUP
752AT_CLEANUP
753
2a9537e2
BP
754AT_SETUP([database commands -- conditions])
755AT_KEYWORDS([ovs-vsctl])
0b7140bb 756ON_EXIT([kill `cat pid`])
2a9537e2
BP
757OVS_VSCTL_SETUP
758AT_CHECK(
759 [RUN_OVS_VSCTL_TOGETHER(
760 [add-br br0],
761 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
762 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
763 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
764 [add-br br4], [set bridge br4 flood_vlans=2],
765 [add-br br5], [set bridge br5 flood_vlans=0,2],
766 [add-br br6], [set bridge br6 flood_vlans=1,2],
767 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782])
783m4_define([VSCTL_CHECK_FIND],
6dc2f8ee 784 [AT_CHECK([echo `ovs-vsctl --bare --timeout=5 --no-wait -vreconnect:emer --db=unix:socket -- --columns=name find bridge '$1' | sort`], [0], [$2
2a9537e2
BP
785])])
786
787# Arithmetic relational operators without keys.
788VSCTL_CHECK_FIND([flood_vlans=0], [br1])
789VSCTL_CHECK_FIND([flood_vlans=1], [br2])
790VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
791VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
792VSCTL_CHECK_FIND([flood_vlans=3], [])
793
794VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
795VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
796VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
797VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
798VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
799
800VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
801VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
802VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
803VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
804VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
805VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
806VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
807VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
808
809# Set relational operators without keys.
810VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
811VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
812VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
813VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
814VSCTL_CHECK_FIND([flood_vlans{=}3], [])
815
816VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
817VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
818VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
819VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
820VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
821
822VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
823VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
824VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
825VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
826VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
827VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
828
829VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
830VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
831VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
832VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
833VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
834VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
835VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
836
837# Arithmetic relational operators with keys.
838VSCTL_CHECK_FIND([other-config:x=""], [br1])
839VSCTL_CHECK_FIND([other-config:x=y], [br2])
840VSCTL_CHECK_FIND([other-config:x=z], [br3])
841
842VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
843VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
844VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
845
846VSCTL_CHECK_FIND([other-config:x>y], [br3])
847VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
848VSCTL_CHECK_FIND([other-config:x<y], [br1])
849VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
850
851# Set relational operators with keys.
852VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
853VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
854VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
855VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
856
857VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
858VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
859VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
860VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
861
862VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
863VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
864VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
865VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
866VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
867VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
868
869VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
870VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
871VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
872VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
873VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
874
875VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
876VSCTL_CHECK_FIND([other-config:x{>=}x], [])
877VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
878VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
879VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
880
881VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
882VSCTL_CHECK_FIND([other-config:x{>}x], [])
883VSCTL_CHECK_FIND([other-config:x{>}""], [])
884VSCTL_CHECK_FIND([other-config:x{>}y], [])
885VSCTL_CHECK_FIND([other-config:x{>}z], [])
94c33672 886OVS_VSCTL_CLEANUP
2a9537e2
BP
887AT_CLEANUP
888
7db03f7c
BP
889AT_SETUP([database commands -- wait-until immediately true])
890AT_KEYWORDS([ovs-vsctl])
891OVS_VSCTL_SETUP
892AT_CHECK([RUN_OVS_VSCTL(
893 [add-br br0],
894 [add-bond br0 bond0 eth0 eth1],
895 [set port bond0 bond_updelay=500 other-config:abc=def])],
896 [0], [], [], [OVS_VSCTL_CLEANUP])
289df16d 897AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])],
7db03f7c
BP
898 [0], [], [], [OVS_VSCTL_CLEANUP])
899AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])],
900 [0], [], [], [OVS_VSCTL_CLEANUP])
901AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])],
902 [0], [], [], [OVS_VSCTL_CLEANUP])
903AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])],
904 [0], [], [], [OVS_VSCTL_CLEANUP])
905OVS_VSCTL_CLEANUP
906AT_CLEANUP
907
908AT_SETUP([database commands -- wait-until must wait])
909AT_KEYWORDS([ovs-vsctl])
7454ec7a 910
7db03f7c
BP
911OVS_VSCTL_SETUP
912
913# Start ovs-vsctls in background.
914(RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
915(RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
916(RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
917(RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
918
919# Give the ovs-vsctls a chance to read the database
920sleep 1
921
e111e681 922AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
7db03f7c
BP
923RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])],
924 [0], [], [], [OVS_VSCTL_CLEANUP])
925
926# Wait for the ovs-vsctls to finish.
927wait
928
929# Check output
930AT_CHECK([cat stdout1], [0], [quux
931], [], [OVS_VSCTL_CLEANUP])
932AT_CHECK([cat stdout2], [0], [def
933], [], [OVS_VSCTL_CLEANUP])
934AT_CHECK([cat stdout3], [0], [{abc=def}
935], [], [OVS_VSCTL_CLEANUP])
936AT_CHECK([cat stdout4], [0], [500
937], [], [OVS_VSCTL_CLEANUP])
938
939OVS_VSCTL_CLEANUP
940AT_CLEANUP
941
aed133bf
BP
942AT_SETUP([--id option on create, get commands])
943AT_KEYWORDS([ovs-vsctl])
944OVS_VSCTL_SETUP
945AT_CHECK([RUN_OVS_VSCTL([add-br br0],
946 [add-port br0 eth0],
947 [add-port br0 eth1])])
948AT_CHECK(
949 [RUN_OVS_VSCTL_TOGETHER(
950 [set bridge br0 mirrors=@m],
951 [--id=@eth0 get port eth0],
952 [--id=@eth1 get port eth1],
953 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
954 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
955AT_CHECK(
956 [perl $srcdir/uuidfilt.pl stdout], [0], [dnl
957
958
959
960<0>
961],
962 [], [OVS_VSCTL_CLEANUP])
963AT_CHECK(
964 [RUN_OVS_VSCTL(
965 [list port eth0 eth1],
966 [list mirror],
967 [list bridge br0])],
968 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
969AT_CHECK(
970 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | $srcdir/uuidfilt.pl], [0], [dnl
971[_uuid : <0>
972name : "eth0"
973_uuid : <1>
974name : "eth1"
975_uuid : <2>
976name : mymirror
977output_port : <1>
978output_vlan : []
979select_all : false
980select_dst_port : [<0>]
981select_src_port : [<0>]
982select_vlan : []
983_uuid : <3>
984mirrors : [<2>]
985name : "br0"
986]],
987 [], [OVS_VSCTL_CLEANUP])
988OVS_VSCTL_CLEANUP
989AT_CLEANUP
990
c5f341ab
BP
991AT_SETUP([unreferenced record warnings])
992AT_KEYWORDS([ovs-vsctl])
993OVS_VSCTL_SETUP
994AT_CHECK(
ea523221 995 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:emer --db=unix:socket \
c5f341ab
BP
996 -- create Bridge name=br0 | $srcdir/uuidfilt.pl],
997 [0], [<0>
998], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect
999], [OVS_VSCTL_CLEANUP])
1000AT_CHECK(
ea523221 1001 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:emer --db=unix:socket \
c5f341ab
BP
1002 -- --id=@br0 create Bridge name=br0 | $srcdir/uuidfilt.pl],
1003 [0], [<0>
1004], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1005], [OVS_VSCTL_CLEANUP])
1006AT_CHECK(
ea523221 1007 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:emer --db=unix:socket \
c5f341ab
BP
1008 -- --id=@eth0_iface create Interface name=eth0 \
1009 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1010 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1011 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1012 -- set Open_vSwitch . bridges=@br0 | $srcdir/uuidfilt.pl],
1013 [0], [<0>
1014<1>
1015<2>
1016<3>
1017], [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
1018], [OVS_VSCTL_CLEANUP])
1019OVS_VSCTL_CLEANUP
1020AT_CLEANUP
1021
5c414a2e
BP
1022dnl This test really shows a bug -- "create" followed by "list" in
1023dnl the same execution shows the wrong UUID on the "list" command.
1024dnl The bug is documented in ovs-vsctl.8.
1025AT_SETUP([created row UUID is wrong in same execution])
1026AT_KEYWORDS([ovs-vsctl])
1027OVS_VSCTL_SETUP
c5f341ab 1028AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])],
5c414a2e
BP
1029 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1030AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0],
1031 [[<0>
bd76d25d
BP
1032_uuid : <1>
1033controller : []
1034datapath_id : []
1035datapath_type : ""
1036external_ids : {}
31681a5d 1037fail_mode : []
bd76d25d 1038flood_vlans : []
254750ce 1039flow_tables : {}
bd76d25d
BP
1040mirrors : []
1041name : "br0"
1042netflow : []
1043other_config : {}
1044ports : []
1045sflow : []
21f7563c
JP
1046status : {}
1047stp_enable : false
5c414a2e
BP
1048]], [ignore], [test ! -e pid || kill `cat pid`])
1049OVS_VSCTL_CLEANUP
1050AT_CLEANUP
eeb8467e
AS
1051
1052dnl This test will create a linux-htb QoS record that
1053dnl points to a few queues and use it on a1 and a2 port.
1054dnl It also destroys all records from Qos and Queue table.
1055AT_SETUP([--all option on destroy command])
1056AT_KEYWORDS([ovs-vsctl])
1057OVS_VSCTL_SETUP
1058AT_CHECK([RUN_OVS_VSCTL(
1059 [add-br a],
1060 [add-port a a1],
1061 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
1062CHECK_BRIDGES([a, a, 0])
1063CHECK_PORTS([a], [a1], [a2])
1064CHECK_IFACES([a], [a1], [a2])
1065AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1066 [set Port a1 qos=@newqos],
1067 [set Port a2 qos=@newqos],
1068 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1069 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1070 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore], [], [OVS_VSCTL_CLEANUP])
1071AT_CHECK([RUN_OVS_VSCTL(
1072 [--columns=other_config,type list Qos])], [0],
1073[other_config : {max-rate="1000000000"}
1074type : linux-htb
1075], [], [OVS_VSCTL_CLEANUP])
1076AT_CHECK([RUN_OVS_VSCTL(
1077 [--columns=other_config list Queue | sort | xargs echo])], [0],
1078[other_config : {max-rate=100000000, min-rate=100000000} other_config : {min-rate=500000000}
1079], [], [OVS_VSCTL_CLEANUP])
1080AT_CHECK([RUN_OVS_VSCTL(
1081 [clear Port a1 qos],
1082 [clear Port a2 qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1083AT_CHECK([RUN_OVS_VSCTL(
1084 [--columns=qos list Port a1 a2])], [0],
1085[[qos : []
1086
1087qos : []
1088]], [], [OVS_VSCTL_CLEANUP])
1089AT_CHECK([RUN_OVS_VSCTL(
1090 [--all destroy Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1091AT_CHECK([RUN_OVS_VSCTL(
1092 [-- list Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1093AT_CHECK([RUN_OVS_VSCTL(
1094 [--all destroy Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1095AT_CHECK([RUN_OVS_VSCTL(
1096 [-- list Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1097OVS_VSCTL_CLEANUP
1098AT_CLEANUP