blob: 6dbaf15b20e91245a5427deb19e38f8c54b2886f [file] [log] [blame]
Simon Hunt72297212015-08-25 10:15:33 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Simon Hunt72297212015-08-25 10:15:33 -07003 *
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;
Thomas Vachuska3afbc7f2016-02-01 15:55:38 -080022import com.google.common.collect.ImmutableSet;
Simon Hunt72297212015-08-25 10:15:33 -070023import org.junit.Test;
Thomas Vachuska3afbc7f2016-02-01 15:55:38 -080024import org.onosproject.net.DefaultDevice;
25import org.onosproject.net.DefaultHost;
Simon Hunt72297212015-08-25 10:15:33 -070026import org.onosproject.net.Device;
27import org.onosproject.net.DeviceId;
28import org.onosproject.net.Host;
29import org.onosproject.net.HostId;
Simon Hunt72297212015-08-25 10:15:33 -070030import org.onosproject.net.device.DeviceService;
31import org.onosproject.net.device.DeviceServiceAdapter;
32import org.onosproject.net.host.HostService;
33import org.onosproject.net.host.HostServiceAdapter;
Simon Hunt72297212015-08-25 10:15:33 -070034
35import static org.junit.Assert.*;
36
37/**
38 * Unit tests for {@link NodeSelection}.
39 */
40public class NodeSelectionTest {
41
Thomas Vachuska3afbc7f2016-02-01 15:55:38 -080042 private static class FakeDevice extends DefaultDevice {
Simon Hunt72297212015-08-25 10:15:33 -070043 FakeDevice(DeviceId id) {
Thomas Vachuska3afbc7f2016-02-01 15:55:38 -080044 super(null, id, null, null, null, null, null, null);
Simon Hunt72297212015-08-25 10:15:33 -070045 }
46 }
47
Thomas Vachuska3afbc7f2016-02-01 15:55:38 -080048 private static class FakeHost extends DefaultHost {
Simon Hunt72297212015-08-25 10:15:33 -070049 FakeHost(HostId id) {
Thomas Vachuska3afbc7f2016-02-01 15:55:38 -080050 super(null, id, null, null, null, ImmutableSet.of());
Simon Hunt72297212015-08-25 10:15:33 -070051 }
52 }
53
Simon Hunt72297212015-08-25 10:15:33 -070054 private final ObjectMapper mapper = new ObjectMapper();
55
56 private static final String IDS = "ids";
57 private static final String HOVER = "hover";
58
59 private static final DeviceId DEVICE_1_ID = DeviceId.deviceId("Device-1");
60 private static final DeviceId DEVICE_2_ID = DeviceId.deviceId("Device-2");
61 private static final HostId HOST_A_ID = HostId.hostId("aa:aa:aa:aa:aa:aa/1");
62 private static final HostId HOST_B_ID = HostId.hostId("bb:bb:bb:bb:bb:bb/2");
63
64 private static final Device DEVICE_1 = new FakeDevice(DEVICE_1_ID);
65 private static final Device DEVICE_2 = new FakeDevice(DEVICE_2_ID);
66 private static final Host HOST_A = new FakeHost(HOST_A_ID);
67 private static final Host HOST_B = new FakeHost(HOST_B_ID);
68
69 // ==================
70 // == FAKE SERVICES
71 private static class FakeDevices extends DeviceServiceAdapter {
72 @Override
73 public Device getDevice(DeviceId deviceId) {
74 if (DEVICE_1_ID.equals(deviceId)) {
75 return DEVICE_1;
76 }
77 if (DEVICE_2_ID.equals(deviceId)) {
78 return DEVICE_2;
79 }
80 return null;
81 }
82 }
83
84 private static class FakeHosts extends HostServiceAdapter {
85 @Override
86 public Host getHost(HostId hostId) {
87 if (HOST_A_ID.equals(hostId)) {
88 return HOST_A;
89 }
90 if (HOST_B_ID.equals(hostId)) {
91 return HOST_B;
92 }
93 return null;
94 }
95 }
96
97 private DeviceService deviceService = new FakeDevices();
98 private HostService hostService = new FakeHosts();
99
100 private NodeSelection ns;
101
102 private ObjectNode objectNode() {
103 return mapper.createObjectNode();
104 }
105
106 private ArrayNode arrayNode() {
107 return mapper.createArrayNode();
108 }
109
110 private NodeSelection createNodeSelection(ObjectNode payload) {
111 return new NodeSelection(payload, deviceService, hostService);
112 }
113
114 // selection JSON payload creation methods
115 private ObjectNode emptySelection() {
116 ObjectNode payload = objectNode();
117 ArrayNode ids = arrayNode();
118 payload.set(IDS, ids);
119 return payload;
120 }
121
122 private ObjectNode oneDeviceSelected() {
123 ObjectNode payload = objectNode();
124 ArrayNode ids = arrayNode();
125 payload.set(IDS, ids);
126 ids.add(DEVICE_1_ID.toString());
127 return payload;
128 }
129
130 private ObjectNode oneHostSelected() {
131 ObjectNode payload = objectNode();
132 ArrayNode ids = arrayNode();
133 payload.set(IDS, ids);
134 ids.add(HOST_A_ID.toString());
135 return payload;
136 }
137
138 private ObjectNode twoHostsOneDeviceSelected() {
139 ObjectNode payload = objectNode();
140 ArrayNode ids = arrayNode();
141 payload.set(IDS, ids);
142 ids.add(HOST_A_ID.toString());
143 ids.add(DEVICE_1_ID.toString());
144 ids.add(HOST_B_ID.toString());
145 return payload;
146 }
147
148 private ObjectNode oneHostAndHoveringDeviceSelected() {
149 ObjectNode payload = objectNode();
150 ArrayNode ids = arrayNode();
151 payload.set(IDS, ids);
152 ids.add(HOST_A_ID.toString());
153 payload.put(HOVER, DEVICE_2_ID.toString());
154 return payload;
155 }
156
157 private ObjectNode twoDevicesOneHostAndHoveringHostSelected() {
158 ObjectNode payload = objectNode();
159 ArrayNode ids = arrayNode();
160 payload.set(IDS, ids);
161 ids.add(HOST_A_ID.toString());
162 ids.add(DEVICE_1_ID.toString());
163 ids.add(DEVICE_2_ID.toString());
164 payload.put(HOVER, HOST_B_ID.toString());
165 return payload;
166 }
167
168
169 @Test
170 public void basic() {
171 ns = createNodeSelection(emptySelection());
172 assertEquals("unexpected devices", 0, ns.devices().size());
173 assertEquals("unexpected devices w/hover", 0, ns.devicesWithHover().size());
174 assertEquals("unexpected hosts", 0, ns.hosts().size());
175 assertEquals("unexpected hosts w/hover", 0, ns.hostsWithHover().size());
176 assertTrue("unexpected selection", ns.none());
177 assertNull("hover?", ns.hovered());
178 }
179
180 @Test
181 public void oneDevice() {
182 ns = createNodeSelection(oneDeviceSelected());
183 assertEquals("missing device", 1, ns.devices().size());
184 assertTrue("missing device 1", ns.devices().contains(DEVICE_1));
185 assertEquals("missing device w/hover", 1, ns.devicesWithHover().size());
186 assertTrue("missing device 1 w/hover", ns.devicesWithHover().contains(DEVICE_1));
187 assertEquals("unexpected hosts", 0, ns.hosts().size());
188 assertEquals("unexpected hosts w/hover", 0, ns.hostsWithHover().size());
189 assertFalse("unexpected selection", ns.none());
190 assertNull("hover?", ns.hovered());
191 }
192
193 @Test
194 public void oneHost() {
195 ns = createNodeSelection(oneHostSelected());
196 assertEquals("unexpected devices", 0, ns.devices().size());
197 assertEquals("unexpected devices w/hover", 0, ns.devicesWithHover().size());
198 assertEquals("missing host", 1, ns.hosts().size());
199 assertTrue("missing host A", ns.hosts().contains(HOST_A));
200 assertEquals("missing host w/hover", 1, ns.hostsWithHover().size());
201 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
202 assertFalse("unexpected selection", ns.none());
203 assertNull("hover?", ns.hovered());
204 }
205
206 @Test
207 public void twoHostsOneDevice() {
208 ns = createNodeSelection(twoHostsOneDeviceSelected());
209 assertEquals("missing device", 1, ns.devices().size());
210 assertTrue("missing device 1", ns.devices().contains(DEVICE_1));
211 assertEquals("missing device w/hover", 1, ns.devicesWithHover().size());
212 assertTrue("missing device 1 w/hover", ns.devicesWithHover().contains(DEVICE_1));
213 assertEquals("unexpected hosts", 2, ns.hosts().size());
214 assertTrue("missing host A", ns.hosts().contains(HOST_A));
215 assertTrue("missing host B", ns.hosts().contains(HOST_B));
216 assertEquals("unexpected hosts w/hover", 2, ns.hostsWithHover().size());
217 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
218 assertTrue("missing host B w/hover", ns.hostsWithHover().contains(HOST_B));
219 assertFalse("unexpected selection", ns.none());
220 assertNull("hover?", ns.hovered());
221 }
222
223 @Test
224 public void oneHostAndHoveringDevice() {
225 ns = createNodeSelection(oneHostAndHoveringDeviceSelected());
226 assertEquals("unexpected devices", 0, ns.devices().size());
227 assertEquals("unexpected devices w/hover", 1, ns.devicesWithHover().size());
228 assertTrue("missing device 2 w/hover", ns.devicesWithHover().contains(DEVICE_2));
229 assertEquals("missing host", 1, ns.hosts().size());
230 assertTrue("missing host A", ns.hosts().contains(HOST_A));
231 assertEquals("missing host w/hover", 1, ns.hostsWithHover().size());
232 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
233 assertFalse("unexpected selection", ns.none());
234 assertEquals("missing hover device 2", DEVICE_2, ns.hovered());
235 }
236
237 @Test
238 public void twoDevicesOneHostAndHoveringHost() {
239 ns = createNodeSelection(twoDevicesOneHostAndHoveringHostSelected());
240 assertEquals("missing devices", 2, ns.devices().size());
241 assertTrue("missing device 1", ns.devices().contains(DEVICE_1));
242 assertTrue("missing device 2", ns.devices().contains(DEVICE_2));
243 assertEquals("missing devices w/hover", 2, ns.devicesWithHover().size());
244 assertTrue("missing device 1 w/hover", ns.devicesWithHover().contains(DEVICE_1));
245 assertTrue("missing device 2 w/hover", ns.devicesWithHover().contains(DEVICE_2));
246 assertEquals("missing host", 1, ns.hosts().size());
247 assertTrue("missing host A", ns.hosts().contains(HOST_A));
248 assertEquals("missing host w/hover", 2, ns.hostsWithHover().size());
249 assertTrue("missing host A w/hover", ns.hostsWithHover().contains(HOST_A));
250 assertTrue("missing host B w/hover", ns.hostsWithHover().contains(HOST_B));
251 assertFalse("unexpected selection", ns.none());
252 assertEquals("missing hover host B", HOST_B, ns.hovered());
253 }
254}