1 dnl RUN_OVS_VSCTL(COMMAND, ...)
3 dnl Executes each ovs-vsctl COMMAND on a file named "conf" in the
4 dnl current directory. Creates "conf" if it does not already exist.
5 m4_define([RUN_OVS_VSCTL],
7 m4_foreach([command], [$@], [ovs-vsctl --no-reload --config=conf command
10 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
12 dnl Executes each ovs-vsctl COMMAND on a file named "conf" in the
13 dnl current directory, in a single run of ovs-vsctl. Creates "conf" if it
14 dnl does not already exist.
15 m4_define([RUN_OVS_VSCTL_TOGETHER],
17 ovs-vsctl --no-reload --config=conf m4_join([ -- ], $@)])
19 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
21 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
22 dnl which must be in alphabetical order. Also checks that each BRIDGE has the
23 dnl specified PARENT and is on the given VLAN.
24 m4_define([_CHECK_BRIDGE],
25 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
28 # Check br-to-vlan, without --oneline.
29 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
31 # Check br-to-vlan, with --oneline.
32 # (This particular test is interesting with --oneline because it returns
33 # an integer instead of a string and that can cause type mismatches inside
34 # python if not done carefully.)
35 AT_CHECK([RUN_OVS_VSCTL([--oneline br-to-vlan $1])], [0], [$3
38 # Check multiple queries in a single run.
39 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
43 m4_define([CHECK_BRIDGES],
44 [dnl Check that the bridges appear on list-br, without --oneline.
46 [RUN_OVS_VSCTL([list-br])],
48 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
51 dnl Check that the bridges appear on list-br, with --oneline.
53 [RUN_OVS_VSCTL([--oneline list-br])],
55 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
58 dnl Check that each bridge exists according to br-exists and that
59 dnl a bridge that should not exist does not.
60 m4_foreach([brinfo], [$@],
61 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])])])
62 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2])
64 dnl Check that each bridge has the expected parent and VLAN.
65 m4_map([_CHECK_BRIDGE], [$@])])
67 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
69 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
70 dnl list of ports, which must be in alphabetical order. Also checks
71 dnl that "ovs-vsctl port-to-br" reports that each port is
73 m4_define([CHECK_PORTS],
74 [dnl Check ports without --oneline.
76 [RUN_OVS_VSCTL([list-ports $1])],
78 [m4_foreach([port], m4_cdr($@), [port
81 dnl Check ports with --oneline.
83 [RUN_OVS_VSCTL([--oneline list-ports $1])],
85 [m4_join([\n], m4_shift($@))
87 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [], [ovs-vsctl: no port named $1
91 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
94 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
96 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
97 dnl list of ifaces, which must be in alphabetical order. Also checks
98 dnl that "ovs-vsctl iface-to-br" reports that each interface is
100 m4_define([CHECK_IFACES],
102 [RUN_OVS_VSCTL([list-ifaces $1])],
104 [m4_foreach([iface], m4_cdr($@), [iface
106 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [], [ovs-vsctl: no interface named $1
110 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
113 dnl ----------------------------------------------------------------------
114 AT_BANNER([ovs-vsctl unit tests -- real bridges])
117 AT_KEYWORDS([ovs-vsctl])
118 AT_CHECK([RUN_OVS_VSCTL([add-br a])])
119 AT_CHECK([cat conf], [0], [dnl
122 CHECK_BRIDGES([a, a, 0])
127 AT_SETUP([add-br a, add-br a])
128 AT_KEYWORDS([ovs-vsctl])
129 AT_CHECK([RUN_OVS_VSCTL([add-br a])])
130 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
131 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
135 AT_SETUP([add-br a, add-br b])
136 AT_KEYWORDS([ovs-vsctl])
137 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])])
138 AT_CHECK([cat conf], [0], [dnl
142 CHECK_BRIDGES([a, a, 0], [b, b, 0])
149 AT_SETUP([add-br a, add-br b, del-br a])
150 AT_KEYWORDS([ovs-vsctl])
151 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])])
152 AT_CHECK([cat conf], [0], [dnl
155 CHECK_BRIDGES([b, b, 0])
160 AT_SETUP([add-br a, add-port a a1, add-port a a2])
161 AT_KEYWORDS([ovs-vsctl])
162 AT_CHECK([RUN_OVS_VSCTL(
166 AT_CHECK([cat conf], [0],
171 CHECK_BRIDGES([a, a, 0])
172 CHECK_PORTS([a], [a1], [a2])
173 CHECK_IFACES([a], [a1], [a2])
176 AT_SETUP([add-br a, add-port a a1, add-port a a1])
177 AT_KEYWORDS([ovs-vsctl])
178 AT_CHECK([RUN_OVS_VSCTL(
181 AT_CHECK([cat conf], [0],
185 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
186 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
190 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
191 AT_KEYWORDS([ovs-vsctl])
192 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
198 AT_CHECK([cat conf], [0],
202 CHECK_BRIDGES([b, b, 0])
203 CHECK_PORTS([b], [b1])
204 CHECK_IFACES([b], [b1])
207 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
208 AT_KEYWORDS([ovs-vsctl])
209 AT_CHECK([RUN_OVS_VSCTL(
211 [add-bond a bond0 a1 a2 a3])])
212 AT_CHECK([cat conf], [0], [dnl
213 bonding.bond0.slave=a1
214 bonding.bond0.slave=a2
215 bonding.bond0.slave=a3
219 CHECK_BRIDGES([a, a, 0])
220 CHECK_PORTS([a], [bond0])
221 CHECK_IFACES([a], [a1], [a2], [a3])
224 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
225 AT_KEYWORDS([ovs-vsctl])
226 AT_CHECK([RUN_OVS_VSCTL(
232 AT_CHECK([cat conf], [0], [dnl
237 CHECK_BRIDGES([a, a, 0], [b, b, 0])
240 CHECK_PORTS([b], [b1])
241 CHECK_IFACES([b], [b1])
244 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
245 AT_KEYWORDS([ovs-vsctl])
246 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
248 [add-bond a bond0 a1 a2 a3],
250 AT_CHECK([cat conf], [0], [dnl
253 CHECK_BRIDGES([a, a, 0])
257 dnl ----------------------------------------------------------------------
258 AT_BANNER([ovs-vsctl unit tests -- fake bridges])
260 m4_define([SIMPLE_FAKE_CONF], [dnl
261 bridge.xenbr0.port=eth0
262 bridge.xenbr0.port=eth0.9
263 bridge.xenbr0.port=xapi1
264 bridge.xenbr0.port=xenbr0
265 iface.xapi1.fake-bridge=true
266 iface.xapi1.internal=true
271 AT_SETUP([simple fake bridge])
272 AT_KEYWORDS([ovs-vsctl fake-bridge])
273 AT_CHECK([RUN_OVS_VSCTL(
275 [add-port xenbr0 eth0],
276 [add-br xapi1 xenbr0 9],
277 [add-port xapi1 eth0.9])])
278 AT_CHECK([cat conf], [0], [SIMPLE_FAKE_CONF])
279 CHECK_BRIDGES([xenbr0, xenbr0, 0], [xapi1, xenbr0, 9])
280 CHECK_PORTS([xenbr0], [eth0])
281 CHECK_IFACES([xenbr0], [eth0])
282 CHECK_PORTS([xapi1], [eth0.9])
283 CHECK_IFACES([xapi1], [eth0.9])
286 AT_SETUP([simple fake bridge + del-br fake bridge])
287 AT_KEYWORDS([ovs-vsctl fake-bridge])
288 AT_DATA([conf], [SIMPLE_FAKE_CONF])
289 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
290 AT_CHECK([cat conf], [0], [dnl
291 bridge.xenbr0.port=eth0
292 bridge.xenbr0.port=xenbr0
294 CHECK_BRIDGES([xenbr0, xenbr0, 0])
295 CHECK_PORTS([xenbr0], [eth0])
296 CHECK_IFACES([xenbr0], [eth0])
299 AT_SETUP([simple fake bridge + del-br real bridge])
300 AT_KEYWORDS([ovs-vsctl fake-bridge])
301 AT_DATA([conf], [SIMPLE_FAKE_CONF])
302 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
303 AT_CHECK([cat conf], [0], [])
307 m4_define([BOND_FAKE_CONF], [dnl
308 bonding.bond0.slave=eth0
309 bonding.bond0.slave=eth1
310 bridge.xapi1.port=bond0
311 bridge.xapi1.port=bond0.11
312 bridge.xapi1.port=xapi1
313 bridge.xapi1.port=xapi2
314 iface.xapi2.fake-bridge=true
315 iface.xapi2.internal=true
320 AT_SETUP([fake bridge on bond])
321 AT_KEYWORDS([ovs-vsctl fake-bridge])
322 AT_CHECK([RUN_OVS_VSCTL(
324 [add-bond xapi1 bond0 eth0 eth1],
325 [add-br xapi2 xapi1 11],
326 [add-port xapi2 bond0.11])])
327 AT_CHECK([cat conf], [0], [BOND_FAKE_CONF])
328 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
329 CHECK_PORTS([xapi1], [bond0])
330 CHECK_IFACES([xapi1], [eth0], [eth1])
331 CHECK_PORTS([xapi2], [bond0.11])
332 CHECK_IFACES([xapi2], [bond0.11])
335 AT_SETUP([fake bridge on bond + del-br fake bridge])
336 AT_KEYWORDS([ovs-vsctl fake-bridge])
337 AT_DATA([conf], [BOND_FAKE_CONF])
338 AT_CHECK([RUN_OVS_VSCTL([--oneline del-br xapi2])], [0], [
340 CHECK_BRIDGES([xapi1, xapi1, 0])
341 CHECK_PORTS([xapi1], [bond0])
342 CHECK_IFACES([xapi1], [eth0], [eth1])
345 AT_SETUP([fake bridge on bond + del-br real bridge])
346 AT_KEYWORDS([ovs-vsctl fake-bridge])
347 AT_DATA([conf], [BOND_FAKE_CONF])
348 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])