]>
Commit | Line | Data |
---|---|---|
c75d1511 BP |
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], | |
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 | |
9 | dnl OVS_VSCTL_CLEANUP | |
10 | dnl | |
11 | dnl Kills off the database server. | |
028cbd99 | 12 | m4_define([OVS_VSCTL_CLEANUP], [OVSDB_SERVER_SHUTDOWN]) |
c75d1511 | 13 | |
3b135da3 BP |
14 | dnl RUN_OVS_VSCTL(COMMAND, ...) |
15 | dnl | |
c75d1511 | 16 | dnl Executes each ovs-vsctl COMMAND. |
3b135da3 | 17 | m4_define([RUN_OVS_VSCTL], |
b54e22e9 | 18 | [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket -- command |
460aad80 BP |
19 | ])]) |
20 | m4_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 |
24 | dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...) |
25 | dnl | |
c75d1511 | 26 | dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl. |
4d14e30f | 27 | m4_define([RUN_OVS_VSCTL_TOGETHER], |
b54e22e9 | 28 | [ovs-vsctl --no-wait -vreconnect:ANY:emer --db=unix:socket --oneline dnl |
460aad80 | 29 | m4_foreach([command], [$@], [ -- command])]) |
4d14e30f | 30 | |
8e58fa9a | 31 | dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...) |
3b135da3 BP |
32 | dnl |
33 | dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges, | |
8e58fa9a BP |
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 | |
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 | 55 | m4_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 | |
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], | |
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 | |
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 | |
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 |
142 | dnl ---------------------------------------------------------------------- |
143 | AT_BANNER([ovs-vsctl unit tests -- real bridges]) | |
144 | ||
3b135da3 BP |
145 | AT_SETUP([add-br a]) |
146 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 BP |
147 | OVS_VSCTL_SETUP |
148 | AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 149 | CHECK_BRIDGES([a, a, 0]) |
3b135da3 BP |
150 | CHECK_PORTS([a]) |
151 | CHECK_IFACES([a]) | |
c75d1511 | 152 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
153 | AT_CLEANUP |
154 | ||
1125a1b9 BP |
155 | AT_SETUP([add-br a, add-br a]) |
156 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 BP |
157 | OVS_VSCTL_SETUP |
158 | AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP]) | |
1125a1b9 BP |
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 | |
c75d1511 BP |
161 | ], [OVS_VSCTL_CLEANUP]) |
162 | OVS_VSCTL_CLEANUP | |
1125a1b9 BP |
163 | AT_CLEANUP |
164 | ||
3b135da3 BP |
165 | AT_SETUP([add-br a, add-br b]) |
166 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 BP |
167 | OVS_VSCTL_SETUP |
168 | AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [], | |
169 | [OVS_VSCTL_CLEANUP]) | |
aeee85aa BP |
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]) | |
8e58fa9a | 174 | CHECK_BRIDGES([a, a, 0], [b, b, 0]) |
3b135da3 BP |
175 | CHECK_PORTS([a]) |
176 | CHECK_IFACES([a]) | |
177 | CHECK_PORTS([b]) | |
178 | CHECK_IFACES([b]) | |
c75d1511 | 179 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
180 | AT_CLEANUP |
181 | ||
182 | AT_SETUP([add-br a, add-br b, del-br a]) | |
183 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 BP |
184 | OVS_VSCTL_SETUP |
185 | AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [], | |
186 | [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 187 | CHECK_BRIDGES([b, b, 0]) |
3b135da3 BP |
188 | CHECK_PORTS([b]) |
189 | CHECK_IFACES([b]) | |
c75d1511 | 190 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
191 | AT_CLEANUP |
192 | ||
2792c2ad BP |
193 | AT_SETUP([add-br a, add-port a a1, add-port a a2]) |
194 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 195 | OVS_VSCTL_SETUP |
2792c2ad | 196 | AT_CHECK([RUN_OVS_VSCTL( |
dfbe07ba | 197 | [add-br a], |
460aad80 | 198 | [--if-exists del-br b], |
2792c2ad | 199 | [add-port a a1], |
c75d1511 | 200 | [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
2792c2ad BP |
201 | CHECK_BRIDGES([a, a, 0]) |
202 | CHECK_PORTS([a], [a1], [a2]) | |
203 | CHECK_IFACES([a], [a1], [a2]) | |
c75d1511 | 204 | OVS_VSCTL_CLEANUP |
2792c2ad BP |
205 | AT_CLEANUP |
206 | ||
1125a1b9 BP |
207 | AT_SETUP([add-br a, add-port a a1, add-port a a1]) |
208 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 209 | OVS_VSCTL_SETUP |
1125a1b9 BP |
210 | AT_CHECK([RUN_OVS_VSCTL( |
211 | [add-br a], | |
c75d1511 | 212 | [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
1125a1b9 BP |
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 | |
c75d1511 BP |
215 | ], [OVS_VSCTL_CLEANUP]) |
216 | OVS_VSCTL_CLEANUP | |
1125a1b9 BP |
217 | AT_CLEANUP |
218 | ||
3b135da3 BP |
219 | AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a]) |
220 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 221 | OVS_VSCTL_SETUP |
4d14e30f | 222 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( |
3b135da3 BP |
223 | [add-br a], |
224 | [add-br b], | |
225 | [add-port a a1], | |
226 | [add-port b b1], | |
460aad80 BP |
227 | [--if-exists del-port b b2], |
228 | [del-br a])], [0], [ | |
229 | ||
230 | ||
231 | ||
232 | ||
233 | ||
234 | ], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 235 | CHECK_BRIDGES([b, b, 0]) |
3b135da3 BP |
236 | CHECK_PORTS([b], [b1]) |
237 | CHECK_IFACES([b], [b1]) | |
c75d1511 | 238 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
239 | AT_CLEANUP |
240 | ||
241 | AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3]) | |
242 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 243 | OVS_VSCTL_SETUP |
3b135da3 BP |
244 | AT_CHECK([RUN_OVS_VSCTL( |
245 | [add-br a], | |
c75d1511 | 246 | [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
8e58fa9a | 247 | CHECK_BRIDGES([a, a, 0]) |
3b135da3 BP |
248 | CHECK_PORTS([a], [bond0]) |
249 | CHECK_IFACES([a], [a1], [a2], [a3]) | |
c75d1511 | 250 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
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]) | |
c75d1511 | 255 | OVS_VSCTL_SETUP |
3b135da3 BP |
256 | AT_CHECK([RUN_OVS_VSCTL( |
257 | [add-br a], | |
258 | [add-br b], | |
259 | [add-port a a1], | |
260 | [add-port b b1], | |
c75d1511 | 261 | [del-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
8e58fa9a | 262 | CHECK_BRIDGES([a, a, 0], [b, b, 0]) |
3b135da3 BP |
263 | CHECK_PORTS([a]) |
264 | CHECK_IFACES([a]) | |
265 | CHECK_PORTS([b], [b1]) | |
266 | CHECK_IFACES([b], [b1]) | |
c75d1511 | 267 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
268 | AT_CLEANUP |
269 | ||
3d1b9636 | 270 | AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0]) |
3b135da3 | 271 | AT_KEYWORDS([ovs-vsctl]) |
c75d1511 | 272 | OVS_VSCTL_SETUP |
4d14e30f | 273 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( |
3b135da3 BP |
274 | [add-br a], |
275 | [add-bond a bond0 a1 a2 a3], | |
460aad80 BP |
276 | [del-port bond0])], [0], [ |
277 | ||
278 | ||
279 | ], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 280 | CHECK_BRIDGES([a, a, 0]) |
3b135da3 | 281 | CHECK_PORTS([a]) |
c75d1511 | 282 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
283 | AT_CLEANUP |
284 | ||
457e1eb0 BP |
285 | AT_SETUP([external IDs]) |
286 | AT_KEYWORDS([ovs-vsctl]) | |
287 | OVS_VSCTL_SETUP | |
288 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
460aad80 | 289 | [add-br a], |
457e1eb0 BP |
290 | [add-port a a1], |
291 | [add-bond a bond0 a2 a3], | |
292 | [br-set-external-id a key0 value0], | |
e328faad BP |
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], | |
457e1eb0 BP |
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], | |
e328faad BP |
304 | [get port a1 external-ids], |
305 | [get interface a2 external-ids], | |
306 | [get interface a3 external-ids])], [0], [ | |
457e1eb0 BP |
307 | |
308 | ||
309 | ||
310 | ||
311 | ||
312 | ||
313 | ||
314 | key0=value0 | |
315 | value0 | |
316 | ||
317 | ||
318 | key0=othervalue | |
319 | ||
320 | ||
e328faad BP |
321 | {"key1"="value1"} |
322 | {"key2"="value2", "key3"="value3"} | |
323 | {"key4"="value4"} | |
457e1eb0 BP |
324 | ], [], [OVS_VSCTL_CLEANUP]) |
325 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
460aad80 | 326 | [br-get-external-id a], |
e328faad BP |
327 | [get port a1 external-ids], |
328 | [get interface a2 external-ids], | |
329 | [get interface a3 external-ids])], [0], | |
457e1eb0 | 330 | [ |
e328faad BP |
331 | {"key1"="value1"} |
332 | {"key2"="value2", "key3"="value3"} | |
333 | {"key4"="value4"} | |
457e1eb0 BP |
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 | ||
8e58fa9a | 341 | dnl ---------------------------------------------------------------------- |
3b135da3 BP |
342 | AT_BANNER([ovs-vsctl unit tests -- fake bridges]) |
343 | ||
dfbe07ba BP |
344 | m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF], |
345 | [AT_CHECK( | |
346 | [RUN_OVS_VSCTL( | |
347 | [add-br xenbr0], | |
aeee85aa | 348 | [--may-exist add-br xenbr0], |
dfbe07ba BP |
349 | [add-port xenbr0 eth0], |
350 | [add-br xapi1 xenbr0 9], | |
aeee85aa | 351 | [--may-exist add-br xapi1 xenbr0 9], |
dfbe07ba BP |
352 | [add-port xapi1 eth0.9])], |
353 | [0], [], [], [OVS_VSCTL_CLEANUP])]) | |
3b135da3 BP |
354 | |
355 | AT_SETUP([simple fake bridge]) | |
356 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 357 | OVS_VSCTL_SETUP |
dfbe07ba | 358 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF |
aeee85aa BP |
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]) | |
dfbe07ba | 368 | CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0]) |
3b135da3 BP |
369 | CHECK_PORTS([xenbr0], [eth0]) |
370 | CHECK_IFACES([xenbr0], [eth0]) | |
371 | CHECK_PORTS([xapi1], [eth0.9]) | |
372 | CHECK_IFACES([xapi1], [eth0.9]) | |
c75d1511 | 373 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
374 | AT_CLEANUP |
375 | ||
376 | AT_SETUP([simple fake bridge + del-br fake bridge]) | |
377 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 378 | OVS_VSCTL_SETUP |
dfbe07ba BP |
379 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF |
380 | AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 381 | CHECK_BRIDGES([xenbr0, xenbr0, 0]) |
3b135da3 BP |
382 | CHECK_PORTS([xenbr0], [eth0]) |
383 | CHECK_IFACES([xenbr0], [eth0]) | |
c75d1511 | 384 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
385 | AT_CLEANUP |
386 | ||
387 | AT_SETUP([simple fake bridge + del-br real bridge]) | |
388 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 389 | OVS_VSCTL_SETUP |
dfbe07ba BP |
390 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF |
391 | AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP]) | |
3b135da3 | 392 | CHECK_BRIDGES |
c75d1511 | 393 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
394 | AT_CLEANUP |
395 | ||
457e1eb0 BP |
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( | |
460aad80 | 401 | [br-set-external-id xenbr0 key0 value0], |
457e1eb0 BP |
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 | ||
dfbe07ba BP |
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])]) | |
3b135da3 BP |
429 | |
430 | AT_SETUP([fake bridge on bond]) | |
431 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 432 | OVS_VSCTL_SETUP |
dfbe07ba | 433 | OVS_VSCTL_SETUP_BOND_FAKE_CONF |
8e58fa9a | 434 | CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11]) |
3b135da3 BP |
435 | CHECK_PORTS([xapi1], [bond0]) |
436 | CHECK_IFACES([xapi1], [eth0], [eth1]) | |
437 | CHECK_PORTS([xapi2], [bond0.11]) | |
438 | CHECK_IFACES([xapi2], [bond0.11]) | |
c75d1511 | 439 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
440 | AT_CLEANUP |
441 | ||
442 | AT_SETUP([fake bridge on bond + del-br fake bridge]) | |
443 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 444 | OVS_VSCTL_SETUP |
dfbe07ba | 445 | OVS_VSCTL_SETUP_BOND_FAKE_CONF |
460aad80 | 446 | AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [ |
dfbe07ba | 447 | ], [], [OVS_VSCTL_CLEANUP]) |
8e58fa9a | 448 | CHECK_BRIDGES([xapi1, xapi1, 0]) |
3b135da3 BP |
449 | CHECK_PORTS([xapi1], [bond0]) |
450 | CHECK_IFACES([xapi1], [eth0], [eth1]) | |
c75d1511 | 451 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
452 | AT_CLEANUP |
453 | ||
454 | AT_SETUP([fake bridge on bond + del-br real bridge]) | |
455 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
dfbe07ba BP |
456 | OVS_VSCTL_SETUP |
457 | OVS_VSCTL_SETUP_BOND_FAKE_CONF | |
3b135da3 BP |
458 | AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])]) |
459 | CHECK_BRIDGES | |
c75d1511 | 460 | OVS_VSCTL_CLEANUP |
3b135da3 | 461 | AT_CLEANUP |
5c414a2e BP |
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 | |
0d0f05b9 | 469 | AT_CHECK([RUN_OVS_VSCTL([create b name=br0])], |
5c414a2e BP |
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> | |
bd76d25d BP |
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 : [] | |
5c414a2e BP |
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]) | |
0d0f05b9 | 514 | AT_CHECK([RUN_OVS_VSCTL([destroy b br0])], |
5c414a2e BP |
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 | |
0d0f05b9 | 524 | AT_CHECK([RUN_OVS_VSCTL([create b name=br0])], |
5c414a2e BP |
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]) | |
0d0f05b9 | 530 | AT_CHECK([RUN_OVS_VSCTL([create n targets='"1.2.3.4:567"'])], |
5c414a2e BP |
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> | |
bd76d25d BP |
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"] | |
5c414a2e BP |
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])], | |
bd76d25d | 575 | [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive) |
5c414a2e BP |
576 | ], [OVS_VSCTL_CLEANUP]) |
577 | AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])], | |
bd76d25d | 578 | [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive) |
5c414a2e | 579 | ], [OVS_VSCTL_CLEANUP]) |
bfe8e67a BP |
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" | |
5c414a2e | 583 | ], [OVS_VSCTL_CLEANUP]) |
bfe8e67a BP |
584 | else |
585 | AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])], | |
586 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
587 | fi | |
5c414a2e BP |
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]) | |
bd76d25d | 591 | AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])], |
5c414a2e BP |
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]) | |
5c414a2e BP |
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]) | |
5c414a2e BP |
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]) | |
0d0f05b9 | 600 | AT_CHECK([RUN_OVS_VSCTL([destroy b br2])], |
5c414a2e BP |
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 | |
0d0f05b9 | 612 | AT_CHECK([RUN_OVS_VSCTL([create Bridge name=br0 -- list b])], |
5c414a2e BP |
613 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
614 | AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], | |
615 | [[<0> | |
bd76d25d BP |
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 : [] | |
5c414a2e BP |
628 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
629 | OVS_VSCTL_CLEANUP | |
630 | AT_CLEANUP |