Committed by
Gerrit Code Review
Unit tests for the OpenFlow controller class
Change-Id: I14a6e2810ec15edfccb309ab94dabe96670f4026
Showing
9 changed files
with
800 additions
and
220 deletions
... | @@ -94,7 +94,7 @@ public class Controller { | ... | @@ -94,7 +94,7 @@ public class Controller { |
94 | protected String tsLocation; | 94 | protected String tsLocation; |
95 | protected char[] ksPwd; | 95 | protected char[] ksPwd; |
96 | protected char[] tsPwd; | 96 | protected char[] tsPwd; |
97 | - private SSLEngine serverSSLEngine; | 97 | + protected SSLEngine serverSSLEngine; |
98 | 98 | ||
99 | // Perf. related configuration | 99 | // Perf. related configuration |
100 | protected static final int SEND_BUFFER_SIZE = 4 * 1024 * 1024; | 100 | protected static final int SEND_BUFFER_SIZE = 4 * 1024 * 1024; | ... | ... |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.openflow; | ||
17 | + | ||
18 | +import java.util.Map; | ||
19 | +import java.util.Set; | ||
20 | + | ||
21 | +import org.onosproject.net.driver.Behaviour; | ||
22 | +import org.onosproject.net.driver.Driver; | ||
23 | +import org.onosproject.net.driver.DriverData; | ||
24 | +import org.onosproject.net.driver.DriverHandler; | ||
25 | +import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; | ||
26 | + | ||
27 | +/** | ||
28 | + * Created by ray on 11/4/15. | ||
29 | + */ | ||
30 | +public class DriverAdapter implements Driver { | ||
31 | + @Override | ||
32 | + public String name() { | ||
33 | + return null; | ||
34 | + } | ||
35 | + | ||
36 | + @Override | ||
37 | + public Driver parent() { | ||
38 | + return null; | ||
39 | + } | ||
40 | + | ||
41 | + @Override | ||
42 | + public String manufacturer() { | ||
43 | + return null; | ||
44 | + } | ||
45 | + | ||
46 | + @Override | ||
47 | + public String hwVersion() { | ||
48 | + return null; | ||
49 | + } | ||
50 | + | ||
51 | + @Override | ||
52 | + public String swVersion() { | ||
53 | + return null; | ||
54 | + } | ||
55 | + | ||
56 | + @Override | ||
57 | + public Set<Class<? extends Behaviour>> behaviours() { | ||
58 | + return null; | ||
59 | + } | ||
60 | + | ||
61 | + @Override | ||
62 | + public Class<? extends Behaviour> implementation(Class<? extends Behaviour> behaviour) { | ||
63 | + return null; | ||
64 | + } | ||
65 | + | ||
66 | + @Override | ||
67 | + public boolean hasBehaviour(Class<? extends Behaviour> behaviourClass) { | ||
68 | + return true; | ||
69 | + } | ||
70 | + | ||
71 | + @Override | ||
72 | + public <T extends Behaviour> T createBehaviour(DriverData data, Class<T> behaviourClass) { | ||
73 | + return null; | ||
74 | + } | ||
75 | + | ||
76 | + @SuppressWarnings("unchecked") | ||
77 | + @Override | ||
78 | + public <T extends Behaviour> T createBehaviour(DriverHandler handler, Class<T> behaviourClass) { | ||
79 | + if (behaviourClass == OpenFlowSwitchDriver.class) { | ||
80 | + return (T) new OpenflowSwitchDriverAdapter(); | ||
81 | + } | ||
82 | + return null; | ||
83 | + } | ||
84 | + | ||
85 | + @Override | ||
86 | + public Map<String, String> properties() { | ||
87 | + return null; | ||
88 | + } | ||
89 | + | ||
90 | + @Override | ||
91 | + public Driver merge(Driver other) { | ||
92 | + return null; | ||
93 | + } | ||
94 | + | ||
95 | + @Override | ||
96 | + public Set<String> keys() { | ||
97 | + return null; | ||
98 | + } | ||
99 | + | ||
100 | + @Override | ||
101 | + public String value(String key) { | ||
102 | + return null; | ||
103 | + } | ||
104 | +} |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.openflow; | ||
17 | + | ||
18 | +import java.util.Set; | ||
19 | + | ||
20 | +import org.onosproject.net.DeviceId; | ||
21 | +import org.onosproject.net.driver.Behaviour; | ||
22 | +import org.onosproject.net.driver.Driver; | ||
23 | +import org.onosproject.net.driver.DriverHandler; | ||
24 | +import org.onosproject.net.driver.DriverService; | ||
25 | + | ||
26 | +/** | ||
27 | + * Created by ray on 11/4/15. | ||
28 | + */ | ||
29 | +public class DriverServiceAdapter implements DriverService { | ||
30 | + @Override | ||
31 | + public Set<Driver> getDrivers() { | ||
32 | + return null; | ||
33 | + } | ||
34 | + | ||
35 | + @Override | ||
36 | + public Set<Driver> getDrivers(Class<? extends Behaviour> withBehaviour) { | ||
37 | + return null; | ||
38 | + } | ||
39 | + | ||
40 | + @Override | ||
41 | + public Driver getDriver(String mfr, String hw, String sw) { | ||
42 | + return null; | ||
43 | + } | ||
44 | + | ||
45 | + @Override | ||
46 | + public Driver getDriver(DeviceId deviceId) { | ||
47 | + return null; | ||
48 | + } | ||
49 | + | ||
50 | + @Override | ||
51 | + public DriverHandler createHandler(DeviceId deviceId, String... credentials) { | ||
52 | + return null; | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public Driver getDriver(String driverName) { | ||
57 | + return null; | ||
58 | + } | ||
59 | +} |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.openflow; | ||
17 | + | ||
18 | +import java.util.Set; | ||
19 | + | ||
20 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
21 | +import org.projectfloodlight.openflow.protocol.OFDescStatsReply; | ||
22 | +import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags; | ||
23 | +import org.projectfloodlight.openflow.protocol.OFStatsType; | ||
24 | +import org.projectfloodlight.openflow.protocol.OFType; | ||
25 | +import org.projectfloodlight.openflow.protocol.OFVersion; | ||
26 | + | ||
27 | +import com.google.common.hash.PrimitiveSink; | ||
28 | + | ||
29 | +/** | ||
30 | + * Created by ray on 11/4/15. | ||
31 | + */ | ||
32 | +public class OFDescStatsReplyAdapter implements OFDescStatsReply { | ||
33 | + @Override | ||
34 | + public OFVersion getVersion() { | ||
35 | + return null; | ||
36 | + } | ||
37 | + | ||
38 | + @Override | ||
39 | + public OFType getType() { | ||
40 | + return null; | ||
41 | + } | ||
42 | + | ||
43 | + @Override | ||
44 | + public long getXid() { | ||
45 | + return 0; | ||
46 | + } | ||
47 | + | ||
48 | + @Override | ||
49 | + public OFStatsType getStatsType() { | ||
50 | + return null; | ||
51 | + } | ||
52 | + | ||
53 | + @Override | ||
54 | + public Set<OFStatsReplyFlags> getFlags() { | ||
55 | + return null; | ||
56 | + } | ||
57 | + | ||
58 | + @Override | ||
59 | + public String getMfrDesc() { | ||
60 | + return null; | ||
61 | + } | ||
62 | + | ||
63 | + @Override | ||
64 | + public String getHwDesc() { | ||
65 | + return null; | ||
66 | + } | ||
67 | + | ||
68 | + @Override | ||
69 | + public String getSwDesc() { | ||
70 | + return null; | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
74 | + public String getSerialNum() { | ||
75 | + return null; | ||
76 | + } | ||
77 | + | ||
78 | + @Override | ||
79 | + public String getDpDesc() { | ||
80 | + return null; | ||
81 | + } | ||
82 | + | ||
83 | + @Override | ||
84 | + public void writeTo(ChannelBuffer channelBuffer) { | ||
85 | + | ||
86 | + } | ||
87 | + | ||
88 | + @Override | ||
89 | + public Builder createBuilder() { | ||
90 | + return null; | ||
91 | + } | ||
92 | + | ||
93 | + @Override | ||
94 | + public void putTo(PrimitiveSink sink) { | ||
95 | + | ||
96 | + } | ||
97 | +} |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.openflow; | ||
17 | + | ||
18 | +import java.util.List; | ||
19 | + | ||
20 | +import org.jboss.netty.channel.Channel; | ||
21 | +import org.onosproject.net.Device; | ||
22 | +import org.onosproject.net.driver.DriverData; | ||
23 | +import org.onosproject.net.driver.DriverHandler; | ||
24 | +import org.onosproject.openflow.controller.Dpid; | ||
25 | +import org.onosproject.openflow.controller.RoleState; | ||
26 | +import org.onosproject.openflow.controller.driver.OpenFlowAgent; | ||
27 | +import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; | ||
28 | +import org.onosproject.openflow.controller.driver.RoleHandler; | ||
29 | +import org.onosproject.openflow.controller.driver.SwitchStateException; | ||
30 | +import org.projectfloodlight.openflow.protocol.OFDescStatsReply; | ||
31 | +import org.projectfloodlight.openflow.protocol.OFErrorMsg; | ||
32 | +import org.projectfloodlight.openflow.protocol.OFFactories; | ||
33 | +import org.projectfloodlight.openflow.protocol.OFFactory; | ||
34 | +import org.projectfloodlight.openflow.protocol.OFFeaturesReply; | ||
35 | +import org.projectfloodlight.openflow.protocol.OFMessage; | ||
36 | +import org.projectfloodlight.openflow.protocol.OFPortDesc; | ||
37 | +import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply; | ||
38 | +import org.projectfloodlight.openflow.protocol.OFVersion; | ||
39 | + | ||
40 | +/** | ||
41 | + * Testing adapter for the OpenFlow switch driver class. | ||
42 | + */ | ||
43 | +public class OpenflowSwitchDriverAdapter implements OpenFlowSwitchDriver { | ||
44 | + @Override | ||
45 | + public void setAgent(OpenFlowAgent agent) { | ||
46 | + | ||
47 | + } | ||
48 | + | ||
49 | + @Override | ||
50 | + public void setRoleHandler(RoleHandler roleHandler) { | ||
51 | + | ||
52 | + } | ||
53 | + | ||
54 | + @Override | ||
55 | + public void reassertRole() { | ||
56 | + | ||
57 | + } | ||
58 | + | ||
59 | + @Override | ||
60 | + public boolean handleRoleError(OFErrorMsg error) { | ||
61 | + return false; | ||
62 | + } | ||
63 | + | ||
64 | + @Override | ||
65 | + public void handleNiciraRole(OFMessage m) throws SwitchStateException { | ||
66 | + | ||
67 | + } | ||
68 | + | ||
69 | + @Override | ||
70 | + public void handleRole(OFMessage m) throws SwitchStateException { | ||
71 | + | ||
72 | + } | ||
73 | + | ||
74 | + @Override | ||
75 | + public boolean connectSwitch() { | ||
76 | + return false; | ||
77 | + } | ||
78 | + | ||
79 | + @Override | ||
80 | + public boolean activateMasterSwitch() { | ||
81 | + return false; | ||
82 | + } | ||
83 | + | ||
84 | + @Override | ||
85 | + public boolean activateEqualSwitch() { | ||
86 | + return false; | ||
87 | + } | ||
88 | + | ||
89 | + @Override | ||
90 | + public void transitionToEqualSwitch() { | ||
91 | + | ||
92 | + } | ||
93 | + | ||
94 | + @Override | ||
95 | + public void transitionToMasterSwitch() { | ||
96 | + | ||
97 | + } | ||
98 | + | ||
99 | + @Override | ||
100 | + public void removeConnectedSwitch() { | ||
101 | + | ||
102 | + } | ||
103 | + | ||
104 | + @Override | ||
105 | + public void setPortDescReply(OFPortDescStatsReply portDescReply) { | ||
106 | + | ||
107 | + } | ||
108 | + | ||
109 | + @Override | ||
110 | + public void setPortDescReplies(List<OFPortDescStatsReply> portDescReplies) { | ||
111 | + | ||
112 | + } | ||
113 | + | ||
114 | + @Override | ||
115 | + public void setFeaturesReply(OFFeaturesReply featuresReply) { | ||
116 | + | ||
117 | + } | ||
118 | + | ||
119 | + @Override | ||
120 | + public void setSwitchDescription(OFDescStatsReply desc) { | ||
121 | + | ||
122 | + } | ||
123 | + | ||
124 | + @Override | ||
125 | + public int getNextTransactionId() { | ||
126 | + return 0; | ||
127 | + } | ||
128 | + | ||
129 | + @Override | ||
130 | + public void setOFVersion(OFVersion ofV) { | ||
131 | + | ||
132 | + } | ||
133 | + | ||
134 | + @Override | ||
135 | + public void setTableFull(boolean full) { | ||
136 | + | ||
137 | + } | ||
138 | + | ||
139 | + @Override | ||
140 | + public void setChannel(Channel channel) { | ||
141 | + | ||
142 | + } | ||
143 | + | ||
144 | + @Override | ||
145 | + public void setConnected(boolean connected) { | ||
146 | + | ||
147 | + } | ||
148 | + | ||
149 | + @Override | ||
150 | + public void init(Dpid dpid, OFDescStatsReply desc, OFVersion ofv) { | ||
151 | + | ||
152 | + } | ||
153 | + | ||
154 | + @Override | ||
155 | + public Boolean supportNxRole() { | ||
156 | + return true; | ||
157 | + } | ||
158 | + | ||
159 | + @Override | ||
160 | + public void startDriverHandshake() { | ||
161 | + | ||
162 | + } | ||
163 | + | ||
164 | + @Override | ||
165 | + public boolean isDriverHandshakeComplete() { | ||
166 | + return false; | ||
167 | + } | ||
168 | + | ||
169 | + @Override | ||
170 | + public void processDriverHandshakeMessage(OFMessage m) { | ||
171 | + | ||
172 | + } | ||
173 | + | ||
174 | + @Override | ||
175 | + public void sendRoleRequest(OFMessage message) { | ||
176 | + | ||
177 | + } | ||
178 | + | ||
179 | + @Override | ||
180 | + public void sendHandshakeMessage(OFMessage message) { | ||
181 | + | ||
182 | + } | ||
183 | + | ||
184 | + @Override | ||
185 | + public DriverHandler handler() { | ||
186 | + return null; | ||
187 | + } | ||
188 | + | ||
189 | + @Override | ||
190 | + public void setHandler(DriverHandler handler) { | ||
191 | + | ||
192 | + } | ||
193 | + | ||
194 | + @Override | ||
195 | + public DriverData data() { | ||
196 | + return null; | ||
197 | + } | ||
198 | + | ||
199 | + @Override | ||
200 | + public void setData(DriverData data) { | ||
201 | + | ||
202 | + } | ||
203 | + | ||
204 | + @Override | ||
205 | + public void sendMsg(OFMessage msg) { | ||
206 | + | ||
207 | + } | ||
208 | + | ||
209 | + @Override | ||
210 | + public void sendMsg(List<OFMessage> msgs) { | ||
211 | + | ||
212 | + } | ||
213 | + | ||
214 | + @Override | ||
215 | + public void handleMessage(OFMessage fromSwitch) { | ||
216 | + | ||
217 | + } | ||
218 | + | ||
219 | + @Override | ||
220 | + public void setRole(RoleState role) { | ||
221 | + | ||
222 | + } | ||
223 | + | ||
224 | + @Override | ||
225 | + public RoleState getRole() { | ||
226 | + return null; | ||
227 | + } | ||
228 | + | ||
229 | + @Override | ||
230 | + public List<OFPortDesc> getPorts() { | ||
231 | + return null; | ||
232 | + } | ||
233 | + | ||
234 | + @Override | ||
235 | + public OFFactory factory() { | ||
236 | + // return what-ever triggers requestPending = true | ||
237 | + return OFFactories.getFactory(OFVersion.OF_10); | ||
238 | + } | ||
239 | + | ||
240 | + @Override | ||
241 | + public String getStringId() { | ||
242 | + return "100"; | ||
243 | + } | ||
244 | + | ||
245 | + @Override | ||
246 | + public long getId() { | ||
247 | + return 0; | ||
248 | + } | ||
249 | + | ||
250 | + @Override | ||
251 | + public String manufacturerDescription() { | ||
252 | + return null; | ||
253 | + } | ||
254 | + | ||
255 | + @Override | ||
256 | + public String datapathDescription() { | ||
257 | + return null; | ||
258 | + } | ||
259 | + | ||
260 | + @Override | ||
261 | + public String hardwareDescription() { | ||
262 | + return null; | ||
263 | + } | ||
264 | + | ||
265 | + @Override | ||
266 | + public String softwareDescription() { | ||
267 | + return null; | ||
268 | + } | ||
269 | + | ||
270 | + @Override | ||
271 | + public String serialNumber() { | ||
272 | + return null; | ||
273 | + } | ||
274 | + | ||
275 | + @Override | ||
276 | + public boolean isConnected() { | ||
277 | + return false; | ||
278 | + } | ||
279 | + | ||
280 | + @Override | ||
281 | + public void disconnectSwitch() { | ||
282 | + | ||
283 | + } | ||
284 | + | ||
285 | + @Override | ||
286 | + public void returnRoleReply(RoleState requested, RoleState response) { | ||
287 | + | ||
288 | + } | ||
289 | + | ||
290 | + @Override | ||
291 | + public Device.Type deviceType() { | ||
292 | + return Device.Type.SWITCH; | ||
293 | + } | ||
294 | + | ||
295 | + @Override | ||
296 | + public String channelId() { | ||
297 | + return null; | ||
298 | + } | ||
299 | +} |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.openflow.controller.impl; | ||
17 | + | ||
18 | +import java.io.File; | ||
19 | +import java.io.IOException; | ||
20 | +import java.util.Dictionary; | ||
21 | +import java.util.Hashtable; | ||
22 | +import java.util.Map; | ||
23 | +import java.util.stream.IntStream; | ||
24 | + | ||
25 | +import org.junit.Before; | ||
26 | +import org.junit.Test; | ||
27 | +import org.onlab.junit.TestTools; | ||
28 | +import org.onlab.util.ItemNotFoundException; | ||
29 | +import org.onosproject.net.DeviceId; | ||
30 | +import org.onosproject.net.driver.Driver; | ||
31 | +import org.onosproject.openflow.DriverAdapter; | ||
32 | +import org.onosproject.openflow.DriverServiceAdapter; | ||
33 | +import org.onosproject.openflow.OFDescStatsReplyAdapter; | ||
34 | +import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; | ||
35 | +import org.projectfloodlight.openflow.protocol.OFDescStatsReply; | ||
36 | +import org.slf4j.Logger; | ||
37 | +import org.slf4j.LoggerFactory; | ||
38 | + | ||
39 | +import com.google.common.io.Files; | ||
40 | + | ||
41 | +import static com.google.common.io.ByteStreams.toByteArray; | ||
42 | +import static com.google.common.io.Files.write; | ||
43 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
44 | +import static org.hamcrest.Matchers.hasItem; | ||
45 | +import static org.hamcrest.Matchers.is; | ||
46 | +import static org.hamcrest.Matchers.lessThan; | ||
47 | +import static org.hamcrest.Matchers.not; | ||
48 | +import static org.hamcrest.Matchers.notNullValue; | ||
49 | +import static org.hamcrest.Matchers.nullValue; | ||
50 | + | ||
51 | +/** | ||
52 | + * Unit tests for the OpenFlow controller class. | ||
53 | + */ | ||
54 | +public class ControllerTest { | ||
55 | + | ||
56 | + Controller controller; | ||
57 | + protected static final Logger log = LoggerFactory.getLogger(ControllerTest.class); | ||
58 | + | ||
59 | + static final File TEST_DIR = Files.createTempDir(); | ||
60 | + | ||
61 | + /* | ||
62 | + * Writes the necessary file for the tests in the temporary directory | ||
63 | + */ | ||
64 | + static File stageTestResource(String name) throws IOException { | ||
65 | + File file = new File(TEST_DIR, name); | ||
66 | + byte[] bytes = toByteArray(ControllerTest.class.getResourceAsStream(name)); | ||
67 | + write(bytes, file); | ||
68 | + return file; | ||
69 | + } | ||
70 | + | ||
71 | + class MockDriverService extends DriverServiceAdapter { | ||
72 | + static final int NO_SUCH_DRIVER_ID = 1; | ||
73 | + static final int ITEM_NOT_FOUND_DRIVER_ID = 2; | ||
74 | + static final int DRIVER_EXISTS_ID = 3; | ||
75 | + | ||
76 | + static final String BASE_DRIVER_NAME = "of:000000000000000"; | ||
77 | + | ||
78 | + static final String NO_SUCH_DRIVER = BASE_DRIVER_NAME | ||
79 | + + NO_SUCH_DRIVER_ID; | ||
80 | + static final String ITEM_NOT_FOUND_DRIVER = BASE_DRIVER_NAME | ||
81 | + + ITEM_NOT_FOUND_DRIVER_ID; | ||
82 | + static final String DRIVER_EXISTS = BASE_DRIVER_NAME | ||
83 | + + DRIVER_EXISTS_ID; | ||
84 | + | ||
85 | + @Override | ||
86 | + public Driver getDriver(DeviceId deviceId) { | ||
87 | + switch (deviceId.toString()) { | ||
88 | + case NO_SUCH_DRIVER: | ||
89 | + return null; | ||
90 | + case ITEM_NOT_FOUND_DRIVER: | ||
91 | + throw new ItemNotFoundException(); | ||
92 | + case DRIVER_EXISTS: | ||
93 | + return new DriverAdapter(); | ||
94 | + default: | ||
95 | + throw new AssertionError(); | ||
96 | + } | ||
97 | + } | ||
98 | + } | ||
99 | + | ||
100 | + /** | ||
101 | + * Creates and initializes a new controller. | ||
102 | + */ | ||
103 | + @Before | ||
104 | + public void setUp() { | ||
105 | + controller = new Controller(); | ||
106 | + Dictionary<String, String> properties = new Hashtable<>(); | ||
107 | + properties.put("openflowPorts", | ||
108 | + Integer.toString(TestTools.findAvailablePort(0))); | ||
109 | + controller.setConfigParams(properties); | ||
110 | + } | ||
111 | + | ||
112 | + /** | ||
113 | + * Tests fetching a driver that does not exist. | ||
114 | + */ | ||
115 | + @Test | ||
116 | + public void switchInstanceNotFoundTest() { | ||
117 | + controller.start(null, new MockDriverService()); | ||
118 | + OpenFlowSwitchDriver driver = | ||
119 | + controller.getOFSwitchInstance(MockDriverService.NO_SUCH_DRIVER_ID, | ||
120 | + null, | ||
121 | + null); | ||
122 | + assertThat(driver, nullValue()); | ||
123 | + controller.stop(); | ||
124 | + } | ||
125 | + | ||
126 | + /** | ||
127 | + * Tests fetching a driver that throws an ItemNotFoundException. | ||
128 | + */ | ||
129 | + @Test | ||
130 | + public void switchItemNotFoundTest() { | ||
131 | + controller.start(null, new MockDriverService()); | ||
132 | + OFDescStatsReply stats = | ||
133 | + new OFDescStatsReplyAdapter(); | ||
134 | + OpenFlowSwitchDriver driver = | ||
135 | + controller.getOFSwitchInstance(MockDriverService.ITEM_NOT_FOUND_DRIVER_ID, | ||
136 | + stats, | ||
137 | + null); | ||
138 | + assertThat(driver, nullValue()); | ||
139 | + controller.stop(); | ||
140 | + } | ||
141 | + | ||
142 | + /** | ||
143 | + * Tests fetching a driver that throws an ItemNotFoundException. | ||
144 | + */ | ||
145 | + @Test | ||
146 | + public void driverExistsTest() { | ||
147 | + controller.start(null, new MockDriverService()); | ||
148 | + OFDescStatsReply stats = | ||
149 | + new OFDescStatsReplyAdapter(); | ||
150 | + OpenFlowSwitchDriver driver = | ||
151 | + controller.getOFSwitchInstance(MockDriverService.DRIVER_EXISTS_ID, | ||
152 | + stats, | ||
153 | + null); | ||
154 | + assertThat(driver, notNullValue()); | ||
155 | + controller.stop(); | ||
156 | + } | ||
157 | + | ||
158 | + /** | ||
159 | + * Tests configuring the controller. | ||
160 | + */ | ||
161 | + @Test | ||
162 | + public void testConfiguration() { | ||
163 | + Dictionary<String, String> properties = new Hashtable<>(); | ||
164 | + properties.put("openflowPorts", "1,2,3,4,5"); | ||
165 | + properties.put("workerThreads", "5"); | ||
166 | + | ||
167 | + controller.setConfigParams(properties); | ||
168 | + IntStream.rangeClosed(1, 5) | ||
169 | + .forEach(i -> assertThat(controller.openFlowPorts, hasItem(i))); | ||
170 | + assertThat(controller.workerThreads, is(5)); | ||
171 | + } | ||
172 | + | ||
173 | + /** | ||
174 | + * Tests the SSL/TLS methods in the controller. | ||
175 | + */ | ||
176 | + @Test | ||
177 | + public void testSsl() throws IOException { | ||
178 | + File keystore = stageTestResource("ControllerTestKeystore.jks"); | ||
179 | + String keystoreName = keystore.getAbsolutePath(); | ||
180 | + | ||
181 | + System.setProperty("enableOFTLS", Boolean.toString(Boolean.TRUE)); | ||
182 | + System.setProperty("javax.net.ssl.keyStore", keystoreName); | ||
183 | + System.setProperty("javax.net.ssl.trustStore", keystoreName); | ||
184 | + System.setProperty("javax.net.ssl.keyStorePassword", "password"); | ||
185 | + System.setProperty("javax.net.ssl.trustStorePassword", "password"); | ||
186 | + Dictionary<String, String> properties = new Hashtable<>(); | ||
187 | + properties.put("openflowPorts", | ||
188 | + Integer.toString(TestTools.findAvailablePort(0))); | ||
189 | + properties.put("workerThreads", "0"); | ||
190 | + | ||
191 | + controller.setConfigParams(properties); | ||
192 | + controller.start(null, new MockDriverService()); | ||
193 | + | ||
194 | + assertThat(controller.serverSSLEngine, notNullValue()); | ||
195 | + | ||
196 | + controller.stop(); | ||
197 | + boolean removed = keystore.delete(); | ||
198 | + if (!removed) { | ||
199 | + log.warn("Could not remove temporary file"); | ||
200 | + } | ||
201 | + } | ||
202 | + | ||
203 | + /** | ||
204 | + * Tests controll utility health methods. | ||
205 | + */ | ||
206 | + @Test | ||
207 | + public void testHealth() { | ||
208 | + Map<String, Long> memory = controller.getMemory(); | ||
209 | + assertThat(memory.size(), is(2)); | ||
210 | + assertThat(memory.get("total"), is(not(0))); | ||
211 | + assertThat(memory.get("free"), is(not(0))); | ||
212 | + | ||
213 | + long startTime = controller.getSystemStartTime(); | ||
214 | + assertThat(startTime, lessThan(System.currentTimeMillis())); | ||
215 | + | ||
216 | + long upTime = controller.getSystemUptime(); | ||
217 | + assertThat(upTime, lessThan(30L * 1000)); | ||
218 | + } | ||
219 | +} |
... | @@ -15,35 +15,21 @@ | ... | @@ -15,35 +15,21 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.openflow.controller.impl; | 16 | package org.onosproject.openflow.controller.impl; |
17 | 17 | ||
18 | -import org.jboss.netty.channel.Channel; | 18 | +import java.io.IOException; |
19 | + | ||
19 | import org.junit.After; | 20 | import org.junit.After; |
20 | import org.junit.Before; | 21 | import org.junit.Before; |
21 | import org.junit.Test; | 22 | import org.junit.Test; |
22 | -import org.onosproject.net.Device; | 23 | +import org.onosproject.openflow.OpenflowSwitchDriverAdapter; |
23 | -import org.onosproject.net.driver.DriverData; | ||
24 | -import org.onosproject.net.driver.DriverHandler; | ||
25 | -import org.onosproject.openflow.controller.Dpid; | ||
26 | import org.onosproject.openflow.controller.RoleState; | 24 | import org.onosproject.openflow.controller.RoleState; |
27 | -import org.onosproject.openflow.controller.driver.OpenFlowAgent; | ||
28 | import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; | 25 | import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver; |
29 | -import org.onosproject.openflow.controller.driver.RoleHandler; | ||
30 | import org.onosproject.openflow.controller.driver.RoleRecvStatus; | 26 | import org.onosproject.openflow.controller.driver.RoleRecvStatus; |
31 | import org.onosproject.openflow.controller.driver.RoleReplyInfo; | 27 | import org.onosproject.openflow.controller.driver.RoleReplyInfo; |
32 | import org.onosproject.openflow.controller.driver.SwitchStateException; | 28 | import org.onosproject.openflow.controller.driver.SwitchStateException; |
33 | import org.projectfloodlight.openflow.protocol.OFDescStatsReply; | 29 | import org.projectfloodlight.openflow.protocol.OFDescStatsReply; |
34 | -import org.projectfloodlight.openflow.protocol.OFErrorMsg; | ||
35 | -import org.projectfloodlight.openflow.protocol.OFFactories; | ||
36 | -import org.projectfloodlight.openflow.protocol.OFFactory; | ||
37 | import org.projectfloodlight.openflow.protocol.OFFeaturesReply; | 30 | import org.projectfloodlight.openflow.protocol.OFFeaturesReply; |
38 | -import org.projectfloodlight.openflow.protocol.OFMessage; | ||
39 | -import org.projectfloodlight.openflow.protocol.OFPortDesc; | ||
40 | -import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply; | ||
41 | -import org.projectfloodlight.openflow.protocol.OFVersion; | ||
42 | import org.projectfloodlight.openflow.types.U64; | 31 | import org.projectfloodlight.openflow.types.U64; |
43 | 32 | ||
44 | -import java.io.IOException; | ||
45 | -import java.util.List; | ||
46 | - | ||
47 | import static org.junit.Assert.assertEquals; | 33 | import static org.junit.Assert.assertEquals; |
48 | import static org.onosproject.openflow.controller.RoleState.MASTER; | 34 | import static org.onosproject.openflow.controller.RoleState.MASTER; |
49 | import static org.onosproject.openflow.controller.RoleState.SLAVE; | 35 | import static org.onosproject.openflow.controller.RoleState.SLAVE; |
... | @@ -103,25 +89,12 @@ public class RoleManagerTest { | ... | @@ -103,25 +89,12 @@ public class RoleManagerTest { |
103 | } | 89 | } |
104 | } | 90 | } |
105 | 91 | ||
106 | - private class TestSwitchDriver implements OpenFlowSwitchDriver { | 92 | + private class TestSwitchDriver extends OpenflowSwitchDriverAdapter { |
107 | 93 | ||
108 | RoleState failed = null; | 94 | RoleState failed = null; |
109 | RoleState current = null; | 95 | RoleState current = null; |
110 | 96 | ||
111 | @Override | 97 | @Override |
112 | - public void sendMsg(OFMessage msg) { | ||
113 | - } | ||
114 | - | ||
115 | - @Override | ||
116 | - public void sendMsg(List<OFMessage> msgs) { | ||
117 | - } | ||
118 | - | ||
119 | - | ||
120 | - @Override | ||
121 | - public void handleMessage(OFMessage fromSwitch) { | ||
122 | - } | ||
123 | - | ||
124 | - @Override | ||
125 | public void setRole(RoleState role) { | 98 | public void setRole(RoleState role) { |
126 | current = role; | 99 | current = role; |
127 | } | 100 | } |
... | @@ -132,143 +105,6 @@ public class RoleManagerTest { | ... | @@ -132,143 +105,6 @@ public class RoleManagerTest { |
132 | } | 105 | } |
133 | 106 | ||
134 | @Override | 107 | @Override |
135 | - public List<OFPortDesc> getPorts() { | ||
136 | - return null; | ||
137 | - } | ||
138 | - | ||
139 | - @Override | ||
140 | - public OFFactory factory() { | ||
141 | - // return what-ever triggers requestPending = true | ||
142 | - return OFFactories.getFactory(OFVersion.OF_10); | ||
143 | - } | ||
144 | - | ||
145 | - @Override | ||
146 | - public String getStringId() { | ||
147 | - return "100"; | ||
148 | - } | ||
149 | - | ||
150 | - @Override | ||
151 | - public long getId() { | ||
152 | - return 0; | ||
153 | - } | ||
154 | - | ||
155 | - @Override | ||
156 | - public String manufacturerDescription() { | ||
157 | - return null; | ||
158 | - } | ||
159 | - | ||
160 | - @Override | ||
161 | - public String datapathDescription() { | ||
162 | - return null; | ||
163 | - } | ||
164 | - | ||
165 | - @Override | ||
166 | - public String hardwareDescription() { | ||
167 | - return null; | ||
168 | - } | ||
169 | - | ||
170 | - @Override | ||
171 | - public String softwareDescription() { | ||
172 | - return null; | ||
173 | - } | ||
174 | - | ||
175 | - @Override | ||
176 | - public String serialNumber() { | ||
177 | - return null; | ||
178 | - } | ||
179 | - | ||
180 | - @Override | ||
181 | - public void disconnectSwitch() { | ||
182 | - } | ||
183 | - | ||
184 | - @Override | ||
185 | - public Device.Type deviceType() { | ||
186 | - return Device.Type.SWITCH; | ||
187 | - } | ||
188 | - | ||
189 | - @Override | ||
190 | - public void setAgent(OpenFlowAgent agent) { | ||
191 | - } | ||
192 | - | ||
193 | - @Override | ||
194 | - public void setRoleHandler(RoleHandler roleHandler) { | ||
195 | - } | ||
196 | - | ||
197 | - @Override | ||
198 | - public void reassertRole() { | ||
199 | - } | ||
200 | - | ||
201 | - @Override | ||
202 | - public boolean handleRoleError(OFErrorMsg error) { | ||
203 | - return false; | ||
204 | - } | ||
205 | - | ||
206 | - @Override | ||
207 | - public void handleNiciraRole(OFMessage m) throws SwitchStateException { | ||
208 | - } | ||
209 | - | ||
210 | - @Override | ||
211 | - public void handleRole(OFMessage m) throws SwitchStateException { | ||
212 | - } | ||
213 | - | ||
214 | - @Override | ||
215 | - public void startDriverHandshake() { | ||
216 | - } | ||
217 | - | ||
218 | - @Override | ||
219 | - public boolean isDriverHandshakeComplete() { | ||
220 | - return false; | ||
221 | - } | ||
222 | - | ||
223 | - @Override | ||
224 | - public void processDriverHandshakeMessage(OFMessage m) { | ||
225 | - } | ||
226 | - | ||
227 | - @Override | ||
228 | - public void sendRoleRequest(OFMessage message) { | ||
229 | - | ||
230 | - } | ||
231 | - | ||
232 | - @Override | ||
233 | - public void sendHandshakeMessage(OFMessage message) { | ||
234 | - } | ||
235 | - | ||
236 | - @Override | ||
237 | - public boolean connectSwitch() { | ||
238 | - return false; | ||
239 | - } | ||
240 | - | ||
241 | - @Override | ||
242 | - public boolean activateMasterSwitch() { | ||
243 | - return false; | ||
244 | - } | ||
245 | - | ||
246 | - @Override | ||
247 | - public boolean activateEqualSwitch() { | ||
248 | - return false; | ||
249 | - } | ||
250 | - | ||
251 | - @Override | ||
252 | - public void transitionToEqualSwitch() { | ||
253 | - } | ||
254 | - | ||
255 | - @Override | ||
256 | - public void transitionToMasterSwitch() { | ||
257 | - } | ||
258 | - | ||
259 | - @Override | ||
260 | - public void removeConnectedSwitch() { | ||
261 | - } | ||
262 | - | ||
263 | - @Override | ||
264 | - public void setPortDescReply(OFPortDescStatsReply portDescReply) { | ||
265 | - } | ||
266 | - | ||
267 | - @Override | ||
268 | - public void setPortDescReplies(List<OFPortDescStatsReply> portDescReplies) { | ||
269 | - } | ||
270 | - | ||
271 | - @Override | ||
272 | public void setFeaturesReply(OFFeaturesReply featuresReply) { | 108 | public void setFeaturesReply(OFFeaturesReply featuresReply) { |
273 | } | 109 | } |
274 | 110 | ||
... | @@ -282,37 +118,6 @@ public class RoleManagerTest { | ... | @@ -282,37 +118,6 @@ public class RoleManagerTest { |
282 | } | 118 | } |
283 | 119 | ||
284 | @Override | 120 | @Override |
285 | - public Boolean supportNxRole() { | ||
286 | - return true; | ||
287 | - } | ||
288 | - | ||
289 | - @Override | ||
290 | - public void setOFVersion(OFVersion ofV) { | ||
291 | - } | ||
292 | - | ||
293 | - @Override | ||
294 | - public void setTableFull(boolean full) { | ||
295 | - } | ||
296 | - | ||
297 | - @Override | ||
298 | - public void setChannel(Channel channel) { | ||
299 | - } | ||
300 | - | ||
301 | - @Override | ||
302 | - public void setConnected(boolean connected) { | ||
303 | - } | ||
304 | - | ||
305 | - @Override | ||
306 | - public void init(Dpid dpid, OFDescStatsReply desc, OFVersion ofv) { | ||
307 | - | ||
308 | - } | ||
309 | - | ||
310 | - @Override | ||
311 | - public boolean isConnected() { | ||
312 | - return false; | ||
313 | - } | ||
314 | - | ||
315 | - @Override | ||
316 | public void returnRoleReply(RoleState requested, RoleState response) { | 121 | public void returnRoleReply(RoleState requested, RoleState response) { |
317 | failed = requested; | 122 | failed = requested; |
318 | } | 123 | } |
... | @@ -321,25 +126,5 @@ public class RoleManagerTest { | ... | @@ -321,25 +126,5 @@ public class RoleManagerTest { |
321 | public String channelId() { | 126 | public String channelId() { |
322 | return "1.2.3.4:1"; | 127 | return "1.2.3.4:1"; |
323 | } | 128 | } |
324 | - | ||
325 | - @Override | ||
326 | - public DriverHandler handler() { | ||
327 | - return null; | ||
328 | - } | ||
329 | - | ||
330 | - @Override | ||
331 | - public void setHandler(DriverHandler handler) { | ||
332 | - | ||
333 | - } | ||
334 | - | ||
335 | - @Override | ||
336 | - public DriverData data() { | ||
337 | - return null; | ||
338 | - } | ||
339 | - | ||
340 | - @Override | ||
341 | - public void setData(DriverData data) { | ||
342 | - | ||
343 | - } | ||
344 | } | 129 | } |
345 | } | 130 | } | ... | ... |
... | @@ -20,6 +20,7 @@ import com.google.common.io.Files; | ... | @@ -20,6 +20,7 @@ import com.google.common.io.Files; |
20 | 20 | ||
21 | import java.io.File; | 21 | import java.io.File; |
22 | import java.io.IOException; | 22 | import java.io.IOException; |
23 | +import java.net.ServerSocket; | ||
23 | import java.util.List; | 24 | import java.util.List; |
24 | import java.util.Random; | 25 | import java.util.Random; |
25 | 26 | ||
... | @@ -207,4 +208,20 @@ public final class TestTools { | ... | @@ -207,4 +208,20 @@ public final class TestTools { |
207 | } | 208 | } |
208 | } | 209 | } |
209 | 210 | ||
211 | + /* | ||
212 | + * Finds an available port that a test can bind to. | ||
213 | + */ | ||
214 | + public static int findAvailablePort(int defaultPort) { | ||
215 | + try { | ||
216 | + ServerSocket socket = new ServerSocket(0); | ||
217 | + socket.setReuseAddress(true); | ||
218 | + int port = socket.getLocalPort(); | ||
219 | + socket.close(); | ||
220 | + return port; | ||
221 | + } catch (IOException ex) { | ||
222 | + return defaultPort; | ||
223 | + } | ||
224 | + } | ||
225 | + | ||
226 | + | ||
210 | } | 227 | } | ... | ... |
utils/junit/src/main/resources/org/onosproject/openflow/controller/impl/ControllerTestKeystore.jks
0 → 100644
No preview for this file type
-
Please register or login to post a comment