tests: Always make ovsdb-server exit cleanly, to better find memory 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 --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:ANY:emer --db=unix:socket -- command
19 ])])
20 m4_define([RUN_OVS_VSCTL_ONELINE],
21   [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY: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:ANY: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 -- real bridges])
144
145 AT_SETUP([add-br a])
146 AT_KEYWORDS([ovs-vsctl])
147 OVS_VSCTL_SETUP
148 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
149 CHECK_BRIDGES([a, a, 0])
150 CHECK_PORTS([a])
151 CHECK_IFACES([a])
152 OVS_VSCTL_CLEANUP
153 AT_CLEANUP
154
155 AT_SETUP([add-br a, add-br a])
156 AT_KEYWORDS([ovs-vsctl])
157 OVS_VSCTL_SETUP
158 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
159 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
160   [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
161 ], [OVS_VSCTL_CLEANUP])
162 OVS_VSCTL_CLEANUP
163 AT_CLEANUP
164
165 AT_SETUP([add-br a, add-br b])
166 AT_KEYWORDS([ovs-vsctl])
167 OVS_VSCTL_SETUP
168 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
169          [OVS_VSCTL_CLEANUP])
170 CHECK_BRIDGES([a, a, 0], [b, b, 0])
171 CHECK_PORTS([a])
172 CHECK_IFACES([a])
173 CHECK_PORTS([b])
174 CHECK_IFACES([b])
175 OVS_VSCTL_CLEANUP
176 AT_CLEANUP
177
178 AT_SETUP([add-br a, add-br b, del-br a])
179 AT_KEYWORDS([ovs-vsctl])
180 OVS_VSCTL_SETUP
181 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
182          [OVS_VSCTL_CLEANUP])
183 CHECK_BRIDGES([b, b, 0])
184 CHECK_PORTS([b])
185 CHECK_IFACES([b])
186 OVS_VSCTL_CLEANUP
187 AT_CLEANUP
188
189 AT_SETUP([add-br a, add-port a a1, add-port a a2])
190 AT_KEYWORDS([ovs-vsctl])
191 OVS_VSCTL_SETUP
192 AT_CHECK([RUN_OVS_VSCTL(
193    [add-br a],
194    [--if-exists del-br b],
195    [add-port a a1],
196    [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
197 CHECK_BRIDGES([a, a, 0])
198 CHECK_PORTS([a], [a1], [a2])
199 CHECK_IFACES([a], [a1], [a2])
200 OVS_VSCTL_CLEANUP
201 AT_CLEANUP
202
203 AT_SETUP([add-br a, add-port a a1, add-port a a1])
204 AT_KEYWORDS([ovs-vsctl])
205 OVS_VSCTL_SETUP
206 AT_CHECK([RUN_OVS_VSCTL(
207    [add-br a], 
208    [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
209 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
210   [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
211 ], [OVS_VSCTL_CLEANUP])
212 OVS_VSCTL_CLEANUP
213 AT_CLEANUP
214
215 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
216 AT_KEYWORDS([ovs-vsctl])
217 OVS_VSCTL_SETUP
218 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
219    [add-br a], 
220    [add-br b], 
221    [add-port a a1],
222    [add-port b b1],
223    [--if-exists del-port b b2],
224    [del-br a])], [0], [
225
226
227
228
229
230 ], [], [OVS_VSCTL_CLEANUP])
231 CHECK_BRIDGES([b, b, 0])
232 CHECK_PORTS([b], [b1])
233 CHECK_IFACES([b], [b1])
234 OVS_VSCTL_CLEANUP
235 AT_CLEANUP
236
237 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
238 AT_KEYWORDS([ovs-vsctl])
239 OVS_VSCTL_SETUP
240 AT_CHECK([RUN_OVS_VSCTL(
241    [add-br a], 
242    [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
243 CHECK_BRIDGES([a, a, 0])
244 CHECK_PORTS([a], [bond0])
245 CHECK_IFACES([a], [a1], [a2], [a3])
246 OVS_VSCTL_CLEANUP
247 AT_CLEANUP
248
249 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
250 AT_KEYWORDS([ovs-vsctl])
251 OVS_VSCTL_SETUP
252 AT_CHECK([RUN_OVS_VSCTL(
253   [add-br a], 
254   [add-br b], 
255   [add-port a a1],
256   [add-port b b1],
257   [del-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
258 CHECK_BRIDGES([a, a, 0], [b, b, 0])
259 CHECK_PORTS([a])
260 CHECK_IFACES([a])
261 CHECK_PORTS([b], [b1])
262 CHECK_IFACES([b], [b1])
263 OVS_VSCTL_CLEANUP
264 AT_CLEANUP
265
266 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
267 AT_KEYWORDS([ovs-vsctl])
268 OVS_VSCTL_SETUP
269 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
270   [add-br a], 
271   [add-bond a bond0 a1 a2 a3],
272   [del-port bond0])], [0], [
273
274
275 ], [], [OVS_VSCTL_CLEANUP])
276 CHECK_BRIDGES([a, a, 0])
277 CHECK_PORTS([a])
278 OVS_VSCTL_CLEANUP
279 AT_CLEANUP
280
281 AT_SETUP([external IDs])
282 AT_KEYWORDS([ovs-vsctl])
283 OVS_VSCTL_SETUP
284 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
285   [add-br a], 
286   [add-port a a1],
287   [add-bond a bond0 a2 a3],
288   [br-set-external-id a key0 value0],
289   [set port a1 external-ids:key1=value1],
290   [set interface a2 external-ids:key2=value2],
291   [set interface a2 external-ids:key3=value3],
292   [set interface a3 external-ids:key4=value4],
293   [br-get-external-id a],
294   [br-get-external-id a key0],
295   [br-get-external-id a key1],
296   [br-set-external-id a key0 othervalue],
297   [br-get-external-id a],
298   [br-set-external-id a key0],
299   [br-get-external-id a],
300   [get port a1 external-ids],
301   [get interface a2 external-ids],
302   [get interface a3 external-ids])], [0], [
303
304
305
306
307
308
309
310 key0=value0
311 value0
312
313
314 key0=othervalue
315
316
317 {"key1"="value1"}
318 {"key2"="value2", "key3"="value3"}
319 {"key4"="value4"}
320 ], [], [OVS_VSCTL_CLEANUP])
321 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
322   [br-get-external-id a],
323   [get port a1 external-ids],
324   [get interface a2 external-ids],
325   [get interface a3 external-ids])], [0],
326 [
327 {"key1"="value1"}
328 {"key2"="value2", "key3"="value3"}
329 {"key4"="value4"}
330 ], [], [OVS_VSCTL_CLEANUP])
331 CHECK_BRIDGES([a, a, 0])
332 CHECK_PORTS([a], [a1], [bond0])
333 CHECK_IFACES([a], [a1], [a2], [a3])
334 OVS_VSCTL_CLEANUP
335 AT_CLEANUP
336
337 dnl ----------------------------------------------------------------------
338 AT_BANNER([ovs-vsctl unit tests -- fake bridges])
339
340 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
341   [AT_CHECK(
342      [RUN_OVS_VSCTL(
343         [add-br xenbr0],
344         [add-port xenbr0 eth0],
345         [add-br xapi1 xenbr0 9],
346         [add-port xapi1 eth0.9])],
347      [0], [], [], [OVS_VSCTL_CLEANUP])])
348
349 AT_SETUP([simple fake bridge])
350 AT_KEYWORDS([ovs-vsctl fake-bridge])
351 OVS_VSCTL_SETUP
352 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
353 CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
354 CHECK_PORTS([xenbr0], [eth0])
355 CHECK_IFACES([xenbr0], [eth0])
356 CHECK_PORTS([xapi1], [eth0.9])
357 CHECK_IFACES([xapi1], [eth0.9])
358 OVS_VSCTL_CLEANUP
359 AT_CLEANUP
360
361 AT_SETUP([simple fake bridge + del-br fake bridge])
362 AT_KEYWORDS([ovs-vsctl fake-bridge])
363 OVS_VSCTL_SETUP
364 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
365 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
366 CHECK_BRIDGES([xenbr0, xenbr0, 0])
367 CHECK_PORTS([xenbr0], [eth0])
368 CHECK_IFACES([xenbr0], [eth0])
369 OVS_VSCTL_CLEANUP
370 AT_CLEANUP
371
372 AT_SETUP([simple fake bridge + del-br real bridge])
373 AT_KEYWORDS([ovs-vsctl fake-bridge])
374 OVS_VSCTL_SETUP
375 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
376 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
377 CHECK_BRIDGES
378 OVS_VSCTL_CLEANUP
379 AT_CLEANUP
380
381 AT_SETUP([simple fake bridge + external IDs])
382 AT_KEYWORDS([ovs-vsctl fake-bridge])
383 OVS_VSCTL_SETUP
384 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
385 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
386   [br-set-external-id xenbr0 key0 value0],
387   [br-set-external-id xapi1 key1 value1],
388   [br-get-external-id xenbr0],
389   [br-get-external-id xenbr0 key0],
390   [br-get-external-id xapi1],
391   [br-get-external-id xapi1 key1])], [0], [
392
393 key0=value0
394 value0
395 key1=value1
396 value1
397 ], [], [OVS_VSCTL_CLEANUP])
398 CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
399 CHECK_PORTS([xenbr0], [eth0])
400 CHECK_IFACES([xenbr0], [eth0])
401 CHECK_PORTS([xapi1], [eth0.9])
402 CHECK_IFACES([xapi1], [eth0.9])
403 OVS_VSCTL_CLEANUP
404 AT_CLEANUP
405
406 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
407   [AT_CHECK(
408      [RUN_OVS_VSCTL(
409         [add-br xapi1],
410         [add-bond xapi1 bond0 eth0 eth1],
411         [add-br xapi2 xapi1 11],
412         [add-port xapi2 bond0.11])],
413      [0], [], [], [OVS_VSCTL_CLEANUP])])
414
415 AT_SETUP([fake bridge on bond])
416 AT_KEYWORDS([ovs-vsctl fake-bridge])
417 OVS_VSCTL_SETUP
418 OVS_VSCTL_SETUP_BOND_FAKE_CONF
419 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
420 CHECK_PORTS([xapi1], [bond0])
421 CHECK_IFACES([xapi1], [eth0], [eth1])
422 CHECK_PORTS([xapi2], [bond0.11])
423 CHECK_IFACES([xapi2], [bond0.11])
424 OVS_VSCTL_CLEANUP
425 AT_CLEANUP
426
427 AT_SETUP([fake bridge on bond + del-br fake bridge])
428 AT_KEYWORDS([ovs-vsctl fake-bridge])
429 OVS_VSCTL_SETUP
430 OVS_VSCTL_SETUP_BOND_FAKE_CONF
431 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
432 ], [], [OVS_VSCTL_CLEANUP])
433 CHECK_BRIDGES([xapi1, xapi1, 0])
434 CHECK_PORTS([xapi1], [bond0])
435 CHECK_IFACES([xapi1], [eth0], [eth1])
436 OVS_VSCTL_CLEANUP
437 AT_CLEANUP
438
439 AT_SETUP([fake bridge on bond + del-br real bridge])
440 AT_KEYWORDS([ovs-vsctl fake-bridge])
441 OVS_VSCTL_SETUP
442 OVS_VSCTL_SETUP_BOND_FAKE_CONF
443 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
444 CHECK_BRIDGES
445 OVS_VSCTL_CLEANUP
446 AT_CLEANUP
447
448 dnl ----------------------------------------------------------------------
449 AT_BANNER([ovs-vsctl unit tests -- database commands])
450
451 AT_SETUP([database commands -- positive checks])
452 AT_KEYWORDS([ovs-vsctl])
453 OVS_VSCTL_SETUP
454 AT_CHECK([RUN_OVS_VSCTL([--force create b name=br0])], 
455   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
456 cp stdout out1
457 AT_CHECK([RUN_OVS_VSCTL([list b])], 
458   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
459 cp stdout out2
460 AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0], 
461   [[<0>
462 _uuid                (RO): <0>
463 controller           (RO): []
464 datapath_id          (RO): []
465 datapath_type        (RO): ""
466 external_ids         (RW): {}
467 flood_vlans          (RW): []
468 mirrors              (RO): []
469 name                 (RO): "br0"
470 netflow              (RO): []
471 other_config         (RW): {}
472 ports                (RO): []
473 ]], [ignore], [test ! -e pid || kill `cat pid`])
474 AT_CHECK(
475   [RUN_OVS_VSCTL(
476     [set bridge br0 \
477       'other_config:datapath_id="0123456789ab"' \
478       'other_config:hwaddr="00:11:22:33:44:55"' \
479       'external-ids={"xs-network-uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
480      add bridge br0 external_ids '"xs-network-names"="local; remote; cloud"'])], 
481   [0], [], [], [OVS_VSCTL_CLEANUP])
482 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])], 
483   [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{xs-network-names="local; remote; cloud", xs-network-uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
484 ], [], [OVS_VSCTL_CLEANUP])
485 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])], 
486   [0], ["00:11:22:33:44:55"
487
488 ], [], [OVS_VSCTL_CLEANUP])
489 AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])], 
490   [0], [{datapath_id="0123456789ab"}
491 ], [], [OVS_VSCTL_CLEANUP])
492 AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])], 
493   [0], [{}
494 ], [], [OVS_VSCTL_CLEANUP])
495 AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])], 
496   [0], [{}
497 ], [], [OVS_VSCTL_CLEANUP])
498 AT_CHECK([RUN_OVS_VSCTL([--force destroy b br0])], 
499   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
500 AT_CHECK([RUN_OVS_VSCTL([list b])], 
501   [0], [], [], [OVS_VSCTL_CLEANUP])
502 OVS_VSCTL_CLEANUP
503 AT_CLEANUP
504
505 AT_SETUP([database commands -- negative checks])
506 AT_KEYWORDS([ovs-vsctl])
507 OVS_VSCTL_SETUP
508 AT_CHECK([RUN_OVS_VSCTL([--force create b name=br0])], 
509   [0], [ignore], [], [OVS_VSCTL_CLEANUP])
510 AT_CHECK([RUN_OVS_VSCTL([add-br br1])], 
511   [0], [ignore], [], [OVS_VSCTL_CLEANUP])
512 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], 
513   [0], [ignore], [], [OVS_VSCTL_CLEANUP])
514 AT_CHECK([RUN_OVS_VSCTL([--force create n targets='"1.2.3.4:567"'])], 
515   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
516 cp stdout netflow-uuid
517 AT_CHECK([RUN_OVS_VSCTL([list n `cat netflow-uuid`])],
518   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
519 AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0], 
520   [[<0>
521 _uuid                (RO): <0>
522 active_timeout       (RW): 0
523 add_id_to_interface  (RW): false
524 engine_id            (RW): []
525 engine_type          (RW): []
526 targets              (RW): ["1.2.3.4:567"]
527 ]], [ignore], [test ! -e pid || kill `cat pid`])
528 AT_CHECK([RUN_OVS_VSCTL([list interx x])], 
529   [1], [], [ovs-vsctl: unknown table "interx"
530 ], [OVS_VSCTL_CLEANUP])
531 AT_CHECK([RUN_OVS_VSCTL([list b x])], 
532   [1], [], [ovs-vsctl: no row "x" in table Bridge
533 ], [OVS_VSCTL_CLEANUP])
534 AT_CHECK([RUN_OVS_VSCTL([list b br])], 
535   [1], [], [ovs-vsctl: multiple rows in Bridge match "br"
536 ], [OVS_VSCTL_CLEANUP])
537 AT_CHECK([RUN_OVS_VSCTL([get b br0 d])], 
538   [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
539 ], [OVS_VSCTL_CLEANUP])
540 AT_CHECK([RUN_OVS_VSCTL([get b br0 x])], 
541   [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
542 ], [OVS_VSCTL_CLEANUP])
543 AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])], 
544   [1], [], [ovs-vsctl: :y=z: missing column name
545 ], [OVS_VSCTL_CLEANUP])
546 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])], 
547   [1], [], [ovs-vsctl: datapath_id:y=z: value not accepted here
548 ], [OVS_VSCTL_CLEANUP])
549 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])], 
550   [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
551 ], [OVS_VSCTL_CLEANUP])
552 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])], 
553   [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
554 ], [OVS_VSCTL_CLEANUP])
555 AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])], 
556   [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
557 ], [OVS_VSCTL_CLEANUP])
558 AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])], 
559   [1], [], [ovs-vsctl: -1 is outside the valid range 1 to 4095 (inclusive)
560 ], [OVS_VSCTL_CLEANUP])
561 AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])], 
562   [1], [], [ovs-vsctl: 4096 is outside the valid range 1 to 4095 (inclusive)
563 ], [OVS_VSCTL_CLEANUP])
564 AT_CHECK([RUN_OVS_VSCTL([set b br0 datapath_id=4096])], 
565   [1], [], [ovs-vsctl: datapath_id=4096: cannot modify read-only column datapath_id in table Bridge
566 ], [OVS_VSCTL_CLEANUP])
567 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])], 
568   [1], [], [ovs-vsctl: xyz is not valid (it does not match ^in-band|out-of-band$)
569 ], [OVS_VSCTL_CLEANUP])
570 AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])], 
571   [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
572 ], [OVS_VSCTL_CLEANUP])
573 AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x=y])], 
574   [1], [], [ovs-vsctl: cannot modify read-only column datapath_id in table Bridge
575 ], [OVS_VSCTL_CLEANUP])
576 AT_CHECK([RUN_OVS_VSCTL([--force add b br1 datapath_id x y])], 
577   [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
578 ], [OVS_VSCTL_CLEANUP])
579 AT_CHECK([RUN_OVS_VSCTL([remove b br1 datapath_id x=y])], 
580   [1], [], [ovs-vsctl: cannot modify read-only column datapath_id in table Bridge
581 ], [OVS_VSCTL_CLEANUP])
582 AT_CHECK([RUN_OVS_VSCTL([remove n `cat netflow-uuid` targets '"1.2.3.4:567"'])], 
583   [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimun number is 1
584 ], [OVS_VSCTL_CLEANUP])
585 AT_CHECK([RUN_OVS_VSCTL([clear bri br0 netflow])], 
586   [1], [], [ovs-vsctl: cannot modify read-only column netflow in table Bridge
587 ], [OVS_VSCTL_CLEANUP])
588 AT_CHECK([RUN_OVS_VSCTL([clear n `cat netflow-uuid` targets])], 
589   [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
590 ], [OVS_VSCTL_CLEANUP])
591 AT_CHECK([RUN_OVS_VSCTL([create b name=br2])], 
592   [1], [], [ovs-vsctl: "create" requires --force
593 ], [OVS_VSCTL_CLEANUP])
594 AT_CHECK([RUN_OVS_VSCTL([destroy b br0])], 
595   [1], [], [ovs-vsctl: "destroy" requires --force
596 ], [OVS_VSCTL_CLEANUP])
597 AT_CHECK([RUN_OVS_VSCTL([--force destroy b br2])], 
598   [1], [], [ovs-vsctl: no row "br2" in table Bridge
599 ], [OVS_VSCTL_CLEANUP])
600 OVS_VSCTL_CLEANUP
601 AT_CLEANUP
602
603 dnl This test really shows a bug -- "create" followed by "list" in
604 dnl the same execution shows the wrong UUID on the "list" command.
605 dnl The bug is documented in ovs-vsctl.8.
606 AT_SETUP([created row UUID is wrong in same execution])
607 AT_KEYWORDS([ovs-vsctl])
608 OVS_VSCTL_SETUP
609 AT_CHECK([RUN_OVS_VSCTL([--force create Bridge name=br0 -- list b])], 
610   [0], [stdout], [], [OVS_VSCTL_CLEANUP])
611 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], 
612   [[<0>
613 _uuid                (RO): <1>
614 controller           (RO): []
615 datapath_id          (RO): []
616 datapath_type        (RO): ""
617 external_ids         (RW): {}
618 flood_vlans          (RW): []
619 mirrors              (RO): []
620 name                 (RO): "br0"
621 netflow              (RO): []
622 other_config         (RW): {}
623 ports                (RO): []
624 ]], [ignore], [test ! -e pid || kill `cat pid`])
625 OVS_VSCTL_CLEANUP
626 AT_CLEANUP