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