]>
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], |
b524945e | 18 | [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket -- command |
460aad80 BP |
19 | ])]) |
20 | m4_define([RUN_OVS_VSCTL_ONELINE], | |
b524945e | 21 | [m4_foreach([command], [$@], [ovs-vsctl --timeout=5 --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], |
b524945e | 28 | [ovs-vsctl --timeout=5 --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 | ||
28a14bf3 EJ |
193 | AT_SETUP([add-br a, del-br a, add-br a]) |
194 | AT_KEYWORDS([ovs-vsctl]) | |
195 | OVS_VSCTL_SETUP | |
196 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
197 | [add-br a], | |
198 | [del-br a], | |
199 | [add-br a], | |
200 | [set Interface a other_config:key=value], | |
201 | [get Interface a other_config:key])], [0], [ | |
202 | ||
203 | ||
204 | ||
205 | value | |
206 | ], [], [OVS_VSCTL_CLEANUP]) | |
207 | CHECK_BRIDGES([a, a, 0]) | |
208 | CHECK_PORTS([a]) | |
209 | CHECK_IFACES([a]) | |
210 | OVS_VSCTL_CLEANUP | |
211 | AT_CLEANUP | |
212 | ||
2792c2ad BP |
213 | AT_SETUP([add-br a, add-port a a1, add-port a a2]) |
214 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 215 | OVS_VSCTL_SETUP |
2792c2ad | 216 | AT_CHECK([RUN_OVS_VSCTL( |
dfbe07ba | 217 | [add-br a], |
460aad80 | 218 | [--if-exists del-br b], |
2792c2ad | 219 | [add-port a a1], |
c75d1511 | 220 | [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
2792c2ad BP |
221 | CHECK_BRIDGES([a, a, 0]) |
222 | CHECK_PORTS([a], [a1], [a2]) | |
223 | CHECK_IFACES([a], [a1], [a2]) | |
c75d1511 | 224 | OVS_VSCTL_CLEANUP |
2792c2ad BP |
225 | AT_CLEANUP |
226 | ||
1125a1b9 BP |
227 | AT_SETUP([add-br a, add-port a a1, add-port a a1]) |
228 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 229 | OVS_VSCTL_SETUP |
1125a1b9 BP |
230 | AT_CHECK([RUN_OVS_VSCTL( |
231 | [add-br a], | |
c75d1511 | 232 | [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
1125a1b9 BP |
233 | AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [], |
234 | [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a | |
c75d1511 BP |
235 | ], [OVS_VSCTL_CLEANUP]) |
236 | OVS_VSCTL_CLEANUP | |
1125a1b9 BP |
237 | AT_CLEANUP |
238 | ||
3b135da3 BP |
239 | AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a]) |
240 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 241 | OVS_VSCTL_SETUP |
4d14e30f | 242 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( |
3b135da3 BP |
243 | [add-br a], |
244 | [add-br b], | |
245 | [add-port a a1], | |
246 | [add-port b b1], | |
460aad80 BP |
247 | [--if-exists del-port b b2], |
248 | [del-br a])], [0], [ | |
249 | ||
250 | ||
251 | ||
252 | ||
253 | ||
254 | ], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 255 | CHECK_BRIDGES([b, b, 0]) |
3b135da3 BP |
256 | CHECK_PORTS([b], [b1]) |
257 | CHECK_IFACES([b], [b1]) | |
c75d1511 | 258 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
259 | AT_CLEANUP |
260 | ||
261 | AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3]) | |
262 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 263 | OVS_VSCTL_SETUP |
3b135da3 BP |
264 | AT_CHECK([RUN_OVS_VSCTL( |
265 | [add-br a], | |
c75d1511 | 266 | [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
bb1c67c8 BP |
267 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [], |
268 | [OVS_VSCTL_CLEANUP]) | |
269 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [], | |
270 | [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3 | |
271 | ], | |
272 | [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 273 | CHECK_BRIDGES([a, a, 0]) |
3b135da3 BP |
274 | CHECK_PORTS([a], [bond0]) |
275 | CHECK_IFACES([a], [a1], [a2], [a3]) | |
c75d1511 | 276 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
277 | AT_CLEANUP |
278 | ||
279 | AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1]) | |
280 | AT_KEYWORDS([ovs-vsctl]) | |
c75d1511 | 281 | OVS_VSCTL_SETUP |
3b135da3 BP |
282 | AT_CHECK([RUN_OVS_VSCTL( |
283 | [add-br a], | |
284 | [add-br b], | |
18b239f5 BP |
285 | [add-port a a1 tag=9], |
286 | [get port a1 tag], | |
bb1c67c8 | 287 | [--may-exist add-port b b1], |
18b239f5 BP |
288 | [del-port a a1])], [0], [9 |
289 | ], [], [OVS_VSCTL_CLEANUP]) | |
bb1c67c8 BP |
290 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [], |
291 | [OVS_VSCTL_CLEANUP]) | |
292 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [], | |
293 | [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b | |
294 | ], | |
295 | [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 296 | CHECK_BRIDGES([a, a, 0], [b, b, 0]) |
3b135da3 BP |
297 | CHECK_PORTS([a]) |
298 | CHECK_IFACES([a]) | |
299 | CHECK_PORTS([b], [b1]) | |
300 | CHECK_IFACES([b], [b1]) | |
c75d1511 | 301 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
302 | AT_CLEANUP |
303 | ||
3d1b9636 | 304 | AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0]) |
3b135da3 | 305 | AT_KEYWORDS([ovs-vsctl]) |
c75d1511 | 306 | OVS_VSCTL_SETUP |
4d14e30f | 307 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( |
3b135da3 | 308 | [add-br a], |
18b239f5 BP |
309 | [add-bond a bond0 a1 a2 a3 tag=9], |
310 | [get Port bond0 tag], | |
460aad80 BP |
311 | [del-port bond0])], [0], [ |
312 | ||
18b239f5 | 313 | 9 |
460aad80 BP |
314 | |
315 | ], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 316 | CHECK_BRIDGES([a, a, 0]) |
3b135da3 | 317 | CHECK_PORTS([a]) |
c75d1511 | 318 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
319 | AT_CLEANUP |
320 | ||
457e1eb0 BP |
321 | AT_SETUP([external IDs]) |
322 | AT_KEYWORDS([ovs-vsctl]) | |
323 | OVS_VSCTL_SETUP | |
fbd8715e | 324 | AT_CHECK([RUN_OVS_VSCTL_ONELINE( |
460aad80 | 325 | [add-br a], |
457e1eb0 BP |
326 | [add-port a a1], |
327 | [add-bond a bond0 a2 a3], | |
328 | [br-set-external-id a key0 value0], | |
e328faad BP |
329 | [set port a1 external-ids:key1=value1], |
330 | [set interface a2 external-ids:key2=value2], | |
331 | [set interface a2 external-ids:key3=value3], | |
332 | [set interface a3 external-ids:key4=value4], | |
457e1eb0 BP |
333 | [br-get-external-id a], |
334 | [br-get-external-id a key0], | |
335 | [br-get-external-id a key1], | |
336 | [br-set-external-id a key0 othervalue], | |
337 | [br-get-external-id a], | |
338 | [br-set-external-id a key0], | |
339 | [br-get-external-id a], | |
e328faad BP |
340 | [get port a1 external-ids], |
341 | [get interface a2 external-ids], | |
342 | [get interface a3 external-ids])], [0], [ | |
457e1eb0 BP |
343 | |
344 | ||
345 | ||
346 | ||
347 | ||
348 | ||
349 | ||
350 | key0=value0 | |
351 | value0 | |
352 | ||
353 | ||
354 | key0=othervalue | |
355 | ||
356 | ||
e328faad BP |
357 | {"key1"="value1"} |
358 | {"key2"="value2", "key3"="value3"} | |
359 | {"key4"="value4"} | |
457e1eb0 BP |
360 | ], [], [OVS_VSCTL_CLEANUP]) |
361 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
460aad80 | 362 | [br-get-external-id a], |
e328faad BP |
363 | [get port a1 external-ids], |
364 | [get interface a2 external-ids], | |
365 | [get interface a3 external-ids])], [0], | |
457e1eb0 | 366 | [ |
e328faad BP |
367 | {"key1"="value1"} |
368 | {"key2"="value2", "key3"="value3"} | |
369 | {"key4"="value4"} | |
457e1eb0 BP |
370 | ], [], [OVS_VSCTL_CLEANUP]) |
371 | CHECK_BRIDGES([a, a, 0]) | |
372 | CHECK_PORTS([a], [a1], [bond0]) | |
373 | CHECK_IFACES([a], [a1], [a2], [a3]) | |
374 | OVS_VSCTL_CLEANUP | |
375 | AT_CLEANUP | |
376 | ||
76ce9432 BP |
377 | AT_SETUP([controllers]) |
378 | AT_KEYWORDS([controller ovs-vsctl]) | |
379 | OVS_VSCTL_SETUP | |
380 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
381 | [add-br br0], | |
382 | ||
76ce9432 | 383 | [get-controller br0], |
76ce9432 | 384 | [set-controller br0 tcp:4.5.6.7], |
76ce9432 BP |
385 | [get-controller br0], |
386 | ||
387 | [del-controller br0], | |
76ce9432 BP |
388 | [get-controller br0], |
389 | ||
390 | [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2], | |
76ce9432 BP |
391 | [get-controller br0])], [0], [ |
392 | ||
76ce9432 | 393 | |
76ce9432 BP |
394 | tcp:4.5.6.7 |
395 | ||
396 | ||
397 | ||
76ce9432 BP |
398 | tcp:5.4.3.2\ntcp:8.9.10.11 |
399 | ], [], [OVS_VSCTL_CLEANUP]) | |
400 | OVS_VSCTL_CLEANUP | |
401 | AT_CLEANUP | |
402 | ||
8e58fa9a | 403 | dnl ---------------------------------------------------------------------- |
3b135da3 BP |
404 | AT_BANNER([ovs-vsctl unit tests -- fake bridges]) |
405 | ||
dfbe07ba BP |
406 | m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF], |
407 | [AT_CHECK( | |
408 | [RUN_OVS_VSCTL( | |
409 | [add-br xenbr0], | |
aeee85aa | 410 | [--may-exist add-br xenbr0], |
dfbe07ba | 411 | [add-port xenbr0 eth0], |
bb1c67c8 | 412 | [--may-exist add-port xenbr0 eth0], |
dfbe07ba | 413 | [add-br xapi1 xenbr0 9], |
aeee85aa | 414 | [--may-exist add-br xapi1 xenbr0 9], |
dfbe07ba BP |
415 | [add-port xapi1 eth0.9])], |
416 | [0], [], [], [OVS_VSCTL_CLEANUP])]) | |
3b135da3 BP |
417 | |
418 | AT_SETUP([simple fake bridge]) | |
419 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 420 | OVS_VSCTL_SETUP |
dfbe07ba | 421 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF |
aeee85aa BP |
422 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [], |
423 | [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN 9 | |
424 | ], [OVS_VSCTL_CLEANUP]) | |
425 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx 9])], [1], [], | |
426 | [ovs-vsctl: "--may-exist add-br xapi1 xxx 9" but xapi1 has the wrong parent xenbr0 | |
427 | ], [OVS_VSCTL_CLEANUP]) | |
428 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [], | |
429 | [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN 9 | |
430 | ], [OVS_VSCTL_CLEANUP]) | |
dfbe07ba | 431 | CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0]) |
3b135da3 BP |
432 | CHECK_PORTS([xenbr0], [eth0]) |
433 | CHECK_IFACES([xenbr0], [eth0]) | |
434 | CHECK_PORTS([xapi1], [eth0.9]) | |
435 | CHECK_IFACES([xapi1], [eth0.9]) | |
c75d1511 | 436 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
437 | AT_CLEANUP |
438 | ||
439 | AT_SETUP([simple fake bridge + del-br fake bridge]) | |
440 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 441 | OVS_VSCTL_SETUP |
dfbe07ba BP |
442 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF |
443 | AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP]) | |
8e58fa9a | 444 | CHECK_BRIDGES([xenbr0, xenbr0, 0]) |
3b135da3 BP |
445 | CHECK_PORTS([xenbr0], [eth0]) |
446 | CHECK_IFACES([xenbr0], [eth0]) | |
c75d1511 | 447 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
448 | AT_CLEANUP |
449 | ||
450 | AT_SETUP([simple fake bridge + del-br real bridge]) | |
451 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 452 | OVS_VSCTL_SETUP |
dfbe07ba BP |
453 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF |
454 | AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP]) | |
3b135da3 | 455 | CHECK_BRIDGES |
c75d1511 | 456 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
457 | AT_CLEANUP |
458 | ||
457e1eb0 BP |
459 | AT_SETUP([simple fake bridge + external IDs]) |
460 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
461 | OVS_VSCTL_SETUP | |
462 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF | |
463 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
460aad80 | 464 | [br-set-external-id xenbr0 key0 value0], |
457e1eb0 BP |
465 | [br-set-external-id xapi1 key1 value1], |
466 | [br-get-external-id xenbr0], | |
467 | [br-get-external-id xenbr0 key0], | |
468 | [br-get-external-id xapi1], | |
469 | [br-get-external-id xapi1 key1])], [0], [ | |
470 | ||
471 | key0=value0 | |
472 | value0 | |
473 | key1=value1 | |
474 | value1 | |
475 | ], [], [OVS_VSCTL_CLEANUP]) | |
476 | CHECK_BRIDGES([xapi1, xenbr0, 9], [xenbr0, xenbr0, 0]) | |
477 | CHECK_PORTS([xenbr0], [eth0]) | |
478 | CHECK_IFACES([xenbr0], [eth0]) | |
479 | CHECK_PORTS([xapi1], [eth0.9]) | |
480 | CHECK_IFACES([xapi1], [eth0.9]) | |
481 | OVS_VSCTL_CLEANUP | |
482 | AT_CLEANUP | |
483 | ||
dfbe07ba BP |
484 | m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF], |
485 | [AT_CHECK( | |
486 | [RUN_OVS_VSCTL( | |
487 | [add-br xapi1], | |
488 | [add-bond xapi1 bond0 eth0 eth1], | |
489 | [add-br xapi2 xapi1 11], | |
490 | [add-port xapi2 bond0.11])], | |
491 | [0], [], [], [OVS_VSCTL_CLEANUP])]) | |
3b135da3 BP |
492 | |
493 | AT_SETUP([fake bridge on bond]) | |
494 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 495 | OVS_VSCTL_SETUP |
dfbe07ba | 496 | OVS_VSCTL_SETUP_BOND_FAKE_CONF |
8e58fa9a | 497 | CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11]) |
3b135da3 BP |
498 | CHECK_PORTS([xapi1], [bond0]) |
499 | CHECK_IFACES([xapi1], [eth0], [eth1]) | |
500 | CHECK_PORTS([xapi2], [bond0.11]) | |
501 | CHECK_IFACES([xapi2], [bond0.11]) | |
c75d1511 | 502 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
503 | AT_CLEANUP |
504 | ||
505 | AT_SETUP([fake bridge on bond + del-br fake bridge]) | |
506 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 507 | OVS_VSCTL_SETUP |
dfbe07ba | 508 | OVS_VSCTL_SETUP_BOND_FAKE_CONF |
460aad80 | 509 | AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [ |
dfbe07ba | 510 | ], [], [OVS_VSCTL_CLEANUP]) |
8e58fa9a | 511 | CHECK_BRIDGES([xapi1, xapi1, 0]) |
3b135da3 BP |
512 | CHECK_PORTS([xapi1], [bond0]) |
513 | CHECK_IFACES([xapi1], [eth0], [eth1]) | |
c75d1511 | 514 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
515 | AT_CLEANUP |
516 | ||
517 | AT_SETUP([fake bridge on bond + del-br real bridge]) | |
518 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
dfbe07ba BP |
519 | OVS_VSCTL_SETUP |
520 | OVS_VSCTL_SETUP_BOND_FAKE_CONF | |
3b135da3 BP |
521 | AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])]) |
522 | CHECK_BRIDGES | |
c75d1511 | 523 | OVS_VSCTL_CLEANUP |
3b135da3 | 524 | AT_CLEANUP |
5c414a2e | 525 | |
24b8b259 AE |
526 | dnl ---------------------------------------------------------------------- |
527 | AT_BANNER([ovs-vsctl unit tests -- manager commands]) | |
528 | ||
529 | AT_SETUP([managers]) | |
530 | AT_KEYWORDS([manager ovs-vsctl]) | |
531 | OVS_VSCTL_SETUP | |
532 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
533 | [del-manager], | |
534 | [get-manager], | |
535 | [set-manager tcp:4.5.6.7], | |
536 | [get-manager], | |
537 | [set-manager tcp:8.9.10.11 tcp:5.4.3.2], | |
538 | [get-manager], | |
539 | [del-manager], | |
540 | [get-manager])], [0], [ | |
541 | ||
542 | ||
543 | tcp:4.5.6.7 | |
544 | ||
545 | tcp:5.4.3.2\ntcp:8.9.10.11 | |
546 | ||
547 | ||
548 | ], [], [OVS_VSCTL_CLEANUP]) | |
549 | OVS_VSCTL_CLEANUP | |
550 | AT_CLEANUP | |
551 | ||
5c414a2e BP |
552 | dnl ---------------------------------------------------------------------- |
553 | AT_BANNER([ovs-vsctl unit tests -- database commands]) | |
554 | ||
555 | AT_SETUP([database commands -- positive checks]) | |
556 | AT_KEYWORDS([ovs-vsctl]) | |
557 | OVS_VSCTL_SETUP | |
c5f341ab BP |
558 | AT_CHECK( |
559 | [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0], | |
560 | [set o . bridges=@br0])], | |
5c414a2e BP |
561 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
562 | cp stdout out1 | |
f40a9b61 | 563 | AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])], |
5c414a2e BP |
564 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
565 | cp stdout out2 | |
566 | AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0], | |
567 | [[<0> | |
c5f341ab | 568 | |
bd76d25d BP |
569 | _uuid : <0> |
570 | controller : [] | |
571 | datapath_id : [] | |
572 | datapath_type : "" | |
573 | external_ids : {} | |
31681a5d | 574 | fail_mode : [] |
bd76d25d | 575 | flood_vlans : [] |
254750ce | 576 | flow_tables : {} |
bd76d25d BP |
577 | mirrors : [] |
578 | name : "br0" | |
579 | netflow : [] | |
580 | other_config : {} | |
581 | ports : [] | |
582 | sflow : [] | |
21f7563c JP |
583 | status : {} |
584 | stp_enable : false | |
f40a9b61 | 585 | <0> |
5c414a2e | 586 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
9591fefe BP |
587 | AT_CHECK( |
588 | [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])], | |
589 | [0], | |
590 | [[fail_mode : [] | |
591 | name : "br0" | |
592 | datapath_type : "" | |
593 | ]], [ignore], [test ! -e pid || kill `cat pid`]) | |
0a140468 BP |
594 | AT_CHECK( |
595 | [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])], | |
596 | [0], | |
597 | [[fail_mode : [] | |
598 | name : "br0" | |
599 | datapath_type : "" | |
600 | ]], [ignore], [test ! -e pid || kill `cat pid`]) | |
c5f341ab BP |
601 | AT_CHECK([ |
602 | RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"], | |
603 | [--id=@br2 create b name=br2 external-ids:bar=quux], | |
604 | [add o . bridges @br1 @br2])], | |
0a140468 BP |
605 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
606 | AT_CHECK( | |
607 | [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout], | |
608 | [ignore], [test ! -e pid || kill `cat pid`]) | |
609 | AT_CHECK([sed -n '/./p' stdout | sort], [0], | |
610 | [[name : "br0" | |
611 | name : "br2" | |
612 | ]]) | |
5c414a2e BP |
613 | AT_CHECK( |
614 | [RUN_OVS_VSCTL( | |
615 | [set bridge br0 \ | |
616 | 'other_config:datapath_id="0123456789ab"' \ | |
617 | 'other_config:hwaddr="00:11:22:33:44:55"' \ | |
d3f82921 BP |
618 | 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \ |
619 | add bridge br0 external_ids '"roles"="local; remote; cloud"'])], | |
5c414a2e BP |
620 | [0], [], [], [OVS_VSCTL_CLEANUP]) |
621 | AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])], | |
d3f82921 | 622 | [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"} |
5c414a2e BP |
623 | ], [], [OVS_VSCTL_CLEANUP]) |
624 | AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])], | |
625 | [0], ["00:11:22:33:44:55" | |
626 | ||
627 | ], [], [OVS_VSCTL_CLEANUP]) | |
628 | AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])], | |
629 | [0], [{datapath_id="0123456789ab"} | |
630 | ], [], [OVS_VSCTL_CLEANUP]) | |
631 | AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])], | |
632 | [0], [{} | |
633 | ], [], [OVS_VSCTL_CLEANUP]) | |
634 | AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])], | |
635 | [0], [{} | |
636 | ], [], [OVS_VSCTL_CLEANUP]) | |
0a140468 BP |
637 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0], |
638 | [destroy b br1], | |
c5f341ab BP |
639 | [destroy b br2], |
640 | [clear o . bridges])], | |
5c414a2e BP |
641 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
642 | AT_CHECK([RUN_OVS_VSCTL([list b])], | |
643 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
644 | OVS_VSCTL_CLEANUP | |
645 | AT_CLEANUP | |
646 | ||
647 | AT_SETUP([database commands -- negative checks]) | |
648 | AT_KEYWORDS([ovs-vsctl]) | |
649 | OVS_VSCTL_SETUP | |
c5f341ab | 650 | AT_CHECK([RUN_OVS_VSCTL([add-br br0])], |
5c414a2e BP |
651 | [0], [ignore], [], [OVS_VSCTL_CLEANUP]) |
652 | AT_CHECK([RUN_OVS_VSCTL([add-br br1])], | |
653 | [0], [ignore], [], [OVS_VSCTL_CLEANUP]) | |
654 | AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], | |
655 | [0], [ignore], [], [OVS_VSCTL_CLEANUP]) | |
c5f341ab BP |
656 | AT_CHECK([ |
657 | RUN_OVS_VSCTL_TOGETHER([--id=@n create n targets='"1.2.3.4:567"'], | |
658 | [set bridge br0 netflow=@n])], | |
5c414a2e BP |
659 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
660 | cp stdout netflow-uuid | |
661 | AT_CHECK([RUN_OVS_VSCTL([list n `cat netflow-uuid`])], | |
662 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) | |
663 | AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0], | |
664 | [[<0> | |
c5f341ab | 665 | |
bd76d25d BP |
666 | _uuid : <0> |
667 | active_timeout : 0 | |
668 | add_id_to_interface : false | |
669 | engine_id : [] | |
670 | engine_type : [] | |
13008eb3 | 671 | external_ids : {} |
bd76d25d | 672 | targets : ["1.2.3.4:567"] |
5c414a2e BP |
673 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
674 | AT_CHECK([RUN_OVS_VSCTL([list interx x])], | |
675 | [1], [], [ovs-vsctl: unknown table "interx" | |
676 | ], [OVS_VSCTL_CLEANUP]) | |
677 | AT_CHECK([RUN_OVS_VSCTL([list b x])], | |
678 | [1], [], [ovs-vsctl: no row "x" in table Bridge | |
679 | ], [OVS_VSCTL_CLEANUP]) | |
5c414a2e BP |
680 | AT_CHECK([RUN_OVS_VSCTL([get b br0 d])], |
681 | [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d" | |
682 | ], [OVS_VSCTL_CLEANUP]) | |
683 | AT_CHECK([RUN_OVS_VSCTL([get b br0 x])], | |
684 | [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x" | |
685 | ], [OVS_VSCTL_CLEANUP]) | |
686 | AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])], | |
687 | [1], [], [ovs-vsctl: :y=z: missing column name | |
688 | ], [OVS_VSCTL_CLEANUP]) | |
689 | AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])], | |
e89e5374 | 690 | [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument |
5c414a2e | 691 | ], [OVS_VSCTL_CLEANUP]) |
7db03f7c BP |
692 | AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])], |
693 | [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value. | |
694 | ], [OVS_VSCTL_CLEANUP]) | |
695 | AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])], | |
2a9537e2 | 696 | [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value. |
7db03f7c | 697 | ], [OVS_VSCTL_CLEANUP]) |
5c414a2e BP |
698 | AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])], |
699 | [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument | |
700 | ], [OVS_VSCTL_CLEANUP]) | |
701 | AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])], | |
702 | [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id | |
703 | ], [OVS_VSCTL_CLEANUP]) | |
704 | AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])], | |
705 | [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids | |
706 | ], [OVS_VSCTL_CLEANUP]) | |
707 | AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])], | |
bd76d25d | 708 | [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive) |
5c414a2e BP |
709 | ], [OVS_VSCTL_CLEANUP]) |
710 | AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])], | |
bd76d25d | 711 | [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive) |
5c414a2e | 712 | ], [OVS_VSCTL_CLEANUP]) |
bfc96d9b BP |
713 | AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])], |
714 | [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band]) | |
715 | ]], [OVS_VSCTL_CLEANUP]) | |
5c414a2e BP |
716 | AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])], |
717 | [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode | |
718 | ], [OVS_VSCTL_CLEANUP]) | |
bd76d25d | 719 | AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])], |
5c414a2e BP |
720 | [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1 |
721 | ], [OVS_VSCTL_CLEANUP]) | |
5c414a2e | 722 | AT_CHECK([RUN_OVS_VSCTL([remove n `cat netflow-uuid` targets '"1.2.3.4:567"'])], |
f19f25a4 | 723 | [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1 |
5c414a2e | 724 | ], [OVS_VSCTL_CLEANUP]) |
5c414a2e BP |
725 | AT_CHECK([RUN_OVS_VSCTL([clear n `cat netflow-uuid` targets])], |
726 | [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty | |
727 | ], [OVS_VSCTL_CLEANUP]) | |
0d0f05b9 | 728 | AT_CHECK([RUN_OVS_VSCTL([destroy b br2])], |
5c414a2e BP |
729 | [1], [], [ovs-vsctl: no row "br2" in table Bridge |
730 | ], [OVS_VSCTL_CLEANUP]) | |
731 | OVS_VSCTL_CLEANUP | |
732 | AT_CLEANUP | |
733 | ||
2a9537e2 BP |
734 | AT_SETUP([database commands -- conditions]) |
735 | AT_KEYWORDS([ovs-vsctl]) | |
736 | trap 'kill `cat pid`' 0 | |
737 | OVS_VSCTL_SETUP | |
738 | AT_CHECK( | |
739 | [RUN_OVS_VSCTL_TOGETHER( | |
740 | [add-br br0], | |
741 | [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'], | |
742 | [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y], | |
743 | [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z], | |
744 | [add-br br4], [set bridge br4 flood_vlans=2], | |
745 | [add-br br5], [set bridge br5 flood_vlans=0,2], | |
746 | [add-br br6], [set bridge br6 flood_vlans=1,2], | |
747 | [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [ | |
748 | ||
749 | ||
750 | ||
751 | ||
752 | ||
753 | ||
754 | ||
755 | ||
756 | ||
757 | ||
758 | ||
759 | ||
760 | ||
761 | ||
762 | ]) | |
763 | m4_define([VSCTL_CHECK_FIND], | |
764 | [AT_CHECK([ovs-vsctl --bare --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket -- --columns=name find bridge '$1' | sort | xargs echo], [0], [$2 | |
765 | ])]) | |
766 | ||
767 | # Arithmetic relational operators without keys. | |
768 | VSCTL_CHECK_FIND([flood_vlans=0], [br1]) | |
769 | VSCTL_CHECK_FIND([flood_vlans=1], [br2]) | |
770 | VSCTL_CHECK_FIND([flood_vlans=0,2], [br5]) | |
771 | VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7]) | |
772 | VSCTL_CHECK_FIND([flood_vlans=3], []) | |
773 | ||
774 | VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7]) | |
775 | VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7]) | |
776 | VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7]) | |
777 | VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6]) | |
778 | VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
779 | ||
780 | VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2]) | |
781 | VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4]) | |
782 | VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7]) | |
783 | VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7]) | |
784 | VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4]) | |
785 | VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5]) | |
786 | VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7]) | |
787 | VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7]) | |
788 | ||
789 | # Set relational operators without keys. | |
790 | VSCTL_CHECK_FIND([flood_vlans{=}0], [br1]) | |
791 | VSCTL_CHECK_FIND([flood_vlans{=}1], [br2]) | |
792 | VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5]) | |
793 | VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7]) | |
794 | VSCTL_CHECK_FIND([flood_vlans{=}3], []) | |
795 | ||
796 | VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7]) | |
797 | VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7]) | |
798 | VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7]) | |
799 | VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6]) | |
800 | VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
801 | ||
802 | VSCTL_CHECK_FIND([flood_vlans{<}[[]]], []) | |
803 | VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0]) | |
804 | VSCTL_CHECK_FIND([flood_vlans{<}0], [br0]) | |
805 | VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1]) | |
806 | VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4]) | |
807 | VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6]) | |
808 | ||
809 | VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7]) | |
810 | VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
811 | VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7]) | |
812 | VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7]) | |
813 | VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7]) | |
814 | VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7]) | |
815 | VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7]) | |
816 | ||
817 | # Arithmetic relational operators with keys. | |
818 | VSCTL_CHECK_FIND([other-config:x=""], [br1]) | |
819 | VSCTL_CHECK_FIND([other-config:x=y], [br2]) | |
820 | VSCTL_CHECK_FIND([other-config:x=z], [br3]) | |
821 | ||
822 | VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3]) | |
823 | VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3]) | |
824 | VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2]) | |
825 | ||
826 | VSCTL_CHECK_FIND([other-config:x>y], [br3]) | |
827 | VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3]) | |
828 | VSCTL_CHECK_FIND([other-config:x<y], [br1]) | |
829 | VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2]) | |
830 | ||
831 | # Set relational operators with keys. | |
832 | VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7]) | |
833 | VSCTL_CHECK_FIND([other-config:x{=}""], [br1]) | |
834 | VSCTL_CHECK_FIND([other-config:x{=}y], [br2]) | |
835 | VSCTL_CHECK_FIND([other-config:x{=}z], [br3]) | |
836 | ||
837 | VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3]) | |
838 | VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7]) | |
839 | VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7]) | |
840 | VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7]) | |
841 | ||
842 | VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7]) | |
843 | VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7]) | |
844 | VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7]) | |
845 | VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7]) | |
846 | VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7]) | |
847 | VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7]) | |
848 | ||
849 | VSCTL_CHECK_FIND([other-config:x{<}[[]]], []) | |
850 | VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7]) | |
851 | VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7]) | |
852 | VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7]) | |
853 | VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7]) | |
854 | ||
855 | VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
856 | VSCTL_CHECK_FIND([other-config:x{>=}x], []) | |
857 | VSCTL_CHECK_FIND([other-config:x{>=}""], [br1]) | |
858 | VSCTL_CHECK_FIND([other-config:x{>=}y], [br2]) | |
859 | VSCTL_CHECK_FIND([other-config:x{>=}z], [br3]) | |
860 | ||
861 | VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3]) | |
862 | VSCTL_CHECK_FIND([other-config:x{>}x], []) | |
863 | VSCTL_CHECK_FIND([other-config:x{>}""], []) | |
864 | VSCTL_CHECK_FIND([other-config:x{>}y], []) | |
865 | VSCTL_CHECK_FIND([other-config:x{>}z], []) | |
866 | AT_CLEANUP | |
867 | ||
7db03f7c BP |
868 | AT_SETUP([database commands -- wait-until immediately true]) |
869 | AT_KEYWORDS([ovs-vsctl]) | |
870 | OVS_VSCTL_SETUP | |
871 | AT_CHECK([RUN_OVS_VSCTL( | |
872 | [add-br br0], | |
873 | [add-bond br0 bond0 eth0 eth1], | |
874 | [set port bond0 bond_updelay=500 other-config:abc=def])], | |
875 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
289df16d | 876 | AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])], |
7db03f7c BP |
877 | [0], [], [], [OVS_VSCTL_CLEANUP]) |
878 | AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])], | |
879 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
880 | AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])], | |
881 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
882 | AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])], | |
883 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
884 | OVS_VSCTL_CLEANUP | |
885 | AT_CLEANUP | |
886 | ||
887 | AT_SETUP([database commands -- wait-until must wait]) | |
888 | AT_KEYWORDS([ovs-vsctl]) | |
7454ec7a BP |
889 | |
890 | # Disable lcov for this test. All the programs running in parallel | |
891 | # race badly on access to profiling data. | |
892 | DISABLE_LCOV=true | |
893 | export DISABLE_LCOV | |
894 | ||
7db03f7c BP |
895 | OVS_VSCTL_SETUP |
896 | ||
897 | # Start ovs-vsctls in background. | |
898 | (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 & | |
899 | (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 & | |
900 | (RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 & | |
901 | (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 & | |
902 | ||
903 | # Give the ovs-vsctls a chance to read the database | |
904 | sleep 1 | |
905 | ||
e111e681 | 906 | AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux]) |
7db03f7c BP |
907 | RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])], |
908 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
909 | ||
910 | # Wait for the ovs-vsctls to finish. | |
911 | wait | |
912 | ||
913 | # Check output | |
914 | AT_CHECK([cat stdout1], [0], [quux | |
915 | ], [], [OVS_VSCTL_CLEANUP]) | |
916 | AT_CHECK([cat stdout2], [0], [def | |
917 | ], [], [OVS_VSCTL_CLEANUP]) | |
918 | AT_CHECK([cat stdout3], [0], [{abc=def} | |
919 | ], [], [OVS_VSCTL_CLEANUP]) | |
920 | AT_CHECK([cat stdout4], [0], [500 | |
921 | ], [], [OVS_VSCTL_CLEANUP]) | |
922 | ||
923 | OVS_VSCTL_CLEANUP | |
924 | AT_CLEANUP | |
925 | ||
aed133bf BP |
926 | AT_SETUP([--id option on create, get commands]) |
927 | AT_KEYWORDS([ovs-vsctl]) | |
928 | OVS_VSCTL_SETUP | |
929 | AT_CHECK([RUN_OVS_VSCTL([add-br br0], | |
930 | [add-port br0 eth0], | |
931 | [add-port br0 eth1])]) | |
932 | AT_CHECK( | |
933 | [RUN_OVS_VSCTL_TOGETHER( | |
934 | [set bridge br0 mirrors=@m], | |
935 | [--id=@eth0 get port eth0], | |
936 | [--id=@eth1 get port eth1], | |
937 | [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])], | |
938 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) | |
939 | AT_CHECK( | |
940 | [perl $srcdir/uuidfilt.pl stdout], [0], [dnl | |
941 | ||
942 | ||
943 | ||
944 | <0> | |
945 | ], | |
946 | [], [OVS_VSCTL_CLEANUP]) | |
947 | AT_CHECK( | |
948 | [RUN_OVS_VSCTL( | |
949 | [list port eth0 eth1], | |
950 | [list mirror], | |
951 | [list bridge br0])], | |
952 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) | |
953 | AT_CHECK( | |
954 | [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | $srcdir/uuidfilt.pl], [0], [dnl | |
955 | [_uuid : <0> | |
956 | name : "eth0" | |
957 | _uuid : <1> | |
958 | name : "eth1" | |
959 | _uuid : <2> | |
960 | name : mymirror | |
961 | output_port : <1> | |
962 | output_vlan : [] | |
963 | select_all : false | |
964 | select_dst_port : [<0>] | |
965 | select_src_port : [<0>] | |
966 | select_vlan : [] | |
967 | _uuid : <3> | |
968 | mirrors : [<2>] | |
969 | name : "br0" | |
970 | ]], | |
971 | [], [OVS_VSCTL_CLEANUP]) | |
972 | OVS_VSCTL_CLEANUP | |
973 | AT_CLEANUP | |
974 | ||
c5f341ab BP |
975 | AT_SETUP([unreferenced record warnings]) |
976 | AT_KEYWORDS([ovs-vsctl]) | |
977 | OVS_VSCTL_SETUP | |
978 | AT_CHECK( | |
979 | [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \ | |
980 | -- create Bridge name=br0 | $srcdir/uuidfilt.pl], | |
981 | [0], [<0> | |
982 | ], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect | |
983 | ], [OVS_VSCTL_CLEANUP]) | |
984 | AT_CHECK( | |
985 | [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \ | |
986 | -- --id=@br0 create Bridge name=br0 | $srcdir/uuidfilt.pl], | |
987 | [0], [<0> | |
988 | ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database | |
989 | ], [OVS_VSCTL_CLEANUP]) | |
990 | AT_CHECK( | |
991 | [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \ | |
992 | -- --id=@eth0_iface create Interface name=eth0 \ | |
993 | -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \ | |
994 | -- --id=@m0 create Mirror name=m0 output_port=@eth0 \ | |
995 | -- --id=@br0 create Bridge name=br0 mirrors=@m0 \ | |
996 | -- set Open_vSwitch . bridges=@br0 | $srcdir/uuidfilt.pl], | |
997 | [0], [<0> | |
998 | <1> | |
999 | <2> | |
1000 | <3> | |
1001 | ], [vsctl|WARN|row id "@eth0" was created but only a weak reference to it was inserted, so it will not actually appear in the database | |
1002 | ], [OVS_VSCTL_CLEANUP]) | |
1003 | OVS_VSCTL_CLEANUP | |
1004 | AT_CLEANUP | |
1005 | ||
5c414a2e BP |
1006 | dnl This test really shows a bug -- "create" followed by "list" in |
1007 | dnl the same execution shows the wrong UUID on the "list" command. | |
1008 | dnl The bug is documented in ovs-vsctl.8. | |
1009 | AT_SETUP([created row UUID is wrong in same execution]) | |
1010 | AT_KEYWORDS([ovs-vsctl]) | |
1011 | OVS_VSCTL_SETUP | |
c5f341ab | 1012 | AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])], |
5c414a2e BP |
1013 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
1014 | AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], | |
1015 | [[<0> | |
bd76d25d BP |
1016 | _uuid : <1> |
1017 | controller : [] | |
1018 | datapath_id : [] | |
1019 | datapath_type : "" | |
1020 | external_ids : {} | |
31681a5d | 1021 | fail_mode : [] |
bd76d25d | 1022 | flood_vlans : [] |
254750ce | 1023 | flow_tables : {} |
bd76d25d BP |
1024 | mirrors : [] |
1025 | name : "br0" | |
1026 | netflow : [] | |
1027 | other_config : {} | |
1028 | ports : [] | |
1029 | sflow : [] | |
21f7563c JP |
1030 | status : {} |
1031 | stp_enable : false | |
5c414a2e BP |
1032 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
1033 | OVS_VSCTL_CLEANUP | |
1034 | AT_CLEANUP |