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
507 dnl ----------------------------------------------------------------------
508 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
509 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
513 [--may-exist add-br xenbr0],
514 [add-port xenbr0 eth0],
515 [--may-exist add-port xenbr0 eth0],
516 [add-br xapi1 xenbr0 $1],
517 [--may-exist add-br xapi1 xenbr0 $1],
518 [add-port xapi1 eth0.$1])])])
520 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
521 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
522 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
524 AT_SETUP([simple fake bridge (VLAN $1)])
525 AT_KEYWORDS([ovs-vsctl fake-bridge])
527 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
528 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
529 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
531 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
532 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
534 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
535 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
537 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br dup xenbr0 $1])], [1], [],
538 [ovs-vsctl: bridge xenbr0 already has a child VLAN bridge xapi1 on VLAN $1
540 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
541 CHECK_PORTS([xenbr0], [eth0])
542 CHECK_IFACES([xenbr0], [eth0])
543 CHECK_PORTS([xapi1], [eth0.$1])
544 CHECK_IFACES([xapi1], [eth0.$1])
548 AT_SETUP([list bridges -- real and fake (VLAN $1)])
549 AT_KEYWORDS([ovs-vsctl fake-bridge])
551 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
552 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
555 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
558 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
564 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
565 AT_KEYWORDS([ovs-vsctl fake-bridge])
567 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
568 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
569 CHECK_BRIDGES([xenbr0, xenbr0, 0])
570 CHECK_PORTS([xenbr0], [eth0])
571 CHECK_IFACES([xenbr0], [eth0])
575 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
576 AT_KEYWORDS([ovs-vsctl fake-bridge])
578 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
579 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
584 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
585 AT_KEYWORDS([ovs-vsctl fake-bridge])
587 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
588 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
589 [br-set-external-id xenbr0 key0 value0],
590 [br-set-external-id xapi1 key1 value1],
591 [br-get-external-id xenbr0],
592 [br-get-external-id xenbr0 key0],
593 [br-get-external-id xapi1],
594 [br-get-external-id xapi1 key1])], [0], [
601 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
602 CHECK_PORTS([xenbr0], [eth0])
603 CHECK_IFACES([xenbr0], [eth0])
604 CHECK_PORTS([xapi1], [eth0.$1])
605 CHECK_IFACES([xapi1], [eth0.$1])
609 AT_SETUP([simple fake bridge + del-port from parent (VLAN $1)])
610 AT_KEYWORDS([ovs-vsctl fake-bridge del-port])
612 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
613 AT_CHECK([RUN_OVS_VSCTL([del-port xenbr0 eth0.$1])], [1], [],
614 [ovs-vsctl: bridge xenbr0 does not have a port eth0.$1 (although its child bridge xapi1 does)
616 CHECK_PORTS([xenbr0], [eth0])
617 CHECK_IFACES([xenbr0], [eth0])
618 CHECK_PORTS([xapi1], [eth0.$1])
619 CHECK_IFACES([xapi1], [eth0.$1])
620 AT_CHECK([RUN_OVS_VSCTL([del-port xapi1 eth0.$1])])
621 CHECK_PORTS([xenbr0], [eth0])
622 CHECK_IFACES([xenbr0], [eth0])
625 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
627 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
628 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
630 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
631 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
635 [add-bond xapi1 bond0 eth0 eth1],
636 [add-br xapi2 xapi1 $1],
637 [add-port xapi2 bond0.$1])])])
639 AT_SETUP([fake bridge on bond])
640 AT_KEYWORDS([ovs-vsctl fake-bridge])
642 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
643 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
644 CHECK_PORTS([xapi1], [bond0])
645 CHECK_IFACES([xapi1], [eth0], [eth1])
646 CHECK_PORTS([xapi2], [bond0.11])
647 CHECK_IFACES([xapi2], [bond0.11])
651 AT_SETUP([fake bridge on bond + del-br fake bridge])
652 AT_KEYWORDS([ovs-vsctl fake-bridge])
654 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
655 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
657 CHECK_BRIDGES([xapi1, xapi1, 0])
658 CHECK_PORTS([xapi1], [bond0])
659 CHECK_IFACES([xapi1], [eth0], [eth1])
663 AT_SETUP([fake bridge on bond + del-br real bridge])
664 AT_KEYWORDS([ovs-vsctl fake-bridge])
666 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
667 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
672 dnl ----------------------------------------------------------------------
673 AT_BANNER([ovs-vsctl unit tests -- manager commands])
676 AT_KEYWORDS([manager ovs-vsctl])
678 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
681 [set-manager tcp:4.5.6.7],
683 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
685 [--inactivity-probe=30000 set-manager tcp:1.2.3.4],
688 [get-manager])], [0], [
693 tcp:5.4.3.2\ntcp:8.9.10.11
702 dnl ----------------------------------------------------------------------
703 AT_BANNER([ovs-vsctl unit tests -- database commands])
705 AT_SETUP([database commands -- positive checks])
706 AT_KEYWORDS([ovs-vsctl])
709 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
710 [set b br123 name=br0],
711 [set o . bridges=@br0])],
714 AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
717 AT_CHECK([uuidfilt out1 out2], [0],
726 datapath_version : ""
732 mcast_snooping_enable: false
747 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
754 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
761 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create bridge name=br1 datapath_type="foo"],
762 [--id=@br2 create bridge name=br2 external-ids:bar=quux],
763 [add o . bridges @br1 @br2])],
766 [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
768 AT_CHECK([sed -n '/./p' stdout | sort], [0],
775 'other_config:datapath_id="0123456789ab"' \
776 'other_config:hwaddr="00:11:22:33:44:55"' \
777 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
778 add bridge br0 external_ids '"roles"="local; remote; cloud"'])])
779 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
780 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
782 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
783 [0], ["00:11:22:33:44:55"
786 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
787 [0], [{datapath_id="0123456789ab"}
789 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
792 AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
795 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
796 [destroy bridge br1],
797 [destroy bridge br2],
798 [clear o . bridges])],
800 AT_CHECK([RUN_OVS_VSCTL([list bridge])])
801 AT_CHECK([RUN_OVS_VSCTL([--if-exists get bridge x datapath_id])])
802 AT_CHECK([RUN_OVS_VSCTL([--if-exists list bridge x])])
803 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])])
805 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])])
807 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])])
811 AT_SETUP([database commands -- negative checks])
812 AT_KEYWORDS([ovs-vsctl])
815 AT_CHECK([ovs-vsctl --may-exist],
816 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
818 AT_CHECK([ovs-vsctl --may-exist --],
819 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
821 AT_CHECK([ovs-vsctl -- --may-exist],
822 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
825 AT_CHECK([RUN_OVS_VSCTL([add-br br0])], [0], [ignore])
826 AT_CHECK([RUN_OVS_VSCTL([add-br br1])], [0], [ignore])
827 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], [0], [ignore])
828 AT_CHECK([RUN_OVS_VSCTL([list netflow br0])], [1], [],
829 [ovs-vsctl: no row "br0" in table NetFlow
832 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
833 [set bridge br0 netflow=@n])],
835 cp stdout netflow-uuid
836 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], [0], [stdout])
837 AT_CHECK([uuidfilt netflow-uuid stdout], [0],
842 add_id_to_interface : false
846 targets : ["1.2.3.4:567"]
848 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
849 [1], [], [ovs-vsctl: unknown table "interx"
851 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
852 [1], [], [ovs-vsctl: no row "x" in table Bridge
854 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
855 [1], [], [ovs-vsctl: no row "x" in table Bridge
857 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
858 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
860 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
861 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
863 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
864 [1], [], [ovs-vsctl: :y=z: missing column name
866 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
867 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
869 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
870 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
872 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
873 [1], [], [ovs-vsctl: no row "x" in table Controller
875 AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
876 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
878 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
879 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
881 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
882 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
884 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
885 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
887 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
888 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
890 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
891 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
893 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
894 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
896 AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
897 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
899 AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
900 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
902 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
903 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
905 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
906 [1], [], [ovs-vsctl: no row "x" in table NetFlow
908 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
909 [1], [], [ovs-vsctl: no row "x" in table NetFlow
911 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
912 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
914 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
915 [1], [], [ovs-vsctl: no row "br2" in table Bridge
917 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
918 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
920 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
921 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
923 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
924 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
926 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
927 [1], [], [ovs-vsctl: "true" is not a valid integer or range
929 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
930 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
935 AT_SETUP([database commands -- conditions])
936 AT_KEYWORDS([ovs-vsctl])
939 [RUN_OVS_VSCTL_TOGETHER(
941 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
942 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
943 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
944 [add-br br4], [set bridge br4 flood_vlans=2],
945 [add-br br5], [set bridge br5 flood_vlans=0,2],
946 [add-br br6], [set bridge br6 flood_vlans=1,2],
947 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
963 m4_define([VSCTL_CHECK_FIND],
964 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer -- --columns=name find bridge '$1' | sort`], [0], [$2
967 # Arithmetic relational operators without keys.
968 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
969 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
970 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
971 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
972 VSCTL_CHECK_FIND([flood_vlans=3], [])
974 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
975 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
976 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
977 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
978 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
980 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
981 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
982 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
983 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
984 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
985 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
986 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
987 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
989 # Set relational operators without keys.
990 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
991 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
992 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
993 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
994 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
996 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
997 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
998 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
999 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1000 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
1002 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
1003 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
1004 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
1005 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
1006 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
1007 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
1009 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
1010 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1011 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
1012 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
1013 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
1014 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
1015 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
1017 # Arithmetic relational operators with keys.
1018 VSCTL_CHECK_FIND([other-config:x=""], [br1])
1019 VSCTL_CHECK_FIND([other-config:x=y], [br2])
1020 VSCTL_CHECK_FIND([other-config:x=z], [br3])
1022 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
1023 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
1024 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
1026 VSCTL_CHECK_FIND([other-config:x>y], [br3])
1027 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
1028 VSCTL_CHECK_FIND([other-config:x<y], [br1])
1029 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
1031 # Set relational operators with keys.
1032 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
1033 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
1034 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
1035 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
1037 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
1038 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
1039 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
1040 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
1042 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
1043 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
1044 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
1045 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
1046 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
1047 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
1049 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
1050 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
1051 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
1052 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
1053 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
1055 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1056 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
1057 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
1058 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
1059 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
1061 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1062 VSCTL_CHECK_FIND([other-config:x{>}x], [])
1063 VSCTL_CHECK_FIND([other-config:x{>}""], [])
1064 VSCTL_CHECK_FIND([other-config:x{>}y], [])
1065 VSCTL_CHECK_FIND([other-config:x{>}z], [])
1069 AT_SETUP([database commands -- wait-until immediately true])
1070 AT_KEYWORDS([ovs-vsctl])
1072 AT_CHECK([RUN_OVS_VSCTL(
1074 [add-bond br0 bond0 eth0 eth1],
1075 [set port bond0 bond_updelay=500 other-config:abc=def])])
1076 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])])
1077 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])])
1078 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])])
1079 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])])
1083 AT_SETUP([database commands -- wait-until must wait])
1084 AT_KEYWORDS([ovs-vsctl])
1088 # Start ovs-vsctls in background.
1089 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1090 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1091 (RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1092 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1094 # Give the ovs-vsctls a chance to read the database
1097 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
1098 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])])
1100 # Wait for the ovs-vsctls to finish.
1104 AT_CHECK([cat stdout1], [0], [quux
1106 AT_CHECK([cat stdout2], [0], [def
1108 AT_CHECK([cat stdout3], [0], [{abc=def}
1110 AT_CHECK([cat stdout4], [0], [500
1116 AT_SETUP([--id option on create, get commands])
1117 AT_KEYWORDS([ovs-vsctl])
1119 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1120 [add-port br0 eth0],
1121 [add-port br0 eth1])])
1123 [RUN_OVS_VSCTL_TOGETHER(
1124 [set bridge br0 mirrors=@m],
1125 [--id=@eth0 get port eth0],
1126 [--id=@eth1 get port eth1],
1127 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1130 [uuidfilt stdout], [0], [dnl
1138 [list port eth0 eth1],
1140 [list bridge br0])],
1143 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
1153 select_dst_port : [<0>]
1154 select_src_port : [<0>]
1163 AT_SETUP([unreferenced record warnings])
1164 AT_KEYWORDS([ovs-vsctl])
1167 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1168 -- create Bridge name=br0 | uuidfilt],
1170 ], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
1173 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1174 -- --id=@br0 create Bridge name=br0 | uuidfilt],
1176 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1179 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1180 -- --id=@eth0_iface create Interface name=eth0 \
1181 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1182 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1183 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1184 -- set Open_vSwitch . bridges=@br0 | uuidfilt],
1189 ], [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
1194 dnl This test really shows a bug -- "create" followed by "list" in
1195 dnl the same execution shows the wrong UUID on the "list" command.
1196 dnl The bug is documented in ovs-vsctl.8.
1197 AT_SETUP([created row UUID is wrong in same execution])
1198 AT_KEYWORDS([ovs-vsctl])
1200 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
1202 AT_CHECK([uuidfilt stdout], [0],
1209 datapath_version : ""
1215 mcast_snooping_enable: false
1231 dnl This test will create a linux-htb QoS record that
1232 dnl points to a few queues and use it on a1 and a2 port.
1233 dnl It also destroys all records from Qos and Queue table.
1234 AT_SETUP([--all option on destroy command])
1235 AT_KEYWORDS([ovs-vsctl])
1237 AT_CHECK([RUN_OVS_VSCTL(
1241 CHECK_BRIDGES([a, a, 0])
1242 CHECK_PORTS([a], [a1], [a2])
1243 CHECK_IFACES([a], [a1], [a2])
1244 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1245 [set Port a1 qos=@newqos],
1246 [set Port a2 qos=@newqos],
1247 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1248 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1249 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore])
1250 AT_CHECK([RUN_OVS_VSCTL(
1251 [--columns=other_config,type list Qos])], [0],
1252 [other_config : {max-rate="1000000000"}
1255 AT_CHECK([RUN_OVS_VSCTL(
1256 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1257 [other_config : {max-rate="100000000", min-rate="100000000"}
1258 other_config : {min-rate="500000000"}
1260 AT_CHECK([RUN_OVS_VSCTL(
1261 [clear Port a1 qos],
1262 [clear Port a2 qos])])
1263 AT_CHECK([RUN_OVS_VSCTL(
1264 [--columns=qos list Port a1 a2])], [0],
1269 AT_CHECK([RUN_OVS_VSCTL(
1270 [--all destroy Qos])])
1271 AT_CHECK([RUN_OVS_VSCTL(
1273 AT_CHECK([RUN_OVS_VSCTL(
1274 [--all destroy Queue])])
1275 AT_CHECK([RUN_OVS_VSCTL(
1280 dnl ----------------------------------------------------------------------
1281 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1283 AT_SETUP([add-port -- reserved names 1])
1286 # Test creating all reserved port names
1296 # Try creating the port
1298 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1299 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1301 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1303 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1304 # Detect the warning log message
1305 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1306 |bridge|WARN|could not create interface reserved_name, name is reserved
1308 # Delete the warning log message
1309 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1311 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1315 AT_SETUP([add-port -- reserved names 2])
1316 # Creates all type of tunnel ports
1317 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1318 options:remote_ip=1.1.1.1 ofport_request=1\
1319 -- add-port br0 p3 -- set Interface p3 type=lisp \
1320 options:remote_ip=2.2.2.2 ofport_request=3 \
1321 -- add-port br0 p4 -- set Interface p4 type=vxlan \
1322 options:remote_ip=2.2.2.2 ofport_request=4 \
1323 -- add-port br0 p5 -- set Interface p5 type=geneve \
1324 options:remote_ip=2.2.2.2 ofport_request=5])
1326 # Test creating all reserved tunnel port names
1334 # Try creating the port
1336 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1337 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1339 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1341 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1342 # Detect the warning log message
1343 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1344 |bridge|WARN|could not create interface reserved_name, name is reserved
1346 # Delete the warning log message
1347 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1349 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1353 AT_SETUP([naming in db commands])
1354 AT_KEYWORDS([ovs-vsctl])
1357 dnl First check that the database commands can refer to row by database UUID.
1358 AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1359 uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
1360 AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], [br0
1363 dnl Next check that, if a database row is given a name that has the same form
1364 dnl as the database UUIDs, the name can still be used to refer to rows.
1365 AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1366 AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1372 AT_SETUP([bootstrap ca cert])
1373 AT_KEYWORDS([ovs-vsctl ssl])
1374 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1376 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1377 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req ovsdbserver && $OVS_PKI self-sign ovsdbserver], [0], [ignore], [ignore])
1379 dnl Create database.
1380 OVSDB_INIT([conf.db])
1381 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])
1382 on_exit "kill `cat ovsdb-server.pid`"
1383 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1385 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1386 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])
1388 # If the bootstrap was successful, the following file should exist.
1389 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1391 # After bootstrap, the connection should be successful.
1392 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])
1393 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
1399 AT_SETUP([peer ca cert])
1400 AT_KEYWORDS([ovs-vsctl ssl])
1401 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1403 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1404 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req+sign ovsdbserver controller], [0], [ignore], [ignore])
1406 dnl Create database.
1407 OVSDB_INIT([conf.db])
1408 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])
1409 on_exit "kill `cat ovsdb-server.pid`"
1410 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1412 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1413 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])
1415 # If the bootstrap was successful, the following file should exist.
1416 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1418 # After bootstrap, the connection should be successful.
1419 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])
1420 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
1426 AT_SETUP([TLS server name indication (SNI)])
1427 AT_KEYWORDS([ovsdb server positive ssl tls sni])
1428 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1429 AT_SKIP_IF([test "$OPENSSL_SUPPORTS_SNI" = no])
1430 AT_SKIP_IF([test "$HAVE_UNBOUND" = no])
1431 OVSDB_INIT([conf.db])
1432 PKIDIR=$abs_top_builddir/tests
1433 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])
1434 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1436 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])
1438 AT_CAPTURE_FILE([ovsdb-server.log])
1439 AT_CHECK([grep "server name" ovsdb-server.log], [0],
1440 [connection indicated server name localhost