3 dnl Creates an empty database in the current directory and then starts
4 dnl an ovsdb-server on it for ovs-vsctl to connect to.
5 m4_define([OVS_VSCTL_SETUP],
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])])
11 dnl Kills off the database server.
12 m4_define([OVS_VSCTL_CLEANUP], [OVSDB_SERVER_SHUTDOWN])
14 dnl RUN_OVS_VSCTL(COMMAND, ...)
16 dnl Executes each ovs-vsctl COMMAND.
17 m4_define([RUN_OVS_VSCTL],
18 [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:emer --db=unix:socket command
20 m4_define([RUN_OVS_VSCTL_ONELINE],
21 [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:emer --db=unix:socket --oneline -- command
24 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
26 dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
27 m4_define([RUN_OVS_VSCTL_TOGETHER],
28 [ovs-vsctl --timeout=5 --no-wait -vreconnect:emer --db=unix:socket --oneline dnl
29 m4_foreach([command], [$@], [ -- command])])
31 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
33 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
34 dnl which must be in alphabetical order. Also checks that each BRIDGE has the
35 dnl specified PARENT and is on the given VLAN.
36 m4_define([_CHECK_BRIDGE],
37 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
38 ], [], [OVS_VSCTL_CLEANUP])
40 # Check br-to-vlan, without --oneline.
41 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
42 ], [], [OVS_VSCTL_CLEANUP])
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.)
47 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
48 ], [], [OVS_VSCTL_CLEANUP])
50 # Check multiple queries in a single run.
51 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
54 ], [], [OVS_VSCTL_CLEANUP])])
55 m4_define([CHECK_BRIDGES],
56 [dnl Check that the bridges appear on list-br, without --oneline.
58 [RUN_OVS_VSCTL([list-br])],
60 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
65 dnl Check that the bridges appear on list-br, with --oneline.
67 [RUN_OVS_VSCTL_ONELINE([list-br])],
69 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
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], [$@],
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], [], [],
82 dnl Check that each bridge has the expected parent and VLAN.
83 m4_map([_CHECK_BRIDGE], [$@])])
85 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
87 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
88 dnl list of ports, which must be in alphabetical order. Also checks
89 dnl that "ovs-vsctl port-to-br" reports that each port is
91 m4_define([CHECK_PORTS],
92 [dnl Check ports without --oneline.
94 [RUN_OVS_VSCTL([list-ports $1])],
96 [m4_foreach([port], m4_cdr($@), [port
101 dnl Check ports with --oneline.
103 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
105 [m4_join([\n], m4_shift($@))
109 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
110 [ovs-vsctl: no port named $1
115 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
116 ], [], [OVS_VSCTL_CLEANUP])])])
118 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
120 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
121 dnl list of ifaces, which must be in alphabetical order. Also checks
122 dnl that "ovs-vsctl iface-to-br" reports that each interface is
124 m4_define([CHECK_IFACES],
126 [RUN_OVS_VSCTL([list-ifaces $1])],
128 [m4_foreach([iface], m4_cdr($@), [iface
132 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
133 [ovs-vsctl: no interface named $1
138 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
140 [], [OVS_VSCTL_CLEANUP])])])
142 dnl ----------------------------------------------------------------------
143 AT_BANNER([ovs-vsctl unit tests -- real bridges])
146 AT_KEYWORDS([ovs-vsctl])
148 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
149 CHECK_BRIDGES([a, a, 0])
155 AT_SETUP([add-br a, add-br a])
156 AT_KEYWORDS([ovs-vsctl])
158 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
159 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
160 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
161 ], [OVS_VSCTL_CLEANUP])
165 AT_SETUP([add-br a, add-br b])
166 AT_KEYWORDS([ovs-vsctl])
168 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
170 AT_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
174 CHECK_BRIDGES([a, a, 0], [b, b, 0])
182 AT_SETUP([add-br a, add-br b, del-br a])
183 AT_KEYWORDS([ovs-vsctl])
185 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
187 CHECK_BRIDGES([b, b, 0])
193 AT_SETUP([add-br a, del-br a, add-br a])
194 AT_KEYWORDS([ovs-vsctl])
196 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
200 [set Interface a other_config:key=value],
201 [get Interface a other_config:key])], [0], [
206 ], [], [OVS_VSCTL_CLEANUP])
207 CHECK_BRIDGES([a, a, 0])
213 AT_SETUP([add-br a, add-port a a1, add-port a a2])
214 AT_KEYWORDS([ovs-vsctl])
216 AT_CHECK([RUN_OVS_VSCTL(
218 [--if-exists del-br b],
220 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
221 CHECK_BRIDGES([a, a, 0])
222 CHECK_PORTS([a], [a1], [a2])
223 CHECK_IFACES([a], [a1], [a2])
227 AT_SETUP([add-br a, add-port a a1, add-port a a1])
228 AT_KEYWORDS([ovs-vsctl])
230 AT_CHECK([RUN_OVS_VSCTL(
232 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
233 AT_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
235 ], [OVS_VSCTL_CLEANUP])
239 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
240 AT_KEYWORDS([ovs-vsctl])
242 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
247 [--if-exists del-port b b2],
254 ], [], [OVS_VSCTL_CLEANUP])
255 CHECK_BRIDGES([b, b, 0])
256 CHECK_PORTS([b], [b1])
257 CHECK_IFACES([b], [b1])
261 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
262 AT_KEYWORDS([ovs-vsctl])
264 AT_CHECK([RUN_OVS_VSCTL(
266 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
267 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [],
269 AT_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
273 CHECK_BRIDGES([a, a, 0])
274 CHECK_PORTS([a], [bond0])
275 CHECK_IFACES([a], [a1], [a2], [a3])
279 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
280 AT_KEYWORDS([ovs-vsctl])
282 AT_CHECK([RUN_OVS_VSCTL(
285 [add-port a a1 tag=9],
287 [--may-exist add-port b b1],
288 [del-port a a1])], [0], [9
289 ], [], [OVS_VSCTL_CLEANUP])
290 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],
292 AT_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
296 CHECK_BRIDGES([a, a, 0], [b, b, 0])
299 CHECK_PORTS([b], [b1])
300 CHECK_IFACES([b], [b1])
304 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
305 AT_KEYWORDS([ovs-vsctl])
307 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
309 [add-bond a bond0 a1 a2 a3 tag=9],
310 [get Port bond0 tag],
311 [del-port bond0])], [0], [
315 ], [], [OVS_VSCTL_CLEANUP])
316 CHECK_BRIDGES([a, a, 0])
321 AT_SETUP([external IDs])
322 AT_KEYWORDS([ovs-vsctl])
324 AT_CHECK([RUN_OVS_VSCTL_ONELINE(
327 [add-bond a bond0 a2 a3],
328 [br-set-external-id a key0 value0],
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],
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],
340 [get port a1 external-ids],
341 [get interface a2 external-ids],
342 [get interface a3 external-ids])], [0], [
358 {"key2"="value2", "key3"="value3"}
360 ], [], [OVS_VSCTL_CLEANUP])
361 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
362 [br-get-external-id a],
363 [get port a1 external-ids],
364 [get interface a2 external-ids],
365 [get interface a3 external-ids])], [0],
368 {"key2"="value2", "key3"="value3"}
370 ], [], [OVS_VSCTL_CLEANUP])
371 CHECK_BRIDGES([a, a, 0])
372 CHECK_PORTS([a], [a1], [bond0])
373 CHECK_IFACES([a], [a1], [a2], [a3])
377 AT_SETUP([controllers])
378 AT_KEYWORDS([controller ovs-vsctl])
380 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
383 [get-controller br0],
384 [set-controller br0 tcp:4.5.6.7],
385 [get-controller br0],
387 [del-controller br0],
388 [get-controller br0],
390 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
391 [get-controller br0])], [0], [
398 tcp:5.4.3.2\ntcp:8.9.10.11
399 ], [], [OVS_VSCTL_CLEANUP])
403 dnl ----------------------------------------------------------------------
404 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
405 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
409 [--may-exist add-br xenbr0],
410 [add-port xenbr0 eth0],
411 [--may-exist add-port xenbr0 eth0],
412 [add-br xapi1 xenbr0 $1],
413 [--may-exist add-br xapi1 xenbr0 $1],
414 [add-port xapi1 eth0.$1])],
415 [0], [], [], [OVS_VSCTL_CLEANUP])])
417 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
418 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
419 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
421 AT_SETUP([simple fake bridge (VLAN $1)])
422 AT_KEYWORDS([ovs-vsctl fake-bridge])
424 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
425 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
426 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
427 ], [OVS_VSCTL_CLEANUP])
428 AT_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
430 ], [OVS_VSCTL_CLEANUP])
431 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
432 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
433 ], [OVS_VSCTL_CLEANUP])
434 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
435 CHECK_PORTS([xenbr0], [eth0])
436 CHECK_IFACES([xenbr0], [eth0])
437 CHECK_PORTS([xapi1], [eth0.$1])
438 CHECK_IFACES([xapi1], [eth0.$1])
442 AT_SETUP([list bridges -- real and fake (VLAN $1)])
443 AT_KEYWORDS([ovs-vsctl fake-bridge])
445 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
446 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
448 ], [], [OVS_VSCTL_CLEANUP])
449 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
451 ], [], [OVS_VSCTL_CLEANUP])
452 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
454 ], [], [OVS_VSCTL_CLEANUP])
458 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
459 AT_KEYWORDS([ovs-vsctl fake-bridge])
461 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
462 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
463 CHECK_BRIDGES([xenbr0, xenbr0, 0])
464 CHECK_PORTS([xenbr0], [eth0])
465 CHECK_IFACES([xenbr0], [eth0])
469 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
470 AT_KEYWORDS([ovs-vsctl fake-bridge])
472 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
473 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
478 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
479 AT_KEYWORDS([ovs-vsctl fake-bridge])
481 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
482 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
483 [br-set-external-id xenbr0 key0 value0],
484 [br-set-external-id xapi1 key1 value1],
485 [br-get-external-id xenbr0],
486 [br-get-external-id xenbr0 key0],
487 [br-get-external-id xapi1],
488 [br-get-external-id xapi1 key1])], [0], [
494 ], [], [OVS_VSCTL_CLEANUP])
495 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
496 CHECK_PORTS([xenbr0], [eth0])
497 CHECK_IFACES([xenbr0], [eth0])
498 CHECK_PORTS([xapi1], [eth0.$1])
499 CHECK_IFACES([xapi1], [eth0.$1])
502 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
504 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
505 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
507 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
508 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
512 [add-bond xapi1 bond0 eth0 eth1],
513 [add-br xapi2 xapi1 $1],
514 [add-port xapi2 bond0.$1])],
515 [0], [], [], [OVS_VSCTL_CLEANUP])])
517 AT_SETUP([fake bridge on bond])
518 AT_KEYWORDS([ovs-vsctl fake-bridge])
520 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
521 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
522 CHECK_PORTS([xapi1], [bond0])
523 CHECK_IFACES([xapi1], [eth0], [eth1])
524 CHECK_PORTS([xapi2], [bond0.11])
525 CHECK_IFACES([xapi2], [bond0.11])
529 AT_SETUP([fake bridge on bond + del-br fake bridge])
530 AT_KEYWORDS([ovs-vsctl fake-bridge])
532 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
533 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
534 ], [], [OVS_VSCTL_CLEANUP])
535 CHECK_BRIDGES([xapi1, xapi1, 0])
536 CHECK_PORTS([xapi1], [bond0])
537 CHECK_IFACES([xapi1], [eth0], [eth1])
541 AT_SETUP([fake bridge on bond + del-br real bridge])
542 AT_KEYWORDS([ovs-vsctl fake-bridge])
544 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
545 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
550 dnl ----------------------------------------------------------------------
551 AT_BANNER([ovs-vsctl unit tests -- manager commands])
554 AT_KEYWORDS([manager ovs-vsctl])
556 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
559 [set-manager tcp:4.5.6.7],
561 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
564 [get-manager])], [0], [
569 tcp:5.4.3.2\ntcp:8.9.10.11
572 ], [], [OVS_VSCTL_CLEANUP])
576 dnl ----------------------------------------------------------------------
577 AT_BANNER([ovs-vsctl unit tests -- database commands])
579 AT_SETUP([database commands -- positive checks])
580 AT_KEYWORDS([ovs-vsctl])
583 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0],
584 [set o . bridges=@br0])],
585 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
587 AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])],
588 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
590 AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0],
611 ]], [ignore], [test ! -e pid || kill `cat pid`])
613 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])],
618 ]], [ignore], [test ! -e pid || kill `cat pid`])
620 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])],
625 ]], [ignore], [test ! -e pid || kill `cat pid`])
627 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"],
628 [--id=@br2 create b name=br2 external-ids:bar=quux],
629 [add o . bridges @br1 @br2])],
630 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
632 [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout],
633 [ignore], [test ! -e pid || kill `cat pid`])
634 AT_CHECK([sed -n '/./p' stdout | sort], [0],
641 'other_config:datapath_id="0123456789ab"' \
642 'other_config:hwaddr="00:11:22:33:44:55"' \
643 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
644 add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
645 [0], [], [], [OVS_VSCTL_CLEANUP])
646 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
647 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
648 ], [], [OVS_VSCTL_CLEANUP])
649 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
650 [0], ["00:11:22:33:44:55"
652 ], [], [OVS_VSCTL_CLEANUP])
653 AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])],
654 [0], [{datapath_id="0123456789ab"}
655 ], [], [OVS_VSCTL_CLEANUP])
656 AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])],
658 ], [], [OVS_VSCTL_CLEANUP])
659 AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])],
661 ], [], [OVS_VSCTL_CLEANUP])
662 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0],
665 [clear o . bridges])],
666 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
667 AT_CHECK([RUN_OVS_VSCTL([list b])],
668 [0], [], [], [OVS_VSCTL_CLEANUP])
669 AT_CHECK([RUN_OVS_VSCTL([--if-exists get b x datapath_id])],
670 [0], [], [], [OVS_VSCTL_CLEANUP])
671 AT_CHECK([RUN_OVS_VSCTL([--if-exists list b x])],
672 [0], [], [], [OVS_VSCTL_CLEANUP])
673 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])],
674 [0], [], [], [OVS_VSCTL_CLEANUP])
676 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])],
677 [0], [], [], [OVS_VSCTL_CLEANUP])
679 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])],
680 [0], [], [], [OVS_VSCTL_CLEANUP])
684 AT_SETUP([database commands -- negative checks])
685 AT_KEYWORDS([ovs-vsctl])
688 AT_CHECK([ovs-vsctl --may-exist],
689 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
690 ], [OVS_VSCTL_CLEANUP])
691 AT_CHECK([ovs-vsctl --may-exist --],
692 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
693 ], [OVS_VSCTL_CLEANUP])
694 AT_CHECK([ovs-vsctl -- --may-exist],
695 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
696 ], [OVS_VSCTL_CLEANUP])
698 AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
699 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
700 AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
701 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
702 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
703 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
705 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
706 [set bridge br0 netflow=@n])],
707 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
708 cp stdout netflow-uuid
709 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])],
710 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
711 AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
716 add_id_to_interface : false
720 targets : ["1.2.3.4:567"]
721 ]], [ignore], [test ! -e pid || kill `cat pid`])
722 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
723 [1], [], [ovs-vsctl: unknown table "interx"
724 ], [OVS_VSCTL_CLEANUP])
725 AT_CHECK([RUN_OVS_VSCTL([list b x])],
726 [1], [], [ovs-vsctl: no row "x" in table Bridge
727 ], [OVS_VSCTL_CLEANUP])
728 AT_CHECK([RUN_OVS_VSCTL([get b x datapath_id])],
729 [1], [], [ovs-vsctl: no row "x" in table Bridge
730 ], [OVS_VSCTL_CLEANUP])
731 AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
732 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
733 ], [OVS_VSCTL_CLEANUP])
734 AT_CHECK([RUN_OVS_VSCTL([get b br0 x])],
735 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
736 ], [OVS_VSCTL_CLEANUP])
737 AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])],
738 [1], [], [ovs-vsctl: :y=z: missing column name
739 ], [OVS_VSCTL_CLEANUP])
740 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])],
741 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
742 ], [OVS_VSCTL_CLEANUP])
743 AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])],
744 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
745 ], [OVS_VSCTL_CLEANUP])
746 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
747 [1], [], [ovs-vsctl: no row "x" in table Controller
748 ], [OVS_VSCTL_CLEANUP])
749 AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])],
750 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
751 ], [OVS_VSCTL_CLEANUP])
752 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])],
753 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
754 ], [OVS_VSCTL_CLEANUP])
755 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])],
756 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
757 ], [OVS_VSCTL_CLEANUP])
758 AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])],
759 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
760 ], [OVS_VSCTL_CLEANUP])
761 AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])],
762 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
763 ], [OVS_VSCTL_CLEANUP])
764 AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])],
765 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
766 ], [OVS_VSCTL_CLEANUP])
767 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
768 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
769 ]], [OVS_VSCTL_CLEANUP])
770 AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
771 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
772 ], [OVS_VSCTL_CLEANUP])
773 AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])],
774 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
775 ], [OVS_VSCTL_CLEANUP])
776 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
777 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
778 ], [OVS_VSCTL_CLEANUP])
779 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
780 [1], [], [ovs-vsctl: no row "x" in table NetFlow
781 ], [OVS_VSCTL_CLEANUP])
782 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
783 [1], [], [ovs-vsctl: no row "x" in table NetFlow
784 ], [OVS_VSCTL_CLEANUP])
785 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
786 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
787 ], [OVS_VSCTL_CLEANUP])
788 AT_CHECK([RUN_OVS_VSCTL([destroy b br2])],
789 [1], [], [ovs-vsctl: no row "br2" in table Bridge
790 ], [OVS_VSCTL_CLEANUP])
791 AT_CHECK([RUN_OVS_VSCTL([add i br1 name x])],
792 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
793 ], [OVS_VSCTL_CLEANUP])
794 AT_CHECK([RUN_OVS_VSCTL([set port br1 name br2])],
795 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
796 ], [OVS_VSCTL_CLEANUP])
797 AT_CHECK([RUN_OVS_VSCTL([remove b br1 name br1])],
798 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
799 ], [OVS_VSCTL_CLEANUP])
800 AT_CHECK([RUN_OVS_VSCTL([clear b br1 name])],
801 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
802 ], [OVS_VSCTL_CLEANUP])
806 AT_SETUP([database commands -- conditions])
807 AT_KEYWORDS([ovs-vsctl])
808 ON_EXIT([kill `cat pid`])
811 [RUN_OVS_VSCTL_TOGETHER(
813 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
814 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
815 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
816 [add-br br4], [set bridge br4 flood_vlans=2],
817 [add-br br5], [set bridge br5 flood_vlans=0,2],
818 [add-br br6], [set bridge br6 flood_vlans=1,2],
819 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
835 m4_define([VSCTL_CHECK_FIND],
836 [AT_CHECK([echo `ovs-vsctl --bare --timeout=5 --no-wait -vreconnect:emer --db=unix:socket -- --columns=name find bridge '$1' | sort`], [0], [$2
839 # Arithmetic relational operators without keys.
840 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
841 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
842 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
843 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
844 VSCTL_CHECK_FIND([flood_vlans=3], [])
846 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
847 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
848 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
849 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
850 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
852 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
853 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
854 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
855 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
856 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
857 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
858 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
859 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
861 # Set relational operators without keys.
862 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
863 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
864 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
865 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
866 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
868 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
869 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
870 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
871 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
872 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
874 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
875 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
876 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
877 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
878 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
879 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
881 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
882 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
883 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
884 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
885 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
886 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
887 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
889 # Arithmetic relational operators with keys.
890 VSCTL_CHECK_FIND([other-config:x=""], [br1])
891 VSCTL_CHECK_FIND([other-config:x=y], [br2])
892 VSCTL_CHECK_FIND([other-config:x=z], [br3])
894 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
895 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
896 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
898 VSCTL_CHECK_FIND([other-config:x>y], [br3])
899 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
900 VSCTL_CHECK_FIND([other-config:x<y], [br1])
901 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
903 # Set relational operators with keys.
904 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
905 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
906 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
907 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
909 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
910 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
911 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
912 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
914 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
915 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
916 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
917 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
918 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
919 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
921 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
922 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
923 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
924 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
925 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
927 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
928 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
929 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
930 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
931 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
933 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
934 VSCTL_CHECK_FIND([other-config:x{>}x], [])
935 VSCTL_CHECK_FIND([other-config:x{>}""], [])
936 VSCTL_CHECK_FIND([other-config:x{>}y], [])
937 VSCTL_CHECK_FIND([other-config:x{>}z], [])
941 AT_SETUP([database commands -- wait-until immediately true])
942 AT_KEYWORDS([ovs-vsctl])
944 AT_CHECK([RUN_OVS_VSCTL(
946 [add-bond br0 bond0 eth0 eth1],
947 [set port bond0 bond_updelay=500 other-config:abc=def])],
948 [0], [], [], [OVS_VSCTL_CLEANUP])
949 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])],
950 [0], [], [], [OVS_VSCTL_CLEANUP])
951 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])],
952 [0], [], [], [OVS_VSCTL_CLEANUP])
953 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])],
954 [0], [], [], [OVS_VSCTL_CLEANUP])
955 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])],
956 [0], [], [], [OVS_VSCTL_CLEANUP])
960 AT_SETUP([database commands -- wait-until must wait])
961 AT_KEYWORDS([ovs-vsctl])
965 # Start ovs-vsctls in background.
966 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
967 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
968 (RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
969 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
971 # Give the ovs-vsctls a chance to read the database
974 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
975 RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])],
976 [0], [], [], [OVS_VSCTL_CLEANUP])
978 # Wait for the ovs-vsctls to finish.
982 AT_CHECK([cat stdout1], [0], [quux
983 ], [], [OVS_VSCTL_CLEANUP])
984 AT_CHECK([cat stdout2], [0], [def
985 ], [], [OVS_VSCTL_CLEANUP])
986 AT_CHECK([cat stdout3], [0], [{abc=def}
987 ], [], [OVS_VSCTL_CLEANUP])
988 AT_CHECK([cat stdout4], [0], [500
989 ], [], [OVS_VSCTL_CLEANUP])
994 AT_SETUP([--id option on create, get commands])
995 AT_KEYWORDS([ovs-vsctl])
997 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
999 [add-port br0 eth1])])
1001 [RUN_OVS_VSCTL_TOGETHER(
1002 [set bridge br0 mirrors=@m],
1003 [--id=@eth0 get port eth0],
1004 [--id=@eth1 get port eth1],
1005 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1006 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1008 [perl $srcdir/uuidfilt.pl stdout], [0], [dnl
1014 [], [OVS_VSCTL_CLEANUP])
1017 [list port eth0 eth1],
1019 [list bridge br0])],
1020 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1022 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | $srcdir/uuidfilt.pl], [0], [dnl
1032 select_dst_port : [<0>]
1033 select_src_port : [<0>]
1039 [], [OVS_VSCTL_CLEANUP])
1043 AT_SETUP([unreferenced record warnings])
1044 AT_KEYWORDS([ovs-vsctl])
1047 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:emer --db=unix:socket \
1048 -- create Bridge name=br0 | $srcdir/uuidfilt.pl],
1050 ], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect
1051 ], [OVS_VSCTL_CLEANUP])
1053 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:emer --db=unix:socket \
1054 -- --id=@br0 create Bridge name=br0 | $srcdir/uuidfilt.pl],
1056 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1057 ], [OVS_VSCTL_CLEANUP])
1059 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:emer --db=unix:socket \
1060 -- --id=@eth0_iface create Interface name=eth0 \
1061 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1062 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1063 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1064 -- set Open_vSwitch . bridges=@br0 | $srcdir/uuidfilt.pl],
1069 ], [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
1070 ], [OVS_VSCTL_CLEANUP])
1074 dnl This test really shows a bug -- "create" followed by "list" in
1075 dnl the same execution shows the wrong UUID on the "list" command.
1076 dnl The bug is documented in ovs-vsctl.8.
1077 AT_SETUP([created row UUID is wrong in same execution])
1078 AT_KEYWORDS([ovs-vsctl])
1080 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])],
1081 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1082 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0],
1101 ]], [ignore], [test ! -e pid || kill `cat pid`])
1105 dnl This test will create a linux-htb QoS record that
1106 dnl points to a few queues and use it on a1 and a2 port.
1107 dnl It also destroys all records from Qos and Queue table.
1108 AT_SETUP([--all option on destroy command])
1109 AT_KEYWORDS([ovs-vsctl])
1111 AT_CHECK([RUN_OVS_VSCTL(
1114 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
1115 CHECK_BRIDGES([a, a, 0])
1116 CHECK_PORTS([a], [a1], [a2])
1117 CHECK_IFACES([a], [a1], [a2])
1118 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1119 [set Port a1 qos=@newqos],
1120 [set Port a2 qos=@newqos],
1121 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1122 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1123 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore], [], [OVS_VSCTL_CLEANUP])
1124 AT_CHECK([RUN_OVS_VSCTL(
1125 [--columns=other_config,type list Qos])], [0],
1126 [other_config : {max-rate="1000000000"}
1128 ], [], [OVS_VSCTL_CLEANUP])
1129 AT_CHECK([RUN_OVS_VSCTL(
1130 [--columns=other_config list Queue | sort | xargs echo])], [0],
1131 [other_config : {max-rate=100000000, min-rate=100000000} other_config : {min-rate=500000000}
1132 ], [], [OVS_VSCTL_CLEANUP])
1133 AT_CHECK([RUN_OVS_VSCTL(
1134 [clear Port a1 qos],
1135 [clear Port a2 qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1136 AT_CHECK([RUN_OVS_VSCTL(
1137 [--columns=qos list Port a1 a2])], [0],
1141 ]], [], [OVS_VSCTL_CLEANUP])
1142 AT_CHECK([RUN_OVS_VSCTL(
1143 [--all destroy Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1144 AT_CHECK([RUN_OVS_VSCTL(
1145 [-- list Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1146 AT_CHECK([RUN_OVS_VSCTL(
1147 [--all destroy Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1148 AT_CHECK([RUN_OVS_VSCTL(
1149 [-- list Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])