New utility ovs-vsctl.
[sliver-openvswitch.git] / tests / ovs-vsctl.at
1 AT_BANNER([ovs-vsctl unit tests -- real bridges])
2
3 dnl RUN_OVS_VSCTL(COMMAND, ...)
4 dnl
5 dnl Executes each ovs-vsctl COMMAND on a file named "conf" in the
6 dnl current directory.  Creates "conf" if it does not already exist.
7 m4_define([RUN_OVS_VSCTL],
8   [: >> conf
9 m4_foreach([command], [$@], [ovs-vsctl --no-reload --config=conf command
10 ])])
11
12 dnl CHECK_BRIDGES(BRIDGE, ...)
13 dnl
14 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
15 dnl which must be in alphabetical order.
16 m4_define([CHECK_BRIDGES],
17   [AT_CHECK(
18      [RUN_OVS_VSCTL([list-br])],
19      [0],
20      [m4_foreach([port], [$@], [port
21 ])])
22    m4_foreach([port], [$@], [AT_CHECK([RUN_OVS_VSCTL([br-exists port])])])
23    AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2])])
24
25 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
26 dnl
27 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
28 dnl list of ports, which must be in alphabetical order.  Also checks
29 dnl that "ovs-vsctl port-to-br" reports that each port is
30 dnl in BRIDGE.
31 m4_define([CHECK_PORTS],
32   [AT_CHECK(
33      [RUN_OVS_VSCTL([list-ports $1])],
34      [0],
35      [m4_foreach([port], m4_cdr($@), [port
36 ])])
37    AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [], [ovs-vsctl: no port named $1
38 ])
39    m4_foreach(
40      [port], m4_cdr($@), 
41      [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
42 ])])])
43
44 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
45 dnl
46 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
47 dnl list of ifaces, which must be in alphabetical order.  Also checks
48 dnl that "ovs-vsctl iface-to-br" reports that each interface is
49 dnl in BRIDGE.
50 m4_define([CHECK_IFACES],
51   [AT_CHECK(
52      [RUN_OVS_VSCTL([list-ifaces $1])],
53      [0],
54      [m4_foreach([iface], m4_cdr($@), [iface
55 ])])
56    AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [], [ovs-vsctl: no interface named $1
57 ])
58    m4_foreach(
59      [iface], m4_cdr($@), 
60      [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
61 ])])])
62
63 AT_SETUP([add-br a])
64 AT_KEYWORDS([ovs-vsctl])
65 AT_CHECK([RUN_OVS_VSCTL([add-br a])])
66 AT_CHECK([cat conf], [0], [dnl
67 bridge.a.port=a
68 ])
69 CHECK_BRIDGES([a])
70 CHECK_PORTS([a])
71 CHECK_IFACES([a])
72 AT_CLEANUP
73
74 AT_SETUP([add-br a, add-br b])
75 AT_KEYWORDS([ovs-vsctl])
76 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])])
77 AT_CHECK([cat conf], [0], [dnl
78 bridge.a.port=a
79 bridge.b.port=b
80 ])
81 CHECK_BRIDGES([a], [b])
82 CHECK_PORTS([a])
83 CHECK_IFACES([a])
84 CHECK_PORTS([b])
85 CHECK_IFACES([b])
86 AT_CLEANUP
87
88 AT_SETUP([add-br a, add-br b, del-br a])
89 AT_KEYWORDS([ovs-vsctl])
90 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])])
91 AT_CHECK([cat conf], [0], [dnl
92 bridge.b.port=b
93 ])
94 CHECK_BRIDGES([b])
95 CHECK_PORTS([b])
96 CHECK_IFACES([b])
97 AT_CLEANUP
98
99 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
100 AT_KEYWORDS([ovs-vsctl])
101 AT_CHECK([RUN_OVS_VSCTL(
102    [add-br a], 
103    [add-br b], 
104    [add-port a a1],
105    [add-port b b1],
106    [del-br a])])
107 AT_CHECK([cat conf], [0],
108   [bridge.b.port=b
109 bridge.b.port=b1
110 ])
111 CHECK_BRIDGES([b])
112 CHECK_PORTS([b], [b1])
113 CHECK_IFACES([b], [b1])
114 AT_CLEANUP
115
116 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
117 AT_KEYWORDS([ovs-vsctl])
118 AT_CHECK([RUN_OVS_VSCTL(
119    [add-br a], 
120    [add-bond a bond0 a1 a2 a3])])
121 AT_CHECK([cat conf], [0], [dnl
122 bonding.bond0.slave=a1
123 bonding.bond0.slave=a2
124 bonding.bond0.slave=a3
125 bridge.a.port=a
126 bridge.a.port=bond0
127 ])
128 CHECK_BRIDGES([a])
129 CHECK_PORTS([a], [bond0])
130 CHECK_IFACES([a], [a1], [a2], [a3])
131 AT_CLEANUP
132
133 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
134 AT_KEYWORDS([ovs-vsctl])
135 AT_CHECK([RUN_OVS_VSCTL(
136   [add-br a], 
137   [add-br b], 
138   [add-port a a1],
139   [add-port b b1],
140   [del-port a a1])])
141 AT_CHECK([cat conf], [0], [dnl
142 bridge.a.port=a
143 bridge.b.port=b
144 bridge.b.port=b1
145 ])
146 CHECK_BRIDGES([a], [b])
147 CHECK_PORTS([a])
148 CHECK_IFACES([a])
149 CHECK_PORTS([b], [b1])
150 CHECK_IFACES([b], [b1])
151 AT_CLEANUP
152
153 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port a bond0])
154 AT_KEYWORDS([ovs-vsctl])
155 AT_CHECK([RUN_OVS_VSCTL(
156   [add-br a], 
157   [add-bond a bond0 a1 a2 a3],
158   [del-port a bond0])])
159 AT_CHECK([cat conf], [0], [dnl
160 bridge.a.port=a
161 ])
162 CHECK_BRIDGES([a])
163 CHECK_PORTS([a])
164 AT_CLEANUP
165
166 AT_BANNER([ovs-vsctl unit tests -- fake bridges])
167
168 m4_define([SIMPLE_FAKE_CONF], [dnl
169 bridge.xenbr0.port=eth0
170 bridge.xenbr0.port=eth0.9
171 bridge.xenbr0.port=xapi1
172 bridge.xenbr0.port=xenbr0
173 iface.xapi1.fake-bridge=true
174 iface.xapi1.internal=true
175 vlan.eth0.9.tag=9
176 vlan.xapi1.tag=9
177 ])
178
179 AT_SETUP([simple fake bridge])
180 AT_KEYWORDS([ovs-vsctl fake-bridge])
181 AT_CHECK([RUN_OVS_VSCTL(
182   [add-br xenbr0],
183   [add-port xenbr0 eth0],
184   [add-br xapi1 xenbr0 9],
185   [add-port xapi1 eth0.9])])
186 AT_CHECK([cat conf], [0], [SIMPLE_FAKE_CONF])
187 CHECK_BRIDGES([xenbr0], [xapi1])
188 CHECK_PORTS([xenbr0], [eth0])
189 CHECK_IFACES([xenbr0], [eth0])
190 CHECK_PORTS([xapi1], [eth0.9])
191 CHECK_IFACES([xapi1], [eth0.9])
192 AT_CLEANUP
193
194 AT_SETUP([simple fake bridge + del-br fake bridge])
195 AT_KEYWORDS([ovs-vsctl fake-bridge])
196 AT_DATA([conf], [SIMPLE_FAKE_CONF])
197 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
198 AT_CHECK([cat conf], [0], [dnl
199 bridge.xenbr0.port=eth0
200 bridge.xenbr0.port=xenbr0
201 ])
202 CHECK_BRIDGES([xenbr0])
203 CHECK_PORTS([xenbr0], [eth0])
204 CHECK_IFACES([xenbr0], [eth0])
205 AT_CLEANUP
206
207 AT_SETUP([simple fake bridge + del-br real bridge])
208 AT_KEYWORDS([ovs-vsctl fake-bridge])
209 AT_DATA([conf], [SIMPLE_FAKE_CONF])
210 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])])
211 AT_CHECK([cat conf], [0], [])
212 CHECK_BRIDGES
213 AT_CLEANUP
214
215 m4_define([BOND_FAKE_CONF], [dnl
216 bonding.bond0.slave=eth0
217 bonding.bond0.slave=eth1
218 bridge.xapi1.port=bond0
219 bridge.xapi1.port=bond0.11
220 bridge.xapi1.port=xapi1
221 bridge.xapi1.port=xapi2
222 iface.xapi2.fake-bridge=true
223 iface.xapi2.internal=true
224 vlan.bond0.11.tag=11
225 vlan.xapi2.tag=11
226 ])
227
228 AT_SETUP([fake bridge on bond])
229 AT_KEYWORDS([ovs-vsctl fake-bridge])
230 AT_CHECK([RUN_OVS_VSCTL(
231   [add-br xapi1],
232   [add-bond xapi1 bond0 eth0 eth1],
233   [add-br xapi2 xapi1 11],
234   [add-port xapi2 bond0.11])])
235 AT_CHECK([cat conf], [0], [BOND_FAKE_CONF])
236 CHECK_BRIDGES([xapi1], [xapi2])
237 CHECK_PORTS([xapi1], [bond0])
238 CHECK_IFACES([xapi1], [eth0], [eth1])
239 CHECK_PORTS([xapi2], [bond0.11])
240 CHECK_IFACES([xapi2], [bond0.11])
241 AT_CLEANUP
242
243 AT_SETUP([fake bridge on bond + del-br fake bridge])
244 AT_KEYWORDS([ovs-vsctl fake-bridge])
245 AT_DATA([conf], [BOND_FAKE_CONF])
246 AT_CHECK([RUN_OVS_VSCTL([del-br xapi2])])
247 CHECK_BRIDGES([xapi1])
248 CHECK_PORTS([xapi1], [bond0])
249 CHECK_IFACES([xapi1], [eth0], [eth1])
250 AT_CLEANUP
251
252 AT_SETUP([fake bridge on bond + del-br real bridge])
253 AT_KEYWORDS([ovs-vsctl fake-bridge])
254 AT_DATA([conf], [BOND_FAKE_CONF])
255 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
256 CHECK_BRIDGES
257 AT_CLEANUP