]> git.proxmox.com Git - mirror_ovs.git/blob - tests/ovs-vsctl.at
ovsdb-data: Don't put strings with digits in quotes.
[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 OVS_VSCTL_CLEANUP
809 AT_CLEANUP
810
811 AT_SETUP([database commands -- negative checks])
812 AT_KEYWORDS([ovs-vsctl])
813 OVS_VSCTL_SETUP
814
815 AT_CHECK([ovs-vsctl --may-exist],
816 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
817 ])
818 AT_CHECK([ovs-vsctl --may-exist --],
819 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
820 ])
821 AT_CHECK([ovs-vsctl -- --may-exist],
822 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
823 ])
824
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
830 ])
831 AT_CHECK([
832 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
833 [set bridge br0 netflow=@n])],
834 [0], [stdout])
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],
838 [[<0>
839
840 _uuid : <0>
841 active_timeout : 0
842 add_id_to_interface : false
843 engine_id : []
844 engine_type : []
845 external_ids : {}
846 targets : ["1.2.3.4:567"]
847 ]], [ignore])
848 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
849 [1], [], [ovs-vsctl: unknown table "interx"
850 ])
851 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
852 [1], [], [ovs-vsctl: no row "x" in table Bridge
853 ])
854 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
855 [1], [], [ovs-vsctl: no row "x" in table Bridge
856 ])
857 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
858 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
859 ])
860 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
861 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
862 ])
863 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
864 [1], [], [ovs-vsctl: :y=z: missing column name
865 ])
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
868 ])
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.
871 ])
872 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
873 [1], [], [ovs-vsctl: no row "x" in table Controller
874 ])
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.
877 ])
878 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
879 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
880 ])
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
883 ])
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
886 ])
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)
889 ])
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)
892 ])
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])
895 ]])
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
898 ])
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
901 ])
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
904 ])
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
907 ])
908 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
909 [1], [], [ovs-vsctl: no row "x" in table NetFlow
910 ])
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
913 ])
914 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
915 [1], [], [ovs-vsctl: no row "br2" in table Bridge
916 ])
917 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
918 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
919 ])
920 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
921 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
922 ])
923 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
924 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
925 ])
926 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
927 [1], [], [ovs-vsctl: "true" is not a valid integer or range
928 ])
929 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
930 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
931 ])
932 OVS_VSCTL_CLEANUP
933 AT_CLEANUP
934
935 AT_SETUP([database commands -- conditions])
936 AT_KEYWORDS([ovs-vsctl])
937 OVS_VSCTL_SETUP
938 AT_CHECK(
939 [RUN_OVS_VSCTL_TOGETHER(
940 [add-br br0],
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], [
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962 ])
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
965 ])])
966
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], [])
973
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])
979
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])
988
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], [])
995
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])
1001
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])
1008
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])
1016
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])
1021
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])
1025
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])
1030
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])
1036
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])
1041
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])
1048
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])
1054
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])
1060
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], [])
1066 OVS_VSCTL_CLEANUP
1067 AT_CLEANUP
1068
1069 AT_SETUP([database commands -- wait-until immediately true])
1070 AT_KEYWORDS([ovs-vsctl])
1071 OVS_VSCTL_SETUP
1072 AT_CHECK([RUN_OVS_VSCTL(
1073 [add-br br0],
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']])])
1080 OVS_VSCTL_CLEANUP
1081 AT_CLEANUP
1082
1083 AT_SETUP([database commands -- wait-until must wait])
1084 AT_KEYWORDS([ovs-vsctl])
1085
1086 OVS_VSCTL_SETUP
1087
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 &
1093
1094 # Give the ovs-vsctls a chance to read the database
1095 sleep 1
1096
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])])
1099
1100 # Wait for the ovs-vsctls to finish.
1101 wait
1102
1103 # Check output
1104 AT_CHECK([cat stdout1], [0], [quux
1105 ])
1106 AT_CHECK([cat stdout2], [0], [def
1107 ])
1108 AT_CHECK([cat stdout3], [0], [{abc=def}
1109 ])
1110 AT_CHECK([cat stdout4], [0], [500
1111 ])
1112
1113 OVS_VSCTL_CLEANUP
1114 AT_CLEANUP
1115
1116 AT_SETUP([--id option on create, get commands])
1117 AT_KEYWORDS([ovs-vsctl])
1118 OVS_VSCTL_SETUP
1119 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1120 [add-port br0 eth0],
1121 [add-port br0 eth1])])
1122 AT_CHECK(
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])],
1128 [0], [stdout])
1129 AT_CHECK(
1130 [uuidfilt stdout], [0], [dnl
1131
1132
1133
1134 <0>
1135 ])
1136 AT_CHECK(
1137 [RUN_OVS_VSCTL(
1138 [list port eth0 eth1],
1139 [list mirror],
1140 [list bridge br0])],
1141 [0], [stdout])
1142 AT_CHECK(
1143 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
1144 [_uuid : <0>
1145 name : eth0
1146 _uuid : <1>
1147 name : eth1
1148 _uuid : <2>
1149 name : mymirror
1150 output_port : <1>
1151 output_vlan : []
1152 select_all : false
1153 select_dst_port : [<0>]
1154 select_src_port : [<0>]
1155 select_vlan : []
1156 _uuid : <3>
1157 mirrors : [<2>]
1158 name : br0
1159 ]])
1160 OVS_VSCTL_CLEANUP
1161 AT_CLEANUP
1162
1163 AT_SETUP([unreferenced record warnings])
1164 AT_KEYWORDS([ovs-vsctl])
1165 OVS_VSCTL_SETUP
1166 AT_CHECK(
1167 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1168 -- create Bridge name=br0 | uuidfilt],
1169 [0], [<0>
1170 ], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
1171 ])
1172 AT_CHECK(
1173 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1174 -- --id=@br0 create Bridge name=br0 | uuidfilt],
1175 [0], [<0>
1176 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1177 ])
1178 AT_CHECK(
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],
1185 [0], [<0>
1186 <1>
1187 <2>
1188 <3>
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
1190 ])
1191 OVS_VSCTL_CLEANUP
1192 AT_CLEANUP
1193
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])
1199 OVS_VSCTL_SETUP
1200 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
1201 [0], [stdout])
1202 AT_CHECK([uuidfilt stdout], [0],
1203 [[<0>
1204 _uuid : <1>
1205 auto_attach : []
1206 controller : []
1207 datapath_id : []
1208 datapath_type : ""
1209 datapath_version : ""
1210 external_ids : {}
1211 fail_mode : []
1212 flood_vlans : []
1213 flow_tables : {}
1214 ipfix : []
1215 mcast_snooping_enable: false
1216 mirrors : []
1217 name : br0
1218 netflow : []
1219 other_config : {}
1220 ports : []
1221 protocols : []
1222 rstp_enable : false
1223 rstp_status : {}
1224 sflow : []
1225 status : {}
1226 stp_enable : false
1227 ]], [ignore])
1228 OVS_VSCTL_CLEANUP
1229 AT_CLEANUP
1230
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])
1236 OVS_VSCTL_SETUP
1237 AT_CHECK([RUN_OVS_VSCTL(
1238 [add-br a],
1239 [add-port a a1],
1240 [add-port a a2])])
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"}
1253 type : linux-htb
1254 ])
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"}
1259 ])
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],
1265 [[qos : []
1266
1267 qos : []
1268 ]])
1269 AT_CHECK([RUN_OVS_VSCTL(
1270 [--all destroy Qos])])
1271 AT_CHECK([RUN_OVS_VSCTL(
1272 [-- list Qos])])
1273 AT_CHECK([RUN_OVS_VSCTL(
1274 [--all destroy Queue])])
1275 AT_CHECK([RUN_OVS_VSCTL(
1276 [-- list Queue])])
1277 OVS_VSCTL_CLEANUP
1278 AT_CLEANUP
1279
1280 dnl ----------------------------------------------------------------------
1281 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1282
1283 AT_SETUP([add-port -- reserved names 1])
1284 OVS_VSWITCHD_START
1285
1286 # Test creating all reserved port names
1287 m4_foreach(
1288 [reserved_name],
1289 [[ovs-netdev],
1290 [ovs-dummy],
1291 [genev_sys],
1292 [gre_sys],
1293 [lisp_sys],
1294 [vxlan_sys]],
1295 [
1296 # Try creating the port
1297 cat >experr <<EOF
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".
1300 EOF
1301 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1302 # Prevent race.
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
1307 ])
1308 # Delete the warning log message
1309 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1310 # Delete the port
1311 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1312 OVS_VSWITCHD_STOP
1313 AT_CLEANUP
1314
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])
1325
1326 # Test creating all reserved tunnel port names
1327 m4_foreach(
1328 [reserved_name],
1329 [[genev_sys],
1330 [gre_sys],
1331 [lisp_sys],
1332 [vxlan_sys]],
1333 [
1334 # Try creating the port
1335 cat >experr <<EOF
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".
1338 EOF
1339 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1340 # Prevent race.
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
1345 ])
1346 # Delete the warning log message
1347 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1348 # Delete the port
1349 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1350 OVS_VSWITCHD_STOP
1351 AT_CLEANUP
1352
1353 AT_SETUP([naming in db commands])
1354 AT_KEYWORDS([ovs-vsctl])
1355 OVS_VSCTL_SETUP
1356
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
1361 ])
1362
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
1367 ])
1368
1369 OVS_VSCTL_CLEANUP
1370 AT_CLEANUP
1371
1372 AT_SETUP([bootstrap ca cert])
1373 AT_KEYWORDS([ovs-vsctl ssl])
1374 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1375 PKIDIR=`pwd`
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])
1378
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])
1384
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])
1387
1388 # If the bootstrap was successful, the following file should exist.
1389 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1390
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
1394 ])
1395
1396 OVS_VSCTL_CLEANUP
1397 AT_CLEANUP
1398
1399 AT_SETUP([peer ca cert])
1400 AT_KEYWORDS([ovs-vsctl ssl])
1401 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1402 PKIDIR=`pwd`
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])
1405
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])
1411
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])
1414
1415 # If the bootstrap was successful, the following file should exist.
1416 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1417
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
1421 ])
1422
1423 OVS_VSCTL_CLEANUP
1424 AT_CLEANUP
1425
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])
1435
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])
1437
1438 AT_CAPTURE_FILE([ovsdb-server.log])
1439 AT_CHECK([grep "server name" ovsdb-server.log], [0],
1440 [connection indicated server name localhost
1441 ])
1442
1443 OVS_VSCTL_CLEANUP
1444 AT_CLEANUP