blob: 15f10a7425ccb32181463acd0ad33b75cc4c8886 [file] [log] [blame]
Tomek Osińskie9ccf412018-01-13 19:44:11 +01001/*
2 * Copyright 2018-present Open Networking Foundation
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
17package org.onosproject.provider.xmpp.device.impl;
18
19import org.dom4j.Document;
20import org.junit.Before;
21import org.junit.Test;
22import org.onosproject.core.ApplicationId;
23import org.onosproject.core.CoreService;
24import org.onosproject.core.DefaultApplicationId;
25import org.onosproject.net.DefaultDevice;
26import org.onosproject.net.Device;
27import org.onosproject.net.DeviceId;
28import org.onosproject.net.device.DeviceDescription;
29import org.onosproject.net.device.DeviceEvent;
30import org.onosproject.net.device.DeviceProvider;
31import org.onosproject.net.device.DeviceProviderRegistry;
32import org.onosproject.net.device.DeviceProviderRegistryAdapter;
33import org.onosproject.net.device.DeviceProviderService;
34import org.onosproject.net.device.DeviceProviderServiceAdapter;
35import org.onosproject.net.device.DeviceServiceAdapter;
36import org.onosproject.net.device.DeviceStoreAdapter;
37import org.onosproject.net.provider.ProviderId;
38import org.onosproject.xmpp.core.XmppController;
39import org.onosproject.xmpp.core.XmppDevice;
40import org.onosproject.xmpp.core.XmppDeviceId;
41import org.onosproject.xmpp.core.XmppDeviceListener;
42import org.onosproject.xmpp.core.XmppIqListener;
43import org.onosproject.xmpp.core.XmppMessageListener;
44import org.onosproject.xmpp.core.XmppPresenceListener;
45import org.onosproject.xmpp.core.XmppSession;
46import org.xmpp.packet.JID;
47import org.xmpp.packet.Packet;
48import org.xmpp.packet.PacketError;
49
50import java.io.IOException;
51import java.net.InetSocketAddress;
52import java.util.HashMap;
53import java.util.HashSet;
54import java.util.Map;
55import java.util.Set;
56
57import static org.easymock.EasyMock.*;
58import static org.junit.Assert.*;
59
60/**
61 * Testing class for XmppDeviceProvider.
62 */
63public class XmppDeviceProviderTest {
64
65
66 private final XmppDeviceProvider provider = new XmppDeviceProvider();
67 XmppControllerAdapter xmppController = new XmppControllerAdapter();
68
69 //Provider Mock
70 private final DeviceProviderRegistry deviceRegistry = new MockDeviceProviderRegistry();
71 private final DeviceProviderService providerService = new MockDeviceProviderService();
72 private final DeviceServiceAdapter deviceService = new DeviceServiceAdapter();
73 private final MockDeviceStore deviceStore = new MockDeviceStore();
74
75 //Provider related classes
76 private CoreService coreService;
77 private final ApplicationId appId =
78 new DefaultApplicationId(100, APP_NAME);
79 private static final String APP_NAME = "org.onosproject.xmpp";
80
81 private final HashMap<DeviceId, Device> devices = new HashMap<>();
82
83 private final String agentOneId = "agent1@test.org";
84 private final XmppDeviceId agentOneXmppId = new XmppDeviceId(new JID(agentOneId));
85
86 @Before
87 public void setUp() throws IOException {
88 coreService = createMock(CoreService.class);
89 expect(coreService.registerApplication(APP_NAME))
90 .andReturn(appId).anyTimes();
91 replay(coreService);
92 provider.coreService = coreService;
93 provider.providerRegistry = deviceRegistry;
94 provider.deviceService = deviceService;
95 provider.providerService = providerService;
96 provider.controller = xmppController;
97 provider.activate(null);
98 devices.clear();
99 }
100
101 @Test
102 public void activate() throws Exception {
103 assertTrue("Provider should be registered", deviceRegistry.getProviders().contains(provider.id()));
104 assertEquals("Incorrect device service", deviceService, provider.deviceService);
105 assertEquals("Incorrect provider service", providerService, provider.providerService);
106 assertEquals("Incorrent application id", appId, provider.appId);
107 assertNotNull("XMPP device listener should be added", xmppController.listener);
108 }
109
110 @Test
111 public void deactivate() throws Exception {
112 provider.deactivate();
113 assertNull("Device listener should be removed", xmppController.listener);
Yuta HIGUCHI8c0c8ef2018-03-06 19:10:50 -0800114 assertFalse("Provider should not be registered", deviceRegistry.getProviders().contains(provider.id()));
Tomek Osińskie9ccf412018-01-13 19:44:11 +0100115 assertNull("Provider service should be null", provider.providerService);
116 }
117
118 @Test
119 public void testDeviceAdded() {
120 xmppController.listener.deviceConnected(agentOneXmppId);
121 assertEquals("XMPP device added", 1, devices.size());
122 }
123
124 @Test
125 public void testDeviceRemoved() {
126 xmppController.listener.deviceDisconnected(agentOneXmppId);
127 assertEquals("XMPP device removed", 0, devices.size());
128 }
129
130 @Test
131 public void testIsReachable() {
132 assertTrue(provider.isReachable(DeviceId.deviceId("reachable@xmpp.org")));
133 assertFalse(provider.isReachable(DeviceId.deviceId("non-reachable@xmpp.org")));
134 }
135
136
137 private class MockDeviceProviderRegistry extends DeviceProviderRegistryAdapter {
138
139 final Set<ProviderId> providers = new HashSet<>();
140
141 @Override
142 public DeviceProviderService register(DeviceProvider provider) {
143 providers.add(provider.id());
144 return providerService;
145 }
146
147 @Override
148 public void unregister(DeviceProvider provider) {
149 providers.remove(provider.id());
150 }
151
152 @Override
153 public Set<ProviderId> getProviders() {
154 return providers;
155 }
156
157 }
158
159 private class MockDeviceProviderService extends DeviceProviderServiceAdapter {
160
161 @Override
162 public void deviceConnected(DeviceId deviceId, DeviceDescription desc) {
163 assertNotNull("DeviceId should be not null", deviceId);
164 assertNotNull("DeviceDescription should be not null", desc);
165 deviceStore.createOrUpdateDevice(ProviderId.NONE, deviceId, desc);
166 }
167
168
169 @Override
170 public void deviceDisconnected(DeviceId deviceId) {
171 deviceStore.removeDevice(deviceId);
172 }
173
174 }
175
176 private class MockDeviceStore extends DeviceStoreAdapter {
177
178 @Override
179 public DeviceEvent createOrUpdateDevice(ProviderId providerId, DeviceId deviceId,
180 DeviceDescription desc) {
181
182 devices.put(deviceId, new DefaultDevice(providerId, deviceId, desc.type(),
183 desc.manufacturer(), desc.hwVersion(),
184 desc.swVersion(), desc.serialNumber(),
185 desc.chassisId(), desc.annotations()));
186 return null;
187 }
188
189 @Override
190 public DeviceEvent removeDevice(DeviceId deviceId) {
191 devices.remove(deviceId);
192 return null;
193 }
194
195 @Override
196 public Device getDevice(DeviceId deviceId) {
197 return devices.get(deviceId);
198 }
199
200 @Override
201 public int getDeviceCount() {
202 return devices.size();
203 }
204
205 }
206
207 private class XmppControllerAdapter implements XmppController {
208
209 XmppDeviceListener listener = null;
210 Map<XmppDeviceId, XmppDevice> xmppDevices = new HashMap();
211
212 XmppControllerAdapter() {
213 XmppDeviceAdapter reachable = new XmppDeviceAdapter("reachable@xmpp.org", "127.0.0.1", 54333);
214 xmppDevices.put(reachable.xmppDeviceId, reachable);
215 XmppDeviceAdapter testDevice = new XmppDeviceAdapter(agentOneId, "127.0.0.1", 54334);
216 xmppDevices.put(testDevice.xmppDeviceId, testDevice);
217 }
218
219 @java.lang.Override
220 public XmppDevice getDevice(XmppDeviceId xmppDeviceId) {
221 return xmppDevices.get(xmppDeviceId);
222 }
223
224 @java.lang.Override
225 public void addXmppDeviceListener(XmppDeviceListener deviceListener) {
226 this.listener = deviceListener;
227 }
228
229 @java.lang.Override
230 public void removeXmppDeviceListener(XmppDeviceListener deviceListener) {
231 this.listener = null;
232 }
233
234 @java.lang.Override
Tomek Osiński7a1db182018-02-03 17:15:06 +0100235 public void addXmppIqListener(XmppIqListener iqListener, String namespace) {
Tomek Osińskie9ccf412018-01-13 19:44:11 +0100236
237 }
238
239 @java.lang.Override
Tomek Osiński7a1db182018-02-03 17:15:06 +0100240 public void removeXmppIqListener(XmppIqListener iqListener, String namespace) {
Tomek Osińskie9ccf412018-01-13 19:44:11 +0100241
242 }
243
244 @java.lang.Override
245 public void addXmppMessageListener(XmppMessageListener messageListener) {
246
247 }
248
249 @java.lang.Override
250 public void removeXmppMessageListener(XmppMessageListener messageListener) {
251
252 }
253
254 @java.lang.Override
255 public void addXmppPresenceListener(XmppPresenceListener presenceListener) {
256
257 }
258
259 @java.lang.Override
260 public void removeXmppPresenceListener(XmppPresenceListener presenceListener) {
261
262 }
263 }
264
265 private class XmppDeviceAdapter implements XmppDevice {
266
267 InetSocketAddress testAddress;
268 XmppDeviceId xmppDeviceId;
269
270 public XmppDeviceAdapter(String jid, String address, int port) {
271 testAddress = new InetSocketAddress(address, port);
272 this.xmppDeviceId = new XmppDeviceId(new JID(jid));
273 }
274
275 @Override
276 public XmppSession getSession() {
277 return null;
278 }
279
280 @Override
281 public InetSocketAddress getIpAddress() {
282 return testAddress;
283 }
284
285 @Override
286 public void registerConnectedDevice() {
287
288 }
289
290 @Override
291 public void disconnectDevice() {
292
293 }
294
295 @Override
296 public void sendPacket(Packet packet) {
297
298 }
299
300 @Override
301 public void writeRawXml(Document document) {
302
303 }
304
305 @Override
306 public void handlePacket(Packet packet) {
307
308 }
309
310 @Override
311 public void sendError(PacketError packetError) {
312
313 }
314
315 }
316
317}