]> git.proxmox.com Git - ovs.git/blob - tests/ovs-vsctl.at
Fix ovs-dpctl-top by removing 3 wrong hunks in py3-compat.patch.
[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
508 AT_SETUP([fail-mode])
509 AT_KEYWORDS([fail-mode ovs-vsctl])
510 OVS_VSCTL_SETUP
511 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
512 [add-br br0],
513
514 [get-fail-mode br0],
515 [set-fail-mode br0 secure],
516 [get-fail-mode br0],
517
518 [del-fail-mode br0],
519 [get-fail-mode br0],
520
521 [set-fail-mode br0 standalone],
522 [get-fail-mode br0])], [0], [
523
524
525 secure
526
527
528
529 standalone
530 ])
531 OVS_VSCTL_CLEANUP
532 AT_CLEANUP
533
534
535 # check if emer-reset reset switch to known good state
536 # test is implemented by creating switch entities and checks if after applying
537 # emer-reset these entities are deleted
538 AT_SETUP([emer-reset])
539 AT_KEYWORDS([emer-reset ovs-vsctl])
540 OVS_VSCTL_SETUP
541
542 # define controllers, fail-mode, netflow, mirror
543 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
544 [add-br br0],
545 [add-port br0 eth0],
546 [add-port br0 eth1],
547 [set-controller br0 tcp:4.5.6.7],
548 [set-fail-mode br0 secure],
549 [set bridge br0 netflow=@nf],
550 [--id=@nf create netflow targets=3.4.5.6],
551 [set bridge br0 mirrors=@m],
552 [--id=@eth0 get port eth0],
553 [--id=@eth1 get port eth1],
554 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1],
555 [set bridge br0 sflow=@sf],
556 [--id=@sf create sflow targets=1.2.3.4],
557 [set bridge br0 datapath-type=dummy other-config:datapath-id=1234 other-config:hwaddr="00:12:34:56:78:bb"],
558 [set bridge br0 ipfix=@fix],
559 [--id=@fix create ipfix targets=1.2.3.4],
560 [set bridge br0 flood_vlans=1],
561 [set bridge br0 datapath_id=2 datapath_version="alpha"],
562 [list bridge > configured_bridge.txt]
563 )], [0], [stdout])
564
565 AT_CHECK(
566 [uuidfilt configured_bridge.txt],
567 [0],[[
568
569
570
571
572
573 <0>
574
575
576
577 <1>
578
579 <2>
580
581
582 <3>
583
584
585 _uuid : <4>
586 auto_attach : []
587 controller : [<5>]
588 datapath_id : "2"
589 datapath_type : dummy
590 datapath_version : alpha
591 external_ids : {}
592 fail_mode : secure
593 flood_vlans : [1]
594 flow_tables : {}
595 ipfix : <6>
596 mcast_snooping_enable: false
597 mirrors : [<7>]
598 name : br0
599 netflow : <8>
600 other_config : {datapath-id="1234", hwaddr="00:12:34:56:78:bb"}
601 ports : [<9>, <10>, <11>]
602 protocols : []
603 rstp_enable : false
604 rstp_status : {}
605 sflow : <12>
606 status : {}
607 stp_enable : false
608 ]])
609
610
611 # execute emer-reset
612 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
613 [emer-reset])], [0], [
614 ])
615
616 # check if bridge was cleaned/reset
617 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
618 [list bridge > cleaned_bridge.txt]
619 )], [0], [stdout])
620
621 AT_CHECK(
622 [uuidfilt cleaned_bridge.txt],
623 [0],[[_uuid : <0>
624 auto_attach : []
625 controller : []
626 datapath_id : "2"
627 datapath_type : dummy
628 datapath_version : alpha
629 external_ids : {}
630 fail_mode : []
631 flood_vlans : []
632 flow_tables : {}
633 ipfix : []
634 mcast_snooping_enable: false
635 mirrors : []
636 name : br0
637 netflow : []
638 other_config : {hwaddr="00:12:34:56:78:bb"}
639 ports : [<1>, <2>, <3>]
640 protocols : []
641 rstp_enable : false
642 rstp_status : {}
643 sflow : []
644 status : {}
645 stp_enable : false
646 ]])
647
648 OVS_VSCTL_CLEANUP
649 AT_CLEANUP
650
651
652
653 dnl ----------------------------------------------------------------------
654 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
655 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
656 [AT_CHECK(
657 [RUN_OVS_VSCTL(
658 [add-br xenbr0],
659 [--may-exist add-br xenbr0],
660 [add-port xenbr0 eth0],
661 [--may-exist add-port xenbr0 eth0],
662 [add-br xapi1 xenbr0 $1],
663 [--may-exist add-br xapi1 xenbr0 $1],
664 [add-port xapi1 eth0.$1])])])
665
666 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
667 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
668 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
669
670 AT_SETUP([simple fake bridge (VLAN $1)])
671 AT_KEYWORDS([ovs-vsctl fake-bridge])
672 OVS_VSCTL_SETUP
673 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
674 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
675 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
676 ])
677 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
678 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
679 ])
680 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
681 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
682 ])
683 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br dup xenbr0 $1])], [1], [],
684 [ovs-vsctl: bridge xenbr0 already has a child VLAN bridge xapi1 on VLAN $1
685 ])
686 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
687 CHECK_PORTS([xenbr0], [eth0])
688 CHECK_IFACES([xenbr0], [eth0])
689 CHECK_PORTS([xapi1], [eth0.$1])
690 CHECK_IFACES([xapi1], [eth0.$1])
691 OVS_VSCTL_CLEANUP
692 AT_CLEANUP
693
694 AT_SETUP([list bridges -- real and fake (VLAN $1)])
695 AT_KEYWORDS([ovs-vsctl fake-bridge])
696 OVS_VSCTL_SETUP
697 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
698 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
699 [xapi1\nxenbr0
700 ])
701 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
702 [xenbr0
703 ])
704 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
705 [xapi1
706 ])
707 OVS_VSCTL_CLEANUP
708 AT_CLEANUP
709
710 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
711 AT_KEYWORDS([ovs-vsctl fake-bridge])
712 OVS_VSCTL_SETUP
713 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
714 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
715 CHECK_BRIDGES([xenbr0, xenbr0, 0])
716 CHECK_PORTS([xenbr0], [eth0])
717 CHECK_IFACES([xenbr0], [eth0])
718 OVS_VSCTL_CLEANUP
719 AT_CLEANUP
720
721 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
722 AT_KEYWORDS([ovs-vsctl fake-bridge])
723 OVS_VSCTL_SETUP
724 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
725 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
726 CHECK_BRIDGES
727 OVS_VSCTL_CLEANUP
728 AT_CLEANUP
729
730 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
731 AT_KEYWORDS([ovs-vsctl fake-bridge])
732 OVS_VSCTL_SETUP
733 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
734 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
735 [br-set-external-id xenbr0 key0 value0],
736 [br-set-external-id xapi1 key1 value1],
737 [br-get-external-id xenbr0],
738 [br-get-external-id xenbr0 key0],
739 [br-get-external-id xapi1],
740 [br-get-external-id xapi1 key1])], [0], [
741
742 key0=value0
743 value0
744 key1=value1
745 value1
746 ])
747 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
748 CHECK_PORTS([xenbr0], [eth0])
749 CHECK_IFACES([xenbr0], [eth0])
750 CHECK_PORTS([xapi1], [eth0.$1])
751 CHECK_IFACES([xapi1], [eth0.$1])
752 OVS_VSCTL_CLEANUP
753 AT_CLEANUP
754
755 AT_SETUP([simple fake bridge + del-port from parent (VLAN $1)])
756 AT_KEYWORDS([ovs-vsctl fake-bridge del-port])
757 OVS_VSCTL_SETUP
758 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
759 AT_CHECK([RUN_OVS_VSCTL([del-port xenbr0 eth0.$1])], [1], [],
760 [ovs-vsctl: bridge xenbr0 does not have a port eth0.$1 (although its child bridge xapi1 does)
761 ])
762 CHECK_PORTS([xenbr0], [eth0])
763 CHECK_IFACES([xenbr0], [eth0])
764 CHECK_PORTS([xapi1], [eth0.$1])
765 CHECK_IFACES([xapi1], [eth0.$1])
766 AT_CHECK([RUN_OVS_VSCTL([del-port xapi1 eth0.$1])])
767 CHECK_PORTS([xenbr0], [eth0])
768 CHECK_IFACES([xenbr0], [eth0])
769 OVS_VSCTL_CLEANUP
770 AT_CLEANUP
771 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
772
773 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
774 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
775
776 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
777 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
778 [AT_CHECK(
779 [RUN_OVS_VSCTL(
780 [add-br xapi1],
781 [add-bond xapi1 bond0 eth0 eth1],
782 [add-br xapi2 xapi1 $1],
783 [add-port xapi2 bond0.$1])])])
784
785 AT_SETUP([fake bridge on bond])
786 AT_KEYWORDS([ovs-vsctl fake-bridge])
787 OVS_VSCTL_SETUP
788 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
789 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
790 CHECK_PORTS([xapi1], [bond0])
791 CHECK_IFACES([xapi1], [eth0], [eth1])
792 CHECK_PORTS([xapi2], [bond0.11])
793 CHECK_IFACES([xapi2], [bond0.11])
794 OVS_VSCTL_CLEANUP
795 AT_CLEANUP
796
797 AT_SETUP([fake bridge on bond + del-br fake bridge])
798 AT_KEYWORDS([ovs-vsctl fake-bridge])
799 OVS_VSCTL_SETUP
800 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
801 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
802 ])
803 CHECK_BRIDGES([xapi1, xapi1, 0])
804 CHECK_PORTS([xapi1], [bond0])
805 CHECK_IFACES([xapi1], [eth0], [eth1])
806 OVS_VSCTL_CLEANUP
807 AT_CLEANUP
808
809 AT_SETUP([fake bridge on bond + del-br real bridge])
810 AT_KEYWORDS([ovs-vsctl fake-bridge])
811 OVS_VSCTL_SETUP
812 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
813 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
814 CHECK_BRIDGES
815 OVS_VSCTL_CLEANUP
816 AT_CLEANUP
817
818 dnl ----------------------------------------------------------------------
819 AT_BANNER([ovs-vsctl unit tests -- manager commands])
820
821 AT_SETUP([managers])
822 AT_KEYWORDS([manager ovs-vsctl])
823 OVS_VSCTL_SETUP
824 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
825 [del-manager],
826 [get-manager],
827 [set-manager tcp:4.5.6.7],
828 [get-manager],
829 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
830 [get-manager],
831 [--inactivity-probe=30000 set-manager tcp:1.2.3.4],
832 [get-manager],
833 [del-manager],
834 [get-manager])], [0], [
835
836
837 tcp:4.5.6.7
838
839 tcp:5.4.3.2\ntcp:8.9.10.11
840
841 tcp:1.2.3.4
842
843
844 ])
845 OVS_VSCTL_CLEANUP
846 AT_CLEANUP
847
848 dnl ----------------------------------------------------------------------
849 AT_BANNER([ovs-vsctl unit tests -- database commands])
850
851 AT_SETUP([database commands -- positive checks])
852 AT_KEYWORDS([ovs-vsctl])
853 OVS_VSCTL_SETUP
854 AT_CHECK(
855 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
856 [set b br123 name=br0],
857 [set o . bridges=@br0])],
858 [0], [stdout])
859 cp stdout out1
860 AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
861 [0], [stdout])
862 cp stdout out2
863 AT_CHECK([uuidfilt out1 out2], [0],
864 [[<0>
865
866
867 _uuid : <0>
868 auto_attach : []
869 controller : []
870 datapath_id : []
871 datapath_type : ""
872 datapath_version : ""
873 external_ids : {}
874 fail_mode : []
875 flood_vlans : []
876 flow_tables : {}
877 ipfix : []
878 mcast_snooping_enable: false
879 mirrors : []
880 name : br0
881 netflow : []
882 other_config : {}
883 ports : []
884 protocols : []
885 rstp_enable : false
886 rstp_status : {}
887 sflow : []
888 status : {}
889 stp_enable : false
890 <0>
891 ]], [ignore])
892 AT_CHECK(
893 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
894 [0],
895 [[fail_mode : []
896 name : br0
897 datapath_type : ""
898 ]], [ignore])
899 AT_CHECK(
900 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
901 [0],
902 [[fail_mode : []
903 name : br0
904 datapath_type : ""
905 ]], [ignore])
906 AT_CHECK([
907 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create bridge name=br1 datapath_type="foo"],
908 [--id=@br2 create bridge name=br2 external-ids:bar=quux],
909 [add o . bridges @br1 @br2])],
910 [0], [stdout])
911 AT_CHECK(
912 [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
913 [ignore])
914 AT_CHECK([sed -n '/./p' stdout | sort], [0],
915 [[name : br0
916 name : br2
917 ]])
918 AT_CHECK(
919 [RUN_OVS_VSCTL(
920 [set bridge br0 \
921 'other_config:datapath_id="0123456789ab"' \
922 'other_config:hwaddr="00:11:22:33:44:55"' \
923 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
924 add bridge br0 external_ids '"roles"="local; remote; cloud"'])])
925 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
926 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
927 ])
928 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
929 [0], ["00:11:22:33:44:55"
930
931 ])
932 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
933 [0], [{datapath_id="0123456789ab"}
934 ])
935 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
936 [0], [{}
937 ])
938 AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
939 [0], [{}
940 ])
941 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
942 [destroy bridge br1],
943 [destroy bridge br2],
944 [clear o . bridges])],
945 [0], [stdout])
946 AT_CHECK([RUN_OVS_VSCTL([list bridge])])
947 AT_CHECK([RUN_OVS_VSCTL([--if-exists get bridge x datapath_id])])
948 AT_CHECK([RUN_OVS_VSCTL([--if-exists list bridge x])])
949 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])])
950 AT_CHECK(
951 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])])
952 AT_CHECK(
953 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])])
954
955 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
956 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
957 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
958 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
959 ])
960 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
961 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
962 Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
963 ])
964 AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=1])])
965 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-zone-tp netdev zone=1])])
966 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
967 ])
968
969 AT_CHECK(
970 [RUN_OVS_VSCTL_TOGETHER([--id=@n create CT_Zone external_ids:"test"="123"],
971 [--id=@m create Datapath datapath_version=0 ct_zones:"10"=@n],
972 [set Open_vSwitch . datapaths:"netdev"=@m])],
973 [0], [stdout])
974 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:10, Timeout Policies: system default
975 ])
976
977 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
978 AT_CHECK([RUN_OVS_VSCTL([list-dp-cap system])], [0], [recirc=true
979 ])
980 OVS_VSCTL_CLEANUP
981 AT_CLEANUP
982
983 AT_SETUP([database commands -- negative checks])
984 AT_KEYWORDS([ovs-vsctl])
985 OVS_VSCTL_SETUP
986
987 AT_CHECK([ovs-vsctl --may-exist],
988 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
989 ])
990 AT_CHECK([ovs-vsctl --may-exist --],
991 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
992 ])
993 AT_CHECK([ovs-vsctl -- --may-exist],
994 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
995 ])
996
997 AT_CHECK([RUN_OVS_VSCTL([add-br br0])], [0], [ignore])
998 AT_CHECK([RUN_OVS_VSCTL([add-br br1])], [0], [ignore])
999 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], [0], [ignore])
1000 AT_CHECK([RUN_OVS_VSCTL([list netflow br0])], [1], [],
1001 [ovs-vsctl: no row "br0" in table NetFlow
1002 ])
1003 AT_CHECK([
1004 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
1005 [set bridge br0 netflow=@n])],
1006 [0], [stdout])
1007 cp stdout netflow-uuid
1008 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], [0], [stdout])
1009 AT_CHECK([uuidfilt netflow-uuid stdout], [0],
1010 [[<0>
1011
1012 _uuid : <0>
1013 active_timeout : 0
1014 add_id_to_interface : false
1015 engine_id : []
1016 engine_type : []
1017 external_ids : {}
1018 targets : ["1.2.3.4:567"]
1019 ]], [ignore])
1020 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
1021 [1], [], [ovs-vsctl: unknown table "interx"
1022 ])
1023 AT_CHECK([RUN_OVS_VSCTL([list c x])],
1024 [1], [], [ovs-vsctl: "c" matches multiple table names: CT_Timeout_Policy, CT_Zone, Controller
1025 ])
1026 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
1027 [1], [], [ovs-vsctl: no row "x" in table Bridge
1028 ])
1029 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
1030 [1], [], [ovs-vsctl: no row "x" in table Bridge
1031 ])
1032 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
1033 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d": datapath_id, datapath_type, datapath_version
1034 ])
1035 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
1036 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
1037 ])
1038 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
1039 [1], [], [ovs-vsctl: :y=z: missing column name
1040 ])
1041 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
1042 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
1043 ])
1044 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
1045 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
1046 ])
1047 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
1048 [1], [], [ovs-vsctl: no row "x" in table Controller
1049 ])
1050 AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
1051 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
1052 ])
1053 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
1054 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
1055 ])
1056 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
1057 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
1058 ])
1059 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
1060 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
1061 ])
1062 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
1063 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
1064 ])
1065 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
1066 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
1067 ])
1068 AT_CHECK([RUN_OVS_VSCTL([set controller br1 'connection-mode=xyz'])],
1069 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
1070 ]])
1071 AT_CHECK([RUN_OVS_VSCTL([set controller br1 connection-mode:x=y])],
1072 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
1073 ])
1074 AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
1075 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
1076 ])
1077 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
1078 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
1079 ])
1080 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
1081 [1], [], [ovs-vsctl: no row "x" in table NetFlow
1082 ])
1083 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
1084 [1], [], [ovs-vsctl: no row "x" in table NetFlow
1085 ])
1086 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
1087 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
1088 ])
1089 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
1090 [1], [], [ovs-vsctl: no row "br2" in table Bridge
1091 ])
1092 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
1093 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
1094 ])
1095 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
1096 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
1097 ])
1098 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
1099 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
1100 ])
1101 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
1102 [1], [], [ovs-vsctl: "true" is not a valid integer or range
1103 ])
1104 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
1105 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
1106 ])
1107
1108 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
1109 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdevxx zone=1 icmp_first=1 icmp_reply=2])],
1110 [1], [], [ovs-vsctl: datapath netdevxx does not exist
1111 ])
1112 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
1113 AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])],
1114 [1], [], [ovs-vsctl: zone id 2 already exists
1115 ])
1116 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1117 ])
1118 AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=11])],
1119 [1], [], [ovs-vsctl: zone id 11 does not exist
1120 ])
1121 AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1122 ])
1123
1124 AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
1125 AT_CHECK([RUN_OVS_VSCTL([list-dp-cap nosystem])],
1126 [1], [], [ovs-vsctl: datapath "nosystem" record not found
1127 ])
1128
1129 OVS_VSCTL_CLEANUP
1130 AT_CLEANUP
1131
1132 AT_SETUP([database commands -- conditions])
1133 AT_KEYWORDS([ovs-vsctl])
1134 OVS_VSCTL_SETUP
1135 AT_CHECK(
1136 [RUN_OVS_VSCTL_TOGETHER(
1137 [add-br br0],
1138 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
1139 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
1140 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
1141 [add-br br4], [set bridge br4 flood_vlans=2],
1142 [add-br br5], [set bridge br5 flood_vlans=0,2],
1143 [add-br br6], [set bridge br6 flood_vlans=1,2],
1144 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159 ])
1160 m4_define([VSCTL_CHECK_FIND],
1161 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer -- --columns=name find bridge '$1' | sort`], [0], [$2
1162 ])])
1163
1164 # Arithmetic relational operators without keys.
1165 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
1166 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
1167 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
1168 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
1169 VSCTL_CHECK_FIND([flood_vlans=3], [])
1170
1171 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
1172 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
1173 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
1174 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1175 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
1176
1177 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
1178 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
1179 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
1180 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
1181 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
1182 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
1183 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
1184 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
1185
1186 # Set relational operators without keys.
1187 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
1188 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
1189 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
1190 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
1191 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
1192
1193 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
1194 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
1195 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
1196 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1197 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
1198
1199 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
1200 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
1201 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
1202 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
1203 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
1204 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
1205
1206 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
1207 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1208 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
1209 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
1210 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
1211 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
1212 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
1213
1214 # Arithmetic relational operators with keys.
1215 VSCTL_CHECK_FIND([other-config:x=""], [br1])
1216 VSCTL_CHECK_FIND([other-config:x=y], [br2])
1217 VSCTL_CHECK_FIND([other-config:x=z], [br3])
1218
1219 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
1220 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
1221 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
1222
1223 VSCTL_CHECK_FIND([other-config:x>y], [br3])
1224 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
1225 VSCTL_CHECK_FIND([other-config:x<y], [br1])
1226 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
1227
1228 # Set relational operators with keys.
1229 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
1230 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
1231 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
1232 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
1233
1234 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
1235 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
1236 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
1237 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
1238
1239 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
1240 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
1241 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
1242 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
1243 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
1244 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
1245
1246 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
1247 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
1248 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
1249 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
1250 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
1251
1252 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1253 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
1254 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
1255 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
1256 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
1257
1258 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1259 VSCTL_CHECK_FIND([other-config:x{>}x], [])
1260 VSCTL_CHECK_FIND([other-config:x{>}""], [])
1261 VSCTL_CHECK_FIND([other-config:x{>}y], [])
1262 VSCTL_CHECK_FIND([other-config:x{>}z], [])
1263 OVS_VSCTL_CLEANUP
1264 AT_CLEANUP
1265
1266 AT_SETUP([database commands -- wait-until immediately true])
1267 AT_KEYWORDS([ovs-vsctl])
1268 OVS_VSCTL_SETUP
1269 AT_CHECK([RUN_OVS_VSCTL(
1270 [add-br br0],
1271 [add-bond br0 bond0 eth0 eth1],
1272 [set port bond0 bond_updelay=500 other-config:abc=def])])
1273 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])])
1274 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])])
1275 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])])
1276 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])])
1277 OVS_VSCTL_CLEANUP
1278 AT_CLEANUP
1279
1280 AT_SETUP([database commands -- wait-until must wait])
1281 AT_KEYWORDS([ovs-vsctl])
1282
1283 OVS_VSCTL_SETUP
1284
1285 # Start ovs-vsctls in background.
1286 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1287 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1288 (RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1289 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1290
1291 # Give the ovs-vsctls a chance to read the database
1292 sleep 1
1293
1294 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
1295 RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])])
1296
1297 # Wait for the ovs-vsctls to finish.
1298 wait
1299
1300 # Check output
1301 AT_CHECK([cat stdout1], [0], [quux
1302 ])
1303 AT_CHECK([cat stdout2], [0], [def
1304 ])
1305 AT_CHECK([cat stdout3], [0], [{abc=def}
1306 ])
1307 AT_CHECK([cat stdout4], [0], [500
1308 ])
1309
1310 OVS_VSCTL_CLEANUP
1311 AT_CLEANUP
1312
1313 AT_SETUP([--id option on create, get commands])
1314 AT_KEYWORDS([ovs-vsctl])
1315 OVS_VSCTL_SETUP
1316 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1317 [add-port br0 eth0],
1318 [add-port br0 eth1])])
1319 AT_CHECK(
1320 [RUN_OVS_VSCTL_TOGETHER(
1321 [set bridge br0 mirrors=@m],
1322 [--id=@eth0 get port eth0],
1323 [--id=@eth1 get port eth1],
1324 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1325 [0], [stdout])
1326 AT_CHECK(
1327 [uuidfilt stdout], [0], [dnl
1328
1329
1330
1331 <0>
1332 ])
1333 AT_CHECK(
1334 [RUN_OVS_VSCTL(
1335 [list port eth0 eth1],
1336 [list mirror],
1337 [list bridge br0])],
1338 [0], [stdout])
1339 AT_CHECK(
1340 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
1341 [_uuid : <0>
1342 name : eth0
1343 _uuid : <1>
1344 name : eth1
1345 _uuid : <2>
1346 name : mymirror
1347 output_port : <1>
1348 output_vlan : []
1349 select_all : false
1350 select_dst_port : [<0>]
1351 select_src_port : [<0>]
1352 select_vlan : []
1353 _uuid : <3>
1354 mirrors : [<2>]
1355 name : br0
1356 ]])
1357 OVS_VSCTL_CLEANUP
1358 AT_CLEANUP
1359
1360 AT_SETUP([unreferenced record warnings])
1361 AT_KEYWORDS([ovs-vsctl])
1362 OVS_VSCTL_SETUP
1363 AT_CHECK(
1364 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1365 -- create Bridge name=br0 | uuidfilt],
1366 [0], [<0>
1367 ], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
1368 ])
1369 AT_CHECK(
1370 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1371 -- --id=@br0 create Bridge name=br0 | uuidfilt],
1372 [0], [<0>
1373 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1374 ])
1375 AT_CHECK(
1376 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
1377 -- --id=@eth0_iface create Interface name=eth0 \
1378 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1379 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1380 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1381 -- set Open_vSwitch . bridges=@br0 | uuidfilt],
1382 [0], [<0>
1383 <1>
1384 <2>
1385 <3>
1386 ], [vsctl|WARN|row id "@eth0" was created but only a weak reference to it was inserted, so it will not actually appear in the database
1387 ])
1388 OVS_VSCTL_CLEANUP
1389 AT_CLEANUP
1390
1391 dnl This test really shows a bug -- "create" followed by "list" in
1392 dnl the same execution shows the wrong UUID on the "list" command.
1393 dnl The bug is documented in ovs-vsctl.8.
1394 AT_SETUP([created row UUID is wrong in same execution])
1395 AT_KEYWORDS([ovs-vsctl])
1396 OVS_VSCTL_SETUP
1397 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
1398 [0], [stdout])
1399 AT_CHECK([uuidfilt stdout], [0],
1400 [[<0>
1401 _uuid : <1>
1402 auto_attach : []
1403 controller : []
1404 datapath_id : []
1405 datapath_type : ""
1406 datapath_version : ""
1407 external_ids : {}
1408 fail_mode : []
1409 flood_vlans : []
1410 flow_tables : {}
1411 ipfix : []
1412 mcast_snooping_enable: false
1413 mirrors : []
1414 name : br0
1415 netflow : []
1416 other_config : {}
1417 ports : []
1418 protocols : []
1419 rstp_enable : false
1420 rstp_status : {}
1421 sflow : []
1422 status : {}
1423 stp_enable : false
1424 ]], [ignore])
1425 OVS_VSCTL_CLEANUP
1426 AT_CLEANUP
1427
1428 dnl This test will create a linux-htb QoS record that
1429 dnl points to a few queues and use it on a1 and a2 port.
1430 dnl It also destroys all records from Qos and Queue table.
1431 AT_SETUP([--all option on destroy command])
1432 AT_KEYWORDS([ovs-vsctl])
1433 OVS_VSCTL_SETUP
1434 AT_CHECK([RUN_OVS_VSCTL(
1435 [add-br a],
1436 [add-port a a1],
1437 [add-port a a2])])
1438 CHECK_BRIDGES([a, a, 0])
1439 CHECK_PORTS([a], [a1], [a2])
1440 CHECK_IFACES([a], [a1], [a2])
1441 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1442 [set Port a1 qos=@newqos],
1443 [set Port a2 qos=@newqos],
1444 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1445 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1446 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore])
1447 AT_CHECK([RUN_OVS_VSCTL(
1448 [--columns=other_config,type list Qos])], [0],
1449 [other_config : {max-rate="1000000000"}
1450 type : linux-htb
1451 ])
1452 AT_CHECK([RUN_OVS_VSCTL(
1453 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1454 [other_config : {max-rate="100000000", min-rate="100000000"}
1455 other_config : {min-rate="500000000"}
1456 ])
1457 AT_CHECK([RUN_OVS_VSCTL(
1458 [clear Port a1 qos],
1459 [clear Port a2 qos])])
1460 AT_CHECK([RUN_OVS_VSCTL(
1461 [--columns=qos list Port a1 a2])], [0],
1462 [[qos : []
1463
1464 qos : []
1465 ]])
1466 AT_CHECK([RUN_OVS_VSCTL(
1467 [--all destroy Qos])])
1468 AT_CHECK([RUN_OVS_VSCTL(
1469 [-- list Qos])])
1470 AT_CHECK([RUN_OVS_VSCTL(
1471 [--all destroy Queue])])
1472 AT_CHECK([RUN_OVS_VSCTL(
1473 [-- list Queue])])
1474 OVS_VSCTL_CLEANUP
1475 AT_CLEANUP
1476
1477 dnl ----------------------------------------------------------------------
1478 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1479
1480 AT_SETUP([add-port -- reserved names 1])
1481 OVS_VSWITCHD_START
1482
1483 # Test creating all reserved port names
1484 m4_foreach(
1485 [reserved_name],
1486 [[ovs-netdev],
1487 [ovs-dummy],
1488 [genev_sys],
1489 [gre_sys],
1490 [lisp_sys],
1491 [vxlan_sys]],
1492 [
1493 # Try creating the port
1494 cat >experr <<EOF
1495 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1496 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1497 EOF
1498 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1499 # Prevent race.
1500 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1501 # Detect the warning log message
1502 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1503 |bridge|WARN|could not create interface reserved_name, name is reserved
1504 ])
1505 # Delete the warning log message
1506 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1507 # Delete the port
1508 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1509 OVS_VSWITCHD_STOP
1510 AT_CLEANUP
1511
1512 AT_SETUP([add-port -- reserved names 2])
1513 # Creates all type of tunnel ports
1514 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1515 options:remote_ip=1.1.1.1 ofport_request=1\
1516 -- add-port br0 p3 -- set Interface p3 type=lisp \
1517 options:remote_ip=2.2.2.2 ofport_request=3 \
1518 -- add-port br0 p4 -- set Interface p4 type=vxlan \
1519 options:remote_ip=2.2.2.2 ofport_request=4 \
1520 -- add-port br0 p5 -- set Interface p5 type=geneve \
1521 options:remote_ip=2.2.2.2 ofport_request=5])
1522
1523 # Test creating all reserved tunnel port names
1524 m4_foreach(
1525 [reserved_name],
1526 [[genev_sys],
1527 [gre_sys],
1528 [lisp_sys],
1529 [vxlan_sys]],
1530 [
1531 # Try creating the port
1532 cat >experr <<EOF
1533 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1534 ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1535 EOF
1536 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
1537 # Prevent race.
1538 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1539 # Detect the warning log message
1540 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1541 |bridge|WARN|could not create interface reserved_name, name is reserved
1542 ])
1543 # Delete the warning log message
1544 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1545 # Delete the port
1546 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1547 OVS_VSWITCHD_STOP
1548 AT_CLEANUP
1549
1550 AT_SETUP([naming in db commands])
1551 AT_KEYWORDS([ovs-vsctl])
1552 OVS_VSCTL_SETUP
1553
1554 dnl First check that the database commands can refer to row by database UUID.
1555 AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1556 uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
1557 AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], [br0
1558 ])
1559
1560 dnl Next check that, if a database row is given a name that has the same form
1561 dnl as the database UUIDs, the name can still be used to refer to rows.
1562 AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1563 AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1564 ])
1565
1566 OVS_VSCTL_CLEANUP
1567 AT_CLEANUP
1568
1569 AT_SETUP([bootstrap ca cert])
1570 AT_KEYWORDS([ovs-vsctl ssl])
1571 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1572 PKIDIR=`pwd`
1573 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1574 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req ovsdbserver && $OVS_PKI self-sign ovsdbserver], [0], [ignore], [ignore])
1575
1576 dnl Create database.
1577 OVSDB_INIT([conf.db])
1578 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --private-key=$PKIDIR/ovsdbserver-privkey.pem --certificate=$PKIDIR/ovsdbserver-cert.pem --ca-cert=$PKIDIR/pki/switchca/cacert.pem --remote=pssl:0:127.0.0.1 --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1579 on_exit "kill `cat ovsdb-server.pid`"
1580 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1581
1582 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1583 AT_CHECK([ovs-vsctl -t 5 --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem show], [1], [ignore], [ignore])
1584
1585 # If the bootstrap was successful, the following file should exist.
1586 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1587
1588 # After bootstrap, the connection should be successful.
1589 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem add-br br0], [0])
1590 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem list-br], [0], [br0
1591 ])
1592
1593 OVS_VSCTL_CLEANUP
1594 AT_CLEANUP
1595
1596 AT_SETUP([peer ca cert])
1597 AT_KEYWORDS([ovs-vsctl ssl])
1598 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1599 PKIDIR=`pwd`
1600 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1601 AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req+sign ovsdbserver controller], [0], [ignore], [ignore])
1602
1603 dnl Create database.
1604 OVSDB_INIT([conf.db])
1605 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --private-key=$PKIDIR/ovsdbserver-privkey.pem --certificate=$PKIDIR/ovsdbserver-cert.pem --ca-cert=$PKIDIR/pki/switchca/cacert.pem --peer-ca-cert=$PKIDIR/pki/controllerca/cacert.pem --remote=pssl:0:127.0.0.1 --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1606 on_exit "kill `cat ovsdb-server.pid`"
1607 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1608
1609 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1610 AT_CHECK([ovs-vsctl -t 5 --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem show], [1], [ignore], [ignore])
1611
1612 # If the bootstrap was successful, the following file should exist.
1613 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1614
1615 # After bootstrap, the connection should be successful.
1616 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem add-br br0], [0])
1617 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem list-br], [0], [br0
1618 ])
1619
1620 OVS_VSCTL_CLEANUP
1621 AT_CLEANUP
1622
1623 AT_SETUP([TLS server name indication (SNI)])
1624 AT_KEYWORDS([ovsdb server positive ssl tls sni])
1625 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1626 AT_SKIP_IF([test "$OPENSSL_SUPPORTS_SNI" = no])
1627 AT_SKIP_IF([test "$HAVE_UNBOUND" = no])
1628 OVSDB_INIT([conf.db])
1629 PKIDIR=$abs_top_builddir/tests
1630 AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile --private-key=$PKIDIR/testpki-privkey2.pem --certificate=$PKIDIR/testpki-cert2.pem --ca-cert=$PKIDIR/testpki-cacert.pem --remote=pssl:0:127.0.0.1 -vPATTERN:file:%m -vstream_ssl conf.db], [0], [ignore], [ignore])
1631 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1632
1633 AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:localhost:$SSL_PORT --private-key=$PKIDIR/testpki-privkey.pem --certificate=$PKIDIR/testpki-cert.pem --bootstrap-ca-cert=$PKIDIR/testpki-cacert.pem add-br br0])
1634
1635 AT_CAPTURE_FILE([ovsdb-server.log])
1636 AT_CHECK([grep "server name" ovsdb-server.log], [0],
1637 [connection indicated server name localhost
1638 ])
1639
1640 OVS_VSCTL_CLEANUP
1641 AT_CLEANUP