]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovs-vsctl.at
bfd: Support overlay BFD
[mirror_ovs.git] / tests / ovs-vsctl.at
CommitLineData
c75d1511
BP
1dnl OVS_VSCTL_SETUP
2dnl
3dnl Creates an empty database in the current directory and then starts
4dnl an ovsdb-server on it for ovs-vsctl to connect to.
5m4_define([OVS_VSCTL_SETUP],
24c8ae53 6 [OVSDB_INIT([db])
ee9ccf93 7 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --remote=punix:db.sock db >/dev/null 2>&1], [0], [ignore], [ignore])
56120500 8 on_exit 'kill `cat ovsdb-server.pid`'])
c75d1511
BP
9
10dnl OVS_VSCTL_CLEANUP
11dnl
12dnl Kills off the database server.
56120500 13m4_define([OVS_VSCTL_CLEANUP], [OVS_APP_EXIT_AND_WAIT_BY_TARGET([ovsdb-server], [ovsdb-server.pid])])
c75d1511 14
3b135da3
BP
15dnl RUN_OVS_VSCTL(COMMAND, ...)
16dnl
c75d1511 17dnl Executes each ovs-vsctl COMMAND.
3b135da3 18m4_define([RUN_OVS_VSCTL],
ee9ccf93 19 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer command
460aad80
BP
20])])
21m4_define([RUN_OVS_VSCTL_ONELINE],
ee9ccf93 22 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --oneline -- command
3b135da3
BP
23])])
24
4d14e30f
BP
25dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
26dnl
c75d1511 27dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
4d14e30f 28m4_define([RUN_OVS_VSCTL_TOGETHER],
ee9ccf93 29 [ovs-vsctl --no-wait -vreconnect:emer --oneline dnl
460aad80 30m4_foreach([command], [$@], [ -- command])])
4d14e30f 31
8e58fa9a 32dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
3b135da3
BP
33dnl
34dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
8e58fa9a
BP
35dnl which must be in alphabetical order. Also checks that each BRIDGE has the
36dnl specified PARENT and is on the given VLAN.
37m4_define([_CHECK_BRIDGE],
38 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
bf297226 39])
2792c2ad
BP
40
41 # Check br-to-vlan, without --oneline.
8e58fa9a 42 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
bf297226 43])
2792c2ad
BP
44 # Check br-to-vlan, with --oneline.
45 # (This particular test is interesting with --oneline because it returns
46 # an integer instead of a string and that can cause type mismatches inside
47 # python if not done carefully.)
460aad80 48 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
bf297226 49])
4d14e30f
BP
50
51 # Check multiple queries in a single run.
52 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
53[$2
54$3
bf297226 55])])
3b135da3 56m4_define([CHECK_BRIDGES],
2792c2ad 57 [dnl Check that the bridges appear on list-br, without --oneline.
8e58fa9a 58 AT_CHECK(
3b135da3
BP
59 [RUN_OVS_VSCTL([list-br])],
60 [0],
8e58fa9a 61 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
bf297226 62])])
8e58fa9a 63
2792c2ad
BP
64 dnl Check that the bridges appear on list-br, with --oneline.
65 AT_CHECK(
460aad80 66 [RUN_OVS_VSCTL_ONELINE([list-br])],
2792c2ad
BP
67 [0],
68 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
bf297226 69])
2792c2ad 70
8e58fa9a
BP
71 dnl Check that each bridge exists according to br-exists and that
72 dnl a bridge that should not exist does not.
a128bd8c 73 m4_foreach([brinfo], [$@],
bf297226
BP
74 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])])])
75 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2])
8e58fa9a
BP
76
77 dnl Check that each bridge has the expected parent and VLAN.
78 m4_map([_CHECK_BRIDGE], [$@])])
3b135da3
BP
79
80dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
81dnl
82dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
83dnl list of ports, which must be in alphabetical order. Also checks
84dnl that "ovs-vsctl port-to-br" reports that each port is
85dnl in BRIDGE.
86m4_define([CHECK_PORTS],
2792c2ad
BP
87 [dnl Check ports without --oneline.
88 AT_CHECK(
3b135da3
BP
89 [RUN_OVS_VSCTL([list-ports $1])],
90 [0],
91 [m4_foreach([port], m4_cdr($@), [port
bf297226 92])])
2792c2ad
BP
93
94 dnl Check ports with --oneline.
95 AT_CHECK(
460aad80 96 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
2792c2ad
BP
97 [0],
98 [m4_join([\n], m4_shift($@))
bf297226 99])
c75d1511
BP
100 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
101 [ovs-vsctl: no port named $1
bf297226 102])
3b135da3 103 m4_foreach(
a128bd8c 104 [port], m4_cdr($@),
3b135da3 105 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
bf297226 106])])])
3b135da3
BP
107
108dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
109dnl
110dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
111dnl list of ifaces, which must be in alphabetical order. Also checks
112dnl that "ovs-vsctl iface-to-br" reports that each interface is
113dnl in BRIDGE.
114m4_define([CHECK_IFACES],
115 [AT_CHECK(
116 [RUN_OVS_VSCTL([list-ifaces $1])],
117 [0],
118 [m4_foreach([iface], m4_cdr($@), [iface
bf297226 119])])
c75d1511
BP
120 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
121 [ovs-vsctl: no interface named $1
bf297226 122])
3b135da3 123 m4_foreach(
a128bd8c 124 [iface], m4_cdr($@),
3b135da3 125 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
bf297226 126])])])
3b135da3 127
fba6bd1d
BP
128dnl ----------------------------------------------------------------------
129AT_BANNER([ovs-vsctl unit tests])
130
131AT_SETUP([ovs-vsctl connection retry])
fba6bd1d
BP
132dnl Without --retry, there should be no retry for active connections.
133AT_CHECK([ovs-vsctl --db=unix:foo --timeout=10 -vreconnect:emer -- init],
134 [1], [], [stderr])
135AT_CHECK([[sed 's/([^()]*)/(...reason...)/' stderr]], [0],
136 [ovs-vsctl: unix:foo: database connection failed (...reason...)
137])
138
139dnl With --retry, we should retry for active connections.
140AT_CHECK(
141 [ovs-vsctl --db=unix:foo --timeout=1 --retry -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
142 echo $? > status],
143 [0], [], [stderr])
144AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
145])
9e784ba5
GS
146if test "$IS_WIN32" = "yes"; then
147 AT_CHECK([cat status], [0], [3
fba6bd1d 148])
9e784ba5
GS
149else
150 # 128 + SIGALRM
151 AT_CHECK([cat status], [0], [142
152])
153fi
fba6bd1d
BP
154
155dnl Without --retry, we should retry for passive connections.
156AT_CHECK(
157 [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
158 echo $? > status],
159 [0], [], [stderr])
160AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
161])
9e784ba5
GS
162if test "$IS_WIN32" = "yes"; then
163 AT_CHECK([cat status], [0], [3
164])
165else
166 # 128 + SIGALRM
167 AT_CHECK([cat status], [0], [142
fba6bd1d 168])
9e784ba5 169fi
fba6bd1d
BP
170AT_CLEANUP
171
8e58fa9a
BP
172dnl ----------------------------------------------------------------------
173AT_BANNER([ovs-vsctl unit tests -- real bridges])
174
3b135da3
BP
175AT_SETUP([add-br a])
176AT_KEYWORDS([ovs-vsctl])
c75d1511 177OVS_VSCTL_SETUP
bf297226 178AT_CHECK([RUN_OVS_VSCTL([add-br a])])
8e58fa9a 179CHECK_BRIDGES([a, a, 0])
3b135da3
BP
180CHECK_PORTS([a])
181CHECK_IFACES([a])
c75d1511 182OVS_VSCTL_CLEANUP
3b135da3
BP
183AT_CLEANUP
184
1125a1b9
BP
185AT_SETUP([add-br a, add-br a])
186AT_KEYWORDS([ovs-vsctl])
c75d1511 187OVS_VSCTL_SETUP
bf297226 188AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0])
1125a1b9
BP
189AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
190 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
bf297226 191])
f75612a1
BP
192AT_CHECK([RUN_OVS_VSCTL([add-br ''])], [1], [],
193 [ovs-vsctl: bridge name must not be empty string
bf297226 194])
c75d1511 195OVS_VSCTL_CLEANUP
1125a1b9
BP
196AT_CLEANUP
197
3b135da3
BP
198AT_SETUP([add-br a, add-br b])
199AT_KEYWORDS([ovs-vsctl])
c75d1511 200OVS_VSCTL_SETUP
bf297226 201AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])])
aeee85aa
BP
202AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
203 [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
bf297226 204])
8e58fa9a 205CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
206CHECK_PORTS([a])
207CHECK_IFACES([a])
208CHECK_PORTS([b])
209CHECK_IFACES([b])
c75d1511 210OVS_VSCTL_CLEANUP
3b135da3
BP
211AT_CLEANUP
212
213AT_SETUP([add-br a, add-br b, del-br a])
214AT_KEYWORDS([ovs-vsctl])
c75d1511 215OVS_VSCTL_SETUP
bf297226 216AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])])
8e58fa9a 217CHECK_BRIDGES([b, b, 0])
3b135da3
BP
218CHECK_PORTS([b])
219CHECK_IFACES([b])
c75d1511 220OVS_VSCTL_CLEANUP
3b135da3
BP
221AT_CLEANUP
222
28a14bf3
EJ
223AT_SETUP([add-br a, del-br a, add-br a])
224AT_KEYWORDS([ovs-vsctl])
225OVS_VSCTL_SETUP
226AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
227 [add-br a],
228 [del-br a],
229 [add-br a],
230 [set Interface a other_config:key=value],
231 [get Interface a other_config:key])], [0], [
232
233
234
235value
bf297226 236])
28a14bf3
EJ
237CHECK_BRIDGES([a, a, 0])
238CHECK_PORTS([a])
239CHECK_IFACES([a])
240OVS_VSCTL_CLEANUP
241AT_CLEANUP
242
2792c2ad
BP
243AT_SETUP([add-br a, add-port a a1, add-port a a2])
244AT_KEYWORDS([ovs-vsctl])
c75d1511 245OVS_VSCTL_SETUP
2792c2ad 246AT_CHECK([RUN_OVS_VSCTL(
dfbe07ba 247 [add-br a],
460aad80 248 [--if-exists del-br b],
2792c2ad 249 [add-port a a1],
bf297226 250 [add-port a a2])])
2792c2ad
BP
251CHECK_BRIDGES([a, a, 0])
252CHECK_PORTS([a], [a1], [a2])
253CHECK_IFACES([a], [a1], [a2])
c75d1511 254OVS_VSCTL_CLEANUP
2792c2ad
BP
255AT_CLEANUP
256
1125a1b9
BP
257AT_SETUP([add-br a, add-port a a1, add-port a a1])
258AT_KEYWORDS([ovs-vsctl])
c75d1511 259OVS_VSCTL_SETUP
1125a1b9 260AT_CHECK([RUN_OVS_VSCTL(
a128bd8c 261 [add-br a],
bf297226 262 [add-port a a1])])
1125a1b9
BP
263AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
264 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
bf297226 265])
f75612a1
BP
266AT_CHECK([RUN_OVS_VSCTL([add-port a ''])], [1], [],
267 [ovs-vsctl: port name must not be empty string
bf297226 268])
c75d1511 269OVS_VSCTL_CLEANUP
1125a1b9
BP
270AT_CLEANUP
271
3b135da3
BP
272AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
273AT_KEYWORDS([ovs-vsctl])
c75d1511 274OVS_VSCTL_SETUP
4d14e30f 275AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
a128bd8c
AW
276 [add-br a],
277 [add-br b],
3b135da3
BP
278 [add-port a a1],
279 [add-port b b1],
460aad80
BP
280 [--if-exists del-port b b2],
281 [del-br a])], [0], [
282
283
284
285
286
bf297226 287])
8e58fa9a 288CHECK_BRIDGES([b, b, 0])
3b135da3
BP
289CHECK_PORTS([b], [b1])
290CHECK_IFACES([b], [b1])
c75d1511 291OVS_VSCTL_CLEANUP
3b135da3
BP
292AT_CLEANUP
293
294AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
295AT_KEYWORDS([ovs-vsctl])
c75d1511 296OVS_VSCTL_SETUP
3b135da3 297AT_CHECK([RUN_OVS_VSCTL(
a128bd8c 298 [add-br a],
bf297226
BP
299 [add-bond a bond0 a1 a2 a3])])
300AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])])
a128bd8c 301AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
bb1c67c8 302 [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
bf297226 303])
f75612a1
BP
304AT_CHECK([RUN_OVS_VSCTL([add-bond a '' x y z])], [1], [],
305 [ovs-vsctl: port name must not be empty string
bf297226 306])
f75612a1
BP
307AT_CHECK([RUN_OVS_VSCTL([add-bond a x '' y z])], [1], [],
308 [ovs-vsctl: interface name must not be empty string
bf297226 309])
8e58fa9a 310CHECK_BRIDGES([a, a, 0])
3b135da3
BP
311CHECK_PORTS([a], [bond0])
312CHECK_IFACES([a], [a1], [a2], [a3])
c75d1511 313OVS_VSCTL_CLEANUP
3b135da3
BP
314AT_CLEANUP
315
ec5ef1cf
BP
316AT_SETUP([add-bond-iface and del-bond-iface])
317AT_KEYWORDS([ovs-vsctl])
318OVS_VSCTL_SETUP
319
320# Create 2-interface bond.
321AT_CHECK([RUN_OVS_VSCTL(
322 [add-br a],
323 [add-bond a bond0 a1 a2])])
324CHECK_BRIDGES([a, a, 0])
325CHECK_PORTS([a], [bond0])
326CHECK_IFACES([a], [a1], [a2])
327
328# Add interface a3 to bond.
329AT_CHECK([RUN_OVS_VSCTL([add-bond-iface bond0 a3])])
330CHECK_BRIDGES([a, a, 0])
331CHECK_PORTS([a], [bond0])
332CHECK_IFACES([a], [a1], [a2], [a3])
333
334# Delete interface a2 from bond.
335AT_CHECK([RUN_OVS_VSCTL([del-bond-iface bond0 a2])])
336CHECK_BRIDGES([a, a, 0])
337CHECK_PORTS([a], [bond0])
338CHECK_IFACES([a], [a1], [a3])
339
340# Add interface a2 to bond.
341AT_CHECK([RUN_OVS_VSCTL([add-bond-iface bond0 a2])])
342CHECK_BRIDGES([a, a, 0])
343CHECK_PORTS([a], [bond0])
344CHECK_IFACES([a], [a1], [a2], [a3])
345
346# Delete interface a2 from bond.
347AT_CHECK([RUN_OVS_VSCTL([del-bond-iface a2])])
348CHECK_BRIDGES([a, a, 0])
349CHECK_PORTS([a], [bond0])
350CHECK_IFACES([a], [a1], [a3])
351
352AT_CHECK([RUN_OVS_VSCTL([--if-exists del-bond-iface bond0 a4])])
353AT_CHECK([RUN_OVS_VSCTL([del-bond-iface bond0 a4])], [1], [],
354 [ovs-vsctl: no interface named a4
355])
356AT_CHECK([RUN_OVS_VSCTL([del-bond-iface a4])], [1], [],
357 [ovs-vsctl: no interface named a4
358])
359AT_CHECK([RUN_OVS_VSCTL_TOGETHER([add-port a a4], [del-bond-iface bond0 a4])], [1], [],
360 [ovs-vsctl: port bond0 does not have an interface a4
361])
362AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond-iface bond0 a3])])
363AT_CHECK([RUN_OVS_VSCTL_TOGETHER([add-bond a bond1 b1 b2 b3], [--may-exist add-bond-iface bond1 a3])], [1], [],
364 [ovs-vsctl: "--may-exist add-bond-iface bond1 a3" but a3 is actually attached to port bond0
365])
366AT_CHECK([RUN_OVS_VSCTL([add-bond-iface bond0 a3])], [1], [],
367 [ovs-vsctl: cannot create an interface named a3 because an interface named a3 already exists on bridge a
368])
369AT_CHECK([RUN_OVS_VSCTL_TOGETHER([del-bond-iface a1], [del-bond-iface a3])], [1], [],
370 [ovs-vsctl: cannot delete last interface from port bond0
371])
372
373OVS_VSCTL_CLEANUP
374AT_CLEANUP
375
3b135da3
BP
376AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
377AT_KEYWORDS([ovs-vsctl])
c75d1511 378OVS_VSCTL_SETUP
3b135da3 379AT_CHECK([RUN_OVS_VSCTL(
a128bd8c
AW
380 [add-br a],
381 [add-br b],
18b239f5
BP
382 [add-port a a1 tag=9],
383 [get port a1 tag],
bb1c67c8 384 [--may-exist add-port b b1],
18b239f5 385 [del-port a a1])], [0], [9
bf297226
BP
386])
387AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])])
89f3c258
BP
388AT_CHECK([RUN_OVS_VSCTL([del-port a])], [1], [],
389 [ovs-vsctl: cannot delete port a because it is the local port for bridge a (deleting this port requires deleting the entire bridge)
bf297226
BP
390])
391AT_CHECK([RUN_OVS_VSCTL([--if-exists del-port a])])
a128bd8c 392AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
bb1c67c8 393 [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
bf297226 394])
8e58fa9a 395CHECK_BRIDGES([a, a, 0], [b, b, 0])
3b135da3
BP
396CHECK_PORTS([a])
397CHECK_IFACES([a])
398CHECK_PORTS([b], [b1])
399CHECK_IFACES([b], [b1])
c75d1511 400OVS_VSCTL_CLEANUP
3b135da3
BP
401AT_CLEANUP
402
3d1b9636 403AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
3b135da3 404AT_KEYWORDS([ovs-vsctl])
c75d1511 405OVS_VSCTL_SETUP
4d14e30f 406AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
a128bd8c 407 [add-br a],
18b239f5
BP
408 [add-bond a bond0 a1 a2 a3 tag=9],
409 [get Port bond0 tag],
460aad80
BP
410 [del-port bond0])], [0], [
411
18b239f5 4129
460aad80 413
bf297226 414])
8e58fa9a 415CHECK_BRIDGES([a, a, 0])
3b135da3 416CHECK_PORTS([a])
c75d1511 417OVS_VSCTL_CLEANUP
3b135da3
BP
418AT_CLEANUP
419
457e1eb0
BP
420AT_SETUP([external IDs])
421AT_KEYWORDS([ovs-vsctl])
422OVS_VSCTL_SETUP
fbd8715e 423AT_CHECK([RUN_OVS_VSCTL_ONELINE(
a128bd8c 424 [add-br a],
457e1eb0
BP
425 [add-port a a1],
426 [add-bond a bond0 a2 a3],
427 [br-set-external-id a key0 value0],
e328faad
BP
428 [set port a1 external-ids:key1=value1],
429 [set interface a2 external-ids:key2=value2],
430 [set interface a2 external-ids:key3=value3],
431 [set interface a3 external-ids:key4=value4],
457e1eb0
BP
432 [br-get-external-id a],
433 [br-get-external-id a key0],
434 [br-get-external-id a key1],
435 [br-set-external-id a key0 othervalue],
436 [br-get-external-id a],
437 [br-set-external-id a key0],
438 [br-get-external-id a],
e328faad
BP
439 [get port a1 external-ids],
440 [get interface a2 external-ids],
441 [get interface a3 external-ids])], [0], [
457e1eb0
BP
442
443
444
445
446
447
448
449key0=value0
450value0
451
452
453key0=othervalue
454
455
29004db2
IM
456{key1=value1}
457{key2=value2, key3=value3}
458{key4=value4}
bf297226 459])
457e1eb0 460AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 461 [br-get-external-id a],
e328faad
BP
462 [get port a1 external-ids],
463 [get interface a2 external-ids],
464 [get interface a3 external-ids])], [0],
457e1eb0 465[
29004db2
IM
466{key1=value1}
467{key2=value2, key3=value3}
468{key4=value4}
bf297226 469])
457e1eb0
BP
470CHECK_BRIDGES([a, a, 0])
471CHECK_PORTS([a], [a1], [bond0])
472CHECK_IFACES([a], [a1], [a2], [a3])
473OVS_VSCTL_CLEANUP
474AT_CLEANUP
475
76ce9432
BP
476AT_SETUP([controllers])
477AT_KEYWORDS([controller ovs-vsctl])
478OVS_VSCTL_SETUP
479AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
e44768b7 480 [add-br br0],
76ce9432 481
76ce9432 482 [get-controller br0],
76ce9432 483 [set-controller br0 tcp:4.5.6.7],
76ce9432
BP
484 [get-controller br0],
485
486 [del-controller br0],
76ce9432
BP
487 [get-controller br0],
488
489 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
3ffed5cb
GL
490 [get-controller br0],
491
492 [--inactivity-probe=30000 set-controller br0 tcp:1.2.3.4],
76ce9432
BP
493 [get-controller br0])], [0], [
494
76ce9432 495
76ce9432
BP
496tcp:4.5.6.7
497
498
499
76ce9432 500tcp:5.4.3.2\ntcp:8.9.10.11
3ffed5cb
GL
501
502tcp:1.2.3.4
bf297226 503])
76ce9432
BP
504OVS_VSCTL_CLEANUP
505AT_CLEANUP
506
822c8923
DS
507
508AT_SETUP([fail-mode])
509AT_KEYWORDS([fail-mode ovs-vsctl])
510OVS_VSCTL_SETUP
511AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
512 [add-br br0],
513
514 [get-fail-mode br0],
515 [set-fail-mode br0 secure],
516 [get-fail-mode br0],
517
518 [del-fail-mode br0],
519 [get-fail-mode br0],
520
521 [set-fail-mode br0 standalone],
522 [get-fail-mode br0])], [0], [
523
524
525secure
526
527
528
529standalone
530])
531OVS_VSCTL_CLEANUP
532AT_CLEANUP
533
bd6da4ab
DS
534
535# check if emer-reset reset switch to known good state
536# test is implemented by creating switch entities and checks if after applying
537# emer-reset these entities are deleted
538AT_SETUP([emer-reset])
539AT_KEYWORDS([emer-reset ovs-vsctl])
540OVS_VSCTL_SETUP
541
542# define controllers, fail-mode, netflow, mirror
543AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
544 [add-br br0],
545 [add-port br0 eth0],
546 [add-port br0 eth1],
547 [set-controller br0 tcp:4.5.6.7],
548 [set-fail-mode br0 secure],
549 [set bridge br0 netflow=@nf],
550 [--id=@nf create netflow targets=3.4.5.6],
551 [set bridge br0 mirrors=@m],
552 [--id=@eth0 get port eth0],
553 [--id=@eth1 get port eth1],
554 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1],
555 [set bridge br0 sflow=@sf],
556 [--id=@sf create sflow targets=1.2.3.4],
557 [set bridge br0 datapath-type=dummy other-config:datapath-id=1234 other-config:hwaddr="00:12:34:56:78:bb"],
558 [set bridge br0 ipfix=@fix],
559 [--id=@fix create ipfix targets=1.2.3.4],
560 [set bridge br0 flood_vlans=1],
561 [set bridge br0 datapath_id=2 datapath_version="alpha"],
562 [list bridge > configured_bridge.txt]
563 )], [0], [stdout])
564
565AT_CHECK(
566 [uuidfilt configured_bridge.txt],
567 [0],[[
568
569
570
571
572
573<0>
574
575
576
577<1>
578
579<2>
580
581
582<3>
583
584
585_uuid : <4>
586auto_attach : []
587controller : [<5>]
588datapath_id : "2"
589datapath_type : dummy
590datapath_version : alpha
591external_ids : {}
592fail_mode : secure
593flood_vlans : [1]
594flow_tables : {}
595ipfix : <6>
596mcast_snooping_enable: false
597mirrors : [<7>]
598name : br0
599netflow : <8>
600other_config : {datapath-id="1234", hwaddr="00:12:34:56:78:bb"}
601ports : [<9>, <10>, <11>]
602protocols : []
603rstp_enable : false
604rstp_status : {}
605sflow : <12>
606status : {}
607stp_enable : false
608]])
609
610
611# execute emer-reset
612AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
613 [emer-reset])], [0], [
614])
615
616# check if bridge was cleaned/reset
617AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
618 [list bridge > cleaned_bridge.txt]
619 )], [0], [stdout])
620
621AT_CHECK(
622 [uuidfilt cleaned_bridge.txt],
623 [0],[[_uuid : <0>
624auto_attach : []
625controller : []
626datapath_id : "2"
627datapath_type : dummy
628datapath_version : alpha
629external_ids : {}
630fail_mode : []
631flood_vlans : []
632flow_tables : {}
633ipfix : []
634mcast_snooping_enable: false
635mirrors : []
636name : br0
637netflow : []
638other_config : {hwaddr="00:12:34:56:78:bb"}
639ports : [<1>, <2>, <3>]
640protocols : []
641rstp_enable : false
642rstp_status : {}
643sflow : []
644status : {}
645stp_enable : false
646]])
647
648OVS_VSCTL_CLEANUP
649AT_CLEANUP
650
651
652
8e58fa9a 653dnl ----------------------------------------------------------------------
5341d046 654dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
dfbe07ba
BP
655m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
656 [AT_CHECK(
657 [RUN_OVS_VSCTL(
658 [add-br xenbr0],
aeee85aa 659 [--may-exist add-br xenbr0],
dfbe07ba 660 [add-port xenbr0 eth0],
bb1c67c8 661 [--may-exist add-port xenbr0 eth0],
5341d046
BP
662 [add-br xapi1 xenbr0 $1],
663 [--may-exist add-br xapi1 xenbr0 $1],
bf297226 664 [add-port xapi1 eth0.$1])])])
3b135da3 665
5341d046
BP
666dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
667m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
668AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
669
670AT_SETUP([simple fake bridge (VLAN $1)])
3b135da3 671AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 672OVS_VSCTL_SETUP
5341d046 673OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
aeee85aa 674AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
5341d046 675 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
bf297226 676])
5341d046
BP
677AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
678 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
bf297226 679])
aeee85aa 680AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
5341d046 681 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
bf297226 682])
5dd9826c
BP
683AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br dup xenbr0 $1])], [1], [],
684 [ovs-vsctl: bridge xenbr0 already has a child VLAN bridge xapi1 on VLAN $1
bf297226 685])
5341d046 686CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
3b135da3
BP
687CHECK_PORTS([xenbr0], [eth0])
688CHECK_IFACES([xenbr0], [eth0])
5341d046
BP
689CHECK_PORTS([xapi1], [eth0.$1])
690CHECK_IFACES([xapi1], [eth0.$1])
c75d1511 691OVS_VSCTL_CLEANUP
3b135da3
BP
692AT_CLEANUP
693
515d830a
JP
694AT_SETUP([list bridges -- real and fake (VLAN $1)])
695AT_KEYWORDS([ovs-vsctl fake-bridge])
696OVS_VSCTL_SETUP
697OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
698AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
699 [xapi1\nxenbr0
bf297226 700])
515d830a
JP
701AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
702 [xenbr0
bf297226 703])
515d830a
JP
704AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
705 [xapi1
bf297226 706])
515d830a
JP
707OVS_VSCTL_CLEANUP
708AT_CLEANUP
709
5341d046 710AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
3b135da3 711AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 712OVS_VSCTL_SETUP
5341d046 713OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
bf297226 714AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
8e58fa9a 715CHECK_BRIDGES([xenbr0, xenbr0, 0])
3b135da3
BP
716CHECK_PORTS([xenbr0], [eth0])
717CHECK_IFACES([xenbr0], [eth0])
c75d1511 718OVS_VSCTL_CLEANUP
3b135da3
BP
719AT_CLEANUP
720
5341d046 721AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
3b135da3 722AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 723OVS_VSCTL_SETUP
5341d046 724OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
bf297226 725AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
3b135da3 726CHECK_BRIDGES
c75d1511 727OVS_VSCTL_CLEANUP
3b135da3
BP
728AT_CLEANUP
729
5341d046 730AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
457e1eb0
BP
731AT_KEYWORDS([ovs-vsctl fake-bridge])
732OVS_VSCTL_SETUP
5341d046 733OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
457e1eb0 734AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
460aad80 735 [br-set-external-id xenbr0 key0 value0],
457e1eb0
BP
736 [br-set-external-id xapi1 key1 value1],
737 [br-get-external-id xenbr0],
738 [br-get-external-id xenbr0 key0],
739 [br-get-external-id xapi1],
740 [br-get-external-id xapi1 key1])], [0], [
741
742key0=value0
743value0
744key1=value1
745value1
bf297226 746])
5341d046 747CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
457e1eb0
BP
748CHECK_PORTS([xenbr0], [eth0])
749CHECK_IFACES([xenbr0], [eth0])
5341d046
BP
750CHECK_PORTS([xapi1], [eth0.$1])
751CHECK_IFACES([xapi1], [eth0.$1])
457e1eb0
BP
752OVS_VSCTL_CLEANUP
753AT_CLEANUP
09f37a1b
FF
754
755AT_SETUP([simple fake bridge + del-port from parent (VLAN $1)])
756AT_KEYWORDS([ovs-vsctl fake-bridge del-port])
757OVS_VSCTL_SETUP
758OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
759AT_CHECK([RUN_OVS_VSCTL([del-port xenbr0 eth0.$1])], [1], [],
760 [ovs-vsctl: bridge xenbr0 does not have a port eth0.$1 (although its child bridge xapi1 does)
761])
762CHECK_PORTS([xenbr0], [eth0])
763CHECK_IFACES([xenbr0], [eth0])
764CHECK_PORTS([xapi1], [eth0.$1])
765CHECK_IFACES([xapi1], [eth0.$1])
766AT_CHECK([RUN_OVS_VSCTL([del-port xapi1 eth0.$1])])
767CHECK_PORTS([xenbr0], [eth0])
768CHECK_IFACES([xenbr0], [eth0])
769OVS_VSCTL_CLEANUP
770AT_CLEANUP
5341d046
BP
771]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
772
773OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
774OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
457e1eb0 775
5341d046 776dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
dfbe07ba
BP
777m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
778 [AT_CHECK(
779 [RUN_OVS_VSCTL(
780 [add-br xapi1],
781 [add-bond xapi1 bond0 eth0 eth1],
5341d046 782 [add-br xapi2 xapi1 $1],
bf297226 783 [add-port xapi2 bond0.$1])])])
3b135da3
BP
784
785AT_SETUP([fake bridge on bond])
786AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 787OVS_VSCTL_SETUP
5341d046 788OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
8e58fa9a 789CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
3b135da3
BP
790CHECK_PORTS([xapi1], [bond0])
791CHECK_IFACES([xapi1], [eth0], [eth1])
792CHECK_PORTS([xapi2], [bond0.11])
793CHECK_IFACES([xapi2], [bond0.11])
c75d1511 794OVS_VSCTL_CLEANUP
3b135da3
BP
795AT_CLEANUP
796
797AT_SETUP([fake bridge on bond + del-br fake bridge])
798AT_KEYWORDS([ovs-vsctl fake-bridge])
c75d1511 799OVS_VSCTL_SETUP
5341d046 800OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
460aad80 801AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
bf297226 802])
8e58fa9a 803CHECK_BRIDGES([xapi1, xapi1, 0])
3b135da3
BP
804CHECK_PORTS([xapi1], [bond0])
805CHECK_IFACES([xapi1], [eth0], [eth1])
c75d1511 806OVS_VSCTL_CLEANUP
3b135da3
BP
807AT_CLEANUP
808
809AT_SETUP([fake bridge on bond + del-br real bridge])
810AT_KEYWORDS([ovs-vsctl fake-bridge])
dfbe07ba 811OVS_VSCTL_SETUP
5341d046 812OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
3b135da3
BP
813AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
814CHECK_BRIDGES
c75d1511 815OVS_VSCTL_CLEANUP
3b135da3 816AT_CLEANUP
5c414a2e 817
24b8b259
AE
818dnl ----------------------------------------------------------------------
819AT_BANNER([ovs-vsctl unit tests -- manager commands])
820
821AT_SETUP([managers])
822AT_KEYWORDS([manager ovs-vsctl])
823OVS_VSCTL_SETUP
824AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
825 [del-manager],
826 [get-manager],
827 [set-manager tcp:4.5.6.7],
828 [get-manager],
829 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
830 [get-manager],
3ffed5cb
GL
831 [--inactivity-probe=30000 set-manager tcp:1.2.3.4],
832 [get-manager],
24b8b259
AE
833 [del-manager],
834 [get-manager])], [0], [
835
836
837tcp:4.5.6.7
838
839tcp:5.4.3.2\ntcp:8.9.10.11
840
3ffed5cb
GL
841tcp:1.2.3.4
842
24b8b259 843
bf297226 844])
24b8b259
AE
845OVS_VSCTL_CLEANUP
846AT_CLEANUP
847
5c414a2e
BP
848dnl ----------------------------------------------------------------------
849AT_BANNER([ovs-vsctl unit tests -- database commands])
850
851AT_SETUP([database commands -- positive checks])
852AT_KEYWORDS([ovs-vsctl])
853OVS_VSCTL_SETUP
c5f341ab 854AT_CHECK(
ff495b63
BP
855 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
856 [set b br123 name=br0],
c5f341ab 857 [set o . bridges=@br0])],
bf297226 858 [0], [stdout])
5c414a2e 859cp stdout out1
581d7da8 860AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
bf297226 861 [0], [stdout])
5c414a2e 862cp stdout out2
c724bd67 863AT_CHECK([uuidfilt out1 out2], [0],
5c414a2e 864 [[<0>
c5f341ab 865
ff495b63 866
bd76d25d 867_uuid : <0>
99eef98b 868auto_attach : []
bd76d25d
BP
869controller : []
870datapath_id : []
871datapath_type : ""
b5cbbcf6 872datapath_version : ""
bd76d25d 873external_ids : {}
31681a5d 874fail_mode : []
bd76d25d 875flood_vlans : []
254750ce 876flow_tables : {}
29089a54 877ipfix : []
dc2b70ba 878mcast_snooping_enable: false
bd76d25d 879mirrors : []
29004db2 880name : br0
bd76d25d
BP
881netflow : []
882other_config : {}
883ports : []
7beaa082 884protocols : []
9efd308e
DV
885rstp_enable : false
886rstp_status : {}
bd76d25d 887sflow : []
21f7563c
JP
888status : {}
889stp_enable : false
f40a9b61 890<0>
56120500 891]], [ignore])
9591fefe 892AT_CHECK(
581d7da8 893 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
9591fefe
BP
894 [0],
895 [[fail_mode : []
29004db2 896name : br0
9591fefe 897datapath_type : ""
56120500 898]], [ignore])
0a140468 899AT_CHECK(
581d7da8 900 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
0a140468
BP
901 [0],
902 [[fail_mode : []
29004db2 903name : br0
0a140468 904datapath_type : ""
56120500 905]], [ignore])
c5f341ab 906AT_CHECK([
581d7da8
AA
907 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create bridge name=br1 datapath_type="foo"],
908 [--id=@br2 create bridge name=br2 external-ids:bar=quux],
c5f341ab 909 [add o . bridges @br1 @br2])],
bf297226 910 [0], [stdout])
0a140468 911AT_CHECK(
581d7da8 912 [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
56120500 913 [ignore])
0a140468 914AT_CHECK([sed -n '/./p' stdout | sort], [0],
29004db2
IM
915 [[name : br0
916name : br2
0a140468 917]])
5c414a2e
BP
918AT_CHECK(
919 [RUN_OVS_VSCTL(
920 [set bridge br0 \
921 'other_config:datapath_id="0123456789ab"' \
922 'other_config:hwaddr="00:11:22:33:44:55"' \
d3f82921 923 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
bf297226 924 add bridge br0 external_ids '"roles"="local; remote; cloud"'])])
e44768b7 925AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
d3f82921 926 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
bf297226 927])
e44768b7 928AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
5c414a2e
BP
929 [0], ["00:11:22:33:44:55"
930
bf297226 931])
581d7da8 932AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
5c414a2e 933 [0], [{datapath_id="0123456789ab"}
bf297226 934])
581d7da8 935AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
5c414a2e 936 [0], [{}
bf297226 937])
581d7da8 938AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
5c414a2e 939 [0], [{}
bf297226 940])
581d7da8
AA
941AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
942 [destroy bridge br1],
943 [destroy bridge br2],
c5f341ab 944 [clear o . bridges])],
bf297226
BP
945 [0], [stdout])
946AT_CHECK([RUN_OVS_VSCTL([list bridge])])
947AT_CHECK([RUN_OVS_VSCTL([--if-exists get bridge x datapath_id])])
948AT_CHECK([RUN_OVS_VSCTL([--if-exists list bridge x])])
949AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])])
e99d41f7 950AT_CHECK(
bf297226 951 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])])
e99d41f7 952AT_CHECK(
bf297226 953 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])])
45339539
WT
954
955AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
956AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
957AT_CHECK([RUN_OVS_VSCTL([--may-exist add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2])])
958AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
959])
960AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
961AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:1, Timeout Policies: icmp_first=1 icmp_reply=2
962Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
963])
964AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=1])])
965AT_CHECK([RUN_OVS_VSCTL([--if-exists del-zone-tp netdev zone=1])])
966AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
967])
27501802 968
98670b77
YHW
969AT_CHECK(
970 [RUN_OVS_VSCTL_TOGETHER([--id=@n create CT_Zone external_ids:"test"="123"],
971 [--id=@m create Datapath datapath_version=0 ct_zones:"10"=@n],
972 [set Open_vSwitch . datapaths:"netdev"=@m])],
973 [0], [stdout])
974AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:10, Timeout Policies: system default
975])
976
27501802
WT
977AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
978AT_CHECK([RUN_OVS_VSCTL([list-dp-cap system])], [0], [recirc=true
979])
5c414a2e
BP
980OVS_VSCTL_CLEANUP
981AT_CLEANUP
982
983AT_SETUP([database commands -- negative checks])
984AT_KEYWORDS([ovs-vsctl])
985OVS_VSCTL_SETUP
401d5a6d
BP
986
987AT_CHECK([ovs-vsctl --may-exist],
988 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
bf297226 989])
401d5a6d
BP
990AT_CHECK([ovs-vsctl --may-exist --],
991 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
bf297226 992])
401d5a6d
BP
993AT_CHECK([ovs-vsctl -- --may-exist],
994 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
bf297226
BP
995])
996
997AT_CHECK([RUN_OVS_VSCTL([add-br br0])], [0], [ignore])
998AT_CHECK([RUN_OVS_VSCTL([add-br br1])], [0], [ignore])
999AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], [0], [ignore])
d9c59d5b
ZL
1000AT_CHECK([RUN_OVS_VSCTL([list netflow br0])], [1], [],
1001 [ovs-vsctl: no row "br0" in table NetFlow
bf297226 1002])
c5f341ab 1003AT_CHECK([
eed8052c 1004 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
c5f341ab 1005 [set bridge br0 netflow=@n])],
bf297226 1006 [0], [stdout])
5c414a2e 1007cp stdout netflow-uuid
bf297226 1008AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], [0], [stdout])
c724bd67 1009AT_CHECK([uuidfilt netflow-uuid stdout], [0],
5c414a2e 1010 [[<0>
c5f341ab 1011
bd76d25d
BP
1012_uuid : <0>
1013active_timeout : 0
1014add_id_to_interface : false
1015engine_id : []
1016engine_type : []
13008eb3 1017external_ids : {}
bd76d25d 1018targets : ["1.2.3.4:567"]
56120500 1019]], [ignore])
a128bd8c 1020AT_CHECK([RUN_OVS_VSCTL([list interx x])],
5c414a2e 1021 [1], [], [ovs-vsctl: unknown table "interx"
bf297226 1022])
cf0e4239
BP
1023AT_CHECK([RUN_OVS_VSCTL([list c x])],
1024 [1], [], [ovs-vsctl: "c" matches multiple table names: CT_Timeout_Policy, CT_Zone, Controller
1025])
581d7da8 1026AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
5c414a2e 1027 [1], [], [ovs-vsctl: no row "x" in table Bridge
bf297226 1028])
581d7da8 1029AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
e99d41f7 1030 [1], [], [ovs-vsctl: no row "x" in table Bridge
bf297226 1031])
581d7da8 1032AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
cf0e4239 1033 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d": datapath_id, datapath_type, datapath_version
bf297226 1034])
581d7da8 1035AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
5c414a2e 1036 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
bf297226 1037])
581d7da8 1038AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
5c414a2e 1039 [1], [], [ovs-vsctl: :y=z: missing column name
bf297226 1040])
581d7da8 1041AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
e89e5374 1042 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
bf297226 1043])
581d7da8 1044AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
7db03f7c 1045 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
bf297226 1046])
e99d41f7
BP
1047AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
1048 [1], [], [ovs-vsctl: no row "x" in table Controller
bf297226 1049])
581d7da8 1050AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
2a9537e2 1051 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
bf297226 1052])
581d7da8 1053AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
5c414a2e 1054 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
bf297226 1055])
581d7da8 1056AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
5c414a2e 1057 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
bf297226 1058])
581d7da8 1059AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
5c414a2e 1060 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
bf297226 1061])
581d7da8 1062AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
bd76d25d 1063 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
bf297226 1064])
581d7da8 1065AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
bd76d25d 1066 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
bf297226 1067])
45339539 1068AT_CHECK([RUN_OVS_VSCTL([set controller br1 'connection-mode=xyz'])],
bfc96d9b 1069 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
bf297226 1070]])
45339539 1071AT_CHECK([RUN_OVS_VSCTL([set controller br1 connection-mode:x=y])],
5c414a2e 1072 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
bf297226 1073])
581d7da8 1074AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
5c414a2e 1075 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
bf297226 1076])
a128bd8c 1077AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
f19f25a4 1078 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
bf297226 1079])
a128bd8c 1080AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
e99d41f7 1081 [1], [], [ovs-vsctl: no row "x" in table NetFlow
bf297226 1082])
e99d41f7
BP
1083AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
1084 [1], [], [ovs-vsctl: no row "x" in table NetFlow
bf297226 1085])
a128bd8c 1086AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
5c414a2e 1087 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
bf297226 1088])
581d7da8 1089AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
5c414a2e 1090 [1], [], [ovs-vsctl: no row "br2" in table Bridge
bf297226 1091])
29089a54 1092AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
341c4e59 1093 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
bf297226 1094])
ff495b63 1095AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
341c4e59 1096 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
bf297226 1097])
ff495b63 1098AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
341c4e59 1099 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
bf297226 1100])
d6d2a5b3 1101AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
1ab39058 1102 [1], [], [ovs-vsctl: "true" is not a valid integer or range
bf297226 1103])
581d7da8 1104AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
341c4e59 1105 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
bf297226 1106])
45339539
WT
1107
1108AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
1109AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdevxx zone=1 icmp_first=1 icmp_reply=2])],
1110 [1], [], [ovs-vsctl: datapath netdevxx does not exist
1111])
1112AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
1113AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])],
1114 [1], [], [ovs-vsctl: zone id 2 already exists
1115])
1116AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1117])
1118AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=11])],
1119 [1], [], [ovs-vsctl: zone id 11 does not exist
1120])
1121AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1122])
27501802
WT
1123
1124AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
1125AT_CHECK([RUN_OVS_VSCTL([list-dp-cap nosystem])],
1126 [1], [], [ovs-vsctl: datapath "nosystem" record not found
1127])
1128
5c414a2e
BP
1129OVS_VSCTL_CLEANUP
1130AT_CLEANUP
1131
2a9537e2
BP
1132AT_SETUP([database commands -- conditions])
1133AT_KEYWORDS([ovs-vsctl])
2a9537e2
BP
1134OVS_VSCTL_SETUP
1135AT_CHECK(
1136 [RUN_OVS_VSCTL_TOGETHER(
1137 [add-br br0],
1138 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
1139 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
1140 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
1141 [add-br br4], [set bridge br4 flood_vlans=2],
1142 [add-br br5], [set bridge br5 flood_vlans=0,2],
1143 [add-br br6], [set bridge br6 flood_vlans=1,2],
1144 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159])
1160m4_define([VSCTL_CHECK_FIND],
ee9ccf93 1161 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer -- --columns=name find bridge '$1' | sort`], [0], [$2
2a9537e2
BP
1162])])
1163
1164# Arithmetic relational operators without keys.
1165VSCTL_CHECK_FIND([flood_vlans=0], [br1])
1166VSCTL_CHECK_FIND([flood_vlans=1], [br2])
1167VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
1168VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
1169VSCTL_CHECK_FIND([flood_vlans=3], [])
1170
1171VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
1172VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
1173VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
1174VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1175VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
1176
1177VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
1178VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
1179VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
1180VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
1181VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
1182VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
1183VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
1184VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
1185
1186# Set relational operators without keys.
1187VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
1188VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
1189VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
1190VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
1191VSCTL_CHECK_FIND([flood_vlans{=}3], [])
1192
1193VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
1194VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
1195VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
1196VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1197VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
1198
1199VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
1200VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
1201VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
1202VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
1203VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
1204VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
1205
1206VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
1207VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1208VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
1209VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
1210VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
1211VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
1212VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
1213
1214# Arithmetic relational operators with keys.
1215VSCTL_CHECK_FIND([other-config:x=""], [br1])
1216VSCTL_CHECK_FIND([other-config:x=y], [br2])
1217VSCTL_CHECK_FIND([other-config:x=z], [br3])
1218
1219VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
1220VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
1221VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
1222
1223VSCTL_CHECK_FIND([other-config:x>y], [br3])
1224VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
1225VSCTL_CHECK_FIND([other-config:x<y], [br1])
1226VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
1227
1228# Set relational operators with keys.
1229VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
1230VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
1231VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
1232VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
1233
1234VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
1235VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
1236VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
1237VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
1238
1239VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
1240VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
1241VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
1242VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
1243VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
1244VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
1245
1246VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
1247VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
1248VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
1249VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
1250VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
1251
1252VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1253VSCTL_CHECK_FIND([other-config:x{>=}x], [])
1254VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
1255VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
1256VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
1257
1258VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1259VSCTL_CHECK_FIND([other-config:x{>}x], [])
1260VSCTL_CHECK_FIND([other-config:x{>}""], [])
1261VSCTL_CHECK_FIND([other-config:x{>}y], [])
1262VSCTL_CHECK_FIND([other-config:x{>}z], [])
94c33672 1263OVS_VSCTL_CLEANUP
2a9537e2
BP
1264AT_CLEANUP
1265
7db03f7c
BP
1266AT_SETUP([database commands -- wait-until immediately true])
1267AT_KEYWORDS([ovs-vsctl])
1268OVS_VSCTL_SETUP
1269AT_CHECK([RUN_OVS_VSCTL(
a128bd8c 1270 [add-br br0],
7db03f7c 1271 [add-bond br0 bond0 eth0 eth1],
bf297226
BP
1272 [set port bond0 bond_updelay=500 other-config:abc=def])])
1273AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])])
1274AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])])
1275AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])])
1276AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])])
7db03f7c
BP
1277OVS_VSCTL_CLEANUP
1278AT_CLEANUP
1279
1280AT_SETUP([database commands -- wait-until must wait])
1281AT_KEYWORDS([ovs-vsctl])
7454ec7a 1282
7db03f7c
BP
1283OVS_VSCTL_SETUP
1284
1285# Start ovs-vsctls in background.
1286(RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1287(RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
581d7da8 1288(RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
7db03f7c
BP
1289(RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1290
1291# Give the ovs-vsctls a chance to read the database
1292sleep 1
1293
e111e681 1294AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
bf297226 1295RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])])
7db03f7c
BP
1296
1297# Wait for the ovs-vsctls to finish.
1298wait
1299
1300# Check output
1301AT_CHECK([cat stdout1], [0], [quux
bf297226 1302])
7db03f7c 1303AT_CHECK([cat stdout2], [0], [def
bf297226 1304])
7db03f7c 1305AT_CHECK([cat stdout3], [0], [{abc=def}
bf297226 1306])
7db03f7c 1307AT_CHECK([cat stdout4], [0], [500
bf297226 1308])
7db03f7c
BP
1309
1310OVS_VSCTL_CLEANUP
1311AT_CLEANUP
1312
aed133bf
BP
1313AT_SETUP([--id option on create, get commands])
1314AT_KEYWORDS([ovs-vsctl])
1315OVS_VSCTL_SETUP
1316AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1317 [add-port br0 eth0],
1318 [add-port br0 eth1])])
1319AT_CHECK(
1320 [RUN_OVS_VSCTL_TOGETHER(
1321 [set bridge br0 mirrors=@m],
1322 [--id=@eth0 get port eth0],
1323 [--id=@eth1 get port eth1],
1324 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
bf297226 1325 [0], [stdout])
aed133bf 1326AT_CHECK(
c724bd67 1327 [uuidfilt stdout], [0], [dnl
aed133bf
BP
1328
1329
1330
1331<0>
bf297226 1332])
aed133bf
BP
1333AT_CHECK(
1334 [RUN_OVS_VSCTL(
1335 [list port eth0 eth1],
1336 [list mirror],
1337 [list bridge br0])],
bf297226 1338 [0], [stdout])
aed133bf 1339AT_CHECK(
c724bd67 1340 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
aed133bf 1341[_uuid : <0>
29004db2 1342name : eth0
aed133bf 1343_uuid : <1>
29004db2 1344name : eth1
aed133bf
BP
1345_uuid : <2>
1346name : mymirror
1347output_port : <1>
1348output_vlan : []
1349select_all : false
1350select_dst_port : [<0>]
1351select_src_port : [<0>]
1352select_vlan : []
1353_uuid : <3>
1354mirrors : [<2>]
29004db2 1355name : br0
bf297226 1356]])
aed133bf
BP
1357OVS_VSCTL_CLEANUP
1358AT_CLEANUP
1359
c5f341ab
BP
1360AT_SETUP([unreferenced record warnings])
1361AT_KEYWORDS([ovs-vsctl])
1362OVS_VSCTL_SETUP
1363AT_CHECK(
ee9ccf93 1364 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
c724bd67 1365 -- create Bridge name=br0 | uuidfilt],
c5f341ab 1366 [0], [<0>
07ff77cc 1367], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
bf297226 1368])
c5f341ab 1369AT_CHECK(
ee9ccf93 1370 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
c724bd67 1371 -- --id=@br0 create Bridge name=br0 | uuidfilt],
c5f341ab
BP
1372 [0], [<0>
1373], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
bf297226 1374])
c5f341ab 1375AT_CHECK(
ee9ccf93 1376 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
c5f341ab
BP
1377 -- --id=@eth0_iface create Interface name=eth0 \
1378 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1379 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1380 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
c724bd67 1381 -- set Open_vSwitch . bridges=@br0 | uuidfilt],
c5f341ab
BP
1382 [0], [<0>
1383<1>
1384<2>
1385<3>
1386], [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
bf297226 1387])
c5f341ab
BP
1388OVS_VSCTL_CLEANUP
1389AT_CLEANUP
1390
5c414a2e
BP
1391dnl This test really shows a bug -- "create" followed by "list" in
1392dnl the same execution shows the wrong UUID on the "list" command.
1393dnl The bug is documented in ovs-vsctl.8.
1394AT_SETUP([created row UUID is wrong in same execution])
1395AT_KEYWORDS([ovs-vsctl])
1396OVS_VSCTL_SETUP
581d7da8 1397AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
bf297226 1398 [0], [stdout])
c724bd67 1399AT_CHECK([uuidfilt stdout], [0],
5c414a2e 1400 [[<0>
bd76d25d 1401_uuid : <1>
99eef98b 1402auto_attach : []
bd76d25d
BP
1403controller : []
1404datapath_id : []
1405datapath_type : ""
b5cbbcf6 1406datapath_version : ""
bd76d25d 1407external_ids : {}
31681a5d 1408fail_mode : []
bd76d25d 1409flood_vlans : []
254750ce 1410flow_tables : {}
29089a54 1411ipfix : []
dc2b70ba 1412mcast_snooping_enable: false
bd76d25d 1413mirrors : []
29004db2 1414name : br0
bd76d25d
BP
1415netflow : []
1416other_config : {}
1417ports : []
7beaa082 1418protocols : []
9efd308e
DV
1419rstp_enable : false
1420rstp_status : {}
bd76d25d 1421sflow : []
21f7563c
JP
1422status : {}
1423stp_enable : false
56120500 1424]], [ignore])
5c414a2e
BP
1425OVS_VSCTL_CLEANUP
1426AT_CLEANUP
eeb8467e
AS
1427
1428dnl This test will create a linux-htb QoS record that
1429dnl points to a few queues and use it on a1 and a2 port.
1430dnl It also destroys all records from Qos and Queue table.
1431AT_SETUP([--all option on destroy command])
1432AT_KEYWORDS([ovs-vsctl])
1433OVS_VSCTL_SETUP
1434AT_CHECK([RUN_OVS_VSCTL(
1435 [add-br a],
1436 [add-port a a1],
bf297226 1437 [add-port a a2])])
eeb8467e
AS
1438CHECK_BRIDGES([a, a, 0])
1439CHECK_PORTS([a], [a1], [a2])
1440CHECK_IFACES([a], [a1], [a2])
1441AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1442 [set Port a1 qos=@newqos],
1443 [set Port a2 qos=@newqos],
1444 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1445 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
bf297226 1446 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore])
eeb8467e
AS
1447AT_CHECK([RUN_OVS_VSCTL(
1448 [--columns=other_config,type list Qos])], [0],
1449[other_config : {max-rate="1000000000"}
1450type : linux-htb
bf297226 1451])
eeb8467e 1452AT_CHECK([RUN_OVS_VSCTL(
e5251936
GS
1453 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1454[other_config : {max-rate="100000000", min-rate="100000000"}
1455other_config : {min-rate="500000000"}
bf297226 1456])
eeb8467e
AS
1457AT_CHECK([RUN_OVS_VSCTL(
1458 [clear Port a1 qos],
bf297226 1459 [clear Port a2 qos])])
eeb8467e
AS
1460AT_CHECK([RUN_OVS_VSCTL(
1461 [--columns=qos list Port a1 a2])], [0],
1462[[qos : []
1463
1464qos : []
bf297226 1465]])
eeb8467e 1466AT_CHECK([RUN_OVS_VSCTL(
bf297226 1467 [--all destroy Qos])])
eeb8467e 1468AT_CHECK([RUN_OVS_VSCTL(
bf297226 1469 [-- list Qos])])
eeb8467e 1470AT_CHECK([RUN_OVS_VSCTL(
bf297226 1471 [--all destroy Queue])])
eeb8467e 1472AT_CHECK([RUN_OVS_VSCTL(
bf297226 1473 [-- list Queue])])
eeb8467e
AS
1474OVS_VSCTL_CLEANUP
1475AT_CLEANUP
94a53842
AW
1476
1477dnl ----------------------------------------------------------------------
1478AT_BANNER([ovs-vsctl add-port -- reserved port names])
1479
1480AT_SETUP([add-port -- reserved names 1])
1481OVS_VSWITCHD_START
1482
1483# Test creating all reserved port names
1484m4_foreach(
1485[reserved_name],
1486[[ovs-netdev],
1487[ovs-dummy],
c1fc1411 1488[genev_sys],
a5d4fadd 1489[gre_sys],
a5d4fadd
JG
1490[lisp_sys],
1491[vxlan_sys]],
94a53842
AW
1492[
1493# Try creating the port
feb38b6d 1494cat >experr <<EOF
c3ccfe98 1495ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
feb38b6d
DDP
1496ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1497EOF
1498AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
9530457f
AW
1499# Prevent race.
1500OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
94a53842
AW
1501# Detect the warning log message
1502AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1503|bridge|WARN|could not create interface reserved_name, name is reserved
1504])
1505# Delete the warning log message
1506AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1507# Delete the port
1508AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1509OVS_VSWITCHD_STOP
1510AT_CLEANUP
1511
1512AT_SETUP([add-port -- reserved names 2])
1513# Creates all type of tunnel ports
1514OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1515 options:remote_ip=1.1.1.1 ofport_request=1\
94a53842
AW
1516 -- add-port br0 p3 -- set Interface p3 type=lisp \
1517 options:remote_ip=2.2.2.2 ofport_request=3 \
1518 -- add-port br0 p4 -- set Interface p4 type=vxlan \
c1fc1411
JG
1519 options:remote_ip=2.2.2.2 ofport_request=4 \
1520 -- add-port br0 p5 -- set Interface p5 type=geneve \
1521 options:remote_ip=2.2.2.2 ofport_request=5])
94a53842
AW
1522
1523# Test creating all reserved tunnel port names
1524m4_foreach(
1525[reserved_name],
c1fc1411
JG
1526[[genev_sys],
1527[gre_sys],
a5d4fadd
JG
1528[lisp_sys],
1529[vxlan_sys]],
94a53842
AW
1530[
1531# Try creating the port
feb38b6d 1532cat >experr <<EOF
c3ccfe98 1533ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
feb38b6d
DDP
1534ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1535EOF
1536AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
9530457f
AW
1537# Prevent race.
1538OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
94a53842
AW
1539# Detect the warning log message
1540AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1541|bridge|WARN|could not create interface reserved_name, name is reserved
1542])
1543# Delete the warning log message
1544AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1545# Delete the port
1546AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1547OVS_VSWITCHD_STOP
89f3c258 1548AT_CLEANUP
17fb85a5
BP
1549
1550AT_SETUP([naming in db commands])
56120500 1551AT_KEYWORDS([ovs-vsctl])
17fb85a5
BP
1552OVS_VSCTL_SETUP
1553
1554dnl First check that the database commands can refer to row by database UUID.
1555AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1556uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
29004db2 1557AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], [br0
17fb85a5
BP
1558])
1559
1560dnl Next check that, if a database row is given a name that has the same form
1561dnl as the database UUIDs, the name can still be used to refer to rows.
1562AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1563AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1564])
1565
1566OVS_VSCTL_CLEANUP
1567AT_CLEANUP
5bf6cbd6 1568
3d5b9d78 1569AT_SETUP([bootstrap ca cert])
5bf6cbd6
GS
1570AT_KEYWORDS([ovs-vsctl ssl])
1571AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1572PKIDIR=`pwd`
1573OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
3391136c 1574AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req ovsdbserver && $OVS_PKI self-sign ovsdbserver], [0], [ignore], [ignore])
5bf6cbd6
GS
1575
1576dnl Create database.
3d5b9d78 1577OVSDB_INIT([conf.db])
56120500
BP
1578AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --private-key=$PKIDIR/ovsdbserver-privkey.pem --certificate=$PKIDIR/ovsdbserver-cert.pem --ca-cert=$PKIDIR/pki/switchca/cacert.pem --remote=pssl:0:127.0.0.1 --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1579on_exit "kill `cat ovsdb-server.pid`"
fb28ef2d 1580PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1b494f3e
GS
1581
1582# During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1583AT_CHECK([ovs-vsctl -t 5 --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem show], [1], [ignore], [ignore])
1584
1585# If the bootstrap was successful, the following file should exist.
1586OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1587
1588# After bootstrap, the connection should be successful.
1589AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem add-br br0], [0])
1590AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem list-br], [0], [br0
1591])
1592
868dae90 1593OVS_VSCTL_CLEANUP
1b494f3e
GS
1594AT_CLEANUP
1595
1596AT_SETUP([peer ca cert])
1597AT_KEYWORDS([ovs-vsctl ssl])
1598AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1599PKIDIR=`pwd`
1600OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
3391136c 1601AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req+sign ovsdbserver controller], [0], [ignore], [ignore])
1b494f3e
GS
1602
1603dnl Create database.
1604OVSDB_INIT([conf.db])
56120500
BP
1605AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --private-key=$PKIDIR/ovsdbserver-privkey.pem --certificate=$PKIDIR/ovsdbserver-cert.pem --ca-cert=$PKIDIR/pki/switchca/cacert.pem --peer-ca-cert=$PKIDIR/pki/controllerca/cacert.pem --remote=pssl:0:127.0.0.1 --log-file="`pwd`"/ovsdb-server.log conf.db], [0], [ignore], [ignore])
1606on_exit "kill `cat ovsdb-server.pid`"
fb28ef2d 1607PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
5bf6cbd6
GS
1608
1609# During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1610AT_CHECK([ovs-vsctl -t 5 --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem show], [1], [ignore], [ignore])
1611
1612# If the bootstrap was successful, the following file should exist.
1613OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
3d5b9d78
GS
1614
1615# After bootstrap, the connection should be successful.
1616AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem add-br br0], [0])
1617AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:127.0.0.1:$SSL_PORT --private-key=$PKIDIR/vsctl-privkey.pem --certificate=$PKIDIR/vsctl-cert.pem --bootstrap-ca-cert=$PKIDIR/cacert.pem list-br], [0], [br0
1618])
1619
868dae90 1620OVS_VSCTL_CLEANUP
5bf6cbd6 1621AT_CLEANUP
b291eb69
BP
1622
1623AT_SETUP([TLS server name indication (SNI)])
1624AT_KEYWORDS([ovsdb server positive ssl tls sni])
1625AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1626AT_SKIP_IF([test "$OPENSSL_SUPPORTS_SNI" = no])
1627AT_SKIP_IF([test "$HAVE_UNBOUND" = no])
1628OVSDB_INIT([conf.db])
1629PKIDIR=$abs_top_builddir/tests
1630AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile --private-key=$PKIDIR/testpki-privkey2.pem --certificate=$PKIDIR/testpki-cert2.pem --ca-cert=$PKIDIR/testpki-cacert.pem --remote=pssl:0:127.0.0.1 -vPATTERN:file:%m -vstream_ssl conf.db], [0], [ignore], [ignore])
1631PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1632
1633AT_CHECK([ovs-vsctl -t 5 --no-wait --db=ssl:localhost:$SSL_PORT --private-key=$PKIDIR/testpki-privkey.pem --certificate=$PKIDIR/testpki-cert.pem --bootstrap-ca-cert=$PKIDIR/testpki-cacert.pem add-br br0])
1634
1635AT_CAPTURE_FILE([ovsdb-server.log])
1636AT_CHECK([grep "server name" ovsdb-server.log], [0],
1637 [connection indicated server name localhost
1638])
1639
1640OVS_VSCTL_CLEANUP
1641AT_CLEANUP