netdev-dpdk: fix mbuf leaks
[cascardo/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="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
8
9 dnl OVS_VSCTL_CLEANUP
10 dnl
11 dnl Kills off the database server.
12 m4_define([OVS_VSCTL_CLEANUP], [OVSDB_SERVER_SHUTDOWN])
13
14 dnl RUN_OVS_VSCTL(COMMAND, ...)
15 dnl
16 dnl Executes each ovs-vsctl COMMAND.
17 m4_define([RUN_OVS_VSCTL],
18   [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket command
19 ])])
20 m4_define([RUN_OVS_VSCTL_ONELINE],
21   [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket --oneline -- command
22 ])])
23
24 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
25 dnl
26 dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
27 m4_define([RUN_OVS_VSCTL_TOGETHER],
28   [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket --oneline dnl
29 m4_foreach([command], [$@], [ -- command])])
30
31 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
32 dnl
33 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
34 dnl which must be in alphabetical order.  Also checks that each BRIDGE has the
35 dnl specified PARENT and is on the given VLAN.
36 m4_define([_CHECK_BRIDGE],
37   [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
38 ], [], [OVS_VSCTL_CLEANUP])
39
40    # Check br-to-vlan, without --oneline.
41    AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
42 ], [], [OVS_VSCTL_CLEANUP])
43    # Check br-to-vlan, with --oneline.
44    # (This particular test is interesting with --oneline because it returns
45    # an integer instead of a string and that can cause type mismatches inside
46    # python if not done carefully.)
47    AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
48 ], [], [OVS_VSCTL_CLEANUP])
49
50    # Check multiple queries in a single run.
51    AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
52 [$2
53 $3
54 ], [], [OVS_VSCTL_CLEANUP])])
55 m4_define([CHECK_BRIDGES],
56   [dnl Check that the bridges appear on list-br, without --oneline.
57    AT_CHECK(
58      [RUN_OVS_VSCTL([list-br])],
59      [0],
60      [m4_foreach([brinfo], [$@], [m4_car(brinfo)
61 ])],
62      [],
63      [OVS_VSCTL_CLEANUP])
64
65    dnl Check that the bridges appear on list-br, with --oneline.
66    AT_CHECK(
67      [RUN_OVS_VSCTL_ONELINE([list-br])],
68      [0],
69      [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
70 ],
71      [],
72      [OVS_VSCTL_CLEANUP])
73
74    dnl Check that each bridge exists according to br-exists and that
75    dnl a bridge that should not exist does not.
76    m4_foreach([brinfo], [$@],
77               [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])], [0], [],
78                         [], [OVS_VSCTL_CLEANUP])])
79    AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2], [], [],
80             [OVS_VSCTL_CLEANUP])
81
82    dnl Check that each bridge has the expected parent and VLAN.
83    m4_map([_CHECK_BRIDGE], [$@])])
84
85 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
86 dnl
87 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
88 dnl list of ports, which must be in alphabetical order.  Also checks
89 dnl that "ovs-vsctl port-to-br" reports that each port is
90 dnl in BRIDGE.
91 m4_define([CHECK_PORTS],
92   [dnl Check ports without --oneline.
93    AT_CHECK(
94      [RUN_OVS_VSCTL([list-ports $1])],
95      [0],
96      [m4_foreach([port], m4_cdr($@), [port
97 ])],
98      [],
99      [OVS_VSCTL_CLEANUP])
100
101    dnl Check ports with --oneline.
102    AT_CHECK(
103      [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
104      [0],
105      [m4_join([\n], m4_shift($@))
106 ],
107      [],
108      [OVS_VSCTL_CLEANUP])
109    AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
110             [ovs-vsctl: no port named $1
111 ],
112             [OVS_VSCTL_CLEANUP])
113    m4_foreach(
114      [port], m4_cdr($@),
115      [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
116 ], [], [OVS_VSCTL_CLEANUP])])])
117
118 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
119 dnl
120 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
121 dnl list of ifaces, which must be in alphabetical order.  Also checks
122 dnl that "ovs-vsctl iface-to-br" reports that each interface is
123 dnl in BRIDGE.
124 m4_define([CHECK_IFACES],
125   [AT_CHECK(
126      [RUN_OVS_VSCTL([list-ifaces $1])],
127      [0],
128      [m4_foreach([iface], m4_cdr($@), [iface
129 ])],
130      [],
131      [OVS_VSCTL_CLEANUP])
132    AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
133             [ovs-vsctl: no interface named $1
134 ],
135             [OVS_VSCTL_CLEANUP])
136    m4_foreach(
137      [iface], m4_cdr($@),
138      [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
139 ],
140                [], [OVS_VSCTL_CLEANUP])])])
141
142 dnl ----------------------------------------------------------------------
143 AT_BANNER([ovs-vsctl unit tests])
144
145 AT_SETUP([ovs-vsctl connection retry])
146 dnl Without --retry, there should be no retry for active connections.
147 AT_CHECK([ovs-vsctl --db=unix:foo --timeout=10 -vreconnect:emer -- init],
148   [1], [], [stderr])
149 AT_CHECK([[sed 's/([^()]*)/(...reason...)/' stderr]], [0],
150   [ovs-vsctl: unix:foo: database connection failed (...reason...)
151 ])
152
153 dnl With --retry, we should retry for active connections.
154 AT_CHECK(
155   [ovs-vsctl --db=unix:foo --timeout=1 --retry -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
156    echo $? > status],
157   [0], [], [stderr])
158 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
159 ])
160 if test "$IS_WIN32" = "yes"; then
161   AT_CHECK([cat status], [0], [3
162 ])
163 else
164   # 128 + SIGALRM
165   AT_CHECK([cat status], [0], [142
166 ])
167 fi
168
169 dnl Without --retry, we should retry for passive connections.
170 AT_CHECK(
171   [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
172    echo $? > status],
173   [0], [], [stderr])
174 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
175 ])
176 if test "$IS_WIN32" = "yes"; then
177   AT_CHECK([cat status], [0], [3
178 ])
179 else
180   # 128 + SIGALRM
181   AT_CHECK([cat status], [0], [142
182 ])
183 fi
184 AT_CLEANUP
185
186 dnl ----------------------------------------------------------------------
187 AT_BANNER([ovs-vsctl unit tests -- real bridges])
188
189 AT_SETUP([add-br a])
190 AT_KEYWORDS([ovs-vsctl])
191 OVS_VSCTL_SETUP
192 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
193 CHECK_BRIDGES([a, a, 0])
194 CHECK_PORTS([a])
195 CHECK_IFACES([a])
196 OVS_VSCTL_CLEANUP
197 AT_CLEANUP
198
199 AT_SETUP([add-br a, add-br a])
200 AT_KEYWORDS([ovs-vsctl])
201 OVS_VSCTL_SETUP
202 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
203 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
204   [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
205 ], [OVS_VSCTL_CLEANUP])
206 OVS_VSCTL_CLEANUP
207 AT_CLEANUP
208
209 AT_SETUP([add-br a, add-br b])
210 AT_KEYWORDS([ovs-vsctl])
211 OVS_VSCTL_SETUP
212 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
213          [OVS_VSCTL_CLEANUP])
214 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
215   [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
216 ],
217   [OVS_VSCTL_CLEANUP])
218 CHECK_BRIDGES([a, a, 0], [b, b, 0])
219 CHECK_PORTS([a])
220 CHECK_IFACES([a])
221 CHECK_PORTS([b])
222 CHECK_IFACES([b])
223 OVS_VSCTL_CLEANUP
224 AT_CLEANUP
225
226 AT_SETUP([add-br a, add-br b, del-br a])
227 AT_KEYWORDS([ovs-vsctl])
228 OVS_VSCTL_SETUP
229 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
230          [OVS_VSCTL_CLEANUP])
231 CHECK_BRIDGES([b, b, 0])
232 CHECK_PORTS([b])
233 CHECK_IFACES([b])
234 OVS_VSCTL_CLEANUP
235 AT_CLEANUP
236
237 AT_SETUP([add-br a, del-br a, add-br a])
238 AT_KEYWORDS([ovs-vsctl])
239 OVS_VSCTL_SETUP
240 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
241   [add-br a],
242   [del-br a],
243   [add-br a],
244   [set Interface a other_config:key=value],
245   [get Interface a other_config:key])], [0], [
246
247
248
249 value
250 ], [], [OVS_VSCTL_CLEANUP])
251 CHECK_BRIDGES([a, a, 0])
252 CHECK_PORTS([a])
253 CHECK_IFACES([a])
254 OVS_VSCTL_CLEANUP
255 AT_CLEANUP
256
257 AT_SETUP([add-br a, add-port a a1, add-port a a2])
258 AT_KEYWORDS([ovs-vsctl])
259 OVS_VSCTL_SETUP
260 AT_CHECK([RUN_OVS_VSCTL(
261    [add-br a],
262    [--if-exists del-br b],
263    [add-port a a1],
264    [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
265 CHECK_BRIDGES([a, a, 0])
266 CHECK_PORTS([a], [a1], [a2])
267 CHECK_IFACES([a], [a1], [a2])
268 OVS_VSCTL_CLEANUP
269 AT_CLEANUP
270
271 AT_SETUP([add-br a, add-port a a1, add-port a a1])
272 AT_KEYWORDS([ovs-vsctl])
273 OVS_VSCTL_SETUP
274 AT_CHECK([RUN_OVS_VSCTL(
275    [add-br a],
276    [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
277 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
278   [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
279 ], [OVS_VSCTL_CLEANUP])
280 OVS_VSCTL_CLEANUP
281 AT_CLEANUP
282
283 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
284 AT_KEYWORDS([ovs-vsctl])
285 OVS_VSCTL_SETUP
286 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
287    [add-br a],
288    [add-br b],
289    [add-port a a1],
290    [add-port b b1],
291    [--if-exists del-port b b2],
292    [del-br a])], [0], [
293
294
295
296
297
298 ], [], [OVS_VSCTL_CLEANUP])
299 CHECK_BRIDGES([b, b, 0])
300 CHECK_PORTS([b], [b1])
301 CHECK_IFACES([b], [b1])
302 OVS_VSCTL_CLEANUP
303 AT_CLEANUP
304
305 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
306 AT_KEYWORDS([ovs-vsctl])
307 OVS_VSCTL_SETUP
308 AT_CHECK([RUN_OVS_VSCTL(
309    [add-br a],
310    [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
311 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [],
312   [OVS_VSCTL_CLEANUP])
313 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
314   [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
315 ],
316   [OVS_VSCTL_CLEANUP])
317 CHECK_BRIDGES([a, a, 0])
318 CHECK_PORTS([a], [bond0])
319 CHECK_IFACES([a], [a1], [a2], [a3])
320 OVS_VSCTL_CLEANUP
321 AT_CLEANUP
322
323 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
324 AT_KEYWORDS([ovs-vsctl])
325 OVS_VSCTL_SETUP
326 AT_CHECK([RUN_OVS_VSCTL(
327   [add-br a],
328   [add-br b],
329   [add-port a a1 tag=9],
330   [get port a1 tag],
331   [--may-exist add-port b b1],
332   [del-port a a1])], [0], [9
333 ], [], [OVS_VSCTL_CLEANUP])
334 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],
335   [OVS_VSCTL_CLEANUP])
336 AT_CHECK([RUN_OVS_VSCTL([del-port a])], [1], [],
337   [ovs-vsctl: cannot delete port a because it is the local port for bridge a (deleting this port requires deleting the entire bridge)
338 ],
339   [OVS_VSCTL_CLEANUP])
340 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-port a])], [0], [], [],
341   [OVS_VSCTL_CLEANUP])
342 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
343   [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
344 ],
345   [OVS_VSCTL_CLEANUP])
346 CHECK_BRIDGES([a, a, 0], [b, b, 0])
347 CHECK_PORTS([a])
348 CHECK_IFACES([a])
349 CHECK_PORTS([b], [b1])
350 CHECK_IFACES([b], [b1])
351 OVS_VSCTL_CLEANUP
352 AT_CLEANUP
353
354 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
355 AT_KEYWORDS([ovs-vsctl])
356 OVS_VSCTL_SETUP
357 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
358   [add-br a],
359   [add-bond a bond0 a1 a2 a3 tag=9],
360   [get Port bond0 tag],
361   [del-port bond0])], [0], [
362
363 9
364
365 ], [], [OVS_VSCTL_CLEANUP])
366 CHECK_BRIDGES([a, a, 0])
367 CHECK_PORTS([a])
368 OVS_VSCTL_CLEANUP
369 AT_CLEANUP
370
371 AT_SETUP([external IDs])
372 AT_KEYWORDS([ovs-vsctl])
373 OVS_VSCTL_SETUP
374 AT_CHECK([RUN_OVS_VSCTL_ONELINE(
375   [add-br a],
376   [add-port a a1],
377   [add-bond a bond0 a2 a3],
378   [br-set-external-id a key0 value0],
379   [set port a1 external-ids:key1=value1],
380   [set interface a2 external-ids:key2=value2],
381   [set interface a2 external-ids:key3=value3],
382   [set interface a3 external-ids:key4=value4],
383   [br-get-external-id a],
384   [br-get-external-id a key0],
385   [br-get-external-id a key1],
386   [br-set-external-id a key0 othervalue],
387   [br-get-external-id a],
388   [br-set-external-id a key0],
389   [br-get-external-id a],
390   [get port a1 external-ids],
391   [get interface a2 external-ids],
392   [get interface a3 external-ids])], [0], [
393
394
395
396
397
398
399
400 key0=value0
401 value0
402
403
404 key0=othervalue
405
406
407 {"key1"="value1"}
408 {"key2"="value2", "key3"="value3"}
409 {"key4"="value4"}
410 ], [], [OVS_VSCTL_CLEANUP])
411 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
412   [br-get-external-id a],
413   [get port a1 external-ids],
414   [get interface a2 external-ids],
415   [get interface a3 external-ids])], [0],
416 [
417 {"key1"="value1"}
418 {"key2"="value2", "key3"="value3"}
419 {"key4"="value4"}
420 ], [], [OVS_VSCTL_CLEANUP])
421 CHECK_BRIDGES([a, a, 0])
422 CHECK_PORTS([a], [a1], [bond0])
423 CHECK_IFACES([a], [a1], [a2], [a3])
424 OVS_VSCTL_CLEANUP
425 AT_CLEANUP
426
427 AT_SETUP([controllers])
428 AT_KEYWORDS([controller ovs-vsctl])
429 OVS_VSCTL_SETUP
430 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
431   [add-br br0],
432
433   [get-controller br0],
434   [set-controller br0 tcp:4.5.6.7],
435   [get-controller br0],
436
437   [del-controller br0],
438   [get-controller br0],
439
440   [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
441   [get-controller br0])], [0], [
442
443
444 tcp:4.5.6.7
445
446
447
448 tcp:5.4.3.2\ntcp:8.9.10.11
449 ], [], [OVS_VSCTL_CLEANUP])
450 OVS_VSCTL_CLEANUP
451 AT_CLEANUP
452
453 dnl ----------------------------------------------------------------------
454 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
455 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
456   [AT_CHECK(
457      [RUN_OVS_VSCTL(
458         [add-br xenbr0],
459         [--may-exist add-br xenbr0],
460         [add-port xenbr0 eth0],
461         [--may-exist add-port xenbr0 eth0],
462         [add-br xapi1 xenbr0 $1],
463         [--may-exist add-br xapi1 xenbr0 $1],
464         [add-port xapi1 eth0.$1])],
465      [0], [], [], [OVS_VSCTL_CLEANUP])])
466
467 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
468 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
469 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
470
471 AT_SETUP([simple fake bridge (VLAN $1)])
472 AT_KEYWORDS([ovs-vsctl fake-bridge])
473 OVS_VSCTL_SETUP
474 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
475 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
476   [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
477 ], [OVS_VSCTL_CLEANUP])
478 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
479   [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
480 ], [OVS_VSCTL_CLEANUP])
481 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
482   [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
483 ], [OVS_VSCTL_CLEANUP])
484 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br dup xenbr0 $1])], [1], [],
485   [ovs-vsctl: bridge xenbr0 already has a child VLAN bridge xapi1 on VLAN $1
486 ], [OVS_VSCTL_CLEANUP])
487 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
488 CHECK_PORTS([xenbr0], [eth0])
489 CHECK_IFACES([xenbr0], [eth0])
490 CHECK_PORTS([xapi1], [eth0.$1])
491 CHECK_IFACES([xapi1], [eth0.$1])
492 OVS_VSCTL_CLEANUP
493 AT_CLEANUP
494
495 AT_SETUP([list bridges -- real and fake (VLAN $1)])
496 AT_KEYWORDS([ovs-vsctl fake-bridge])
497 OVS_VSCTL_SETUP
498 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
499 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
500   [xapi1\nxenbr0
501 ], [], [OVS_VSCTL_CLEANUP])
502 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
503   [xenbr0
504 ], [], [OVS_VSCTL_CLEANUP])
505 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
506   [xapi1
507 ], [], [OVS_VSCTL_CLEANUP])
508 OVS_VSCTL_CLEANUP
509 AT_CLEANUP
510
511 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
512 AT_KEYWORDS([ovs-vsctl fake-bridge])
513 OVS_VSCTL_SETUP
514 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
515 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
516 CHECK_BRIDGES([xenbr0, xenbr0, 0])
517 CHECK_PORTS([xenbr0], [eth0])
518 CHECK_IFACES([xenbr0], [eth0])
519 OVS_VSCTL_CLEANUP
520 AT_CLEANUP
521
522 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
523 AT_KEYWORDS([ovs-vsctl fake-bridge])
524 OVS_VSCTL_SETUP
525 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
526 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
527 CHECK_BRIDGES
528 OVS_VSCTL_CLEANUP
529 AT_CLEANUP
530
531 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
532 AT_KEYWORDS([ovs-vsctl fake-bridge])
533 OVS_VSCTL_SETUP
534 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
535 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
536   [br-set-external-id xenbr0 key0 value0],
537   [br-set-external-id xapi1 key1 value1],
538   [br-get-external-id xenbr0],
539   [br-get-external-id xenbr0 key0],
540   [br-get-external-id xapi1],
541   [br-get-external-id xapi1 key1])], [0], [
542
543 key0=value0
544 value0
545 key1=value1
546 value1
547 ], [], [OVS_VSCTL_CLEANUP])
548 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
549 CHECK_PORTS([xenbr0], [eth0])
550 CHECK_IFACES([xenbr0], [eth0])
551 CHECK_PORTS([xapi1], [eth0.$1])
552 CHECK_IFACES([xapi1], [eth0.$1])
553 OVS_VSCTL_CLEANUP
554 AT_CLEANUP
555 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
556
557 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
558 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
559
560 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
561 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
562   [AT_CHECK(
563      [RUN_OVS_VSCTL(
564         [add-br xapi1],
565         [add-bond xapi1 bond0 eth0 eth1],
566         [add-br xapi2 xapi1 $1],
567         [add-port xapi2 bond0.$1])],
568      [0], [], [], [OVS_VSCTL_CLEANUP])])
569
570 AT_SETUP([fake bridge on bond])
571 AT_KEYWORDS([ovs-vsctl fake-bridge])
572 OVS_VSCTL_SETUP
573 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
574 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
575 CHECK_PORTS([xapi1], [bond0])
576 CHECK_IFACES([xapi1], [eth0], [eth1])
577 CHECK_PORTS([xapi2], [bond0.11])
578 CHECK_IFACES([xapi2], [bond0.11])
579 OVS_VSCTL_CLEANUP
580 AT_CLEANUP
581
582 AT_SETUP([fake bridge on bond + del-br fake bridge])
583 AT_KEYWORDS([ovs-vsctl fake-bridge])
584 OVS_VSCTL_SETUP
585 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
586 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
587 ], [], [OVS_VSCTL_CLEANUP])
588 CHECK_BRIDGES([xapi1, xapi1, 0])
589 CHECK_PORTS([xapi1], [bond0])
590 CHECK_IFACES([xapi1], [eth0], [eth1])
591 OVS_VSCTL_CLEANUP
592 AT_CLEANUP
593
594 AT_SETUP([fake bridge on bond + del-br real bridge])
595 AT_KEYWORDS([ovs-vsctl fake-bridge])
596 OVS_VSCTL_SETUP
597 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
598 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
599 CHECK_BRIDGES
600 OVS_VSCTL_CLEANUP
601 AT_CLEANUP
602
603 dnl ----------------------------------------------------------------------
604 AT_BANNER([ovs-vsctl unit tests -- manager commands])
605
606 AT_SETUP([managers])
607 AT_KEYWORDS([manager ovs-vsctl])
608 OVS_VSCTL_SETUP
609 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
610   [del-manager],
611   [get-manager],
612   [set-manager tcp:4.5.6.7],
613   [get-manager],
614   [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
615   [get-manager],
616   [del-manager],
617   [get-manager])], [0], [
618
619
620 tcp:4.5.6.7
621
622 tcp:5.4.3.2\ntcp:8.9.10.11
623
624
625 ], [], [OVS_VSCTL_CLEANUP])
626 OVS_VSCTL_CLEANUP
627 AT_CLEANUP
628
629 dnl ----------------------------------------------------------------------
630 AT_BANNER([ovs-vsctl unit tests -- database commands])
631
632 AT_SETUP([database commands -- positive checks])
633 AT_KEYWORDS([ovs-vsctl])
634 OVS_VSCTL_SETUP
635 AT_CHECK(
636   [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
637                           [set b br123 name=br0],
638                           [set o . bridges=@br0])],
639   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
640 cp stdout out1
641 AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
642   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
643 cp stdout out2
644 AT_CHECK([${PERL} $srcdir/uuidfilt.pl out1 out2], [0],
645   [[<0>
646
647
648 _uuid               : <0>
649 auto_attach         : []
650 controller          : []
651 datapath_id         : []
652 datapath_type       : ""
653 datapath_version    : ""
654 external_ids        : {}
655 fail_mode           : []
656 flood_vlans         : []
657 flow_tables         : {}
658 ipfix               : []
659 mcast_snooping_enable: false
660 mirrors             : []
661 name                : "br0"
662 netflow             : []
663 other_config        : {}
664 ports               : []
665 protocols           : []
666 rstp_enable         : false
667 rstp_status         : {}
668 sflow               : []
669 status              : {}
670 stp_enable          : false
671 <0>
672 ]], [ignore], [test ! -e pid || kill `cat pid`])
673 AT_CHECK(
674   [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
675   [0],
676   [[fail_mode           : []
677 name                : "br0"
678 datapath_type       : ""
679 ]], [ignore], [test ! -e pid || kill `cat pid`])
680 AT_CHECK(
681   [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
682   [0],
683   [[fail_mode           : []
684 name                : "br0"
685 datapath_type       : ""
686 ]], [ignore], [test ! -e pid || kill `cat pid`])
687 AT_CHECK([
688   RUN_OVS_VSCTL_TOGETHER([--id=@br1 create bridge name=br1 datapath_type="foo"],
689                          [--id=@br2 create bridge name=br2 external-ids:bar=quux],
690                          [add o . bridges @br1 @br2])],
691   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
692 AT_CHECK(
693   [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
694   [ignore], [test ! -e pid || kill `cat pid`])
695 AT_CHECK([sed -n '/./p' stdout | sort], [0],
696   [[name                : "br0"
697 name                : "br2"
698 ]])
699 AT_CHECK(
700   [RUN_OVS_VSCTL(
701     [set bridge br0 \
702       'other_config:datapath_id="0123456789ab"' \
703       'other_config:hwaddr="00:11:22:33:44:55"' \
704       'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
705      add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
706   [0], [], [], [OVS_VSCTL_CLEANUP])
707 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
708   [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
709 ], [], [OVS_VSCTL_CLEANUP])
710 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
711   [0], ["00:11:22:33:44:55"
712
713 ], [], [OVS_VSCTL_CLEANUP])
714 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
715   [0], [{datapath_id="0123456789ab"}
716 ], [], [OVS_VSCTL_CLEANUP])
717 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
718   [0], [{}
719 ], [], [OVS_VSCTL_CLEANUP])
720 AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
721   [0], [{}
722 ], [], [OVS_VSCTL_CLEANUP])
723 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
724                                  [destroy bridge br1],
725                                  [destroy bridge br2],
726                                  [clear o . bridges])],
727   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
728 AT_CHECK([RUN_OVS_VSCTL([list bridge])],
729   [0], [], [], [OVS_VSCTL_CLEANUP])
730 AT_CHECK([RUN_OVS_VSCTL([--if-exists get bridge x datapath_id])],
731   [0], [], [], [OVS_VSCTL_CLEANUP])
732 AT_CHECK([RUN_OVS_VSCTL([--if-exists list bridge x])],
733   [0], [], [], [OVS_VSCTL_CLEANUP])
734 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])],
735   [0], [], [], [OVS_VSCTL_CLEANUP])
736 AT_CHECK(
737   [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])],
738   [0], [], [], [OVS_VSCTL_CLEANUP])
739 AT_CHECK(
740   [RUN_OVS_VSCTL([--if-exists clear netflow x targets])],
741   [0], [], [], [OVS_VSCTL_CLEANUP])
742 OVS_VSCTL_CLEANUP
743 AT_CLEANUP
744
745 AT_SETUP([database commands -- negative checks])
746 AT_KEYWORDS([ovs-vsctl])
747 OVS_VSCTL_SETUP
748
749 AT_CHECK([ovs-vsctl --may-exist],
750   [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
751 ], [OVS_VSCTL_CLEANUP])
752 AT_CHECK([ovs-vsctl --may-exist --],
753   [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
754 ], [OVS_VSCTL_CLEANUP])
755 AT_CHECK([ovs-vsctl -- --may-exist],
756   [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
757 ], [OVS_VSCTL_CLEANUP])
758
759 AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
760   [0], [ignore], [], [OVS_VSCTL_CLEANUP])
761 AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
762   [0], [ignore], [], [OVS_VSCTL_CLEANUP])
763 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
764   [0], [ignore], [], [OVS_VSCTL_CLEANUP])
765 AT_CHECK([
766     RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
767                            [set bridge br0 netflow=@n])],
768   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
769 cp stdout netflow-uuid
770 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])],
771   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
772 AT_CHECK([${PERL} $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
773   [[<0>
774
775 _uuid               : <0>
776 active_timeout      : 0
777 add_id_to_interface : false
778 engine_id           : []
779 engine_type         : []
780 external_ids        : {}
781 targets             : ["1.2.3.4:567"]
782 ]], [ignore], [test ! -e pid || kill `cat pid`])
783 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
784   [1], [], [ovs-vsctl: unknown table "interx"
785 ], [OVS_VSCTL_CLEANUP])
786 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
787   [1], [], [ovs-vsctl: no row "x" in table Bridge
788 ], [OVS_VSCTL_CLEANUP])
789 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
790   [1], [], [ovs-vsctl: no row "x" in table Bridge
791 ], [OVS_VSCTL_CLEANUP])
792 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
793   [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
794 ], [OVS_VSCTL_CLEANUP])
795 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
796   [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
797 ], [OVS_VSCTL_CLEANUP])
798 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
799   [1], [], [ovs-vsctl: :y=z: missing column name
800 ], [OVS_VSCTL_CLEANUP])
801 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
802   [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
803 ], [OVS_VSCTL_CLEANUP])
804 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
805   [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
806 ], [OVS_VSCTL_CLEANUP])
807 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
808   [1], [], [ovs-vsctl: no row "x" in table Controller
809 ], [OVS_VSCTL_CLEANUP])
810 AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
811   [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
812 ], [OVS_VSCTL_CLEANUP])
813 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
814   [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
815 ], [OVS_VSCTL_CLEANUP])
816 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
817   [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
818 ], [OVS_VSCTL_CLEANUP])
819 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
820   [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
821 ], [OVS_VSCTL_CLEANUP])
822 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
823   [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
824 ], [OVS_VSCTL_CLEANUP])
825 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
826   [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
827 ], [OVS_VSCTL_CLEANUP])
828 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
829   [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
830 ]], [OVS_VSCTL_CLEANUP])
831 AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
832   [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
833 ], [OVS_VSCTL_CLEANUP])
834 AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
835   [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
836 ], [OVS_VSCTL_CLEANUP])
837 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
838   [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
839 ], [OVS_VSCTL_CLEANUP])
840 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
841   [1], [], [ovs-vsctl: no row "x" in table NetFlow
842 ], [OVS_VSCTL_CLEANUP])
843 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
844   [1], [], [ovs-vsctl: no row "x" in table NetFlow
845 ], [OVS_VSCTL_CLEANUP])
846 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
847   [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
848 ], [OVS_VSCTL_CLEANUP])
849 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
850   [1], [], [ovs-vsctl: no row "br2" in table Bridge
851 ], [OVS_VSCTL_CLEANUP])
852 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
853   [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
854 ], [OVS_VSCTL_CLEANUP])
855 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
856   [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
857 ], [OVS_VSCTL_CLEANUP])
858 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
859   [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
860 ], [OVS_VSCTL_CLEANUP])
861 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
862   [1], [], [ovs-vsctl: "true" is not a valid integer
863 ], [OVS_VSCTL_CLEANUP])
864 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
865   [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
866 ], [OVS_VSCTL_CLEANUP])
867 OVS_VSCTL_CLEANUP
868 AT_CLEANUP
869
870 AT_SETUP([database commands -- conditions])
871 AT_KEYWORDS([ovs-vsctl])
872 on_exit 'kill `cat pid`'
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], [test ! -e pid || kill `cat pid`])
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 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [dnl
1242 ovs-vsctl: Error detected while setting up 'reserved_name'.  See ovs-vswitchd log for details.
1243 ])
1244 # Prevent race.
1245 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1246 # Detect the warning log message
1247 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1248 |bridge|WARN|could not create interface reserved_name, name is reserved
1249 ])
1250 # Delete the warning log message
1251 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1252 # Delete the port
1253 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1254 OVS_VSWITCHD_STOP
1255 AT_CLEANUP
1256
1257 AT_SETUP([add-port -- reserved names 2])
1258 # Creates all type of tunnel ports
1259 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1260                     options:remote_ip=1.1.1.1 ofport_request=1\
1261                     -- add-port br0 p3 -- set Interface p3 type=lisp \
1262                     options:remote_ip=2.2.2.2 ofport_request=3 \
1263                     -- add-port br0 p4 -- set Interface p4 type=vxlan \
1264                     options:remote_ip=2.2.2.2 ofport_request=4 \
1265                     -- add-port br0 p5 -- set Interface p5 type=geneve \
1266                     options:remote_ip=2.2.2.2 ofport_request=5])
1267
1268 # Test creating all reserved tunnel port names
1269 m4_foreach(
1270 [reserved_name],
1271 [[genev_sys],
1272 [gre_sys],
1273 [lisp_sys],
1274 [vxlan_sys]],
1275 [
1276 # Try creating the port
1277 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [dnl
1278 ovs-vsctl: Error detected while setting up 'reserved_name'.  See ovs-vswitchd log for details.
1279 ])
1280 # Prevent race.
1281 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1282 # Detect the warning log message
1283 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1284 |bridge|WARN|could not create interface reserved_name, name is reserved
1285 ])
1286 # Delete the warning log message
1287 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1288 # Delete the port
1289 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1290 OVS_VSWITCHD_STOP
1291 AT_CLEANUP
1292
1293 AT_SETUP([naming in db commands])
1294 OVS_VSCTL_SETUP
1295
1296 dnl First check that the database commands can refer to row by database UUID.
1297 AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1298 uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
1299 AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], ["br0"
1300 ])
1301
1302 dnl Next check that, if a database row is given a name that has the same form
1303 dnl as the database UUIDs, the name can still be used to refer to rows.
1304 AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1305 AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1306 ])
1307
1308 OVS_VSCTL_CLEANUP
1309 AT_CLEANUP
1310
1311 AT_SETUP([bootstrap ca cert])
1312 AT_KEYWORDS([ovs-vsctl ssl])
1313 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1314 PKIDIR=`pwd`
1315 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1316 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])
1317
1318 dnl Create database.
1319 OVSDB_INIT([conf.db])
1320 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --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 --unixctl="`pwd`"/unixctl --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1321 on_exit "kill `cat pid`"
1322 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1323
1324 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1325 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])
1326
1327 # If the bootstrap was successful, the following file should exist.
1328 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1329
1330 # After bootstrap, the connection should be successful.
1331 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])
1332 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
1333 ])
1334
1335 OVSDB_SERVER_SHUTDOWN
1336 AT_CLEANUP
1337
1338 AT_SETUP([peer ca cert])
1339 AT_KEYWORDS([ovs-vsctl ssl])
1340 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1341 PKIDIR=`pwd`
1342 OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
1343 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])
1344
1345 dnl Create database.
1346 OVSDB_INIT([conf.db])
1347 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --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 --unixctl="`pwd`"/unixctl --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1348 on_exit "kill `cat pid`"
1349 PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1350
1351 # During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1352 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])
1353
1354 # If the bootstrap was successful, the following file should exist.
1355 OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1356
1357 # After bootstrap, the connection should be successful.
1358 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])
1359 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
1360 ])
1361
1362 OVSDB_SERVER_SHUTDOWN
1363 AT_CLEANUP