]> git.proxmox.com Git - mirror_ovs.git/blob - tests/ovs-vsctl.at
ovs-vsctl: Add conntrack zone commands.
[mirror_ovs.git] / tests / ovs-vsctl.at
1 dnl OVS_VSCTL_SETUP
2 dnl
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],
6 [OVSDB_INIT([db])
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`'])
9
10 dnl OVS_VSCTL_CLEANUP
11 dnl
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])])
14
15 dnl RUN_OVS_VSCTL(COMMAND, ...)
16 dnl
17 dnl Executes each ovs-vsctl COMMAND.
18 m4_define([RUN_OVS_VSCTL],
19 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer command
20 ])])
21 m4_define([RUN_OVS_VSCTL_ONELINE],
22 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --oneline -- command
23 ])])
24
25 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
26 dnl
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])])
31
32 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
33 dnl
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
39 ])
40
41 # Check br-to-vlan, without --oneline.
42 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
43 ])
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
49 ])
50
51 # Check multiple queries in a single run.
52 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
53 [$2
54 $3
55 ])])
56 m4_define([CHECK_BRIDGES],
57 [dnl Check that the bridges appear on list-br, without --oneline.
58 AT_CHECK(
59 [RUN_OVS_VSCTL([list-br])],
60 [0],
61 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
62 ])])
63
64 dnl Check that the bridges appear on list-br, with --oneline.
65 AT_CHECK(
66 [RUN_OVS_VSCTL_ONELINE([list-br])],
67 [0],
68 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
69 ])
70
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])
76
77 dnl Check that each bridge has the expected parent and VLAN.
78 m4_map([_CHECK_BRIDGE], [$@])])
79
80 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
81 dnl
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
85 dnl in BRIDGE.
86 m4_define([CHECK_PORTS],
87 [dnl Check ports without --oneline.
88 AT_CHECK(
89 [RUN_OVS_VSCTL([list-ports $1])],
90 [0],
91 [m4_foreach([port], m4_cdr($@), [port
92 ])])
93
94 dnl Check ports with --oneline.
95 AT_CHECK(
96 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
97 [0],
98 [m4_join([\n], m4_shift($@))
99 ])
100 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
101 [ovs-vsctl: no port named $1
102 ])
103 m4_foreach(
104 [port], m4_cdr($@),
105 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
106 ])])])
107
108 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
109 dnl
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
113 dnl in BRIDGE.
114 m4_define([CHECK_IFACES],
115 [AT_CHECK(
116 [RUN_OVS_VSCTL([list-ifaces $1])],
117 [0],
118 [m4_foreach([iface], m4_cdr($@), [iface
119 ])])
120 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
121 [ovs-vsctl: no interface named $1
122 ])
123 m4_foreach(
124 [iface], m4_cdr($@),
125 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
126 ])])])
127
128 dnl ----------------------------------------------------------------------
129 AT_BANNER([ovs-vsctl unit tests])
130
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],
134 [1], [], [stderr])
135 AT_CHECK([[sed 's/([^()]*)/(...reason...)/' stderr]], [0],
136 [ovs-vsctl: unix:foo: database connection failed (...reason...)
137 ])
138
139 dnl With --retry, we should retry for active connections.
140 AT_CHECK(
141 [ovs-vsctl --db=unix:foo --timeout=1 --retry -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
142 echo $? > status],
143 [0], [], [stderr])
144 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
145 ])
146 if test "$IS_WIN32" = "yes"; then
147 AT_CHECK([cat status], [0], [3
148 ])
149 else
150 # 128 + SIGALRM
151 AT_CHECK([cat status], [0], [142
152 ])
153 fi
154
155 dnl Without --retry, we should retry for passive connections.
156 AT_CHECK(
157 [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
158 echo $? > status],
159 [0], [], [stderr])
160 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
161 ])
162 if test "$IS_WIN32" = "yes"; then
163 AT_CHECK([cat status], [0], [3
164 ])
165 else
166 # 128 + SIGALRM
167 AT_CHECK([cat status], [0], [142
168 ])
169 fi
170 AT_CLEANUP
171
172 dnl ----------------------------------------------------------------------
173 AT_BANNER([ovs-vsctl unit tests -- real bridges])
174
175 AT_SETUP([add-br a])
176 AT_KEYWORDS([ovs-vsctl])
177 OVS_VSCTL_SETUP
178 AT_CHECK([RUN_OVS_VSCTL([add-br a])])
179 CHECK_BRIDGES([a, a, 0])
180 CHECK_PORTS([a])
181 CHECK_IFACES([a])
182 OVS_VSCTL_CLEANUP
183 AT_CLEANUP
184
185 AT_SETUP([add-br a, add-br a])
186 AT_KEYWORDS([ovs-vsctl])
187 OVS_VSCTL_SETUP
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
191 ])
192 AT_CHECK([RUN_OVS_VSCTL([add-br ''])], [1], [],
193 [ovs-vsctl: bridge name must not be empty string
194 ])
195 OVS_VSCTL_CLEANUP
196 AT_CLEANUP
197
198 AT_SETUP([add-br a, add-br b])
199 AT_KEYWORDS([ovs-vsctl])
200 OVS_VSCTL_SETUP
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
204 ])
205 CHECK_BRIDGES([a, a, 0], [b, b, 0])
206 CHECK_PORTS([a])
207 CHECK_IFACES([a])
208 CHECK_PORTS([b])
209 CHECK_IFACES([b])
210 OVS_VSCTL_CLEANUP
211 AT_CLEANUP
212
213 AT_SETUP([add-br a, add-br b, del-br a])
214 AT_KEYWORDS([ovs-vsctl])
215 OVS_VSCTL_SETUP
216 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])])
217 CHECK_BRIDGES([b, b, 0])
218 CHECK_PORTS([b])
219 CHECK_IFACES([b])
220 OVS_VSCTL_CLEANUP
221 AT_CLEANUP
222
223 AT_SETUP([add-br a, del-br a, add-br a])
224 AT_KEYWORDS([ovs-vsctl])
225 OVS_VSCTL_SETUP
226 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
227 [add-br a],
228 [del-br a],
229 [add-br a],
230 [set Interface a other_config:key=value],
231 [get Interface a other_config:key])], [0], [
232
233
234
235 value
236 ])
237 CHECK_BRIDGES([a, a, 0])
238 CHECK_PORTS([a])
239 CHECK_IFACES([a])
240 OVS_VSCTL_CLEANUP
241 AT_CLEANUP
242
243 AT_SETUP([add-br a, add-port a a1, add-port a a2])
244 AT_KEYWORDS([ovs-vsctl])
245 OVS_VSCTL_SETUP
246 AT_CHECK([RUN_OVS_VSCTL(
247 [add-br a],
248 [--if-exists del-br b],
249 [add-port a a1],
250 [add-port a a2])])
251 CHECK_BRIDGES([a, a, 0])
252 CHECK_PORTS([a], [a1], [a2])
253 CHECK_IFACES([a], [a1], [a2])
254 OVS_VSCTL_CLEANUP
255 AT_CLEANUP
256
257 AT_SETUP([add-br a, add-port a a1, add-port a a1])
258 AT_KEYWORDS([ovs-vsctl])
259 OVS_VSCTL_SETUP
260 AT_CHECK([RUN_OVS_VSCTL(
261 [add-br a],
262 [add-port a a1])])
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
265 ])
266 AT_CHECK([RUN_OVS_VSCTL([add-port a ''])], [1], [],
267 [ovs-vsctl: port name must not be empty string
268 ])
269 OVS_VSCTL_CLEANUP
270 AT_CLEANUP
271
272 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
273 AT_KEYWORDS([ovs-vsctl])
274 OVS_VSCTL_SETUP
275 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
276 [add-br a],
277 [add-br b],
278 [add-port a a1],
279 [add-port b b1],
280 [--if-exists del-port b b2],
281 [del-br a])], [0], [
282
283
284
285
286
287 ])
288 CHECK_BRIDGES([b, b, 0])
289 CHECK_PORTS([b], [b1])
290 CHECK_IFACES([b], [b1])
291 OVS_VSCTL_CLEANUP
292 AT_CLEANUP
293
294 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
295 AT_KEYWORDS([ovs-vsctl])
296 OVS_VSCTL_SETUP
297 AT_CHECK([RUN_OVS_VSCTL(
298 [add-br a],
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
303 ])
304 AT_CHECK([RUN_OVS_VSCTL([add-bond a '' x y z])], [1], [],
305 [ovs-vsctl: port name must not be empty string
306 ])
307 AT_CHECK([RUN_OVS_VSCTL([add-bond a x '' y z])], [1], [],
308 [ovs-vsctl: interface name must not be empty string
309 ])
310 CHECK_BRIDGES([a, a, 0])
311 CHECK_PORTS([a], [bond0])
312 CHECK_IFACES([a], [a1], [a2], [a3])
313 OVS_VSCTL_CLEANUP
314 AT_CLEANUP
315
316 AT_SETUP([add-bond-iface and del-bond-iface])
317 AT_KEYWORDS([ovs-vsctl])
318 OVS_VSCTL_SETUP
319
320 # Create 2-interface bond.
321 AT_CHECK([RUN_OVS_VSCTL(
322 [add-br a],
323 [add-bond a bond0 a1 a2])])
324 CHECK_BRIDGES([a, a, 0])
325 CHECK_PORTS([a], [bond0])
326 CHECK_IFACES([a], [a1], [a2])
327
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])
333
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])
339
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])
345
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])
351
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
355 ])
356 AT_CHECK([RUN_OVS_VSCTL([del-bond-iface a4])], [1], [],
357 [ovs-vsctl: no interface named a4
358 ])
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
361 ])
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
365 ])
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
368 ])
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
371 ])
372
373 OVS_VSCTL_CLEANUP
374 AT_CLEANUP
375
376 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
377 AT_KEYWORDS([ovs-vsctl])
378 OVS_VSCTL_SETUP
379 AT_CHECK([RUN_OVS_VSCTL(
380 [add-br a],
381 [add-br b],
382 [add-port a a1 tag=9],
383 [get port a1 tag],
384 [--may-exist add-port b b1],
385 [del-port a a1])], [0], [9
386 ])
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)
390 ])
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
394 ])
395 CHECK_BRIDGES([a, a, 0], [b, b, 0])
396 CHECK_PORTS([a])
397 CHECK_IFACES([a])
398 CHECK_PORTS([b], [b1])
399 CHECK_IFACES([b], [b1])
400 OVS_VSCTL_CLEANUP
401 AT_CLEANUP
402
403 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
404 AT_KEYWORDS([ovs-vsctl])
405 OVS_VSCTL_SETUP
406 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
407 [add-br a],
408 [add-bond a bond0 a1 a2 a3 tag=9],
409 [get Port bond0 tag],
410 [del-port bond0])], [0], [
411
412 9
413
414 ])
415 CHECK_BRIDGES([a, a, 0])
416 CHECK_PORTS([a])
417 OVS_VSCTL_CLEANUP
418 AT_CLEANUP
419
420 AT_SETUP([external IDs])
421 AT_KEYWORDS([ovs-vsctl])
422 OVS_VSCTL_SETUP
423 AT_CHECK([RUN_OVS_VSCTL_ONELINE(
424 [add-br a],
425 [add-port a a1],
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], [
442
443
444
445
446
447
448
449 key0=value0
450 value0
451
452
453 key0=othervalue
454
455
456 {key1=value1}
457 {key2=value2, key3=value3}
458 {key4=value4}
459 ])
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],
465 [
466 {key1=value1}
467 {key2=value2, key3=value3}
468 {key4=value4}
469 ])
470 CHECK_BRIDGES([a, a, 0])
471 CHECK_PORTS([a], [a1], [bond0])
472 CHECK_IFACES([a], [a1], [a2], [a3])
473 OVS_VSCTL_CLEANUP
474 AT_CLEANUP
475
476 AT_SETUP([controllers])
477 AT_KEYWORDS([controller ovs-vsctl])
478 OVS_VSCTL_SETUP
479 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
480 [add-br br0],
481
482 [get-controller br0],
483 [set-controller br0 tcp:4.5.6.7],
484 [get-controller br0],
485
486 [del-controller br0],
487 [get-controller br0],
488
489 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
490 [get-controller br0],
491
492 [--inactivity-probe=30000 set-controller br0 tcp:1.2.3.4],
493 [get-controller br0])], [0], [
494
495
496 tcp:4.5.6.7
497
498
499
500 tcp:5.4.3.2\ntcp:8.9.10.11
501
502 tcp:1.2.3.4
503 ])
504 OVS_VSCTL_CLEANUP
505 AT_CLEANUP
506
507 dnl ----------------------------------------------------------------------
508 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
509 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
510 [AT_CHECK(
511 [RUN_OVS_VSCTL(
512 [add-br xenbr0],
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])])])
519
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)])
523
524 AT_SETUP([simple fake bridge (VLAN $1)])
525 AT_KEYWORDS([ovs-vsctl fake-bridge])
526 OVS_VSCTL_SETUP
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
530 ])
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
533 ])
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
536 ])
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
539 ])
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])
545 OVS_VSCTL_CLEANUP
546 AT_CLEANUP
547
548 AT_SETUP([list bridges -- real and fake (VLAN $1)])
549 AT_KEYWORDS([ovs-vsctl fake-bridge])
550 OVS_VSCTL_SETUP
551 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
552 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
553 [xapi1\nxenbr0
554 ])
555 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
556 [xenbr0
557 ])
558 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
559 [xapi1
560 ])
561 OVS_VSCTL_CLEANUP
562 AT_CLEANUP
563
564 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
565 AT_KEYWORDS([ovs-vsctl fake-bridge])
566 OVS_VSCTL_SETUP
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])
572 OVS_VSCTL_CLEANUP
573 AT_CLEANUP
574
575 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
576 AT_KEYWORDS([ovs-vsctl fake-bridge])
577 OVS_VSCTL_SETUP
578 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
579 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
580 CHECK_BRIDGES
581 OVS_VSCTL_CLEANUP
582 AT_CLEANUP
583
584 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
585 AT_KEYWORDS([ovs-vsctl fake-bridge])
586 OVS_VSCTL_SETUP
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], [
595
596 key0=value0
597 value0
598 key1=value1
599 value1
600 ])
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])
606 OVS_VSCTL_CLEANUP
607 AT_CLEANUP
608
609 AT_SETUP([simple fake bridge + del-port from parent (VLAN $1)])
610 AT_KEYWORDS([ovs-vsctl fake-bridge del-port])
611 OVS_VSCTL_SETUP
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)
615 ])
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])
623 OVS_VSCTL_CLEANUP
624 AT_CLEANUP
625 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
626
627 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
628 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
629
630 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
631 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
632 [AT_CHECK(
633 [RUN_OVS_VSCTL(
634 [add-br xapi1],
635 [add-bond xapi1 bond0 eth0 eth1],
636 [add-br xapi2 xapi1 $1],
637 [add-port xapi2 bond0.$1])])])
638
639 AT_SETUP([fake bridge on bond])
640 AT_KEYWORDS([ovs-vsctl fake-bridge])
641 OVS_VSCTL_SETUP
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])
648 OVS_VSCTL_CLEANUP
649 AT_CLEANUP
650
651 AT_SETUP([fake bridge on bond + del-br fake bridge])
652 AT_KEYWORDS([ovs-vsctl fake-bridge])
653 OVS_VSCTL_SETUP
654 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
655 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
656 ])
657 CHECK_BRIDGES([xapi1, xapi1, 0])
658 CHECK_PORTS([xapi1], [bond0])
659 CHECK_IFACES([xapi1], [eth0], [eth1])
660 OVS_VSCTL_CLEANUP
661 AT_CLEANUP
662
663 AT_SETUP([fake bridge on bond + del-br real bridge])
664 AT_KEYWORDS([ovs-vsctl fake-bridge])
665 OVS_VSCTL_SETUP
666 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
667 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
668 CHECK_BRIDGES
669 OVS_VSCTL_CLEANUP
670 AT_CLEANUP
671
672 dnl ----------------------------------------------------------------------
673 AT_BANNER([ovs-vsctl unit tests -- manager commands])
674
675 AT_SETUP([managers])
676 AT_KEYWORDS([manager ovs-vsctl])
677 OVS_VSCTL_SETUP
678 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
679 [del-manager],
680 [get-manager],
681 [set-manager tcp:4.5.6.7],
682 [get-manager],
683 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
684 [get-manager],
685 [--inactivity-probe=30000 set-manager tcp:1.2.3.4],
686 [get-manager],
687 [del-manager],
688 [get-manager])], [0], [
689
690
691 tcp:4.5.6.7
692
693 tcp:5.4.3.2\ntcp:8.9.10.11
694
695 tcp:1.2.3.4
696
697
698 ])
699 OVS_VSCTL_CLEANUP
700 AT_CLEANUP
701
702 dnl ----------------------------------------------------------------------
703 AT_BANNER([ovs-vsctl unit tests -- database commands])
704
705 AT_SETUP([database commands -- positive checks])
706 AT_KEYWORDS([ovs-vsctl])
707 OVS_VSCTL_SETUP
708 AT_CHECK(
709 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
710 [set b br123 name=br0],
711 [set o . bridges=@br0])],
712 [0], [stdout])
713 cp stdout out1
714 AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
715 [0], [stdout])
716 cp stdout out2
717 AT_CHECK([uuidfilt out1 out2], [0],
718 [[<0>
719
720
721 _uuid : <0>
722 auto_attach : []
723 controller : []
724 datapath_id : []
725 datapath_type : ""
726 datapath_version : ""
727 external_ids : {}
728 fail_mode : []
729 flood_vlans : []
730 flow_tables : {}
731 ipfix : []
732 mcast_snooping_enable: false
733 mirrors : []
734 name : br0
735 netflow : []
736 other_config : {}
737 ports : []
738 protocols : []
739 rstp_enable : false
740 rstp_status : {}
741 sflow : []
742 status : {}
743 stp_enable : false
744 <0>
745 ]], [ignore])
746 AT_CHECK(
747 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
748 [0],
749 [[fail_mode : []
750 name : br0
751 datapath_type : ""
752 ]], [ignore])
753 AT_CHECK(
754 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
755 [0],
756 [[fail_mode : []
757 name : br0
758 datapath_type : ""
759 ]], [ignore])
760 AT_CHECK([
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])],
764 [0], [stdout])
765 AT_CHECK(
766 [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
767 [ignore])
768 AT_CHECK([sed -n '/./p' stdout | sort], [0],
769 [[name : br0
770 name : br2
771 ]])
772 AT_CHECK(
773 [RUN_OVS_VSCTL(
774 [set bridge br0 \
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"}
781 ])
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"
784
785 ])
786 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
787 [0], [{datapath_id="0123456789ab"}
788 ])
789 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
790 [0], [{}
791 ])
792 AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
793 [0], [{}
794 ])
795 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
796 [destroy bridge br1],
797 [destroy bridge br2],
798 [clear o . bridges])],
799 [0], [stdout])
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])])
804 AT_CHECK(
805 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])])
806 AT_CHECK(
807 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])])
808
809 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
810 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
811 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
812 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
813 ])
814 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
815 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
816 Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
817 ])
818 AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=1])])
819 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-zone-tp netdev zone=1])])
820 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
821 ])
822 OVS_VSCTL_CLEANUP
823 AT_CLEANUP
824
825 AT_SETUP([database commands -- negative checks])
826 AT_KEYWORDS([ovs-vsctl])
827 OVS_VSCTL_SETUP
828
829 AT_CHECK([ovs-vsctl --may-exist],
830 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
831 ])
832 AT_CHECK([ovs-vsctl --may-exist --],
833 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
834 ])
835 AT_CHECK([ovs-vsctl -- --may-exist],
836 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
837 ])
838
839 AT_CHECK([RUN_OVS_VSCTL([add-br br0])], [0], [ignore])
840 AT_CHECK([RUN_OVS_VSCTL([add-br br1])], [0], [ignore])
841 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], [0], [ignore])
842 AT_CHECK([RUN_OVS_VSCTL([list netflow br0])], [1], [],
843 [ovs-vsctl: no row "br0" in table NetFlow
844 ])
845 AT_CHECK([
846 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
847 [set bridge br0 netflow=@n])],
848 [0], [stdout])
849 cp stdout netflow-uuid
850 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], [0], [stdout])
851 AT_CHECK([uuidfilt netflow-uuid stdout], [0],
852 [[<0>
853
854 _uuid : <0>
855 active_timeout : 0
856 add_id_to_interface : false
857 engine_id : []
858 engine_type : []
859 external_ids : {}
860 targets : ["1.2.3.4:567"]
861 ]], [ignore])
862 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
863 [1], [], [ovs-vsctl: unknown table "interx"
864 ])
865 AT_CHECK([RUN_OVS_VSCTL([list c x])],
866 [1], [], [ovs-vsctl: "c" matches multiple table names: CT_Timeout_Policy, CT_Zone, Controller
867 ])
868 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
869 [1], [], [ovs-vsctl: no row "x" in table Bridge
870 ])
871 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
872 [1], [], [ovs-vsctl: no row "x" in table Bridge
873 ])
874 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
875 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d": datapath_id, datapath_type, datapath_version
876 ])
877 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
878 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
879 ])
880 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
881 [1], [], [ovs-vsctl: :y=z: missing column name
882 ])
883 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
884 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
885 ])
886 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
887 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
888 ])
889 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
890 [1], [], [ovs-vsctl: no row "x" in table Controller
891 ])
892 AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
893 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
894 ])
895 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
896 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
897 ])
898 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
899 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
900 ])
901 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
902 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
903 ])
904 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
905 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
906 ])
907 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
908 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
909 ])
910 AT_CHECK([RUN_OVS_VSCTL([set controller br1 'connection-mode=xyz'])],
911 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
912 ]])
913 AT_CHECK([RUN_OVS_VSCTL([set controller br1 connection-mode:x=y])],
914 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
915 ])
916 AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
917 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
918 ])
919 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
920 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
921 ])
922 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
923 [1], [], [ovs-vsctl: no row "x" in table NetFlow
924 ])
925 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
926 [1], [], [ovs-vsctl: no row "x" in table NetFlow
927 ])
928 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
929 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
930 ])
931 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
932 [1], [], [ovs-vsctl: no row "br2" in table Bridge
933 ])
934 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
935 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
936 ])
937 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
938 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
939 ])
940 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
941 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
942 ])
943 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
944 [1], [], [ovs-vsctl: "true" is not a valid integer or range
945 ])
946 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
947 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
948 ])
949
950 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
951 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdevxx zone=1 icmp_first=1 icmp_reply=2])],
952 [1], [], [ovs-vsctl: datapath netdevxx does not exist
953 ])
954 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
955 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])],
956 [1], [], [ovs-vsctl: zone id 2 already exists
957 ])
958 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
959 ])
960 AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=11])],
961 [1], [], [ovs-vsctl: zone id 11 does not exist
962 ])
963 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
964 ])
965 OVS_VSCTL_CLEANUP
966 AT_CLEANUP
967
968 AT_SETUP([database commands -- conditions])
969 AT_KEYWORDS([ovs-vsctl])
970 OVS_VSCTL_SETUP
971 AT_CHECK(
972 [RUN_OVS_VSCTL_TOGETHER(
973 [add-br br0],
974 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
975 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
976 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
977 [add-br br4], [set bridge br4 flood_vlans=2],
978 [add-br br5], [set bridge br5 flood_vlans=0,2],
979 [add-br br6], [set bridge br6 flood_vlans=1,2],
980 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995 ])
996 m4_define([VSCTL_CHECK_FIND],
997 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer -- --columns=name find bridge '$1' | sort`], [0], [$2
998 ])])
999
1000 # Arithmetic relational operators without keys.
1001 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
1002 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
1003 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
1004 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
1005 VSCTL_CHECK_FIND([flood_vlans=3], [])
1006
1007 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
1008 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
1009 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
1010 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1011 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
1012
1013 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
1014 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
1015 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
1016 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
1017 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
1018 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
1019 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
1020 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
1021
1022 # Set relational operators without keys.
1023 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
1024 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
1025 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
1026 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
1027 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
1028
1029 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
1030 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
1031 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
1032 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1033 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
1034
1035 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
1036 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
1037 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
1038 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
1039 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
1040 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
1041
1042 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
1043 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1044 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
1045 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
1046 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
1047 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
1048 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
1049
1050 # Arithmetic relational operators with keys.
1051 VSCTL_CHECK_FIND([other-config:x=""], [br1])
1052 VSCTL_CHECK_FIND([other-config:x=y], [br2])
1053 VSCTL_CHECK_FIND([other-config:x=z], [br3])
1054
1055 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
1056 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
1057 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
1058
1059 VSCTL_CHECK_FIND([other-config:x>y], [br3])
1060 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
1061 VSCTL_CHECK_FIND([other-config:x<y], [br1])
1062 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
1063
1064 # Set relational operators with keys.
1065 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
1066 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
1067 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
1068 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
1069
1070 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
1071 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
1072 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
1073 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
1074
1075 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
1076 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
1077 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
1078 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
1079 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
1080 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
1081
1082 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
1083 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
1084 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
1085 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
1086 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
1087
1088 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1089 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
1090 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
1091 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
1092 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
1093
1094 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1095 VSCTL_CHECK_FIND([other-config:x{>}x], [])
1096 VSCTL_CHECK_FIND([other-config:x{>}""], [])
1097 VSCTL_CHECK_FIND([other-config:x{>}y], [])
1098 VSCTL_CHECK_FIND([other-config:x{>}z], [])
1099 OVS_VSCTL_CLEANUP
1100 AT_CLEANUP
1101
1102 AT_SETUP([database commands -- wait-until immediately true])
1103 AT_KEYWORDS([ovs-vsctl])
1104 OVS_VSCTL_SETUP
1105 AT_CHECK([RUN_OVS_VSCTL(
1106 [add-br br0],
1107 [add-bond br0 bond0 eth0 eth1],
1108 [set port bond0 bond_updelay=500 other-config:abc=def])])
1109 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])])
1110 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])])
1111 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])])
1112 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])])
1113 OVS_VSCTL_CLEANUP
1114 AT_CLEANUP
1115
1116 AT_SETUP([database commands -- wait-until must wait])
1117 AT_KEYWORDS([ovs-vsctl])
1118
1119 OVS_VSCTL_SETUP
1120
1121 # Start ovs-vsctls in background.
1122 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1123 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1124 (RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1125 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1126
1127 # Give the ovs-vsctls a chance to read the database
1128 sleep 1
1129
1130 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
1131 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])])
1132
1133 # Wait for the ovs-vsctls to finish.
1134 wait
1135
1136 # Check output
1137 AT_CHECK([cat stdout1], [0], [quux
1138 ])
1139 AT_CHECK([cat stdout2], [0], [def
1140 ])
1141 AT_CHECK([cat stdout3], [0], [{abc=def}
1142 ])
1143 AT_CHECK([cat stdout4], [0], [500
1144 ])
1145
1146 OVS_VSCTL_CLEANUP
1147 AT_CLEANUP
1148
1149 AT_SETUP([--id option on create, get commands])
1150 AT_KEYWORDS([ovs-vsctl])
1151 OVS_VSCTL_SETUP
1152 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1153 [add-port br0 eth0],
1154 [add-port br0 eth1])])
1155 AT_CHECK(
1156 [RUN_OVS_VSCTL_TOGETHER(
1157 [set bridge br0 mirrors=@m],
1158 [--id=@eth0 get port eth0],
1159 [--id=@eth1 get port eth1],
1160 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1161 [0], [stdout])
1162 AT_CHECK(
1163 [uuidfilt stdout], [0], [dnl
1164
1165
1166
1167 <0>
1168 ])
1169 AT_CHECK(
1170 [RUN_OVS_VSCTL(
1171 [list port eth0 eth1],
1172 [list mirror],
1173 [list bridge br0])],
1174 [0], [stdout])
1175 AT_CHECK(
1176 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
1177 [_uuid : <0>
1178 name : eth0
1179 _uuid : <1>
1180 name : eth1
1181 _uuid : <2>
1182 name : mymirror
1183 output_port : <1>
1184 output_vlan : []
1185 select_all : false
1186 select_dst_port : [<0>]
1187 select_src_port : [<0>]
1188 select_vlan : []
1189 _uuid : <3>
1190 mirrors : [<2>]
1191 name : br0
1192 ]])
1193 OVS_VSCTL_CLEANUP
1194 AT_CLEANUP
1195
1196 AT_SETUP([unreferenced record warnings])
1197 AT_KEYWORDS([ovs-vsctl])
1198 OVS_VSCTL_SETUP
1199 AT_CHECK(
1200 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1201 -- create Bridge name=br0 | uuidfilt],
1202 [0], [<0>
1203 ], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
1204 ])
1205 AT_CHECK(
1206 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1207 -- --id=@br0 create Bridge name=br0 | uuidfilt],
1208 [0], [<0>
1209 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1210 ])
1211 AT_CHECK(
1212 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1213 -- --id=@eth0_iface create Interface name=eth0 \
1214 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1215 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1216 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1217 -- set Open_vSwitch . bridges=@br0 | uuidfilt],
1218 [0], [<0>
1219 <1>
1220 <2>
1221 <3>
1222 ], [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
1223 ])
1224 OVS_VSCTL_CLEANUP
1225 AT_CLEANUP
1226
1227 dnl This test really shows a bug -- "create" followed by "list" in
1228 dnl the same execution shows the wrong UUID on the "list" command.
1229 dnl The bug is documented in ovs-vsctl.8.
1230 AT_SETUP([created row UUID is wrong in same execution])
1231 AT_KEYWORDS([ovs-vsctl])
1232 OVS_VSCTL_SETUP
1233 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
1234 [0], [stdout])
1235 AT_CHECK([uuidfilt stdout], [0],
1236 [[<0>
1237 _uuid : <1>
1238 auto_attach : []
1239 controller : []
1240 datapath_id : []
1241 datapath_type : ""
1242 datapath_version : ""
1243 external_ids : {}
1244 fail_mode : []
1245 flood_vlans : []
1246 flow_tables : {}
1247 ipfix : []
1248 mcast_snooping_enable: false
1249 mirrors : []
1250 name : br0
1251 netflow : []
1252 other_config : {}
1253 ports : []
1254 protocols : []
1255 rstp_enable : false
1256 rstp_status : {}
1257 sflow : []
1258 status : {}
1259 stp_enable : false
1260 ]], [ignore])
1261 OVS_VSCTL_CLEANUP
1262 AT_CLEANUP
1263
1264 dnl This test will create a linux-htb QoS record that
1265 dnl points to a few queues and use it on a1 and a2 port.
1266 dnl It also destroys all records from Qos and Queue table.
1267 AT_SETUP([--all option on destroy command])
1268 AT_KEYWORDS([ovs-vsctl])
1269 OVS_VSCTL_SETUP
1270 AT_CHECK([RUN_OVS_VSCTL(
1271 [add-br a],
1272 [add-port a a1],
1273 [add-port a a2])])
1274 CHECK_BRIDGES([a, a, 0])
1275 CHECK_PORTS([a], [a1], [a2])
1276 CHECK_IFACES([a], [a1], [a2])
1277 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1278 [set Port a1 qos=@newqos],
1279 [set Port a2 qos=@newqos],
1280 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1281 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1282 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore])
1283 AT_CHECK([RUN_OVS_VSCTL(
1284 [--columns=other_config,type list Qos])], [0],
1285 [other_config : {max-rate="1000000000"}
1286 type : linux-htb
1287 ])
1288 AT_CHECK([RUN_OVS_VSCTL(
1289 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1290 [other_config : {max-rate="100000000", min-rate="100000000"}
1291 other_config : {min-rate="500000000"}
1292 ])
1293 AT_CHECK([RUN_OVS_VSCTL(
1294 [clear Port a1 qos],
1295 [clear Port a2 qos])])
1296 AT_CHECK([RUN_OVS_VSCTL(
1297 [--columns=qos list Port a1 a2])], [0],
1298 [[qos : []
1299
1300 qos : []
1301 ]])
1302 AT_CHECK([RUN_OVS_VSCTL(
1303 [--all destroy Qos])])
1304 AT_CHECK([RUN_OVS_VSCTL(
1305 [-- list Qos])])
1306 AT_CHECK([RUN_OVS_VSCTL(
1307 [--all destroy Queue])])
1308 AT_CHECK([RUN_OVS_VSCTL(
1309 [-- list Queue])])
1310 OVS_VSCTL_CLEANUP
1311 AT_CLEANUP
1312
1313 dnl ----------------------------------------------------------------------
1314 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1315
1316 AT_SETUP([add-port -- reserved names 1])
1317 OVS_VSWITCHD_START
1318
1319 # Test creating all reserved port names
1320 m4_foreach(
1321 [reserved_name],
1322 [[ovs-netdev],
1323 [ovs-dummy],
1324 [genev_sys],
1325 [gre_sys],
1326 [lisp_sys],
1327 [vxlan_sys]],
1328 [
1329 # Try creating the port
1330 cat >experr <<EOF
1331 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1332 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1333 EOF
1334 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1335 # Prevent race.
1336 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1337 # Detect the warning log message
1338 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1339 |bridge|WARN|could not create interface reserved_name, name is reserved
1340 ])
1341 # Delete the warning log message
1342 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1343 # Delete the port
1344 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1345 OVS_VSWITCHD_STOP
1346 AT_CLEANUP
1347
1348 AT_SETUP([add-port -- reserved names 2])
1349 # Creates all type of tunnel ports
1350 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1351 options:remote_ip=1.1.1.1 ofport_request=1\
1352 -- add-port br0 p3 -- set Interface p3 type=lisp \
1353 options:remote_ip=2.2.2.2 ofport_request=3 \
1354 -- add-port br0 p4 -- set Interface p4 type=vxlan \
1355 options:remote_ip=2.2.2.2 ofport_request=4 \
1356 -- add-port br0 p5 -- set Interface p5 type=geneve \
1357 options:remote_ip=2.2.2.2 ofport_request=5])
1358
1359 # Test creating all reserved tunnel port names
1360 m4_foreach(
1361 [reserved_name],
1362 [[genev_sys],
1363 [gre_sys],
1364 [lisp_sys],
1365 [vxlan_sys]],
1366 [
1367 # Try creating the port
1368 cat >experr <<EOF
1369 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1370 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1371 EOF
1372 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1373 # Prevent race.
1374 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1375 # Detect the warning log message
1376 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1377 |bridge|WARN|could not create interface reserved_name, name is reserved
1378 ])
1379 # Delete the warning log message
1380 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1381 # Delete the port
1382 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1383 OVS_VSWITCHD_STOP
1384 AT_CLEANUP
1385
1386 AT_SETUP([naming in db commands])
1387 AT_KEYWORDS([ovs-vsctl])
1388 OVS_VSCTL_SETUP
1389
1390 dnl First check that the database commands can refer to row by database UUID.
1391 AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1392 uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
1393 AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], [br0
1394 ])
1395
1396 dnl Next check that, if a database row is given a name that has the same form
1397 dnl as the database UUIDs, the name can still be used to refer to rows.
1398 AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1399 AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1400 ])
1401
1402 OVS_VSCTL_CLEANUP
1403 AT_CLEANUP
1404
1405 AT_SETUP([bootstrap ca cert])
1406 AT_KEYWORDS([ovs-vsctl ssl])
1407 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1408 PKIDIR=`pwd`
1409 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1410 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req ovsdbserver && $OVS_PKI self-sign ovsdbserver], [0], [ignore], [ignore])
1411
1412 dnl Create database.
1413 OVSDB_INIT([conf.db])
1414 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])
1415 on_exit "kill `cat ovsdb-server.pid`"
1416 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1417
1418 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1419 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])
1420
1421 # If the bootstrap was successful, the following file should exist.
1422 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1423
1424 # After bootstrap, the connection should be successful.
1425 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])
1426 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
1427 ])
1428
1429 OVS_VSCTL_CLEANUP
1430 AT_CLEANUP
1431
1432 AT_SETUP([peer ca cert])
1433 AT_KEYWORDS([ovs-vsctl ssl])
1434 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1435 PKIDIR=`pwd`
1436 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1437 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req+sign ovsdbserver controller], [0], [ignore], [ignore])
1438
1439 dnl Create database.
1440 OVSDB_INIT([conf.db])
1441 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])
1442 on_exit "kill `cat ovsdb-server.pid`"
1443 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1444
1445 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1446 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])
1447
1448 # If the bootstrap was successful, the following file should exist.
1449 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1450
1451 # After bootstrap, the connection should be successful.
1452 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])
1453 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
1454 ])
1455
1456 OVS_VSCTL_CLEANUP
1457 AT_CLEANUP
1458
1459 AT_SETUP([TLS server name indication (SNI)])
1460 AT_KEYWORDS([ovsdb server positive ssl tls sni])
1461 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1462 AT_SKIP_IF([test "$OPENSSL_SUPPORTS_SNI" = no])
1463 AT_SKIP_IF([test "$HAVE_UNBOUND" = no])
1464 OVSDB_INIT([conf.db])
1465 PKIDIR=$abs_top_builddir/tests
1466 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])
1467 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1468
1469 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])
1470
1471 AT_CAPTURE_FILE([ovsdb-server.log])
1472 AT_CHECK([grep "server name" ovsdb-server.log], [0],
1473 [connection indicated server name localhost
1474 ])
1475
1476 OVS_VSCTL_CLEANUP
1477 AT_CLEANUP