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