]> git.proxmox.com Git - ovs.git/blame - tests/ovs-vsctl.at
ovsdb-idl: Make rows inserted by transaction appear during table iteration.
[ovs.git] / tests / ovs-vsctl.at
CommitLineData
c75d1511
BP
1dnl OVS_VSCTL_SETUP
2dnl
3dnl Creates an empty database in the current directory and then starts
4dnl an ovsdb-server on it for ovs-vsctl to connect to.
5m4_define([OVS_VSCTL_SETUP],
24c8ae53 6 [OVSDB_INIT([db])
0b1fae1b 7 AT_CHECK([ovsdb-server --detach --pidfile=$PWD/pid --remote=punix:socket --unixctl=$PWD/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
c75d1511
BP
8
9dnl OVS_VSCTL_CLEANUP
10dnl
11dnl Kills off the database server.
12m4_define([OVS_VSCTL_CLEANUP], [test ! -e pid || kill `cat pid`])
13
3b135da3
BP
14dnl RUN_OVS_VSCTL(COMMAND, ...)
15dnl
c75d1511 16dnl Executes each ovs-vsctl COMMAND.
3b135da3 17m4_define([RUN_OVS_VSCTL],
b54e22e9 18 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket -- command
460aad80
BP
19])])
20m4_define([RUN_OVS_VSCTL_ONELINE],
b54e22e9 21 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline -- command
3b135da3
BP
22])])
23
4d14e30f
BP
24dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
25dnl
c75d1511 26dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
4d14e30f 27m4_define([RUN_OVS_VSCTL_TOGETHER],
b54e22e9 28 [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline dnl
460aad80 29m4_foreach([command], [$@], [ -- command])])
4d14e30f 30
8e58fa9a 31dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
3b135da3
BP
32dnl
33dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
8e58fa9a
BP
34dnl which must be in alphabetical order. Also checks that each BRIDGE has the
35dnl specified PARENT and is on the given VLAN.
36m4_define([_CHECK_BRIDGE],
37 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
c75d1511 38], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
39
40 # Check br-to-vlan, without --oneline.
8e58fa9a 41 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
c75d1511 42], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
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.)
460aad80 47 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
c75d1511 48], [], [OVS_VSCTL_CLEANUP])
4d14e30f
BP
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
c75d1511 54], [], [OVS_VSCTL_CLEANUP])])
3b135da3 55m4_define([CHECK_BRIDGES],
2792c2ad 56 [dnl Check that the bridges appear on list-br, without --oneline.
8e58fa9a 57 AT_CHECK(
3b135da3
BP
58 [RUN_OVS_VSCTL([list-br])],
59 [0],
8e58fa9a 60 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
c75d1511
BP
61])],
62 [],
63 [OVS_VSCTL_CLEANUP])
8e58fa9a 64
2792c2ad
BP
65 dnl Check that the bridges appear on list-br, with --oneline.
66 AT_CHECK(
460aad80 67 [RUN_OVS_VSCTL_ONELINE([list-br])],
2792c2ad
BP
68 [0],
69 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
c75d1511
BP
70],
71 [],
72 [OVS_VSCTL_CLEANUP])
2792c2ad 73
8e58fa9a
BP
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], [$@],
c75d1511
BP
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])
8e58fa9a
BP
81
82 dnl Check that each bridge has the expected parent and VLAN.
83 m4_map([_CHECK_BRIDGE], [$@])])
3b135da3
BP
84
85dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
86dnl
87dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
88dnl list of ports, which must be in alphabetical order. Also checks
89dnl that "ovs-vsctl port-to-br" reports that each port is
90dnl in BRIDGE.
91m4_define([CHECK_PORTS],
2792c2ad
BP
92 [dnl Check ports without --oneline.
93 AT_CHECK(
3b135da3
BP
94 [RUN_OVS_VSCTL([list-ports $1])],
95 [0],
96 [m4_foreach([port], m4_cdr($@), [port
c75d1511
BP
97])],
98 [],
99 [OVS_VSCTL_CLEANUP])
2792c2ad
BP
100
101 dnl Check ports with --oneline.
102 AT_CHECK(
460aad80 103 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
2792c2ad
BP
104 [0],
105 [m4_join([\n], m4_shift($@))
c75d1511
BP
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])
3b135da3
BP
113 m4_foreach(
114 [port], m4_cdr($@),
115 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
c75d1511 116], [], [OVS_VSCTL_CLEANUP])])])
3b135da3
BP
117
118dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
119dnl
120dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
121dnl list of ifaces, which must be in alphabetical order. Also checks
122dnl that "ovs-vsctl iface-to-br" reports that each interface is
123dnl in BRIDGE.
124m4_define([CHECK_IFACES],
125 [AT_CHECK(
126 [RUN_OVS_VSCTL([list-ifaces $1])],
127 [0],
128 [m4_foreach([iface], m4_cdr($@), [iface
dfbe07ba
BP
129])],
130 [],
131 [OVS_VSCTL_CLEANUP])
c75d1511
BP
132 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
133 [ovs-vsctl: no interface named $1
134],
135 [OVS_VSCTL_CLEANUP])
3b135da3
BP
136 m4_foreach(
137 [iface], m4_cdr($@),
138 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
c75d1511
BP
139],
140 [], [OVS_VSCTL_CLEANUP])])])
3b135da3 141
8e58fa9a
BP
142dnl ----------------------------------------------------------------------
143AT_BANNER([ovs-vsctl unit tests -- real bridges])
144
3b135da3
BP
145AT_SETUP([add-br a])
146AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
147OVS_VSCTL_SETUP
148AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 149CHECK_BRIDGES([a, a, 0])
3b135da3
BP
150CHECK_PORTS([a])
151CHECK_IFACES([a])
c75d1511 152OVS_VSCTL_CLEANUP
3b135da3
BP
153AT_CLEANUP
154
1125a1b9
BP
155AT_SETUP([add-br a, add-br a])
156AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
157OVS_VSCTL_SETUP
158AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
159AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
160 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
c75d1511
BP
161], [OVS_VSCTL_CLEANUP])
162OVS_VSCTL_CLEANUP
1125a1b9
BP
163AT_CLEANUP
164
3b135da3
BP
165AT_SETUP([add-br a, add-br b])
166AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
167OVS_VSCTL_SETUP
168AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
169 [OVS_VSCTL_CLEANUP])
8e58fa9a 170CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
171CHECK_PORTS([a])
172CHECK_IFACES([a])
173CHECK_PORTS([b])
174CHECK_IFACES([b])
c75d1511 175OVS_VSCTL_CLEANUP
3b135da3
BP
176AT_CLEANUP
177
178AT_SETUP([add-br a, add-br b, del-br a])
179AT_KEYWORDS([ovs-vsctl])
c75d1511
BP
180OVS_VSCTL_SETUP
181AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
182 [OVS_VSCTL_CLEANUP])
8e58fa9a 183CHECK_BRIDGES([b, b, 0])
3b135da3
BP
184CHECK_PORTS([b])
185CHECK_IFACES([b])
c75d1511 186OVS_VSCTL_CLEANUP
3b135da3
BP
187AT_CLEANUP
188
2792c2ad
BP
189AT_SETUP([add-br a, add-port a a1, add-port a a2])
190AT_KEYWORDS([ovs-vsctl])
c75d1511 191OVS_VSCTL_SETUP
2792c2ad 192AT_CHECK([RUN_OVS_VSCTL(
dfbe07ba 193 [add-br a],
460aad80 194 [--if-exists del-br b],
2792c2ad 195 [add-port a a1],
c75d1511 196 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
2792c2ad
BP
197CHECK_BRIDGES([a, a, 0])
198CHECK_PORTS([a], [a1], [a2])
199CHECK_IFACES([a], [a1], [a2])
c75d1511 200OVS_VSCTL_CLEANUP
2792c2ad
BP
201AT_CLEANUP
202
1125a1b9
BP
203AT_SETUP([add-br a, add-port a a1, add-port a a1])
204AT_KEYWORDS([ovs-vsctl])
c75d1511 205OVS_VSCTL_SETUP
1125a1b9
BP
206AT_CHECK([RUN_OVS_VSCTL(
207 [add-br a],
c75d1511 208 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
1125a1b9
BP
209AT_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
c75d1511
BP
211], [OVS_VSCTL_CLEANUP])
212OVS_VSCTL_CLEANUP
1125a1b9
BP
213AT_CLEANUP
214
3b135da3
BP
215AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
216AT_KEYWORDS([ovs-vsctl])
c75d1511 217OVS_VSCTL_SETUP
4d14e30f 218AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
219 [add-br a],
220 [add-br b],
221 [add-port a a1],
222 [add-port b b1],
460aad80
BP
223 [--if-exists del-port b b2],
224 [del-br a])], [0], [
225
226
227
228
229
230], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 231CHECK_BRIDGES([b, b, 0])
3b135da3
BP
232CHECK_PORTS([b], [b1])
233CHECK_IFACES([b], [b1])
c75d1511 234OVS_VSCTL_CLEANUP
3b135da3
BP
235AT_CLEANUP
236
237AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
238AT_KEYWORDS([ovs-vsctl])
c75d1511 239OVS_VSCTL_SETUP
3b135da3
BP
240AT_CHECK([RUN_OVS_VSCTL(
241 [add-br a],
c75d1511 242 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 243CHECK_BRIDGES([a, a, 0])
3b135da3
BP
244CHECK_PORTS([a], [bond0])
245CHECK_IFACES([a], [a1], [a2], [a3])
c75d1511 246OVS_VSCTL_CLEANUP
3b135da3
BP
247AT_CLEANUP
248
249AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
250AT_KEYWORDS([ovs-vsctl])
c75d1511 251OVS_VSCTL_SETUP
3b135da3
BP
252AT_CHECK([RUN_OVS_VSCTL(
253 [add-br a],
254 [add-br b],
255 [add-port a a1],
256 [add-port b b1],
c75d1511 257 [del-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 258CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
259CHECK_PORTS([a])
260CHECK_IFACES([a])
261CHECK_PORTS([b], [b1])
262CHECK_IFACES([b], [b1])
c75d1511 263OVS_VSCTL_CLEANUP
3b135da3
BP
264AT_CLEANUP
265
3d1b9636 266AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
3b135da3 267AT_KEYWORDS([ovs-vsctl])
c75d1511 268OVS_VSCTL_SETUP
4d14e30f 269AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
3b135da3
BP
270 [add-br a],
271 [add-bond a bond0 a1 a2 a3],
460aad80
BP
272 [del-port bond0])], [0], [
273
274
275], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 276CHECK_BRIDGES([a, a, 0])
3b135da3 277CHECK_PORTS([a])
c75d1511 278OVS_VSCTL_CLEANUP
3b135da3
BP
279AT_CLEANUP
280
457e1eb0
BP
281AT_SETUP([external IDs])
282AT_KEYWORDS([ovs-vsctl])
283OVS_VSCTL_SETUP
284AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 285 [add-br a],
457e1eb0
BP
286 [add-port a a1],
287 [add-bond a bond0 a2 a3],
288 [br-set-external-id a key0 value0],
289 [port-set-external-id a1 key1 value1],
290 [iface-set-external-id a2 key2 value2],
291 [iface-set-external-id a2 key3 value3],
292 [iface-set-external-id a3 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 [port-get-external-id a1],
301 [iface-get-external-id a2],
302 [iface-get-external-id a3])], [0], [
303
304
305
306
307
308
309
310key0=value0
311value0
312
313
314key0=othervalue
315
316
317key1=value1
318key2=value2\nkey3=value3
319key4=value4
320], [], [OVS_VSCTL_CLEANUP])
321AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 322 [br-get-external-id a],
457e1eb0
BP
323 [port-get-external-id a1],
324 [iface-get-external-id a2],
325 [iface-get-external-id a3])], [0],
326[
327key1=value1
328key2=value2\nkey3=value3
329key4=value4
330], [], [OVS_VSCTL_CLEANUP])
331CHECK_BRIDGES([a, a, 0])
332CHECK_PORTS([a], [a1], [bond0])
333CHECK_IFACES([a], [a1], [a2], [a3])
334OVS_VSCTL_CLEANUP
335AT_CLEANUP
336
8e58fa9a 337dnl ----------------------------------------------------------------------
3b135da3
BP
338AT_BANNER([ovs-vsctl unit tests -- fake bridges])
339
dfbe07ba
BP
340m4_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])])
3b135da3
BP
348
349AT_SETUP([simple fake bridge])
350AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 351OVS_VSCTL_SETUP
dfbe07ba
BP
352OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
353CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
3b135da3
BP
354CHECK_PORTS([xenbr0], [eth0])
355CHECK_IFACES([xenbr0], [eth0])
356CHECK_PORTS([xapi1], [eth0.9])
357CHECK_IFACES([xapi1], [eth0.9])
c75d1511 358OVS_VSCTL_CLEANUP
3b135da3
BP
359AT_CLEANUP
360
361AT_SETUP([simple fake bridge + del-br fake bridge])
362AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 363OVS_VSCTL_SETUP
dfbe07ba
BP
364OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
365AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 366CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
367CHECK_PORTS([xenbr0], [eth0])
368CHECK_IFACES([xenbr0], [eth0])
c75d1511 369OVS_VSCTL_CLEANUP
3b135da3
BP
370AT_CLEANUP
371
372AT_SETUP([simple fake bridge + del-br real bridge])
373AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 374OVS_VSCTL_SETUP
dfbe07ba
BP
375OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
376AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
3b135da3 377CHECK_BRIDGES
c75d1511 378OVS_VSCTL_CLEANUP
3b135da3
BP
379AT_CLEANUP
380
457e1eb0
BP
381AT_SETUP([simple fake bridge + external IDs])
382AT_KEYWORDS([ovs-vsctl fake-bridge])
383OVS_VSCTL_SETUP
384OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF
385AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 386 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
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
393key0=value0
394value0
395key1=value1
396value1
397], [], [OVS_VSCTL_CLEANUP])
398CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0])
399CHECK_PORTS([xenbr0], [eth0])
400CHECK_IFACES([xenbr0], [eth0])
401CHECK_PORTS([xapi1], [eth0.9])
402CHECK_IFACES([xapi1], [eth0.9])
403OVS_VSCTL_CLEANUP
404AT_CLEANUP
405
dfbe07ba
BP
406m4_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])])
3b135da3
BP
414
415AT_SETUP([fake bridge on bond])
416AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 417OVS_VSCTL_SETUP
dfbe07ba 418OVS_VSCTL_SETUP_BOND_FAKE_CONF
8e58fa9a 419CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
420CHECK_PORTS([xapi1], [bond0])
421CHECK_IFACES([xapi1], [eth0], [eth1])
422CHECK_PORTS([xapi2], [bond0.11])
423CHECK_IFACES([xapi2], [bond0.11])
c75d1511 424OVS_VSCTL_CLEANUP
3b135da3
BP
425AT_CLEANUP
426
427AT_SETUP([fake bridge on bond + del-br fake bridge])
428AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 429OVS_VSCTL_SETUP
dfbe07ba 430OVS_VSCTL_SETUP_BOND_FAKE_CONF
460aad80 431AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
dfbe07ba 432], [], [OVS_VSCTL_CLEANUP])
8e58fa9a 433CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
434CHECK_PORTS([xapi1], [bond0])
435CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 436OVS_VSCTL_CLEANUP
3b135da3
BP
437AT_CLEANUP
438
439AT_SETUP([fake bridge on bond + del-br real bridge])
440AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba
BP
441OVS_VSCTL_SETUP
442OVS_VSCTL_SETUP_BOND_FAKE_CONF
3b135da3
BP
443AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
444CHECK_BRIDGES
c75d1511 445OVS_VSCTL_CLEANUP
3b135da3 446AT_CLEANUP