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