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 --remote=punix:db.sock db >/dev/null 2>&1], [0], [ignore], [ignore])
8 on_exit 'kill `cat ovsdb-server.pid`'])
12 dnl Kills off the database server.
13 m4_define([OVS_VSCTL_CLEANUP], [OVS_APP_EXIT_AND_WAIT_BY_TARGET([ovsdb-server], [ovsdb-server.pid])])
15 dnl RUN_OVS_VSCTL(COMMAND, ...)
17 dnl Executes each ovs-vsctl COMMAND.
18 m4_define([RUN_OVS_VSCTL],
19 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer command
21 m4_define([RUN_OVS_VSCTL_ONELINE],
22 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --oneline -- command
25 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
27 dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
28 m4_define([RUN_OVS_VSCTL_TOGETHER],
29 [ovs-vsctl --no-wait -vreconnect:emer --oneline dnl
30 m4_foreach([command], [$@], [ -- command])])
32 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
34 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
35 dnl which must be in alphabetical order. Also checks that each BRIDGE has the
36 dnl specified PARENT and is on the given VLAN.
37 m4_define([_CHECK_BRIDGE],
38 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
41 # Check br-to-vlan, without --oneline.
42 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
44 # Check br-to-vlan, with --oneline.
45 # (This particular test is interesting with --oneline because it returns
46 # an integer instead of a string and that can cause type mismatches inside
47 # python if not done carefully.)
48 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
51 # Check multiple queries in a single run.
52 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
56 m4_define([CHECK_BRIDGES],
57 [dnl Check that the bridges appear on list-br, without --oneline.
59 [RUN_OVS_VSCTL([list-br])],
61 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
64 dnl Check that the bridges appear on list-br, with --oneline.
66 [RUN_OVS_VSCTL_ONELINE([list-br])],
68 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
71 dnl Check that each bridge exists according to br-exists and that
72 dnl a bridge that should not exist does not.
73 m4_foreach([brinfo], [$@],
74 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])])])
75 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2])
77 dnl Check that each bridge has the expected parent and VLAN.
78 m4_map([_CHECK_BRIDGE], [$@])])
80 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
82 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
83 dnl list of ports, which must be in alphabetical order. Also checks
84 dnl that "ovs-vsctl port-to-br" reports that each port is
86 m4_define([CHECK_PORTS],
87 [dnl Check ports without --oneline.
89 [RUN_OVS_VSCTL([list-ports $1])],
91 [m4_foreach([port], m4_cdr($@), [port
94 dnl Check ports with --oneline.
96 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
98 [m4_join([\n], m4_shift($@))
100 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
101 [ovs-vsctl: no port named $1
105 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
108 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
110 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
111 dnl list of ifaces, which must be in alphabetical order. Also checks
112 dnl that "ovs-vsctl iface-to-br" reports that each interface is
114 m4_define([CHECK_IFACES],
116 [RUN_OVS_VSCTL([list-ifaces $1])],
118 [m4_foreach([iface], m4_cdr($@), [iface
120 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
121 [ovs-vsctl: no interface named $1
125 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
128 dnl ----------------------------------------------------------------------
129 AT_BANNER([ovs-vsctl unit tests])
131 AT_SETUP([ovs-vsctl connection retry])
132 dnl Without --retry, there should be no retry for active connections.
133 AT_CHECK([ovs-vsctl --db=unix:foo --timeout=10 -vreconnect:emer -- init],
135 AT_CHECK([[sed 's/([^()]*)/(...reason...)/' stderr]], [0],
136 [ovs-vsctl: unix:foo: database connection failed (...reason...)
139 dnl With --retry, we should retry for active connections.
141 [ovs-vsctl --db=unix:foo --timeout=1 --retry -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
144 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
146 if test "$IS_WIN32" = "yes"; then
147 AT_CHECK([cat status], [0], [3
151 AT_CHECK([cat status], [0], [142
155 dnl Without --retry, we should retry for passive connections.
157 [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
160 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
162 if test "$IS_WIN32" = "yes"; then
163 AT_CHECK([cat status], [0], [3
167 AT_CHECK([cat status], [0], [142
172 dnl ----------------------------------------------------------------------
173 AT_BANNER([ovs-vsctl unit tests -- real bridges])
176 AT_KEYWORDS([ovs-vsctl])
178 AT_CHECK([RUN_OVS_VSCTL([add-br a])])
179 CHECK_BRIDGES([a, a, 0])
185 AT_SETUP([add-br a, add-br a])
186 AT_KEYWORDS([ovs-vsctl])
188 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0])
189 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
190 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
192 AT_CHECK([RUN_OVS_VSCTL([add-br ''])], [1], [],
193 [ovs-vsctl: bridge name must not be empty string
198 AT_SETUP([add-br a, add-br b])
199 AT_KEYWORDS([ovs-vsctl])
201 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])])
202 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
203 [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
205 CHECK_BRIDGES([a, a, 0], [b, b, 0])
213 AT_SETUP([add-br a, add-br b, del-br a])
214 AT_KEYWORDS([ovs-vsctl])
216 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])])
217 CHECK_BRIDGES([b, b, 0])
223 AT_SETUP([add-br a, del-br a, add-br a])
224 AT_KEYWORDS([ovs-vsctl])
226 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
230 [set Interface a other_config:key=value],
231 [get Interface a other_config:key])], [0], [
237 CHECK_BRIDGES([a, a, 0])
243 AT_SETUP([add-br a, add-port a a1, add-port a a2])
244 AT_KEYWORDS([ovs-vsctl])
246 AT_CHECK([RUN_OVS_VSCTL(
248 [--if-exists del-br b],
251 CHECK_BRIDGES([a, a, 0])
252 CHECK_PORTS([a], [a1], [a2])
253 CHECK_IFACES([a], [a1], [a2])
257 AT_SETUP([add-br a, add-port a a1, add-port a a1])
258 AT_KEYWORDS([ovs-vsctl])
260 AT_CHECK([RUN_OVS_VSCTL(
263 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
264 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
266 AT_CHECK([RUN_OVS_VSCTL([add-port a ''])], [1], [],
267 [ovs-vsctl: port name must not be empty string
272 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
273 AT_KEYWORDS([ovs-vsctl])
275 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
280 [--if-exists del-port b b2],
288 CHECK_BRIDGES([b, b, 0])
289 CHECK_PORTS([b], [b1])
290 CHECK_IFACES([b], [b1])
294 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
295 AT_KEYWORDS([ovs-vsctl])
297 AT_CHECK([RUN_OVS_VSCTL(
299 [add-bond a bond0 a1 a2 a3])])
300 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])])
301 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
302 [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
304 AT_CHECK([RUN_OVS_VSCTL([add-bond a '' x y z])], [1], [],
305 [ovs-vsctl: port name must not be empty string
307 AT_CHECK([RUN_OVS_VSCTL([add-bond a x '' y z])], [1], [],
308 [ovs-vsctl: interface name must not be empty string
310 CHECK_BRIDGES([a, a, 0])
311 CHECK_PORTS([a], [bond0])
312 CHECK_IFACES([a], [a1], [a2], [a3])
316 AT_SETUP([add-bond-iface and del-bond-iface])
317 AT_KEYWORDS([ovs-vsctl])
320 # Create 2-interface bond.
321 AT_CHECK([RUN_OVS_VSCTL(
323 [add-bond a bond0 a1 a2])])
324 CHECK_BRIDGES([a, a, 0])
325 CHECK_PORTS([a], [bond0])
326 CHECK_IFACES([a], [a1], [a2])
328 # Add interface a3 to bond.
329 AT_CHECK([RUN_OVS_VSCTL([add-bond-iface bond0 a3])])
330 CHECK_BRIDGES([a, a, 0])
331 CHECK_PORTS([a], [bond0])
332 CHECK_IFACES([a], [a1], [a2], [a3])
334 # Delete interface a2 from bond.
335 AT_CHECK([RUN_OVS_VSCTL([del-bond-iface bond0 a2])])
336 CHECK_BRIDGES([a, a, 0])
337 CHECK_PORTS([a], [bond0])
338 CHECK_IFACES([a], [a1], [a3])
340 # Add interface a2 to bond.
341 AT_CHECK([RUN_OVS_VSCTL([add-bond-iface bond0 a2])])
342 CHECK_BRIDGES([a, a, 0])
343 CHECK_PORTS([a], [bond0])
344 CHECK_IFACES([a], [a1], [a2], [a3])
346 # Delete interface a2 from bond.
347 AT_CHECK([RUN_OVS_VSCTL([del-bond-iface a2])])
348 CHECK_BRIDGES([a, a, 0])
349 CHECK_PORTS([a], [bond0])
350 CHECK_IFACES([a], [a1], [a3])
352 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-bond-iface bond0 a4])])
353 AT_CHECK([RUN_OVS_VSCTL([del-bond-iface bond0 a4])], [1], [],
354 [ovs-vsctl: no interface named a4
356 AT_CHECK([RUN_OVS_VSCTL([del-bond-iface a4])], [1], [],
357 [ovs-vsctl: no interface named a4
359 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([add-port a a4], [del-bond-iface bond0 a4])], [1], [],
360 [ovs-vsctl: port bond0 does not have an interface a4
362 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond-iface bond0 a3])])
363 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([add-bond a bond1 b1 b2 b3], [--may-exist add-bond-iface bond1 a3])], [1], [],
364 [ovs-vsctl: "--may-exist add-bond-iface bond1 a3" but a3 is actually attached to port bond0
366 AT_CHECK([RUN_OVS_VSCTL([add-bond-iface bond0 a3])], [1], [],
367 [ovs-vsctl: cannot create an interface named a3 because an interface named a3 already exists on bridge a
369 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([del-bond-iface a1], [del-bond-iface a3])], [1], [],
370 [ovs-vsctl: cannot delete last interface from port bond0
376 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
377 AT_KEYWORDS([ovs-vsctl])
379 AT_CHECK([RUN_OVS_VSCTL(
382 [add-port a a1 tag=9],
384 [--may-exist add-port b b1],
385 [del-port a a1])], [0], [9
387 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])])
388 AT_CHECK([RUN_OVS_VSCTL([del-port a])], [1], [],
389 [ovs-vsctl: cannot delete port a because it is the local port for bridge a (deleting this port requires deleting the entire bridge)
391 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-port a])])
392 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
393 [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
395 CHECK_BRIDGES([a, a, 0], [b, b, 0])
398 CHECK_PORTS([b], [b1])
399 CHECK_IFACES([b], [b1])
403 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
404 AT_KEYWORDS([ovs-vsctl])
406 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
408 [add-bond a bond0 a1 a2 a3 tag=9],
409 [get Port bond0 tag],
410 [del-port bond0])], [0], [
415 CHECK_BRIDGES([a, a, 0])
420 AT_SETUP([external IDs])
421 AT_KEYWORDS([ovs-vsctl])
423 AT_CHECK([RUN_OVS_VSCTL_ONELINE(
426 [add-bond a bond0 a2 a3],
427 [br-set-external-id a key0 value0],
428 [set port a1 external-ids:key1=value1],
429 [set interface a2 external-ids:key2=value2],
430 [set interface a2 external-ids:key3=value3],
431 [set interface a3 external-ids:key4=value4],
432 [br-get-external-id a],
433 [br-get-external-id a key0],
434 [br-get-external-id a key1],
435 [br-set-external-id a key0 othervalue],
436 [br-get-external-id a],
437 [br-set-external-id a key0],
438 [br-get-external-id a],
439 [get port a1 external-ids],
440 [get interface a2 external-ids],
441 [get interface a3 external-ids])], [0], [
457 {key2=value2, key3=value3}
460 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
461 [br-get-external-id a],
462 [get port a1 external-ids],
463 [get interface a2 external-ids],
464 [get interface a3 external-ids])], [0],
467 {key2=value2, key3=value3}
470 CHECK_BRIDGES([a, a, 0])
471 CHECK_PORTS([a], [a1], [bond0])
472 CHECK_IFACES([a], [a1], [a2], [a3])
476 AT_SETUP([controllers])
477 AT_KEYWORDS([controller ovs-vsctl])
479 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
482 [get-controller br0],
483 [set-controller br0 tcp:4.5.6.7],
484 [get-controller br0],
486 [del-controller br0],
487 [get-controller br0],
489 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
490 [get-controller br0],
492 [--inactivity-probe=30000 set-controller br0 tcp:1.2.3.4],
493 [get-controller br0])], [0], [
500 tcp:5.4.3.2\ntcp:8.9.10.11
508 AT_SETUP([fail-mode])
509 AT_KEYWORDS([fail-mode ovs-vsctl])
511 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
515 [set-fail-mode br0 secure],
521 [set-fail-mode br0 standalone],
522 [get-fail-mode br0])], [0], [
535 # check if emer-reset reset switch to known good state
536 # test is implemented by creating switch entities and checks if after applying
537 # emer-reset these entities are deleted
538 AT_SETUP([emer-reset])
539 AT_KEYWORDS([emer-reset ovs-vsctl])
542 # define controllers, fail-mode, netflow, mirror
543 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
547 [set-controller br0 tcp:4.5.6.7],
548 [set-fail-mode br0 secure],
549 [set bridge br0 netflow=@nf],
550 [--id=@nf create netflow targets=3.4.5.6],
551 [set bridge br0 mirrors=@m],
552 [--id=@eth0 get port eth0],
553 [--id=@eth1 get port eth1],
554 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1],
555 [set bridge br0 sflow=@sf],
556 [--id=@sf create sflow targets=1.2.3.4],
557 [set bridge br0 datapath-type=dummy other-config:datapath-id=1234 other-config:hwaddr="00:12:34:56:78:bb"],
558 [set bridge br0 ipfix=@fix],
559 [--id=@fix create ipfix targets=1.2.3.4],
560 [set bridge br0 flood_vlans=1],
561 [set bridge br0 datapath_id=2 datapath_version="alpha"],
562 [list bridge > configured_bridge.txt]
566 [uuidfilt configured_bridge.txt],
589 datapath_type : dummy
590 datapath_version : alpha
596 mcast_snooping_enable: false
600 other_config : {datapath-id="1234", hwaddr="00:12:34:56:78:bb"}
601 ports : [<9>, <10>, <11>]
612 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
613 [emer-reset])], [0], [
616 # check if bridge was cleaned/reset
617 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
618 [list bridge > cleaned_bridge.txt]
622 [uuidfilt cleaned_bridge.txt],
627 datapath_type : dummy
628 datapath_version : alpha
634 mcast_snooping_enable: false
638 other_config : {hwaddr="00:12:34:56:78:bb"}
639 ports : [<1>, <2>, <3>]
653 dnl ----------------------------------------------------------------------
654 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
655 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
659 [--may-exist add-br xenbr0],
660 [add-port xenbr0 eth0],
661 [--may-exist add-port xenbr0 eth0],
662 [add-br xapi1 xenbr0 $1],
663 [--may-exist add-br xapi1 xenbr0 $1],
664 [add-port xapi1 eth0.$1])])])
666 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
667 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
668 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
670 AT_SETUP([simple fake bridge (VLAN $1)])
671 AT_KEYWORDS([ovs-vsctl fake-bridge])
673 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
674 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
675 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
677 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
678 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
680 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
681 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
683 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br dup xenbr0 $1])], [1], [],
684 [ovs-vsctl: bridge xenbr0 already has a child VLAN bridge xapi1 on VLAN $1
686 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
687 CHECK_PORTS([xenbr0], [eth0])
688 CHECK_IFACES([xenbr0], [eth0])
689 CHECK_PORTS([xapi1], [eth0.$1])
690 CHECK_IFACES([xapi1], [eth0.$1])
694 AT_SETUP([list bridges -- real and fake (VLAN $1)])
695 AT_KEYWORDS([ovs-vsctl fake-bridge])
697 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
698 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
701 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
704 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
710 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
711 AT_KEYWORDS([ovs-vsctl fake-bridge])
713 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
714 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
715 CHECK_BRIDGES([xenbr0, xenbr0, 0])
716 CHECK_PORTS([xenbr0], [eth0])
717 CHECK_IFACES([xenbr0], [eth0])
721 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
722 AT_KEYWORDS([ovs-vsctl fake-bridge])
724 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
725 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
730 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
731 AT_KEYWORDS([ovs-vsctl fake-bridge])
733 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
734 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
735 [br-set-external-id xenbr0 key0 value0],
736 [br-set-external-id xapi1 key1 value1],
737 [br-get-external-id xenbr0],
738 [br-get-external-id xenbr0 key0],
739 [br-get-external-id xapi1],
740 [br-get-external-id xapi1 key1])], [0], [
747 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
748 CHECK_PORTS([xenbr0], [eth0])
749 CHECK_IFACES([xenbr0], [eth0])
750 CHECK_PORTS([xapi1], [eth0.$1])
751 CHECK_IFACES([xapi1], [eth0.$1])
755 AT_SETUP([simple fake bridge + del-port from parent (VLAN $1)])
756 AT_KEYWORDS([ovs-vsctl fake-bridge del-port])
758 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
759 AT_CHECK([RUN_OVS_VSCTL([del-port xenbr0 eth0.$1])], [1], [],
760 [ovs-vsctl: bridge xenbr0 does not have a port eth0.$1 (although its child bridge xapi1 does)
762 CHECK_PORTS([xenbr0], [eth0])
763 CHECK_IFACES([xenbr0], [eth0])
764 CHECK_PORTS([xapi1], [eth0.$1])
765 CHECK_IFACES([xapi1], [eth0.$1])
766 AT_CHECK([RUN_OVS_VSCTL([del-port xapi1 eth0.$1])])
767 CHECK_PORTS([xenbr0], [eth0])
768 CHECK_IFACES([xenbr0], [eth0])
771 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
773 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
774 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
776 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
777 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
781 [add-bond xapi1 bond0 eth0 eth1],
782 [add-br xapi2 xapi1 $1],
783 [add-port xapi2 bond0.$1])])])
785 AT_SETUP([fake bridge on bond])
786 AT_KEYWORDS([ovs-vsctl fake-bridge])
788 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
789 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
790 CHECK_PORTS([xapi1], [bond0])
791 CHECK_IFACES([xapi1], [eth0], [eth1])
792 CHECK_PORTS([xapi2], [bond0.11])
793 CHECK_IFACES([xapi2], [bond0.11])
797 AT_SETUP([fake bridge on bond + del-br fake bridge])
798 AT_KEYWORDS([ovs-vsctl fake-bridge])
800 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
801 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
803 CHECK_BRIDGES([xapi1, xapi1, 0])
804 CHECK_PORTS([xapi1], [bond0])
805 CHECK_IFACES([xapi1], [eth0], [eth1])
809 AT_SETUP([fake bridge on bond + del-br real bridge])
810 AT_KEYWORDS([ovs-vsctl fake-bridge])
812 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
813 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
818 dnl ----------------------------------------------------------------------
819 AT_BANNER([ovs-vsctl unit tests -- manager commands])
822 AT_KEYWORDS([manager ovs-vsctl])
824 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
827 [set-manager tcp:4.5.6.7],
829 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
831 [--inactivity-probe=30000 set-manager tcp:1.2.3.4],
834 [get-manager])], [0], [
839 tcp:5.4.3.2\ntcp:8.9.10.11
848 dnl ----------------------------------------------------------------------
849 AT_BANNER([ovs-vsctl unit tests -- database commands])
851 AT_SETUP([database commands -- positive checks])
852 AT_KEYWORDS([ovs-vsctl])
855 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
856 [set b br123 name=br0],
857 [set o . bridges=@br0])],
860 AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
863 AT_CHECK([uuidfilt out1 out2], [0],
872 datapath_version : ""
878 mcast_snooping_enable: false
893 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
900 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
907 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create bridge name=br1 datapath_type="foo"],
908 [--id=@br2 create bridge name=br2 external-ids:bar=quux],
909 [add o . bridges @br1 @br2])],
912 [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
914 AT_CHECK([sed -n '/./p' stdout | sort], [0],
921 'other_config:datapath_id="0123456789ab"' \
922 'other_config:hwaddr="00:11:22:33:44:55"' \
923 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
924 add bridge br0 external_ids '"roles"="local; remote; cloud"'])])
925 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
926 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
928 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
929 [0], ["00:11:22:33:44:55"
932 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
933 [0], [{datapath_id="0123456789ab"}
935 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
938 AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
941 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
942 [destroy bridge br1],
943 [destroy bridge br2],
944 [clear o . bridges])],
946 AT_CHECK([RUN_OVS_VSCTL([list bridge])])
947 AT_CHECK([RUN_OVS_VSCTL([--if-exists get bridge x datapath_id])])
948 AT_CHECK([RUN_OVS_VSCTL([--if-exists list bridge x])])
949 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])])
951 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])])
953 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])])
955 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
956 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
957 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
958 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
960 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
961 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
962 Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
964 AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=1])])
965 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-zone-tp netdev zone=1])])
966 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
970 [RUN_OVS_VSCTL_TOGETHER([--id=@n create CT_Zone external_ids:"test"="123"],
971 [--id=@m create Datapath datapath_version=0 ct_zones:"10"=@n],
972 [set Open_vSwitch . datapaths:"netdev"=@m])],
974 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:10, Timeout Policies: system default
977 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
978 AT_CHECK([RUN_OVS_VSCTL([list-dp-cap system])], [0], [recirc=true
983 AT_SETUP([database commands -- negative checks])
984 AT_KEYWORDS([ovs-vsctl])
987 AT_CHECK([ovs-vsctl --may-exist],
988 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
990 AT_CHECK([ovs-vsctl --may-exist --],
991 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
993 AT_CHECK([ovs-vsctl -- --may-exist],
994 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
997 AT_CHECK([RUN_OVS_VSCTL([add-br br0])], [0], [ignore])
998 AT_CHECK([RUN_OVS_VSCTL([add-br br1])], [0], [ignore])
999 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], [0], [ignore])
1000 AT_CHECK([RUN_OVS_VSCTL([list netflow br0])], [1], [],
1001 [ovs-vsctl: no row "br0" in table NetFlow
1004 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
1005 [set bridge br0 netflow=@n])],
1007 cp stdout netflow-uuid
1008 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], [0], [stdout])
1009 AT_CHECK([uuidfilt netflow-uuid stdout], [0],
1014 add_id_to_interface : false
1018 targets : ["1.2.3.4:567"]
1020 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
1021 [1], [], [ovs-vsctl: unknown table "interx"
1023 AT_CHECK([RUN_OVS_VSCTL([list c x])],
1024 [1], [], [ovs-vsctl: "c" matches multiple table names: CT_Timeout_Policy, CT_Zone, Controller
1026 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
1027 [1], [], [ovs-vsctl: no row "x" in table Bridge
1029 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
1030 [1], [], [ovs-vsctl: no row "x" in table Bridge
1032 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
1033 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d": datapath_id, datapath_type, datapath_version
1035 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
1036 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
1038 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
1039 [1], [], [ovs-vsctl: :y=z: missing column name
1041 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
1042 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
1044 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
1045 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
1047 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
1048 [1], [], [ovs-vsctl: no row "x" in table Controller
1050 AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
1051 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
1053 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
1054 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
1056 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
1057 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
1059 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
1060 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
1062 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
1063 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
1065 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
1066 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
1068 AT_CHECK([RUN_OVS_VSCTL([set controller br1 'connection-mode=xyz'])],
1069 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
1071 AT_CHECK([RUN_OVS_VSCTL([set controller br1 connection-mode:x=y])],
1072 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
1074 AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
1075 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
1077 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
1078 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
1080 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
1081 [1], [], [ovs-vsctl: no row "x" in table NetFlow
1083 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
1084 [1], [], [ovs-vsctl: no row "x" in table NetFlow
1086 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
1087 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
1089 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
1090 [1], [], [ovs-vsctl: no row "br2" in table Bridge
1092 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
1093 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
1095 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
1096 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
1098 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
1099 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
1101 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
1102 [1], [], [ovs-vsctl: "true" is not a valid integer or range
1104 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
1105 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
1108 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
1109 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdevxx zone=1 icmp_first=1 icmp_reply=2])],
1110 [1], [], [ovs-vsctl: datapath netdevxx does not exist
1112 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
1113 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])],
1114 [1], [], [ovs-vsctl: zone id 2 already exists
1116 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1118 AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=11])],
1119 [1], [], [ovs-vsctl: zone id 11 does not exist
1121 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1124 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
1125 AT_CHECK([RUN_OVS_VSCTL([list-dp-cap nosystem])],
1126 [1], [], [ovs-vsctl: datapath "nosystem" record not found
1132 AT_SETUP([database commands -- conditions])
1133 AT_KEYWORDS([ovs-vsctl])
1136 [RUN_OVS_VSCTL_TOGETHER(
1138 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
1139 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
1140 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
1141 [add-br br4], [set bridge br4 flood_vlans=2],
1142 [add-br br5], [set bridge br5 flood_vlans=0,2],
1143 [add-br br6], [set bridge br6 flood_vlans=1,2],
1144 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
1160 m4_define([VSCTL_CHECK_FIND],
1161 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer -- --columns=name find bridge '$1' | sort`], [0], [$2
1164 # Arithmetic relational operators without keys.
1165 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
1166 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
1167 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
1168 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
1169 VSCTL_CHECK_FIND([flood_vlans=3], [])
1171 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
1172 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
1173 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
1174 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1175 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
1177 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
1178 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
1179 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
1180 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
1181 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
1182 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
1183 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
1184 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
1186 # Set relational operators without keys.
1187 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
1188 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
1189 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
1190 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
1191 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
1193 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
1194 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
1195 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
1196 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1197 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
1199 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
1200 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
1201 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
1202 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
1203 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
1204 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
1206 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
1207 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1208 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
1209 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
1210 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
1211 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
1212 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
1214 # Arithmetic relational operators with keys.
1215 VSCTL_CHECK_FIND([other-config:x=""], [br1])
1216 VSCTL_CHECK_FIND([other-config:x=y], [br2])
1217 VSCTL_CHECK_FIND([other-config:x=z], [br3])
1219 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
1220 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
1221 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
1223 VSCTL_CHECK_FIND([other-config:x>y], [br3])
1224 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
1225 VSCTL_CHECK_FIND([other-config:x<y], [br1])
1226 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
1228 # Set relational operators with keys.
1229 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
1230 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
1231 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
1232 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
1234 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
1235 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
1236 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
1237 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
1239 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
1240 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
1241 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
1242 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
1243 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
1244 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
1246 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
1247 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
1248 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
1249 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
1250 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
1252 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1253 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
1254 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
1255 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
1256 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
1258 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1259 VSCTL_CHECK_FIND([other-config:x{>}x], [])
1260 VSCTL_CHECK_FIND([other-config:x{>}""], [])
1261 VSCTL_CHECK_FIND([other-config:x{>}y], [])
1262 VSCTL_CHECK_FIND([other-config:x{>}z], [])
1266 AT_SETUP([database commands -- wait-until immediately true])
1267 AT_KEYWORDS([ovs-vsctl])
1269 AT_CHECK([RUN_OVS_VSCTL(
1271 [add-bond br0 bond0 eth0 eth1],
1272 [set port bond0 bond_updelay=500 other-config:abc=def])])
1273 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])])
1274 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])])
1275 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])])
1276 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])])
1280 AT_SETUP([database commands -- wait-until must wait])
1281 AT_KEYWORDS([ovs-vsctl])
1285 # Start ovs-vsctls in background.
1286 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1287 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1288 (RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1289 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1291 # Give the ovs-vsctls a chance to read the database
1294 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
1295 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])])
1297 # Wait for the ovs-vsctls to finish.
1301 AT_CHECK([cat stdout1], [0], [quux
1303 AT_CHECK([cat stdout2], [0], [def
1305 AT_CHECK([cat stdout3], [0], [{abc=def}
1307 AT_CHECK([cat stdout4], [0], [500
1313 AT_SETUP([--id option on create, get commands])
1314 AT_KEYWORDS([ovs-vsctl])
1316 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1317 [add-port br0 eth0],
1318 [add-port br0 eth1])])
1320 [RUN_OVS_VSCTL_TOGETHER(
1321 [set bridge br0 mirrors=@m],
1322 [--id=@eth0 get port eth0],
1323 [--id=@eth1 get port eth1],
1324 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1327 [uuidfilt stdout], [0], [dnl
1335 [list port eth0 eth1],
1337 [list bridge br0])],
1340 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
1350 select_dst_port : [<0>]
1351 select_src_port : [<0>]
1360 AT_SETUP([unreferenced record warnings])
1361 AT_KEYWORDS([ovs-vsctl])
1364 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1365 -- create Bridge name=br0 | uuidfilt],
1367 ], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
1370 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1371 -- --id=@br0 create Bridge name=br0 | uuidfilt],
1373 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1376 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1377 -- --id=@eth0_iface create Interface name=eth0 \
1378 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1379 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1380 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1381 -- set Open_vSwitch . bridges=@br0 | uuidfilt],
1386 ], [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
1391 dnl This test really shows a bug -- "create" followed by "list" in
1392 dnl the same execution shows the wrong UUID on the "list" command.
1393 dnl The bug is documented in ovs-vsctl.8.
1394 AT_SETUP([created row UUID is wrong in same execution])
1395 AT_KEYWORDS([ovs-vsctl])
1397 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
1399 AT_CHECK([uuidfilt stdout], [0],
1406 datapath_version : ""
1412 mcast_snooping_enable: false
1428 dnl This test will create a linux-htb QoS record that
1429 dnl points to a few queues and use it on a1 and a2 port.
1430 dnl It also destroys all records from Qos and Queue table.
1431 AT_SETUP([--all option on destroy command])
1432 AT_KEYWORDS([ovs-vsctl])
1434 AT_CHECK([RUN_OVS_VSCTL(
1438 CHECK_BRIDGES([a, a, 0])
1439 CHECK_PORTS([a], [a1], [a2])
1440 CHECK_IFACES([a], [a1], [a2])
1441 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1442 [set Port a1 qos=@newqos],
1443 [set Port a2 qos=@newqos],
1444 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1445 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1446 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore])
1447 AT_CHECK([RUN_OVS_VSCTL(
1448 [--columns=other_config,type list Qos])], [0],
1449 [other_config : {max-rate="1000000000"}
1452 AT_CHECK([RUN_OVS_VSCTL(
1453 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1454 [other_config : {max-rate="100000000", min-rate="100000000"}
1455 other_config : {min-rate="500000000"}
1457 AT_CHECK([RUN_OVS_VSCTL(
1458 [clear Port a1 qos],
1459 [clear Port a2 qos])])
1460 AT_CHECK([RUN_OVS_VSCTL(
1461 [--columns=qos list Port a1 a2])], [0],
1466 AT_CHECK([RUN_OVS_VSCTL(
1467 [--all destroy Qos])])
1468 AT_CHECK([RUN_OVS_VSCTL(
1470 AT_CHECK([RUN_OVS_VSCTL(
1471 [--all destroy Queue])])
1472 AT_CHECK([RUN_OVS_VSCTL(
1477 dnl ----------------------------------------------------------------------
1478 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1480 AT_SETUP([add-port -- reserved names 1])
1483 # Test creating all reserved port names
1493 # Try creating the port
1495 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1496 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1498 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1500 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1501 # Detect the warning log message
1502 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1503 |bridge|WARN|could not create interface reserved_name, name is reserved
1505 # Delete the warning log message
1506 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1508 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1512 AT_SETUP([add-port -- reserved names 2])
1513 # Creates all type of tunnel ports
1514 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1515 options:remote_ip=1.1.1.1 ofport_request=1\
1516 -- add-port br0 p3 -- set Interface p3 type=lisp \
1517 options:remote_ip=2.2.2.2 ofport_request=3 \
1518 -- add-port br0 p4 -- set Interface p4 type=vxlan \
1519 options:remote_ip=2.2.2.2 ofport_request=4 \
1520 -- add-port br0 p5 -- set Interface p5 type=geneve \
1521 options:remote_ip=2.2.2.2 ofport_request=5])
1523 # Test creating all reserved tunnel port names
1531 # Try creating the port
1533 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1534 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1536 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1538 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1539 # Detect the warning log message
1540 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1541 |bridge|WARN|could not create interface reserved_name, name is reserved
1543 # Delete the warning log message
1544 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1546 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1550 AT_SETUP([naming in db commands])
1551 AT_KEYWORDS([ovs-vsctl])
1554 dnl First check that the database commands can refer to row by database UUID.
1555 AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1556 uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
1557 AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], [br0
1560 dnl Next check that, if a database row is given a name that has the same form
1561 dnl as the database UUIDs, the name can still be used to refer to rows.
1562 AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1563 AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1569 AT_SETUP([bootstrap ca cert])
1570 AT_KEYWORDS([ovs-vsctl ssl])
1571 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1573 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1574 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req ovsdbserver && $OVS_PKI self-sign ovsdbserver], [0], [ignore], [ignore])
1576 dnl Create database.
1577 OVSDB_INIT([conf.db])
1578 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --private-key=$PKIDIR/ovsdbserver-privkey.pem --certificate=$PKIDIR/ovsdbserver-cert.pem --ca-cert=$PKIDIR/pki/switchca/cacert.pem --remote=pssl:0:127.0.0.1 --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1579 on_exit "kill `cat ovsdb-server.pid`"
1580 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1582 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1583 AT_CHECK([ovs-vsctl -t 5 --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem show], [1], [ignore], [ignore])
1585 # If the bootstrap was successful, the following file should exist.
1586 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1588 # After bootstrap, the connection should be successful.
1589 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem add-br br0], [0])
1590 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem list-br], [0], [br0
1596 AT_SETUP([peer ca cert])
1597 AT_KEYWORDS([ovs-vsctl ssl])
1598 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1600 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1601 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req+sign ovsdbserver controller], [0], [ignore], [ignore])
1603 dnl Create database.
1604 OVSDB_INIT([conf.db])
1605 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --private-key=$PKIDIR/ovsdbserver-privkey.pem --certificate=$PKIDIR/ovsdbserver-cert.pem --ca-cert=$PKIDIR/pki/switchca/cacert.pem --peer-ca-cert=$PKIDIR/pki/controllerca/cacert.pem --remote=pssl:0:127.0.0.1 --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1606 on_exit "kill `cat ovsdb-server.pid`"
1607 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1609 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1610 AT_CHECK([ovs-vsctl -t 5 --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem show], [1], [ignore], [ignore])
1612 # If the bootstrap was successful, the following file should exist.
1613 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1615 # After bootstrap, the connection should be successful.
1616 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem add-br br0], [0])
1617 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem list-br], [0], [br0
1623 AT_SETUP([TLS server name indication (SNI)])
1624 AT_KEYWORDS([ovsdb server positive ssl tls sni])
1625 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1626 AT_SKIP_IF([test "$OPENSSL_SUPPORTS_SNI" = no])
1627 AT_SKIP_IF([test "$HAVE_UNBOUND" = no])
1628 OVSDB_INIT([conf.db])
1629 PKIDIR=$abs_top_builddir/tests
1630 AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile --private-key=$PKIDIR/testpki-privkey2.pem --certificate=$PKIDIR/testpki-cert2.pem --ca-cert=$PKIDIR/testpki-cacert.pem --remote=pssl:0:127.0.0.1 -vPATTERN:file:%m -vstream_ssl conf.db], [0], [ignore], [ignore])
1631 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1633 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:localhost:$SSL_PORT --private-key=$PKIDIR/testpki-privkey.pem --certificate=$PKIDIR/testpki-cert.pem --bootstrap-ca-cert=$PKIDIR/testpki-cacert.pem add-br br0])
1635 AT_CAPTURE_FILE([ovsdb-server.log])
1636 AT_CHECK([grep "server name" ovsdb-server.log], [0],
1637 [connection indicated server name localhost