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