blob: 06a785809f9f8294a6c3961e8f48c5fc8b9ad8cb [file] [log] [blame]
Simon Hunt72297212015-08-25 10:15:33 -07001/*
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.
Simon Hunt72297212015-08-25 10:15:33 -070015 */
16
17package org.onosproject.ui.topo;
18
19import com.fasterxml.jackson.databind.ObjectMapper;
20import com.fasterxml.jackson.databind.node.ArrayNode;
21import com.fasterxml.jackson.databind.node.ObjectNode;
22import org.junit.Test;
23import org.onlab.packet.ChassisId;
24import org.onlab.packet.IpAddress;
25import org.onlab.packet.MacAddress;
26import org.onlab.packet.VlanId;
27import org.onosproject.net.Annotations;
28import org.onosproject.net.Device;
29import org.onosproject.net.DeviceId;
30import org.onosproject.net.Host;
31import org.onosproject.net.HostId;
32import org.onosproject.net.HostLocation;
33import org.onosproject.net.device.DeviceService;
34import org.onosproject.net.device.DeviceServiceAdapter;
35import org.onosproject.net.host.HostService;
36import org.onosproject.net.host.HostServiceAdapter;
37import org.onosproject.net.provider.ProviderId;
38
39import java.util.Set;
40
41import static org.junit.Assert.*;
42
43/**
44 * Unit tests for {@link NodeSelection}.
45 */
46public class NodeSelectionTest {
47
48 private static class FakeDevice implements Device {
49
50 private final DeviceId id;
51
52 FakeDevice(DeviceId id) {
53 this.id = id;
54 }
55
56 @Override
57 public DeviceId id() {
58 return id;
59 }
60
61 @Override
62 public Type type() {
63 return null;
64 }
65
66 @Override
67 public String manufacturer() {
68 return null;
69 }
70
71 @Override
72 public String hwVersion() {
73 return null;
74 }
75
76 @Override
77 public String swVersion() {
78 return null;
79 }
80
81 @Override
82 public String serialNumber() {
83 return null;
84 }
85
86 @Override
87 public ChassisId chassisId() {
88 return null;
89 }
90
91 @Override
92 public Annotations annotations() {
93 return null;
94 }
95
96 @Override
97 public ProviderId providerId() {
98 return null;
99 }
100 }
101
102 private static class FakeHost implements Host {
103
104 private final HostId id;
105
106 FakeHost(HostId id) {
107 this.id = id;
108 }
109
110 @Override
111 public HostId id() {
112 return id;
113 }
114
115 @Override
116 public MacAddress mac() {
117 return null;
118 }
119
120 @Override
121 public VlanId vlan() {
122 return null;
123 }
124
125 @Override
126 public Set<IpAddress> ipAddresses() {
127 return null;
128 }
129
130 @Override
131 public HostLocation location() {
132 return null;
133 }
134
135 @Override
136 public Annotations annotations() {
137 return null;
138 }
139
140 @Override
141 public ProviderId providerId() {
142 return null;
143 }
144 }
145
146
147
148 private final ObjectMapper mapper = new ObjectMapper();
149
150 private static final String IDS = "ids";
151 private static final String HOVER = "hover";
152
153 private static final DeviceId DEVICE_1_ID = DeviceId.deviceId("Device-1");
154 private static final DeviceId DEVICE_2_ID = DeviceId.deviceId("Device-2");
155 private static final HostId HOST_A_ID = HostId.hostId("aa:aa:aa:aa:aa:aa/1");
156 private static final HostId HOST_B_ID = HostId.hostId("bb:bb:bb:bb:bb:bb/2");
157
158 private static final Device DEVICE_1 = new FakeDevice(DEVICE_1_ID);
159 private static final Device DEVICE_2 = new FakeDevice(DEVICE_2_ID);
160 private static final Host HOST_A = new FakeHost(HOST_A_ID);
161 private static final Host HOST_B = new FakeHost(HOST_B_ID);
162
163 // ==================
164 // == FAKE SERVICES
165 private static class FakeDevices extends DeviceServiceAdapter {
166 @Override
167 public Device getDevice(DeviceId deviceId) {
168 if (DEVICE_1_ID.equals(deviceId)) {
169 return DEVICE_1;
170 }
171 if (DEVICE_2_ID.equals(deviceId)) {
172 return DEVICE_2;
173 }
174 return null;
175 }
176 }
177
178 private static class FakeHosts extends HostServiceAdapter {
179 @Override
180 public Host getHost(HostId hostId) {
181 if (HOST_A_ID.equals(hostId)) {
182 return HOST_A;
183 }
184 if (HOST_B_ID.equals(hostId)) {
185 return HOST_B;
186 }
187 return null;
188 }
189 }
190
191 private DeviceService deviceService = new FakeDevices();
192 private HostService hostService = new FakeHosts();
193
194 private NodeSelection ns;
195
196 private ObjectNode objectNode() {
197 return mapper.createObjectNode();
198 }
199
200 private ArrayNode arrayNode() {
201 return mapper.createArrayNode();
202 }
203
204 private NodeSelection createNodeSelection(ObjectNode payload) {
205 return new NodeSelection(payload, deviceService, hostService);
206 }
207
208 // selection JSON payload creation methods
209 private ObjectNode emptySelection() {
210 ObjectNode payload = objectNode();
211 ArrayNode ids = arrayNode();
212 payload.set(IDS, ids);
213 return payload;
214 }
215
216 private ObjectNode oneDeviceSelected() {
217 ObjectNode payload = objectNode();
218 ArrayNode ids = arrayNode();
219 payload.set(IDS, ids);
220 ids.add(DEVICE_1_ID.toString());
221 return payload;
222 }
223
224 private ObjectNode oneHostSelected() {
225 ObjectNode payload = objectNode();
226 ArrayNode ids = arrayNode();
227 payload.set(IDS, ids);
228 ids.add(HOST_A_ID.toString());
229 return payload;
230 }
231
232 private ObjectNode twoHostsOneDeviceSelected() {
233 ObjectNode payload = objectNode();
234 ArrayNode ids = arrayNode();
235 payload.set(IDS, ids);
236 ids.add(HOST_A_ID.toString());
237 ids.add(DEVICE_1_ID.toString());
238 ids.add(HOST_B_ID.toString());
239 return payload;
240 }
241
242 private ObjectNode oneHostAndHoveringDeviceSelected() {
243 ObjectNode payload = objectNode();
244 ArrayNode ids = arrayNode();
245 payload.set(IDS, ids);
246 ids.add(HOST_A_ID.toString());
247 payload.put(HOVER, DEVICE_2_ID.toString());
248 return payload;
249 }
250
251 private ObjectNode twoDevicesOneHostAndHoveringHostSelected() {
252 ObjectNode payload = objectNode();
253 ArrayNode ids = arrayNode();
254 payload.set(IDS, ids);
255 ids.add(HOST_A_ID.toString());
256 ids.add(DEVICE_1_ID.toString());
257 ids.add(DEVICE_2_ID.toString());
258 payload.put(HOVER, HOST_B_ID.toString());
259 return payload;
260 }
261
262
263 @Test
264 public void basic() {
265 ns = createNodeSelection(emptySelection());
266 assertEquals("unexpected devices", 0, ns.devices().size());
267 assertEquals("unexpected devices w/hover", 0, ns.devicesWithHover().size());
268 assertEquals("unexpected hosts", 0, ns.hosts().size());
269 assertEquals("unexpected hosts w/hover", 0, ns.hostsWithHover().size());
270 assertTrue("unexpected selection", ns.none());
271 assertNull("hover?", ns.hovered());
272 }
273
274 @Test
275 public void oneDevice() {
276 ns = createNodeSelection(oneDeviceSelected());
277 assertEquals("missing device", 1, ns.devices().size());
278 assertTrue("missing device 1", ns.devices().contains(DEVICE_1));
279 assertEquals("missing device w/hover", 1, ns.devicesWithHover().size());
280 assertTrue("missing device 1 w/hover", ns.devicesWithHover().contains(DEVICE_1));
281 assertEquals("unexpected hosts", 0, ns.hosts().size());
282 assertEquals("unexpected hosts w/hover", 0, ns.hostsWithHover().size());
283 assertFalse("unexpected selection", ns.none());
284 assertNull("hover?", ns.hovered());
285 }
286
287 @Test
288 public void oneHost() {
289 ns = createNodeSelection(oneHostSelected());
290 assertEquals("unexpected devices", 0, ns.devices().size());
291 assertEquals("unexpected devices w/hover", 0, ns.devicesWithHover().size());
292 assertEquals("missing host", 1, ns.hosts().size());
293 assertTrue("missing host A", ns.hosts().contains(HOST_A));
294 assertEquals("missing host w/hover", 1, ns.hostsWithHover().size());
295 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
296 assertFalse("unexpected selection", ns.none());
297 assertNull("hover?", ns.hovered());
298 }
299
300 @Test
301 public void twoHostsOneDevice() {
302 ns = createNodeSelection(twoHostsOneDeviceSelected());
303 assertEquals("missing device", 1, ns.devices().size());
304 assertTrue("missing device 1", ns.devices().contains(DEVICE_1));
305 assertEquals("missing device w/hover", 1, ns.devicesWithHover().size());
306 assertTrue("missing device 1 w/hover", ns.devicesWithHover().contains(DEVICE_1));
307 assertEquals("unexpected hosts", 2, ns.hosts().size());
308 assertTrue("missing host A", ns.hosts().contains(HOST_A));
309 assertTrue("missing host B", ns.hosts().contains(HOST_B));
310 assertEquals("unexpected hosts w/hover", 2, ns.hostsWithHover().size());
311 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
312 assertTrue("missing host B w/hover", ns.hostsWithHover().contains(HOST_B));
313 assertFalse("unexpected selection", ns.none());
314 assertNull("hover?", ns.hovered());
315 }
316
317 @Test
318 public void oneHostAndHoveringDevice() {
319 ns = createNodeSelection(oneHostAndHoveringDeviceSelected());
320 assertEquals("unexpected devices", 0, ns.devices().size());
321 assertEquals("unexpected devices w/hover", 1, ns.devicesWithHover().size());
322 assertTrue("missing device 2 w/hover", ns.devicesWithHover().contains(DEVICE_2));
323 assertEquals("missing host", 1, ns.hosts().size());
324 assertTrue("missing host A", ns.hosts().contains(HOST_A));
325 assertEquals("missing host w/hover", 1, ns.hostsWithHover().size());
326 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
327 assertFalse("unexpected selection", ns.none());
328 assertEquals("missing hover device 2", DEVICE_2, ns.hovered());
329 }
330
331 @Test
332 public void twoDevicesOneHostAndHoveringHost() {
333 ns = createNodeSelection(twoDevicesOneHostAndHoveringHostSelected());
334 assertEquals("missing devices", 2, ns.devices().size());
335 assertTrue("missing device 1", ns.devices().contains(DEVICE_1));
336 assertTrue("missing device 2", ns.devices().contains(DEVICE_2));
337 assertEquals("missing devices w/hover", 2, ns.devicesWithHover().size());
338 assertTrue("missing device 1 w/hover", ns.devicesWithHover().contains(DEVICE_1));
339 assertTrue("missing device 2 w/hover", ns.devicesWithHover().contains(DEVICE_2));
340 assertEquals("missing host", 1, ns.hosts().size());
341 assertTrue("missing host A", ns.hosts().contains(HOST_A));
342 assertEquals("missing host w/hover", 2, ns.hostsWithHover().size());
343 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
344 assertTrue("missing host B w/hover", ns.hostsWithHover().contains(HOST_B));
345 assertFalse("unexpected selection", ns.none());
346 assertEquals("missing hover host B", HOST_B, ns.hovered());
347 }
348}