]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovs-vsctl.at
raft: Fix raft_is_connected() when there is no leader yet.
[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
WT
968
969AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
970AT_CHECK([RUN_OVS_VSCTL([list-dp-cap system])], [0], [recirc=true
971])
5c414a2e
BP
972OVS_VSCTL_CLEANUP
973AT_CLEANUP
974
975AT_SETUP([database commands -- negative checks])
976AT_KEYWORDS([ovs-vsctl])
977OVS_VSCTL_SETUP
401d5a6d
BP
978
979AT_CHECK([ovs-vsctl --may-exist],
980 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
bf297226 981])
401d5a6d
BP
982AT_CHECK([ovs-vsctl --may-exist --],
983 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
bf297226 984])
401d5a6d
BP
985AT_CHECK([ovs-vsctl -- --may-exist],
986 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
bf297226
BP
987])
988
989AT_CHECK([RUN_OVS_VSCTL([add-br br0])], [0], [ignore])
990AT_CHECK([RUN_OVS_VSCTL([add-br br1])], [0], [ignore])
991AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])], [0], [ignore])
d9c59d5b
ZL
992AT_CHECK([RUN_OVS_VSCTL([list netflow br0])], [1], [],
993 [ovs-vsctl: no row "br0" in table NetFlow
bf297226 994])
c5f341ab 995AT_CHECK([
eed8052c 996 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
c5f341ab 997 [set bridge br0 netflow=@n])],
bf297226 998 [0], [stdout])
5c414a2e 999cp stdout netflow-uuid
bf297226 1000AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])], [0], [stdout])
c724bd67 1001AT_CHECK([uuidfilt netflow-uuid stdout], [0],
5c414a2e 1002 [[<0>
c5f341ab 1003
bd76d25d
BP
1004_uuid : <0>
1005active_timeout : 0
1006add_id_to_interface : false
1007engine_id : []
1008engine_type : []
13008eb3 1009external_ids : {}
bd76d25d 1010targets : ["1.2.3.4:567"]
56120500 1011]], [ignore])
a128bd8c 1012AT_CHECK([RUN_OVS_VSCTL([list interx x])],
5c414a2e 1013 [1], [], [ovs-vsctl: unknown table "interx"
bf297226 1014])
cf0e4239
BP
1015AT_CHECK([RUN_OVS_VSCTL([list c x])],
1016 [1], [], [ovs-vsctl: "c" matches multiple table names: CT_Timeout_Policy, CT_Zone, Controller
1017])
581d7da8 1018AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
5c414a2e 1019 [1], [], [ovs-vsctl: no row "x" in table Bridge
bf297226 1020])
581d7da8 1021AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
e99d41f7 1022 [1], [], [ovs-vsctl: no row "x" in table Bridge
bf297226 1023])
581d7da8 1024AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
cf0e4239 1025 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d": datapath_id, datapath_type, datapath_version
bf297226 1026])
581d7da8 1027AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
5c414a2e 1028 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
bf297226 1029])
581d7da8 1030AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
5c414a2e 1031 [1], [], [ovs-vsctl: :y=z: missing column name
bf297226 1032])
581d7da8 1033AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
e89e5374 1034 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
bf297226 1035])
581d7da8 1036AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
7db03f7c 1037 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
bf297226 1038])
e99d41f7
BP
1039AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
1040 [1], [], [ovs-vsctl: no row "x" in table Controller
bf297226 1041])
581d7da8 1042AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
2a9537e2 1043 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
bf297226 1044])
581d7da8 1045AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
5c414a2e 1046 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
bf297226 1047])
581d7da8 1048AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
5c414a2e 1049 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
bf297226 1050])
581d7da8 1051AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
5c414a2e 1052 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
bf297226 1053])
581d7da8 1054AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
bd76d25d 1055 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
bf297226 1056])
581d7da8 1057AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
bd76d25d 1058 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
bf297226 1059])
45339539 1060AT_CHECK([RUN_OVS_VSCTL([set controller br1 'connection-mode=xyz'])],
bfc96d9b 1061 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
bf297226 1062]])
45339539 1063AT_CHECK([RUN_OVS_VSCTL([set controller br1 connection-mode:x=y])],
5c414a2e 1064 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
bf297226 1065])
581d7da8 1066AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
5c414a2e 1067 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
bf297226 1068])
a128bd8c 1069AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
f19f25a4 1070 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
bf297226 1071])
a128bd8c 1072AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
e99d41f7 1073 [1], [], [ovs-vsctl: no row "x" in table NetFlow
bf297226 1074])
e99d41f7
BP
1075AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
1076 [1], [], [ovs-vsctl: no row "x" in table NetFlow
bf297226 1077])
a128bd8c 1078AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
5c414a2e 1079 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
bf297226 1080])
581d7da8 1081AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
5c414a2e 1082 [1], [], [ovs-vsctl: no row "br2" in table Bridge
bf297226 1083])
29089a54 1084AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
341c4e59 1085 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
bf297226 1086])
ff495b63 1087AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
341c4e59 1088 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
bf297226 1089])
ff495b63 1090AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
341c4e59 1091 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
bf297226 1092])
d6d2a5b3 1093AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
1ab39058 1094 [1], [], [ovs-vsctl: "true" is not a valid integer or range
bf297226 1095])
581d7da8 1096AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
341c4e59 1097 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
bf297226 1098])
45339539
WT
1099
1100AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 -- set Open_vSwitch . datapaths:"netdev"=@m])], [0], [stdout])
1101AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdevxx zone=1 icmp_first=1 icmp_reply=2])],
1102 [1], [], [ovs-vsctl: datapath netdevxx does not exist
1103])
1104AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])])
1105AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])],
1106 [1], [], [ovs-vsctl: zone id 2 already exists
1107])
1108AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1109])
1110AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=11])],
1111 [1], [], [ovs-vsctl: zone id 11 does not exist
1112])
1113AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3
1114])
27501802
WT
1115
1116AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout])
1117AT_CHECK([RUN_OVS_VSCTL([list-dp-cap nosystem])],
1118 [1], [], [ovs-vsctl: datapath "nosystem" record not found
1119])
1120
5c414a2e
BP
1121OVS_VSCTL_CLEANUP
1122AT_CLEANUP
1123
2a9537e2
BP
1124AT_SETUP([database commands -- conditions])
1125AT_KEYWORDS([ovs-vsctl])
2a9537e2
BP
1126OVS_VSCTL_SETUP
1127AT_CHECK(
1128 [RUN_OVS_VSCTL_TOGETHER(
1129 [add-br br0],
1130 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
1131 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
1132 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
1133 [add-br br4], [set bridge br4 flood_vlans=2],
1134 [add-br br5], [set bridge br5 flood_vlans=0,2],
1135 [add-br br6], [set bridge br6 flood_vlans=1,2],
1136 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151])
1152m4_define([VSCTL_CHECK_FIND],
ee9ccf93 1153 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer -- --columns=name find bridge '$1' | sort`], [0], [$2
2a9537e2
BP
1154])])
1155
1156# Arithmetic relational operators without keys.
1157VSCTL_CHECK_FIND([flood_vlans=0], [br1])
1158VSCTL_CHECK_FIND([flood_vlans=1], [br2])
1159VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
1160VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
1161VSCTL_CHECK_FIND([flood_vlans=3], [])
1162
1163VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
1164VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
1165VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
1166VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1167VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
1168
1169VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
1170VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
1171VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
1172VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
1173VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
1174VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
1175VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
1176VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
1177
1178# Set relational operators without keys.
1179VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
1180VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
1181VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
1182VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
1183VSCTL_CHECK_FIND([flood_vlans{=}3], [])
1184
1185VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
1186VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
1187VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
1188VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
1189VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
1190
1191VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
1192VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
1193VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
1194VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
1195VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
1196VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
1197
1198VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
1199VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1200VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
1201VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
1202VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
1203VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
1204VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
1205
1206# Arithmetic relational operators with keys.
1207VSCTL_CHECK_FIND([other-config:x=""], [br1])
1208VSCTL_CHECK_FIND([other-config:x=y], [br2])
1209VSCTL_CHECK_FIND([other-config:x=z], [br3])
1210
1211VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
1212VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
1213VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
1214
1215VSCTL_CHECK_FIND([other-config:x>y], [br3])
1216VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
1217VSCTL_CHECK_FIND([other-config:x<y], [br1])
1218VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
1219
1220# Set relational operators with keys.
1221VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
1222VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
1223VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
1224VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
1225
1226VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
1227VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
1228VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
1229VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
1230
1231VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
1232VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
1233VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
1234VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
1235VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
1236VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
1237
1238VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
1239VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
1240VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
1241VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
1242VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
1243
1244VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
1245VSCTL_CHECK_FIND([other-config:x{>=}x], [])
1246VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
1247VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
1248VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
1249
1250VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1251VSCTL_CHECK_FIND([other-config:x{>}x], [])
1252VSCTL_CHECK_FIND([other-config:x{>}""], [])
1253VSCTL_CHECK_FIND([other-config:x{>}y], [])
1254VSCTL_CHECK_FIND([other-config:x{>}z], [])
94c33672 1255OVS_VSCTL_CLEANUP
2a9537e2
BP
1256AT_CLEANUP
1257
7db03f7c
BP
1258AT_SETUP([database commands -- wait-until immediately true])
1259AT_KEYWORDS([ovs-vsctl])
1260OVS_VSCTL_SETUP
1261AT_CHECK([RUN_OVS_VSCTL(
a128bd8c 1262 [add-br br0],
7db03f7c 1263 [add-bond br0 bond0 eth0 eth1],
bf297226
BP
1264 [set port bond0 bond_updelay=500 other-config:abc=def])])
1265AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])])
1266AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])])
1267AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])])
1268AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])])
7db03f7c
BP
1269OVS_VSCTL_CLEANUP
1270AT_CLEANUP
1271
1272AT_SETUP([database commands -- wait-until must wait])
1273AT_KEYWORDS([ovs-vsctl])
7454ec7a 1274
7db03f7c
BP
1275OVS_VSCTL_SETUP
1276
1277# Start ovs-vsctls in background.
1278(RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1279(RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
581d7da8 1280(RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
7db03f7c
BP
1281(RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1282
1283# Give the ovs-vsctls a chance to read the database
1284sleep 1
1285
e111e681 1286AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
bf297226 1287RUN_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
1288
1289# Wait for the ovs-vsctls to finish.
1290wait
1291
1292# Check output
1293AT_CHECK([cat stdout1], [0], [quux
bf297226 1294])
7db03f7c 1295AT_CHECK([cat stdout2], [0], [def
bf297226 1296])
7db03f7c 1297AT_CHECK([cat stdout3], [0], [{abc=def}
bf297226 1298])
7db03f7c 1299AT_CHECK([cat stdout4], [0], [500
bf297226 1300])
7db03f7c
BP
1301
1302OVS_VSCTL_CLEANUP
1303AT_CLEANUP
1304
aed133bf
BP
1305AT_SETUP([--id option on create, get commands])
1306AT_KEYWORDS([ovs-vsctl])
1307OVS_VSCTL_SETUP
1308AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1309 [add-port br0 eth0],
1310 [add-port br0 eth1])])
1311AT_CHECK(
1312 [RUN_OVS_VSCTL_TOGETHER(
1313 [set bridge br0 mirrors=@m],
1314 [--id=@eth0 get port eth0],
1315 [--id=@eth1 get port eth1],
1316 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
bf297226 1317 [0], [stdout])
aed133bf 1318AT_CHECK(
c724bd67 1319 [uuidfilt stdout], [0], [dnl
aed133bf
BP
1320
1321
1322
1323<0>
bf297226 1324])
aed133bf
BP
1325AT_CHECK(
1326 [RUN_OVS_VSCTL(
1327 [list port eth0 eth1],
1328 [list mirror],
1329 [list bridge br0])],
bf297226 1330 [0], [stdout])
aed133bf 1331AT_CHECK(
c724bd67 1332 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | uuidfilt], [0], [dnl
aed133bf 1333[_uuid : <0>
29004db2 1334name : eth0
aed133bf 1335_uuid : <1>
29004db2 1336name : eth1
aed133bf
BP
1337_uuid : <2>
1338name : mymirror
1339output_port : <1>
1340output_vlan : []
1341select_all : false
1342select_dst_port : [<0>]
1343select_src_port : [<0>]
1344select_vlan : []
1345_uuid : <3>
1346mirrors : [<2>]
29004db2 1347name : br0
bf297226 1348]])
aed133bf
BP
1349OVS_VSCTL_CLEANUP
1350AT_CLEANUP
1351
c5f341ab
BP
1352AT_SETUP([unreferenced record warnings])
1353AT_KEYWORDS([ovs-vsctl])
1354OVS_VSCTL_SETUP
1355AT_CHECK(
ee9ccf93 1356 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
c724bd67 1357 -- create Bridge name=br0 | uuidfilt],
c5f341ab 1358 [0], [<0>
07ff77cc 1359], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
bf297226 1360])
c5f341ab 1361AT_CHECK(
ee9ccf93 1362 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
c724bd67 1363 -- --id=@br0 create Bridge name=br0 | uuidfilt],
c5f341ab
BP
1364 [0], [<0>
1365], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
bf297226 1366])
c5f341ab 1367AT_CHECK(
ee9ccf93 1368 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer \
c5f341ab
BP
1369 -- --id=@eth0_iface create Interface name=eth0 \
1370 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1371 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1372 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
c724bd67 1373 -- set Open_vSwitch . bridges=@br0 | uuidfilt],
c5f341ab
BP
1374 [0], [<0>
1375<1>
1376<2>
1377<3>
1378], [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 1379])
c5f341ab
BP
1380OVS_VSCTL_CLEANUP
1381AT_CLEANUP
1382
5c414a2e
BP
1383dnl This test really shows a bug -- "create" followed by "list" in
1384dnl the same execution shows the wrong UUID on the "list" command.
1385dnl The bug is documented in ovs-vsctl.8.
1386AT_SETUP([created row UUID is wrong in same execution])
1387AT_KEYWORDS([ovs-vsctl])
1388OVS_VSCTL_SETUP
581d7da8 1389AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
bf297226 1390 [0], [stdout])
c724bd67 1391AT_CHECK([uuidfilt stdout], [0],
5c414a2e 1392 [[<0>
bd76d25d 1393_uuid : <1>
99eef98b 1394auto_attach : []
bd76d25d
BP
1395controller : []
1396datapath_id : []
1397datapath_type : ""
b5cbbcf6 1398datapath_version : ""
bd76d25d 1399external_ids : {}
31681a5d 1400fail_mode : []
bd76d25d 1401flood_vlans : []
254750ce 1402flow_tables : {}
29089a54 1403ipfix : []
dc2b70ba 1404mcast_snooping_enable: false
bd76d25d 1405mirrors : []
29004db2 1406name : br0
bd76d25d
BP
1407netflow : []
1408other_config : {}
1409ports : []
7beaa082 1410protocols : []
9efd308e
DV
1411rstp_enable : false
1412rstp_status : {}
bd76d25d 1413sflow : []
21f7563c
JP
1414status : {}
1415stp_enable : false
56120500 1416]], [ignore])
5c414a2e
BP
1417OVS_VSCTL_CLEANUP
1418AT_CLEANUP
eeb8467e
AS
1419
1420dnl This test will create a linux-htb QoS record that
1421dnl points to a few queues and use it on a1 and a2 port.
1422dnl It also destroys all records from Qos and Queue table.
1423AT_SETUP([--all option on destroy command])
1424AT_KEYWORDS([ovs-vsctl])
1425OVS_VSCTL_SETUP
1426AT_CHECK([RUN_OVS_VSCTL(
1427 [add-br a],
1428 [add-port a a1],
bf297226 1429 [add-port a a2])])
eeb8467e
AS
1430CHECK_BRIDGES([a, a, 0])
1431CHECK_PORTS([a], [a1], [a2])
1432CHECK_IFACES([a], [a1], [a2])
1433AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1434 [set Port a1 qos=@newqos],
1435 [set Port a2 qos=@newqos],
1436 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1437 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
bf297226 1438 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore])
eeb8467e
AS
1439AT_CHECK([RUN_OVS_VSCTL(
1440 [--columns=other_config,type list Qos])], [0],
1441[other_config : {max-rate="1000000000"}
1442type : linux-htb
bf297226 1443])
eeb8467e 1444AT_CHECK([RUN_OVS_VSCTL(
e5251936
GS
1445 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1446[other_config : {max-rate="100000000", min-rate="100000000"}
1447other_config : {min-rate="500000000"}
bf297226 1448])
eeb8467e
AS
1449AT_CHECK([RUN_OVS_VSCTL(
1450 [clear Port a1 qos],
bf297226 1451 [clear Port a2 qos])])
eeb8467e
AS
1452AT_CHECK([RUN_OVS_VSCTL(
1453 [--columns=qos list Port a1 a2])], [0],
1454[[qos : []
1455
1456qos : []
bf297226 1457]])
eeb8467e 1458AT_CHECK([RUN_OVS_VSCTL(
bf297226 1459 [--all destroy Qos])])
eeb8467e 1460AT_CHECK([RUN_OVS_VSCTL(
bf297226 1461 [-- list Qos])])
eeb8467e 1462AT_CHECK([RUN_OVS_VSCTL(
bf297226 1463 [--all destroy Queue])])
eeb8467e 1464AT_CHECK([RUN_OVS_VSCTL(
bf297226 1465 [-- list Queue])])
eeb8467e
AS
1466OVS_VSCTL_CLEANUP
1467AT_CLEANUP
94a53842
AW
1468
1469dnl ----------------------------------------------------------------------
1470AT_BANNER([ovs-vsctl add-port -- reserved port names])
1471
1472AT_SETUP([add-port -- reserved names 1])
1473OVS_VSWITCHD_START
1474
1475# Test creating all reserved port names
1476m4_foreach(
1477[reserved_name],
1478[[ovs-netdev],
1479[ovs-dummy],
c1fc1411 1480[genev_sys],
a5d4fadd 1481[gre_sys],
a5d4fadd
JG
1482[lisp_sys],
1483[vxlan_sys]],
94a53842
AW
1484[
1485# Try creating the port
feb38b6d 1486cat >experr <<EOF
c3ccfe98 1487ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
feb38b6d
DDP
1488ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1489EOF
1490AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
9530457f
AW
1491# Prevent race.
1492OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
94a53842
AW
1493# Detect the warning log message
1494AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1495|bridge|WARN|could not create interface reserved_name, name is reserved
1496])
1497# Delete the warning log message
1498AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1499# Delete the port
1500AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1501OVS_VSWITCHD_STOP
1502AT_CLEANUP
1503
1504AT_SETUP([add-port -- reserved names 2])
1505# Creates all type of tunnel ports
1506OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1507 options:remote_ip=1.1.1.1 ofport_request=1\
94a53842
AW
1508 -- add-port br0 p3 -- set Interface p3 type=lisp \
1509 options:remote_ip=2.2.2.2 ofport_request=3 \
1510 -- add-port br0 p4 -- set Interface p4 type=vxlan \
c1fc1411
JG
1511 options:remote_ip=2.2.2.2 ofport_request=4 \
1512 -- add-port br0 p5 -- set Interface p5 type=geneve \
1513 options:remote_ip=2.2.2.2 ofport_request=5])
94a53842
AW
1514
1515# Test creating all reserved tunnel port names
1516m4_foreach(
1517[reserved_name],
c1fc1411
JG
1518[[genev_sys],
1519[gre_sys],
a5d4fadd
JG
1520[lisp_sys],
1521[vxlan_sys]],
94a53842
AW
1522[
1523# Try creating the port
feb38b6d 1524cat >experr <<EOF
c3ccfe98 1525ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
feb38b6d
DDP
1526ovs-vsctl: The default log directory is "$OVS_RUNDIR".
1527EOF
1528AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
9530457f
AW
1529# Prevent race.
1530OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
94a53842
AW
1531# Detect the warning log message
1532AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1533|bridge|WARN|could not create interface reserved_name, name is reserved
1534])
1535# Delete the warning log message
1536AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1537# Delete the port
1538AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1539OVS_VSWITCHD_STOP
89f3c258 1540AT_CLEANUP
17fb85a5
BP
1541
1542AT_SETUP([naming in db commands])
56120500 1543AT_KEYWORDS([ovs-vsctl])
17fb85a5
BP
1544OVS_VSCTL_SETUP
1545
1546dnl First check that the database commands can refer to row by database UUID.
1547AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1548uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
29004db2 1549AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], [br0
17fb85a5
BP
1550])
1551
1552dnl Next check that, if a database row is given a name that has the same form
1553dnl as the database UUIDs, the name can still be used to refer to rows.
1554AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1555AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal
1556])
1557
1558OVS_VSCTL_CLEANUP
1559AT_CLEANUP
5bf6cbd6 1560
3d5b9d78 1561AT_SETUP([bootstrap ca cert])
5bf6cbd6
GS
1562AT_KEYWORDS([ovs-vsctl ssl])
1563AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1564PKIDIR=`pwd`
1565OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
3391136c 1566AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req ovsdbserver && $OVS_PKI self-sign ovsdbserver], [0], [ignore], [ignore])
5bf6cbd6
GS
1567
1568dnl Create database.
3d5b9d78 1569OVSDB_INIT([conf.db])
56120500
BP
1570AT_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])
1571on_exit "kill `cat ovsdb-server.pid`"
fb28ef2d 1572PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1b494f3e
GS
1573
1574# During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1575AT_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])
1576
1577# If the bootstrap was successful, the following file should exist.
1578OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
1579
1580# After bootstrap, the connection should be successful.
1581AT_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])
1582AT_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
1583])
1584
868dae90 1585OVS_VSCTL_CLEANUP
1b494f3e
GS
1586AT_CLEANUP
1587
1588AT_SETUP([peer ca cert])
1589AT_KEYWORDS([ovs-vsctl ssl])
1590AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1591PKIDIR=`pwd`
1592OVS_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$PKIDIR/pki --log=$PKIDIR/ovs-pki.log"
3391136c 1593AT_CHECK([$OVS_PKI init && $OVS_PKI req+sign vsctl switch && $OVS_PKI req+sign ovsdbserver controller], [0], [ignore], [ignore])
1b494f3e
GS
1594
1595dnl Create database.
1596OVSDB_INIT([conf.db])
56120500
BP
1597AT_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])
1598on_exit "kill `cat ovsdb-server.pid`"
fb28ef2d 1599PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
5bf6cbd6
GS
1600
1601# During bootstrap, the connection gets torn down. So the o/p of ovs-vsctl is error.
1602AT_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])
1603
1604# If the bootstrap was successful, the following file should exist.
1605OVS_WAIT_UNTIL([test -e $PKIDIR/cacert.pem])
3d5b9d78
GS
1606
1607# After bootstrap, the connection should be successful.
1608AT_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])
1609AT_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
1610])
1611
868dae90 1612OVS_VSCTL_CLEANUP
5bf6cbd6 1613AT_CLEANUP
b291eb69
BP
1614
1615AT_SETUP([TLS server name indication (SNI)])
1616AT_KEYWORDS([ovsdb server positive ssl tls sni])
1617AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
1618AT_SKIP_IF([test "$OPENSSL_SUPPORTS_SNI" = no])
1619AT_SKIP_IF([test "$HAVE_UNBOUND" = no])
1620OVSDB_INIT([conf.db])
1621PKIDIR=$abs_top_builddir/tests
1622AT_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])
1623PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
1624
1625AT_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])
1626
1627AT_CAPTURE_FILE([ovsdb-server.log])
1628AT_CHECK([grep "server name" ovsdb-server.log], [0],
1629 [connection indicated server name localhost
1630])
1631
1632OVS_VSCTL_CLEANUP
1633AT_CLEANUP