ovsdb-server: Make database connections configurable from database itself.
[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   [OVS_CHECK_LCOV(
7      [SCHEMA=$abs_top_builddir/vswitchd/vswitch-idl.ovsschema
8       if test ! -e $SCHEMA; then
9         SCHEMA=$abs_top_srcdir/vswitchd/vswitch-idl.ovsschema
10           if test ! -e $SCHEMA; then
11             echo 'Failed to find vswitch-idl.ovsschema'
12             exit 1
13           fi
14       fi
15       ovsdb-tool create db $SCHEMA],
16      [0], [stdout], [ignore])
17    OVS_CHECK_LCOV(
18      [[ovsdb-tool transact db \
19         '[{"op": "insert",
20            "table": "Open_vSwitch",
21            "row": {}}]']],
22      [0], [ignore], [ignore])
23    AT_CHECK([ovsdb-server --detach --pidfile=$PWD/pid --remote=punix:socket --unixctl=$PWD/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
24
25 dnl OVS_VSCTL_CLEANUP
26 dnl
27 dnl Kills off the database server.
28 m4_define([OVS_VSCTL_CLEANUP], [test ! -e pid || kill `cat pid`])
29
30 dnl RUN_OVS_VSCTL(COMMAND, ...)
31 dnl
32 dnl Executes each ovs-vsctl COMMAND.
33 m4_define([RUN_OVS_VSCTL],
34   [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket -- command
35 ])])
36 m4_define([RUN_OVS_VSCTL_ONELINE],
37   [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline -- command
38 ])])
39
40 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
41 dnl
42 dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
43 m4_define([RUN_OVS_VSCTL_TOGETHER],
44   [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline dnl
45 m4_foreach([command], [$@], [ -- command])])
46
47 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
48 dnl
49 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
50 dnl which must be in alphabetical order.  Also checks that each BRIDGE has the
51 dnl specified PARENT and is on the given VLAN.
52 m4_define([_CHECK_BRIDGE],
53   [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
54 ], [], [OVS_VSCTL_CLEANUP])
55
56    # Check br-to-vlan, without --oneline.
57    AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
58 ], [], [OVS_VSCTL_CLEANUP])
59    # Check br-to-vlan, with --oneline.
60    # (This particular test is interesting with --oneline because it returns
61    # an integer instead of a string and that can cause type mismatches inside
62    # python if not done carefully.)
63    AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
64 ], [], [OVS_VSCTL_CLEANUP])
65
66    # Check multiple queries in a single run.
67    AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
68 [$2
69 $3
70 ], [], [OVS_VSCTL_CLEANUP])])
71 m4_define([CHECK_BRIDGES],
72   [dnl Check that the bridges appear on list-br, without --oneline.
73    AT_CHECK(
74      [RUN_OVS_VSCTL([list-br])],
75      [0],
76      [m4_foreach([brinfo], [$@], [m4_car(brinfo)
77 ])],
78      [],
79      [OVS_VSCTL_CLEANUP])
80
81    dnl Check that the bridges appear on list-br, with --oneline.
82    AT_CHECK(
83      [RUN_OVS_VSCTL_ONELINE([list-br])],
84      [0],
85      [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
86 ],
87      [],
88      [OVS_VSCTL_CLEANUP])
89
90    dnl Check that each bridge exists according to br-exists and that
91    dnl a bridge that should not exist does not.
92    m4_foreach([brinfo], [$@], 
93               [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])], [0], [],
94                         [], [OVS_VSCTL_CLEANUP])])
95    AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2], [], [],
96             [OVS_VSCTL_CLEANUP])
97
98    dnl Check that each bridge has the expected parent and VLAN.
99    m4_map([_CHECK_BRIDGE], [$@])])
100
101 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
102 dnl
103 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
104 dnl list of ports, which must be in alphabetical order.  Also checks
105 dnl that "ovs-vsctl port-to-br" reports that each port is
106 dnl in BRIDGE.
107 m4_define([CHECK_PORTS],
108   [dnl Check ports without --oneline.
109    AT_CHECK(
110      [RUN_OVS_VSCTL([list-ports $1])],
111      [0],
112      [m4_foreach([port], m4_cdr($@), [port
113 ])],
114      [],
115      [OVS_VSCTL_CLEANUP])
116
117    dnl Check ports with --oneline.
118    AT_CHECK(
119      [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
120      [0],
121      [m4_join([\n], m4_shift($@))
122 ],
123      [],
124      [OVS_VSCTL_CLEANUP])
125    AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
126             [ovs-vsctl: no port named $1
127 ],
128             [OVS_VSCTL_CLEANUP])
129    m4_foreach(
130      [port], m4_cdr($@), 
131      [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
132 ], [], [OVS_VSCTL_CLEANUP])])])
133
134 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
135 dnl
136 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
137 dnl list of ifaces, which must be in alphabetical order.  Also checks
138 dnl that "ovs-vsctl iface-to-br" reports that each interface is
139 dnl in BRIDGE.
140 m4_define([CHECK_IFACES],
141   [AT_CHECK(
142      [RUN_OVS_VSCTL([list-ifaces $1])],
143      [0],
144      [m4_foreach([iface], m4_cdr($@), [iface
145 ])],
146      [],
147      [OVS_VSCTL_CLEANUP])
148    AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
149             [ovs-vsctl: no interface named $1
150 ],
151             [OVS_VSCTL_CLEANUP])
152    m4_foreach(
153      [iface], m4_cdr($@), 
154      [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
155 ],
156                [], [OVS_VSCTL_CLEANUP])])])
157
158 dnl ----------------------------------------------------------------------
159 AT_BANNER([ovs-vsctl unit tests -- real bridges])
160
161 AT_SETUP([add-br a])
162 AT_KEYWORDS([ovs-vsctl])
163 OVS_VSCTL_SETUP
164 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
165 CHECK_BRIDGES([a, a, 0])
166 CHECK_PORTS([a])
167 CHECK_IFACES([a])
168 OVS_VSCTL_CLEANUP
169 AT_CLEANUP
170
171 AT_SETUP([add-br a, add-br a])
172 AT_KEYWORDS([ovs-vsctl])
173 OVS_VSCTL_SETUP
174 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
175 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
176   [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
177 ], [OVS_VSCTL_CLEANUP])
178 OVS_VSCTL_CLEANUP
179 AT_CLEANUP
180
181 AT_SETUP([add-br a, add-br b])
182 AT_KEYWORDS([ovs-vsctl])
183 OVS_VSCTL_SETUP
184 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
185          [OVS_VSCTL_CLEANUP])
186 CHECK_BRIDGES([a, a, 0], [b, b, 0])
187 CHECK_PORTS([a])
188 CHECK_IFACES([a])
189 CHECK_PORTS([b])
190 CHECK_IFACES([b])
191 OVS_VSCTL_CLEANUP
192 AT_CLEANUP
193
194 AT_SETUP([add-br a, add-br b, del-br a])
195 AT_KEYWORDS([ovs-vsctl])
196 OVS_VSCTL_SETUP
197 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
198          [OVS_VSCTL_CLEANUP])
199 CHECK_BRIDGES([b, b, 0])
200 CHECK_PORTS([b])
201 CHECK_IFACES([b])
202 OVS_VSCTL_CLEANUP
203 AT_CLEANUP
204
205 AT_SETUP([add-br a, add-port a a1, add-port a a2])
206 AT_KEYWORDS([ovs-vsctl])
207 OVS_VSCTL_SETUP
208 AT_CHECK([RUN_OVS_VSCTL(
209    [add-br a],
210    [--if-exists del-br b],
211    [add-port a a1],
212    [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
213 CHECK_BRIDGES([a, a, 0])
214 CHECK_PORTS([a], [a1], [a2])
215 CHECK_IFACES([a], [a1], [a2])
216 OVS_VSCTL_CLEANUP
217 AT_CLEANUP
218
219 AT_SETUP([add-br a, add-port a a1, add-port a a1])
220 AT_KEYWORDS([ovs-vsctl])
221 OVS_VSCTL_SETUP
222 AT_CHECK([RUN_OVS_VSCTL(
223    [add-br a], 
224    [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
225 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
226   [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
227 ], [OVS_VSCTL_CLEANUP])
228 OVS_VSCTL_CLEANUP
229 AT_CLEANUP
230
231 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
232 AT_KEYWORDS([ovs-vsctl])
233 OVS_VSCTL_SETUP
234 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
235    [add-br a], 
236    [add-br b], 
237    [add-port a a1],
238    [add-port b b1],
239    [--if-exists del-port b b2],
240    [del-br a])], [0], [
241
242
243
244
245
246 ], [], [OVS_VSCTL_CLEANUP])
247 CHECK_BRIDGES([b, b, 0])
248 CHECK_PORTS([b], [b1])
249 CHECK_IFACES([b], [b1])
250 OVS_VSCTL_CLEANUP
251 AT_CLEANUP
252
253 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
254 AT_KEYWORDS([ovs-vsctl])
255 OVS_VSCTL_SETUP
256 AT_CHECK([RUN_OVS_VSCTL(
257    [add-br a], 
258    [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
259 CHECK_BRIDGES([a, a, 0])
260 CHECK_PORTS([a], [bond0])
261 CHECK_IFACES([a], [a1], [a2], [a3])
262 OVS_VSCTL_CLEANUP
263 AT_CLEANUP
264
265 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
266 AT_KEYWORDS([ovs-vsctl])
267 OVS_VSCTL_SETUP
268 AT_CHECK([RUN_OVS_VSCTL(
269   [add-br a], 
270   [add-br b], 
271   [add-port a a1],
272   [add-port b b1],
273   [del-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
274 CHECK_BRIDGES([a, a, 0], [b, b, 0])
275 CHECK_PORTS([a])
276 CHECK_IFACES([a])
277 CHECK_PORTS([b], [b1])
278 CHECK_IFACES([b], [b1])
279 OVS_VSCTL_CLEANUP
280 AT_CLEANUP
281
282 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
283 AT_KEYWORDS([ovs-vsctl])
284 OVS_VSCTL_SETUP
285 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
286   [add-br a], 
287   [add-bond a bond0 a1 a2 a3],
288   [del-port bond0])], [0], [
289
290
291 ], [], [OVS_VSCTL_CLEANUP])
292 CHECK_BRIDGES([a, a, 0])
293 CHECK_PORTS([a])
294 OVS_VSCTL_CLEANUP
295 AT_CLEANUP
296
297 AT_SETUP([external IDs])
298 AT_KEYWORDS([ovs-vsctl])
299 OVS_VSCTL_SETUP
300 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
301   [add-br a], 
302   [add-port a a1],
303   [add-bond a bond0 a2 a3],
304   [br-set-external-id a key0 value0],
305   [port-set-external-id a1 key1 value1],
306   [iface-set-external-id a2 key2 value2],
307   [iface-set-external-id a2 key3 value3],
308   [iface-set-external-id a3 key4 value4],
309   [br-get-external-id a],
310   [br-get-external-id a key0],
311   [br-get-external-id a key1],
312   [br-set-external-id a key0 othervalue],
313   [br-get-external-id a],
314   [br-set-external-id a key0],
315   [br-get-external-id a],
316   [port-get-external-id a1],
317   [iface-get-external-id a2],
318   [iface-get-external-id a3])], [0], [
319
320
321
322
323
324
325
326 key0=value0
327 value0
328
329
330 key0=othervalue
331
332
333 key1=value1
334 key2=value2\nkey3=value3
335 key4=value4
336 ], [], [OVS_VSCTL_CLEANUP])
337 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
338   [br-get-external-id a],
339   [port-get-external-id a1],
340   [iface-get-external-id a2],
341   [iface-get-external-id a3])], [0],
342 [
343 key1=value1
344 key2=value2\nkey3=value3
345 key4=value4
346 ], [], [OVS_VSCTL_CLEANUP])
347 CHECK_BRIDGES([a, a, 0])
348 CHECK_PORTS([a], [a1], [bond0])
349 CHECK_IFACES([a], [a1], [a2], [a3])
350 OVS_VSCTL_CLEANUP
351 AT_CLEANUP
352
353 dnl ----------------------------------------------------------------------
354 AT_BANNER([ovs-vsctl unit tests -- fake bridges])
355
356 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
357   [AT_CHECK(
358      [RUN_OVS_VSCTL(
359         [add-br xenbr0],
360         [add-port xenbr0 eth0],
361         [add-br xapi1 xenbr0 9],
362         [add-port xapi1 eth0.9])],
363      [0], [], [], [OVS_VSCTL_CLEANUP])])
364
365 AT_SETUP([simple fake bridge])
366 AT_KEYWORDS([ovs-vsctl fake-bridge])
367 OVS_VSCTL_SETUP
368 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
369 CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
370 CHECK_PORTS([xenbr0], [eth0])
371 CHECK_IFACES([xenbr0], [eth0])
372 CHECK_PORTS([xapi1], [eth0.9])
373 CHECK_IFACES([xapi1], [eth0.9])
374 OVS_VSCTL_CLEANUP
375 AT_CLEANUP
376
377 AT_SETUP([simple fake bridge + del-br fake bridge])
378 AT_KEYWORDS([ovs-vsctl fake-bridge])
379 OVS_VSCTL_SETUP
380 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
381 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
382 CHECK_BRIDGES([xenbr0, xenbr0, 0])
383 CHECK_PORTS([xenbr0], [eth0])
384 CHECK_IFACES([xenbr0], [eth0])
385 OVS_VSCTL_CLEANUP
386 AT_CLEANUP
387
388 AT_SETUP([simple fake bridge + del-br real bridge])
389 AT_KEYWORDS([ovs-vsctl fake-bridge])
390 OVS_VSCTL_SETUP
391 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
392 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
393 CHECK_BRIDGES
394 OVS_VSCTL_CLEANUP
395 AT_CLEANUP
396
397 AT_SETUP([simple fake bridge + external IDs])
398 AT_KEYWORDS([ovs-vsctl fake-bridge])
399 OVS_VSCTL_SETUP
400 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
401 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
402   [br-set-external-id xenbr0 key0 value0],
403   [br-set-external-id xapi1 key1 value1],
404   [br-get-external-id xenbr0],
405   [br-get-external-id xenbr0 key0],
406   [br-get-external-id xapi1],
407   [br-get-external-id xapi1 key1])], [0], [
408
409 key0=value0
410 value0
411 key1=value1
412 value1
413 ], [], [OVS_VSCTL_CLEANUP])
414 CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
415 CHECK_PORTS([xenbr0], [eth0])
416 CHECK_IFACES([xenbr0], [eth0])
417 CHECK_PORTS([xapi1], [eth0.9])
418 CHECK_IFACES([xapi1], [eth0.9])
419 OVS_VSCTL_CLEANUP
420 AT_CLEANUP
421
422 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
423   [AT_CHECK(
424      [RUN_OVS_VSCTL(
425         [add-br xapi1],
426         [add-bond xapi1 bond0 eth0 eth1],
427         [add-br xapi2 xapi1 11],
428         [add-port xapi2 bond0.11])],
429      [0], [], [], [OVS_VSCTL_CLEANUP])])
430
431 AT_SETUP([fake bridge on bond])
432 AT_KEYWORDS([ovs-vsctl fake-bridge])
433 OVS_VSCTL_SETUP
434 OVS_VSCTL_SETUP_BOND_FAKE_CONF
435 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
436 CHECK_PORTS([xapi1], [bond0])
437 CHECK_IFACES([xapi1], [eth0], [eth1])
438 CHECK_PORTS([xapi2], [bond0.11])
439 CHECK_IFACES([xapi2], [bond0.11])
440 OVS_VSCTL_CLEANUP
441 AT_CLEANUP
442
443 AT_SETUP([fake bridge on bond + del-br fake bridge])
444 AT_KEYWORDS([ovs-vsctl fake-bridge])
445 OVS_VSCTL_SETUP
446 OVS_VSCTL_SETUP_BOND_FAKE_CONF
447 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
448 ], [], [OVS_VSCTL_CLEANUP])
449 CHECK_BRIDGES([xapi1, xapi1, 0])
450 CHECK_PORTS([xapi1], [bond0])
451 CHECK_IFACES([xapi1], [eth0], [eth1])
452 OVS_VSCTL_CLEANUP
453 AT_CLEANUP
454
455 AT_SETUP([fake bridge on bond + del-br real bridge])
456 AT_KEYWORDS([ovs-vsctl fake-bridge])
457 OVS_VSCTL_SETUP
458 OVS_VSCTL_SETUP_BOND_FAKE_CONF
459 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
460 CHECK_BRIDGES
461 OVS_VSCTL_CLEANUP
462 AT_CLEANUP