]>
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]) |
37d03458 | 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 ---------------------------------------------------------------------- |
5341d046 | 404 | dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN]) |
dfbe07ba BP |
405 | m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF], |
406 | [AT_CHECK( | |
407 | [RUN_OVS_VSCTL( | |
408 | [add-br xenbr0], | |
aeee85aa | 409 | [--may-exist add-br xenbr0], |
dfbe07ba | 410 | [add-port xenbr0 eth0], |
bb1c67c8 | 411 | [--may-exist add-port xenbr0 eth0], |
5341d046 BP |
412 | [add-br xapi1 xenbr0 $1], |
413 | [--may-exist add-br xapi1 xenbr0 $1], | |
414 | [add-port xapi1 eth0.$1])], | |
dfbe07ba | 415 | [0], [], [], [OVS_VSCTL_CLEANUP])]) |
3b135da3 | 416 | |
5341d046 BP |
417 | dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN]) |
418 | m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [ | |
419 | AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)]) | |
420 | ||
421 | AT_SETUP([simple fake bridge (VLAN $1)]) | |
3b135da3 | 422 | AT_KEYWORDS([ovs-vsctl fake-bridge]) |
c75d1511 | 423 | OVS_VSCTL_SETUP |
5341d046 | 424 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1]) |
aeee85aa | 425 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [], |
5341d046 | 426 | [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1 |
aeee85aa | 427 | ], [OVS_VSCTL_CLEANUP]) |
5341d046 BP |
428 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [], |
429 | [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0 | |
aeee85aa BP |
430 | ], [OVS_VSCTL_CLEANUP]) |
431 | AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [], | |
5341d046 | 432 | [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1 |
aeee85aa | 433 | ], [OVS_VSCTL_CLEANUP]) |
5341d046 | 434 | CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0]) |
3b135da3 BP |
435 | CHECK_PORTS([xenbr0], [eth0]) |
436 | CHECK_IFACES([xenbr0], [eth0]) | |
5341d046 BP |
437 | CHECK_PORTS([xapi1], [eth0.$1]) |
438 | CHECK_IFACES([xapi1], [eth0.$1]) | |
c75d1511 | 439 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
440 | AT_CLEANUP |
441 | ||
5341d046 | 442 | AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)]) |
3b135da3 | 443 | AT_KEYWORDS([ovs-vsctl fake-bridge]) |
c75d1511 | 444 | OVS_VSCTL_SETUP |
5341d046 | 445 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1]) |
dfbe07ba | 446 | AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
8e58fa9a | 447 | CHECK_BRIDGES([xenbr0, xenbr0, 0]) |
3b135da3 BP |
448 | CHECK_PORTS([xenbr0], [eth0]) |
449 | CHECK_IFACES([xenbr0], [eth0]) | |
c75d1511 | 450 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
451 | AT_CLEANUP |
452 | ||
5341d046 | 453 | AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)]) |
3b135da3 | 454 | AT_KEYWORDS([ovs-vsctl fake-bridge]) |
c75d1511 | 455 | OVS_VSCTL_SETUP |
5341d046 | 456 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1]) |
dfbe07ba | 457 | AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP]) |
3b135da3 | 458 | CHECK_BRIDGES |
c75d1511 | 459 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
460 | AT_CLEANUP |
461 | ||
5341d046 | 462 | AT_SETUP([simple fake bridge + external IDs (VLAN $1)]) |
457e1eb0 BP |
463 | AT_KEYWORDS([ovs-vsctl fake-bridge]) |
464 | OVS_VSCTL_SETUP | |
5341d046 | 465 | OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1]) |
457e1eb0 | 466 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( |
460aad80 | 467 | [br-set-external-id xenbr0 key0 value0], |
457e1eb0 BP |
468 | [br-set-external-id xapi1 key1 value1], |
469 | [br-get-external-id xenbr0], | |
470 | [br-get-external-id xenbr0 key0], | |
471 | [br-get-external-id xapi1], | |
472 | [br-get-external-id xapi1 key1])], [0], [ | |
473 | ||
474 | key0=value0 | |
475 | value0 | |
476 | key1=value1 | |
477 | value1 | |
478 | ], [], [OVS_VSCTL_CLEANUP]) | |
5341d046 | 479 | CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0]) |
457e1eb0 BP |
480 | CHECK_PORTS([xenbr0], [eth0]) |
481 | CHECK_IFACES([xenbr0], [eth0]) | |
5341d046 BP |
482 | CHECK_PORTS([xapi1], [eth0.$1]) |
483 | CHECK_IFACES([xapi1], [eth0.$1]) | |
457e1eb0 BP |
484 | OVS_VSCTL_CLEANUP |
485 | AT_CLEANUP | |
5341d046 BP |
486 | ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS |
487 | ||
488 | OVS_VSCTL_FAKE_BRIDGE_TESTS([9]) | |
489 | OVS_VSCTL_FAKE_BRIDGE_TESTS([0]) | |
457e1eb0 | 490 | |
5341d046 | 491 | dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN]) |
dfbe07ba BP |
492 | m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF], |
493 | [AT_CHECK( | |
494 | [RUN_OVS_VSCTL( | |
495 | [add-br xapi1], | |
496 | [add-bond xapi1 bond0 eth0 eth1], | |
5341d046 BP |
497 | [add-br xapi2 xapi1 $1], |
498 | [add-port xapi2 bond0.$1])], | |
dfbe07ba | 499 | [0], [], [], [OVS_VSCTL_CLEANUP])]) |
3b135da3 BP |
500 | |
501 | AT_SETUP([fake bridge on bond]) | |
502 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 503 | OVS_VSCTL_SETUP |
5341d046 | 504 | OVS_VSCTL_SETUP_BOND_FAKE_CONF([11]) |
8e58fa9a | 505 | CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11]) |
3b135da3 BP |
506 | CHECK_PORTS([xapi1], [bond0]) |
507 | CHECK_IFACES([xapi1], [eth0], [eth1]) | |
508 | CHECK_PORTS([xapi2], [bond0.11]) | |
509 | CHECK_IFACES([xapi2], [bond0.11]) | |
c75d1511 | 510 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
511 | AT_CLEANUP |
512 | ||
513 | AT_SETUP([fake bridge on bond + del-br fake bridge]) | |
514 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
c75d1511 | 515 | OVS_VSCTL_SETUP |
5341d046 | 516 | OVS_VSCTL_SETUP_BOND_FAKE_CONF([11]) |
460aad80 | 517 | AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [ |
dfbe07ba | 518 | ], [], [OVS_VSCTL_CLEANUP]) |
8e58fa9a | 519 | CHECK_BRIDGES([xapi1, xapi1, 0]) |
3b135da3 BP |
520 | CHECK_PORTS([xapi1], [bond0]) |
521 | CHECK_IFACES([xapi1], [eth0], [eth1]) | |
c75d1511 | 522 | OVS_VSCTL_CLEANUP |
3b135da3 BP |
523 | AT_CLEANUP |
524 | ||
525 | AT_SETUP([fake bridge on bond + del-br real bridge]) | |
526 | AT_KEYWORDS([ovs-vsctl fake-bridge]) | |
dfbe07ba | 527 | OVS_VSCTL_SETUP |
5341d046 | 528 | OVS_VSCTL_SETUP_BOND_FAKE_CONF([11]) |
3b135da3 BP |
529 | AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])]) |
530 | CHECK_BRIDGES | |
c75d1511 | 531 | OVS_VSCTL_CLEANUP |
3b135da3 | 532 | AT_CLEANUP |
5c414a2e | 533 | |
24b8b259 AE |
534 | dnl ---------------------------------------------------------------------- |
535 | AT_BANNER([ovs-vsctl unit tests -- manager commands]) | |
536 | ||
537 | AT_SETUP([managers]) | |
538 | AT_KEYWORDS([manager ovs-vsctl]) | |
539 | OVS_VSCTL_SETUP | |
540 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER( | |
541 | [del-manager], | |
542 | [get-manager], | |
543 | [set-manager tcp:4.5.6.7], | |
544 | [get-manager], | |
545 | [set-manager tcp:8.9.10.11 tcp:5.4.3.2], | |
546 | [get-manager], | |
547 | [del-manager], | |
548 | [get-manager])], [0], [ | |
549 | ||
550 | ||
551 | tcp:4.5.6.7 | |
552 | ||
553 | tcp:5.4.3.2\ntcp:8.9.10.11 | |
554 | ||
555 | ||
556 | ], [], [OVS_VSCTL_CLEANUP]) | |
557 | OVS_VSCTL_CLEANUP | |
558 | AT_CLEANUP | |
559 | ||
5c414a2e BP |
560 | dnl ---------------------------------------------------------------------- |
561 | AT_BANNER([ovs-vsctl unit tests -- database commands]) | |
562 | ||
563 | AT_SETUP([database commands -- positive checks]) | |
564 | AT_KEYWORDS([ovs-vsctl]) | |
565 | OVS_VSCTL_SETUP | |
c5f341ab BP |
566 | AT_CHECK( |
567 | [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0], | |
568 | [set o . bridges=@br0])], | |
5c414a2e BP |
569 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
570 | cp stdout out1 | |
f40a9b61 | 571 | AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])], |
5c414a2e BP |
572 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
573 | cp stdout out2 | |
574 | AT_CHECK([perl $srcdir/uuidfilt.pl out1 out2], [0], | |
575 | [[<0> | |
c5f341ab | 576 | |
bd76d25d BP |
577 | _uuid : <0> |
578 | controller : [] | |
579 | datapath_id : [] | |
580 | datapath_type : "" | |
581 | external_ids : {} | |
31681a5d | 582 | fail_mode : [] |
bd76d25d | 583 | flood_vlans : [] |
254750ce | 584 | flow_tables : {} |
bd76d25d BP |
585 | mirrors : [] |
586 | name : "br0" | |
587 | netflow : [] | |
588 | other_config : {} | |
589 | ports : [] | |
590 | sflow : [] | |
21f7563c JP |
591 | status : {} |
592 | stp_enable : false | |
f40a9b61 | 593 | <0> |
5c414a2e | 594 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
9591fefe BP |
595 | AT_CHECK( |
596 | [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])], | |
597 | [0], | |
598 | [[fail_mode : [] | |
599 | name : "br0" | |
600 | datapath_type : "" | |
601 | ]], [ignore], [test ! -e pid || kill `cat pid`]) | |
0a140468 BP |
602 | AT_CHECK( |
603 | [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])], | |
604 | [0], | |
605 | [[fail_mode : [] | |
606 | name : "br0" | |
607 | datapath_type : "" | |
608 | ]], [ignore], [test ! -e pid || kill `cat pid`]) | |
c5f341ab BP |
609 | AT_CHECK([ |
610 | RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"], | |
611 | [--id=@br2 create b name=br2 external-ids:bar=quux], | |
612 | [add o . bridges @br1 @br2])], | |
0a140468 BP |
613 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
614 | AT_CHECK( | |
615 | [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout], | |
616 | [ignore], [test ! -e pid || kill `cat pid`]) | |
617 | AT_CHECK([sed -n '/./p' stdout | sort], [0], | |
618 | [[name : "br0" | |
619 | name : "br2" | |
620 | ]]) | |
5c414a2e BP |
621 | AT_CHECK( |
622 | [RUN_OVS_VSCTL( | |
623 | [set bridge br0 \ | |
624 | 'other_config:datapath_id="0123456789ab"' \ | |
625 | 'other_config:hwaddr="00:11:22:33:44:55"' \ | |
d3f82921 BP |
626 | 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \ |
627 | add bridge br0 external_ids '"roles"="local; remote; cloud"'])], | |
5c414a2e BP |
628 | [0], [], [], [OVS_VSCTL_CLEANUP]) |
629 | AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])], | |
d3f82921 | 630 | [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"} |
5c414a2e BP |
631 | ], [], [OVS_VSCTL_CLEANUP]) |
632 | AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])], | |
633 | [0], ["00:11:22:33:44:55" | |
634 | ||
635 | ], [], [OVS_VSCTL_CLEANUP]) | |
636 | AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])], | |
637 | [0], [{datapath_id="0123456789ab"} | |
638 | ], [], [OVS_VSCTL_CLEANUP]) | |
639 | AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])], | |
640 | [0], [{} | |
641 | ], [], [OVS_VSCTL_CLEANUP]) | |
642 | AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])], | |
643 | [0], [{} | |
644 | ], [], [OVS_VSCTL_CLEANUP]) | |
0a140468 BP |
645 | AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0], |
646 | [destroy b br1], | |
c5f341ab BP |
647 | [destroy b br2], |
648 | [clear o . bridges])], | |
5c414a2e BP |
649 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
650 | AT_CHECK([RUN_OVS_VSCTL([list b])], | |
651 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
652 | OVS_VSCTL_CLEANUP | |
653 | AT_CLEANUP | |
654 | ||
655 | AT_SETUP([database commands -- negative checks]) | |
656 | AT_KEYWORDS([ovs-vsctl]) | |
657 | OVS_VSCTL_SETUP | |
c5f341ab | 658 | AT_CHECK([RUN_OVS_VSCTL([add-br br0])], |
5c414a2e BP |
659 | [0], [ignore], [], [OVS_VSCTL_CLEANUP]) |
660 | AT_CHECK([RUN_OVS_VSCTL([add-br br1])], | |
661 | [0], [ignore], [], [OVS_VSCTL_CLEANUP]) | |
662 | AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], | |
663 | [0], [ignore], [], [OVS_VSCTL_CLEANUP]) | |
c5f341ab | 664 | AT_CHECK([ |
eed8052c | 665 | RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'], |
c5f341ab | 666 | [set bridge br0 netflow=@n])], |
5c414a2e BP |
667 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
668 | cp stdout netflow-uuid | |
eed8052c | 669 | AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], |
5c414a2e BP |
670 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
671 | AT_CHECK([perl $srcdir/uuidfilt.pl netflow-uuid stdout], [0], | |
672 | [[<0> | |
c5f341ab | 673 | |
bd76d25d BP |
674 | _uuid : <0> |
675 | active_timeout : 0 | |
676 | add_id_to_interface : false | |
677 | engine_id : [] | |
678 | engine_type : [] | |
13008eb3 | 679 | external_ids : {} |
bd76d25d | 680 | targets : ["1.2.3.4:567"] |
5c414a2e BP |
681 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
682 | AT_CHECK([RUN_OVS_VSCTL([list interx x])], | |
683 | [1], [], [ovs-vsctl: unknown table "interx" | |
684 | ], [OVS_VSCTL_CLEANUP]) | |
685 | AT_CHECK([RUN_OVS_VSCTL([list b x])], | |
686 | [1], [], [ovs-vsctl: no row "x" in table Bridge | |
687 | ], [OVS_VSCTL_CLEANUP]) | |
5c414a2e BP |
688 | AT_CHECK([RUN_OVS_VSCTL([get b br0 d])], |
689 | [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d" | |
690 | ], [OVS_VSCTL_CLEANUP]) | |
691 | AT_CHECK([RUN_OVS_VSCTL([get b br0 x])], | |
692 | [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x" | |
693 | ], [OVS_VSCTL_CLEANUP]) | |
694 | AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])], | |
695 | [1], [], [ovs-vsctl: :y=z: missing column name | |
696 | ], [OVS_VSCTL_CLEANUP]) | |
697 | AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])], | |
e89e5374 | 698 | [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument |
5c414a2e | 699 | ], [OVS_VSCTL_CLEANUP]) |
7db03f7c BP |
700 | AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])], |
701 | [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value. | |
702 | ], [OVS_VSCTL_CLEANUP]) | |
703 | AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])], | |
2a9537e2 | 704 | [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value. |
7db03f7c | 705 | ], [OVS_VSCTL_CLEANUP]) |
5c414a2e BP |
706 | AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])], |
707 | [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument | |
708 | ], [OVS_VSCTL_CLEANUP]) | |
709 | AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])], | |
710 | [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id | |
711 | ], [OVS_VSCTL_CLEANUP]) | |
712 | AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])], | |
713 | [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids | |
714 | ], [OVS_VSCTL_CLEANUP]) | |
715 | AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])], | |
bd76d25d | 716 | [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive) |
5c414a2e BP |
717 | ], [OVS_VSCTL_CLEANUP]) |
718 | AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])], | |
bd76d25d | 719 | [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive) |
5c414a2e | 720 | ], [OVS_VSCTL_CLEANUP]) |
bfc96d9b BP |
721 | AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])], |
722 | [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band]) | |
723 | ]], [OVS_VSCTL_CLEANUP]) | |
5c414a2e BP |
724 | AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])], |
725 | [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode | |
726 | ], [OVS_VSCTL_CLEANUP]) | |
bd76d25d | 727 | AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])], |
5c414a2e BP |
728 | [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1 |
729 | ], [OVS_VSCTL_CLEANUP]) | |
eed8052c | 730 | AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])], |
f19f25a4 | 731 | [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1 |
5c414a2e | 732 | ], [OVS_VSCTL_CLEANUP]) |
eed8052c | 733 | AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])], |
5c414a2e BP |
734 | [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty |
735 | ], [OVS_VSCTL_CLEANUP]) | |
0d0f05b9 | 736 | AT_CHECK([RUN_OVS_VSCTL([destroy b br2])], |
5c414a2e BP |
737 | [1], [], [ovs-vsctl: no row "br2" in table Bridge |
738 | ], [OVS_VSCTL_CLEANUP]) | |
739 | OVS_VSCTL_CLEANUP | |
740 | AT_CLEANUP | |
741 | ||
2a9537e2 BP |
742 | AT_SETUP([database commands -- conditions]) |
743 | AT_KEYWORDS([ovs-vsctl]) | |
744 | trap 'kill `cat pid`' 0 | |
745 | OVS_VSCTL_SETUP | |
746 | AT_CHECK( | |
747 | [RUN_OVS_VSCTL_TOGETHER( | |
748 | [add-br br0], | |
749 | [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'], | |
750 | [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y], | |
751 | [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z], | |
752 | [add-br br4], [set bridge br4 flood_vlans=2], | |
753 | [add-br br5], [set bridge br5 flood_vlans=0,2], | |
754 | [add-br br6], [set bridge br6 flood_vlans=1,2], | |
755 | [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [ | |
756 | ||
757 | ||
758 | ||
759 | ||
760 | ||
761 | ||
762 | ||
763 | ||
764 | ||
765 | ||
766 | ||
767 | ||
768 | ||
769 | ||
770 | ]) | |
771 | m4_define([VSCTL_CHECK_FIND], | |
772 | [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 | |
773 | ])]) | |
774 | ||
775 | # Arithmetic relational operators without keys. | |
776 | VSCTL_CHECK_FIND([flood_vlans=0], [br1]) | |
777 | VSCTL_CHECK_FIND([flood_vlans=1], [br2]) | |
778 | VSCTL_CHECK_FIND([flood_vlans=0,2], [br5]) | |
779 | VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7]) | |
780 | VSCTL_CHECK_FIND([flood_vlans=3], []) | |
781 | ||
782 | VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7]) | |
783 | VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7]) | |
784 | VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7]) | |
785 | VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6]) | |
786 | VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
787 | ||
788 | VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2]) | |
789 | VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4]) | |
790 | VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7]) | |
791 | VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7]) | |
792 | VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4]) | |
793 | VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5]) | |
794 | VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7]) | |
795 | VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7]) | |
796 | ||
797 | # Set relational operators without keys. | |
798 | VSCTL_CHECK_FIND([flood_vlans{=}0], [br1]) | |
799 | VSCTL_CHECK_FIND([flood_vlans{=}1], [br2]) | |
800 | VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5]) | |
801 | VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7]) | |
802 | VSCTL_CHECK_FIND([flood_vlans{=}3], []) | |
803 | ||
804 | VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7]) | |
805 | VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7]) | |
806 | VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7]) | |
807 | VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6]) | |
808 | VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
809 | ||
810 | VSCTL_CHECK_FIND([flood_vlans{<}[[]]], []) | |
811 | VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0]) | |
812 | VSCTL_CHECK_FIND([flood_vlans{<}0], [br0]) | |
813 | VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1]) | |
814 | VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4]) | |
815 | VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6]) | |
816 | ||
817 | VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7]) | |
818 | VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
819 | VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7]) | |
820 | VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7]) | |
821 | VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7]) | |
822 | VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7]) | |
823 | VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7]) | |
824 | ||
825 | # Arithmetic relational operators with keys. | |
826 | VSCTL_CHECK_FIND([other-config:x=""], [br1]) | |
827 | VSCTL_CHECK_FIND([other-config:x=y], [br2]) | |
828 | VSCTL_CHECK_FIND([other-config:x=z], [br3]) | |
829 | ||
830 | VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3]) | |
831 | VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3]) | |
832 | VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2]) | |
833 | ||
834 | VSCTL_CHECK_FIND([other-config:x>y], [br3]) | |
835 | VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3]) | |
836 | VSCTL_CHECK_FIND([other-config:x<y], [br1]) | |
837 | VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2]) | |
838 | ||
839 | # Set relational operators with keys. | |
840 | VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7]) | |
841 | VSCTL_CHECK_FIND([other-config:x{=}""], [br1]) | |
842 | VSCTL_CHECK_FIND([other-config:x{=}y], [br2]) | |
843 | VSCTL_CHECK_FIND([other-config:x{=}z], [br3]) | |
844 | ||
845 | VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3]) | |
846 | VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7]) | |
847 | VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7]) | |
848 | VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7]) | |
849 | ||
850 | VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7]) | |
851 | VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7]) | |
852 | VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7]) | |
853 | VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7]) | |
854 | VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7]) | |
855 | VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7]) | |
856 | ||
857 | VSCTL_CHECK_FIND([other-config:x{<}[[]]], []) | |
858 | VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7]) | |
859 | VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7]) | |
860 | VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7]) | |
861 | VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7]) | |
862 | ||
863 | VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7]) | |
864 | VSCTL_CHECK_FIND([other-config:x{>=}x], []) | |
865 | VSCTL_CHECK_FIND([other-config:x{>=}""], [br1]) | |
866 | VSCTL_CHECK_FIND([other-config:x{>=}y], [br2]) | |
867 | VSCTL_CHECK_FIND([other-config:x{>=}z], [br3]) | |
868 | ||
869 | VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3]) | |
870 | VSCTL_CHECK_FIND([other-config:x{>}x], []) | |
871 | VSCTL_CHECK_FIND([other-config:x{>}""], []) | |
872 | VSCTL_CHECK_FIND([other-config:x{>}y], []) | |
873 | VSCTL_CHECK_FIND([other-config:x{>}z], []) | |
94c33672 | 874 | OVS_VSCTL_CLEANUP |
2a9537e2 BP |
875 | AT_CLEANUP |
876 | ||
7db03f7c BP |
877 | AT_SETUP([database commands -- wait-until immediately true]) |
878 | AT_KEYWORDS([ovs-vsctl]) | |
879 | OVS_VSCTL_SETUP | |
880 | AT_CHECK([RUN_OVS_VSCTL( | |
881 | [add-br br0], | |
882 | [add-bond br0 bond0 eth0 eth1], | |
883 | [set port bond0 bond_updelay=500 other-config:abc=def])], | |
884 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
289df16d | 885 | AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])], |
7db03f7c BP |
886 | [0], [], [], [OVS_VSCTL_CLEANUP]) |
887 | AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])], | |
888 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
889 | AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])], | |
890 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
891 | AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])], | |
892 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
893 | OVS_VSCTL_CLEANUP | |
894 | AT_CLEANUP | |
895 | ||
896 | AT_SETUP([database commands -- wait-until must wait]) | |
897 | AT_KEYWORDS([ovs-vsctl]) | |
7454ec7a BP |
898 | |
899 | # Disable lcov for this test. All the programs running in parallel | |
900 | # race badly on access to profiling data. | |
901 | DISABLE_LCOV=true | |
902 | export DISABLE_LCOV | |
903 | ||
7db03f7c BP |
904 | OVS_VSCTL_SETUP |
905 | ||
906 | # Start ovs-vsctls in background. | |
907 | (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 & | |
908 | (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 & | |
909 | (RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 & | |
910 | (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 & | |
911 | ||
912 | # Give the ovs-vsctls a chance to read the database | |
913 | sleep 1 | |
914 | ||
e111e681 | 915 | AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux]) |
7db03f7c BP |
916 | 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])], |
917 | [0], [], [], [OVS_VSCTL_CLEANUP]) | |
918 | ||
919 | # Wait for the ovs-vsctls to finish. | |
920 | wait | |
921 | ||
922 | # Check output | |
923 | AT_CHECK([cat stdout1], [0], [quux | |
924 | ], [], [OVS_VSCTL_CLEANUP]) | |
925 | AT_CHECK([cat stdout2], [0], [def | |
926 | ], [], [OVS_VSCTL_CLEANUP]) | |
927 | AT_CHECK([cat stdout3], [0], [{abc=def} | |
928 | ], [], [OVS_VSCTL_CLEANUP]) | |
929 | AT_CHECK([cat stdout4], [0], [500 | |
930 | ], [], [OVS_VSCTL_CLEANUP]) | |
931 | ||
932 | OVS_VSCTL_CLEANUP | |
933 | AT_CLEANUP | |
934 | ||
aed133bf BP |
935 | AT_SETUP([--id option on create, get commands]) |
936 | AT_KEYWORDS([ovs-vsctl]) | |
937 | OVS_VSCTL_SETUP | |
938 | AT_CHECK([RUN_OVS_VSCTL([add-br br0], | |
939 | [add-port br0 eth0], | |
940 | [add-port br0 eth1])]) | |
941 | AT_CHECK( | |
942 | [RUN_OVS_VSCTL_TOGETHER( | |
943 | [set bridge br0 mirrors=@m], | |
944 | [--id=@eth0 get port eth0], | |
945 | [--id=@eth1 get port eth1], | |
946 | [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])], | |
947 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) | |
948 | AT_CHECK( | |
949 | [perl $srcdir/uuidfilt.pl stdout], [0], [dnl | |
950 | ||
951 | ||
952 | ||
953 | <0> | |
954 | ], | |
955 | [], [OVS_VSCTL_CLEANUP]) | |
956 | AT_CHECK( | |
957 | [RUN_OVS_VSCTL( | |
958 | [list port eth0 eth1], | |
959 | [list mirror], | |
960 | [list bridge br0])], | |
961 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) | |
962 | AT_CHECK( | |
963 | [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | $srcdir/uuidfilt.pl], [0], [dnl | |
964 | [_uuid : <0> | |
965 | name : "eth0" | |
966 | _uuid : <1> | |
967 | name : "eth1" | |
968 | _uuid : <2> | |
969 | name : mymirror | |
970 | output_port : <1> | |
971 | output_vlan : [] | |
972 | select_all : false | |
973 | select_dst_port : [<0>] | |
974 | select_src_port : [<0>] | |
975 | select_vlan : [] | |
976 | _uuid : <3> | |
977 | mirrors : [<2>] | |
978 | name : "br0" | |
979 | ]], | |
980 | [], [OVS_VSCTL_CLEANUP]) | |
981 | OVS_VSCTL_CLEANUP | |
982 | AT_CLEANUP | |
983 | ||
c5f341ab BP |
984 | AT_SETUP([unreferenced record warnings]) |
985 | AT_KEYWORDS([ovs-vsctl]) | |
986 | OVS_VSCTL_SETUP | |
987 | AT_CHECK( | |
988 | [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \ | |
989 | -- create Bridge name=br0 | $srcdir/uuidfilt.pl], | |
990 | [0], [<0> | |
991 | ], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect | |
992 | ], [OVS_VSCTL_CLEANUP]) | |
993 | AT_CHECK( | |
994 | [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \ | |
995 | -- --id=@br0 create Bridge name=br0 | $srcdir/uuidfilt.pl], | |
996 | [0], [<0> | |
997 | ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database | |
998 | ], [OVS_VSCTL_CLEANUP]) | |
999 | AT_CHECK( | |
1000 | [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket \ | |
1001 | -- --id=@eth0_iface create Interface name=eth0 \ | |
1002 | -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \ | |
1003 | -- --id=@m0 create Mirror name=m0 output_port=@eth0 \ | |
1004 | -- --id=@br0 create Bridge name=br0 mirrors=@m0 \ | |
1005 | -- set Open_vSwitch . bridges=@br0 | $srcdir/uuidfilt.pl], | |
1006 | [0], [<0> | |
1007 | <1> | |
1008 | <2> | |
1009 | <3> | |
1010 | ], [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 | |
1011 | ], [OVS_VSCTL_CLEANUP]) | |
1012 | OVS_VSCTL_CLEANUP | |
1013 | AT_CLEANUP | |
1014 | ||
5c414a2e BP |
1015 | dnl This test really shows a bug -- "create" followed by "list" in |
1016 | dnl the same execution shows the wrong UUID on the "list" command. | |
1017 | dnl The bug is documented in ovs-vsctl.8. | |
1018 | AT_SETUP([created row UUID is wrong in same execution]) | |
1019 | AT_KEYWORDS([ovs-vsctl]) | |
1020 | OVS_VSCTL_SETUP | |
c5f341ab | 1021 | AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])], |
5c414a2e BP |
1022 | [0], [stdout], [], [OVS_VSCTL_CLEANUP]) |
1023 | AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], | |
1024 | [[<0> | |
bd76d25d BP |
1025 | _uuid : <1> |
1026 | controller : [] | |
1027 | datapath_id : [] | |
1028 | datapath_type : "" | |
1029 | external_ids : {} | |
31681a5d | 1030 | fail_mode : [] |
bd76d25d | 1031 | flood_vlans : [] |
254750ce | 1032 | flow_tables : {} |
bd76d25d BP |
1033 | mirrors : [] |
1034 | name : "br0" | |
1035 | netflow : [] | |
1036 | other_config : {} | |
1037 | ports : [] | |
1038 | sflow : [] | |
21f7563c JP |
1039 | status : {} |
1040 | stp_enable : false | |
5c414a2e BP |
1041 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
1042 | OVS_VSCTL_CLEANUP | |
1043 | AT_CLEANUP |