834ecc6c9da1998389c486c61853d1710bcf8a02
[sliver-openvswitch.git] / tests / ovs-vsctl.at
1 dnl RUN_OVS_VSCTL(COMMAND, ...)
2 dnl
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],
6   [: >> conf
7 m4_foreach([command], [$@], [ovs-vsctl --no-reload --config=conf command
8 ])])
9
10 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
11 dnl
12 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
13 dnl which must be in alphabetical order.  Also checks that each BRIDGE has the
14 dnl specified PARENT and is on the given VLAN.
15 m4_define([_CHECK_BRIDGE],
16   [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
17 ])
18
19    # Check br-to-vlan, without --oneline.
20    AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
21 ])
22    # Check br-to-vlan, with --oneline.
23    # (This particular test is interesting with --oneline because it returns
24    # an integer instead of a string and that can cause type mismatches inside
25    # python if not done carefully.)
26    AT_CHECK([RUN_OVS_VSCTL([--oneline br-to-vlan $1])], [0], [$3
27 ])])
28 m4_define([CHECK_BRIDGES],
29   [dnl Check that the bridges appear on list-br, without --oneline.
30    AT_CHECK(
31      [RUN_OVS_VSCTL([list-br])],
32      [0],
33      [m4_foreach([brinfo], [$@], [m4_car(brinfo)
34 ])])
35
36    dnl Check that the bridges appear on list-br, with --oneline.
37    AT_CHECK(
38      [RUN_OVS_VSCTL([--oneline list-br])],
39      [0],
40      [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
41 ])
42
43    dnl Check that each bridge exists according to br-exists and that
44    dnl a bridge that should not exist does not.
45    m4_foreach([brinfo], [$@], 
46               [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])])])
47    AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2])
48
49    dnl Check that each bridge has the expected parent and VLAN.
50    m4_map([_CHECK_BRIDGE], [$@])])
51
52 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
53 dnl
54 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
55 dnl list of ports, which must be in alphabetical order.  Also checks
56 dnl that "ovs-vsctl port-to-br" reports that each port is
57 dnl in BRIDGE.
58 m4_define([CHECK_PORTS],
59   [dnl Check ports without --oneline.
60    AT_CHECK(
61      [RUN_OVS_VSCTL([list-ports $1])],
62      [0],
63      [m4_foreach([port], m4_cdr($@), [port
64 ])])
65
66    dnl Check ports with --oneline.
67    AT_CHECK(
68      [RUN_OVS_VSCTL([--oneline list-ports $1])],
69      [0],
70      [m4_join([\n], m4_shift($@))
71 ])
72    AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [], [ovs-vsctl: no port named $1
73 ])
74    m4_foreach(
75      [port], m4_cdr($@), 
76      [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
77 ])])])
78
79 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
80 dnl
81 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
82 dnl list of ifaces, which must be in alphabetical order.  Also checks
83 dnl that "ovs-vsctl iface-to-br" reports that each interface is
84 dnl in BRIDGE.
85 m4_define([CHECK_IFACES],
86   [AT_CHECK(
87      [RUN_OVS_VSCTL([list-ifaces $1])],
88      [0],
89      [m4_foreach([iface], m4_cdr($@), [iface
90 ])])
91    AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [], [ovs-vsctl: no interface named $1
92 ])
93    m4_foreach(
94      [iface], m4_cdr($@), 
95      [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
96 ])])])
97
98 dnl ----------------------------------------------------------------------
99 AT_BANNER([ovs-vsctl unit tests -- real bridges])
100
101 AT_SETUP([add-br a])
102 AT_KEYWORDS([ovs-vsctl])
103 AT_CHECK([RUN_OVS_VSCTL([add-br a])])
104 AT_CHECK([cat conf], [0], [dnl
105 bridge.a.port=a
106 ])
107 CHECK_BRIDGES([a, a, 0])
108 CHECK_PORTS([a])
109 CHECK_IFACES([a])
110 AT_CLEANUP
111
112 AT_SETUP([add-br a, add-br b])
113 AT_KEYWORDS([ovs-vsctl])
114 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])])
115 AT_CHECK([cat conf], [0], [dnl
116 bridge.a.port=a
117 bridge.b.port=b
118 ])
119 CHECK_BRIDGES([a, a, 0], [b, b, 0])
120 CHECK_PORTS([a])
121 CHECK_IFACES([a])
122 CHECK_PORTS([b])
123 CHECK_IFACES([b])
124 AT_CLEANUP
125
126 AT_SETUP([add-br a, add-br b, del-br a])
127 AT_KEYWORDS([ovs-vsctl])
128 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])])
129 AT_CHECK([cat conf], [0], [dnl
130 bridge.b.port=b
131 ])
132 CHECK_BRIDGES([b, b, 0])
133 CHECK_PORTS([b])
134 CHECK_IFACES([b])
135 AT_CLEANUP
136
137 AT_SETUP([add-br a, add-port a a1, add-port a a2])
138 AT_KEYWORDS([ovs-vsctl])
139 AT_CHECK([RUN_OVS_VSCTL(
140    [add-br a], 
141    [add-port a a1],
142    [add-port a a2])])
143 AT_CHECK([cat conf], [0],
144   [bridge.a.port=a
145 bridge.a.port=a1
146 bridge.a.port=a2
147 ])
148 CHECK_BRIDGES([a, a, 0])
149 CHECK_PORTS([a], [a1], [a2])
150 CHECK_IFACES([a], [a1], [a2])
151 AT_CLEANUP
152
153 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
154 AT_KEYWORDS([ovs-vsctl])
155 AT_CHECK([RUN_OVS_VSCTL(
156    [add-br a], 
157    [add-br b], 
158    [add-port a a1],
159    [add-port b b1],
160    [del-br a])])
161 AT_CHECK([cat conf], [0],
162   [bridge.b.port=b
163 bridge.b.port=b1
164 ])
165 CHECK_BRIDGES([b, b, 0])
166 CHECK_PORTS([b], [b1])
167 CHECK_IFACES([b], [b1])
168 AT_CLEANUP
169
170 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
171 AT_KEYWORDS([ovs-vsctl])
172 AT_CHECK([RUN_OVS_VSCTL(
173    [add-br a], 
174    [add-bond a bond0 a1 a2 a3])])
175 AT_CHECK([cat conf], [0], [dnl
176 bonding.bond0.slave=a1
177 bonding.bond0.slave=a2
178 bonding.bond0.slave=a3
179 bridge.a.port=a
180 bridge.a.port=bond0
181 ])
182 CHECK_BRIDGES([a, a, 0])
183 CHECK_PORTS([a], [bond0])
184 CHECK_IFACES([a], [a1], [a2], [a3])
185 AT_CLEANUP
186
187 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
188 AT_KEYWORDS([ovs-vsctl])
189 AT_CHECK([RUN_OVS_VSCTL(
190   [add-br a], 
191   [add-br b], 
192   [add-port a a1],
193   [add-port b b1],
194   [del-port a a1])])
195 AT_CHECK([cat conf], [0], [dnl
196 bridge.a.port=a
197 bridge.b.port=b
198 bridge.b.port=b1
199 ])
200 CHECK_BRIDGES([a, a, 0], [b, b, 0])
201 CHECK_PORTS([a])
202 CHECK_IFACES([a])
203 CHECK_PORTS([b], [b1])
204 CHECK_IFACES([b], [b1])
205 AT_CLEANUP
206
207 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
208 AT_KEYWORDS([ovs-vsctl])
209 AT_CHECK([RUN_OVS_VSCTL(
210   [add-br a], 
211   [add-bond a bond0 a1 a2 a3],
212   [del-port bond0])])
213 AT_CHECK([cat conf], [0], [dnl
214 bridge.a.port=a
215 ])
216 CHECK_BRIDGES([a, a, 0])
217 CHECK_PORTS([a])
218 AT_CLEANUP
219
220 dnl ----------------------------------------------------------------------
221 AT_BANNER([ovs-vsctl unit tests -- fake bridges])
222
223 m4_define([SIMPLE_FAKE_CONF], [dnl
224 bridge.xenbr0.port=eth0
225 bridge.xenbr0.port=eth0.9
226 bridge.xenbr0.port=xapi1
227 bridge.xenbr0.port=xenbr0
228 iface.xapi1.fake-bridge=true
229 iface.xapi1.internal=true
230 vlan.eth0.9.tag=9
231 vlan.xapi1.tag=9
232 ])
233
234 AT_SETUP([simple fake bridge])
235 AT_KEYWORDS([ovs-vsctl fake-bridge])
236 AT_CHECK([RUN_OVS_VSCTL(
237   [add-br xenbr0],
238   [add-port xenbr0 eth0],
239   [add-br xapi1 xenbr0 9],
240   [add-port xapi1 eth0.9])])
241 AT_CHECK([cat conf], [0], [SIMPLE_FAKE_CONF])
242 CHECK_BRIDGES([xenbr0, xenbr0, 0], [xapi1, xenbr0, 9])
243 CHECK_PORTS([xenbr0], [eth0])
244 CHECK_IFACES([xenbr0], [eth0])
245 CHECK_PORTS([xapi1], [eth0.9])
246 CHECK_IFACES([xapi1], [eth0.9])
247 AT_CLEANUP
248
249 AT_SETUP([simple fake bridge + del-br fake bridge])
250 AT_KEYWORDS([ovs-vsctl fake-bridge])
251 AT_DATA([conf], [SIMPLE_FAKE_CONF])
252 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
253 AT_CHECK([cat conf], [0], [dnl
254 bridge.xenbr0.port=eth0
255 bridge.xenbr0.port=xenbr0
256 ])
257 CHECK_BRIDGES([xenbr0, xenbr0, 0])
258 CHECK_PORTS([xenbr0], [eth0])
259 CHECK_IFACES([xenbr0], [eth0])
260 AT_CLEANUP
261
262 AT_SETUP([simple fake bridge + del-br real bridge])
263 AT_KEYWORDS([ovs-vsctl fake-bridge])
264 AT_DATA([conf], [SIMPLE_FAKE_CONF])
265 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
266 AT_CHECK([cat conf], [0], [])
267 CHECK_BRIDGES
268 AT_CLEANUP
269
270 m4_define([BOND_FAKE_CONF], [dnl
271 bonding.bond0.slave=eth0
272 bonding.bond0.slave=eth1
273 bridge.xapi1.port=bond0
274 bridge.xapi1.port=bond0.11
275 bridge.xapi1.port=xapi1
276 bridge.xapi1.port=xapi2
277 iface.xapi2.fake-bridge=true
278 iface.xapi2.internal=true
279 vlan.bond0.11.tag=11
280 vlan.xapi2.tag=11
281 ])
282
283 AT_SETUP([fake bridge on bond])
284 AT_KEYWORDS([ovs-vsctl fake-bridge])
285 AT_CHECK([RUN_OVS_VSCTL(
286   [add-br xapi1],
287   [add-bond xapi1 bond0 eth0 eth1],
288   [add-br xapi2 xapi1 11],
289   [add-port xapi2 bond0.11])])
290 AT_CHECK([cat conf], [0], [BOND_FAKE_CONF])
291 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
292 CHECK_PORTS([xapi1], [bond0])
293 CHECK_IFACES([xapi1], [eth0], [eth1])
294 CHECK_PORTS([xapi2], [bond0.11])
295 CHECK_IFACES([xapi2], [bond0.11])
296 AT_CLEANUP
297
298 AT_SETUP([fake bridge on bond + del-br fake bridge])
299 AT_KEYWORDS([ovs-vsctl fake-bridge])
300 AT_DATA([conf], [BOND_FAKE_CONF])
301 AT_CHECK([RUN_OVS_VSCTL([del-br xapi2])])
302 CHECK_BRIDGES([xapi1, xapi1, 0])
303 CHECK_PORTS([xapi1], [bond0])
304 CHECK_IFACES([xapi1], [eth0], [eth1])
305 AT_CLEANUP
306
307 AT_SETUP([fake bridge on bond + del-br real bridge])
308 AT_KEYWORDS([ovs-vsctl fake-bridge])
309 AT_DATA([conf], [BOND_FAKE_CONF])
310 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
311 CHECK_BRIDGES
312 AT_CLEANUP