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