blob: 7f3938c4e6ab40abb81d2ed63e1ac3e6ffb4e021 [file] [log] [blame]
Ray Milkeyc401e6e2015-01-24 10:40:03 -08001/*
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 */
16package org.onosproject.rest;
17
18import java.util.Set;
19
20import org.junit.Before;
21import org.junit.Test;
22import org.onlab.osgi.ServiceDirectory;
23import org.onlab.osgi.TestServiceDirectory;
24import org.onlab.rest.BaseResource;
25import org.onosproject.codec.CodecService;
26import org.onosproject.codec.impl.CodecManager;
27import org.onosproject.net.ConnectPoint;
28import org.onosproject.net.DeviceId;
29import org.onosproject.net.Link;
30import org.onosproject.net.Path;
31import org.onosproject.net.provider.ProviderId;
32import org.onosproject.net.topology.ClusterId;
33import org.onosproject.net.topology.DefaultTopologyCluster;
34import org.onosproject.net.topology.DefaultTopologyVertex;
35import org.onosproject.net.topology.LinkWeight;
36import org.onosproject.net.topology.Topology;
37import org.onosproject.net.topology.TopologyCluster;
38import org.onosproject.net.topology.TopologyGraph;
39import org.onosproject.net.topology.TopologyListener;
40import org.onosproject.net.topology.TopologyService;
41
42import com.eclipsesource.json.JsonArray;
43import com.eclipsesource.json.JsonObject;
44import com.google.common.collect.ImmutableSet;
45import com.sun.jersey.api.client.WebResource;
46import com.sun.jersey.test.framework.JerseyTest;
47
48import static org.hamcrest.Matchers.hasSize;
49import static org.hamcrest.Matchers.is;
50import static org.hamcrest.Matchers.notNullValue;
51import static org.hamcrest.Matchers.containsString;
52import static org.junit.Assert.assertThat;
53import static org.onosproject.net.NetTestTools.did;
54import static org.onosproject.net.NetTestTools.link;
55
56/**
57 * Unit tests for Topology REST APIs.
58 */
59public class TopologyResourceTest extends JerseyTest {
60
61 private static class MockTopology implements Topology {
62 @Override
63 public long time() {
64 return 11111L;
65 }
66
67 @Override
68 public long computeCost() {
69 return 0;
70 }
71
72 @Override
73 public int clusterCount() {
74 return 2;
75 }
76
77 @Override
78 public int deviceCount() {
79 return 6;
80 }
81
82 @Override
83 public int linkCount() {
84 return 4;
85 }
86
87 @Override
88 public ProviderId providerId() {
89 return ProviderId.NONE;
90 }
91 }
92
93 private static class MockTopologyService implements TopologyService {
94 final DefaultTopologyVertex root = new DefaultTopologyVertex(did("rootnode"));
95 final Topology topology = new MockTopology();
96 final TopologyCluster cluster1 =
97 new DefaultTopologyCluster(ClusterId.clusterId(0),
98 2, 1, root);
99 final TopologyCluster cluster2 =
100 new DefaultTopologyCluster(ClusterId.clusterId(1),
101 4, 3, root);
102
103 @Override
104 public Topology currentTopology() {
105 return topology;
106 }
107
108 @Override
109 public boolean isLatest(Topology topology) {
110 return true;
111 }
112
113 @Override
114 public TopologyGraph getGraph(Topology topology) {
115 return null;
116 }
117
118 @Override
119 public Set<TopologyCluster> getClusters(Topology topology) {
120 return ImmutableSet.of(cluster1, cluster2);
121 }
122
123 @Override
124 public TopologyCluster getCluster(Topology topology, ClusterId clusterId) {
125 return cluster1;
126 }
127
128 @Override
129 public Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster) {
130 DeviceId device1 = did("dev1");
131 DeviceId device2 = did("dev2");
132
133 return ImmutableSet.of(device1, device2);
134 }
135
136 @Override
137 public Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster) {
138 Link link1 = link("src1", 1, "dst1", 1);
139 Link link2 = link("src2", 1, "dst2", 1);
140 Link link3 = link("src3", 1, "dst3", 1);
141 return ImmutableSet.of(link1, link2, link3);
142 }
143
144 @Override
145 public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst) {
146 return null;
147 }
148
149 @Override
150 public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
151 return null;
152 }
153
154 @Override
155 public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) {
156 return connectPoint.elementId().toString().equals("dev2");
157 }
158
159 @Override
160 public boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint) {
161 return connectPoint.elementId().toString().equals("dev1");
162 }
163
164 @Override
165 public void addListener(TopologyListener listener) {
166
167 }
168
169 @Override
170 public void removeListener(TopologyListener listener) {
171
172 }
173 }
174
175 public TopologyResourceTest() {
176 super("org.onosproject.rest");
177 }
178
179
180 /**
181 * Initializes the test harness.
182 */
183 @Before
184 public void setUp() {
185 TopologyService topologyService = new MockTopologyService();
186 CodecManager codecService = new CodecManager();
187 codecService.activate();
188
189 ServiceDirectory testDirectory =
190 new TestServiceDirectory()
191 .add(TopologyService.class, topologyService)
192 .add(CodecService.class, codecService);
193 BaseResource.setServiceDirectory(testDirectory);
194 }
195
196 /**
197 * Tests the topology overview.
198 */
199 @Test
200 public void getTopology() {
201 WebResource rs = resource();
202 String response = rs.path("topology").get(String.class);
203 JsonObject result = JsonObject.readFrom(response);
204 assertThat(result, notNullValue());
205
206 assertThat(result.names(), hasSize(4));
207
208 assertThat(result.get("time").asLong(), is(11111L));
209 assertThat(result.get("clusters").asLong(), is(2L));
210 assertThat(result.get("devices").asLong(), is(6L));
211 assertThat(result.get("links").asLong(), is(4L));
212 }
213
214 /**
215 * Tests the clusters overview.
216 */
217 @Test
218 public void getTopologyClusters() {
219 WebResource rs = resource();
220 String response = rs.path("topology/clusters").get(String.class);
221 JsonObject result = JsonObject.readFrom(response);
222 assertThat(result, notNullValue());
223
224 assertThat(result.names(), hasSize(1));
225 JsonArray clusters = result.get("clusters").asArray();
226 assertThat(clusters, notNullValue());
227 assertThat(clusters.size(), is(2));
228 }
229
230 /**
231 * Tests an individual cluster overview.
232 */
233 @Test
234 public void getCluster() {
235 WebResource rs = resource();
236 String response = rs.path("topology/clusters/0").get(String.class);
237 JsonObject result = JsonObject.readFrom(response);
238 assertThat(result, notNullValue());
239
240 assertThat(result.get("id").asLong(), is(0L));
241 assertThat(result.get("deviceCount").asLong(), is(2L));
242 assertThat(result.get("linkCount").asLong(), is(1L));
243 assertThat(result.get("root").asString(), containsString("rootnode"));
244
245 assertThat(result.names(), hasSize(4));
246 }
247
248 /**
249 * Tests an individual cluster's devices list.
250 */
251 @Test
252 public void getClusterDevices() {
253 WebResource rs = resource();
254 String response = rs.path("topology/clusters/0/devices").get(String.class);
255 JsonObject result = JsonObject.readFrom(response);
256 assertThat(result, notNullValue());
257
258 JsonArray devices = result.get("devices").asArray();
259 assertThat(devices.size(), is(2));
260
261 assertThat(devices.get(0).asString(), is("of:dev1"));
262 assertThat(devices.get(1).asString(), is("of:dev2"));
263 }
264
265 /**
266 * Tests an individual cluster's links list.
267 */
268 @Test
269 public void getClusterLinks() {
270 WebResource rs = resource();
271 String response = rs.path("topology/clusters/1/links").get(String.class);
272 JsonObject result = JsonObject.readFrom(response);
273 assertThat(result, notNullValue());
274
275 JsonArray links = result.get("links").asArray();
276 assertThat(links.size(), is(3));
277
278 JsonObject link0 = links.get(0).asObject();
279 JsonObject src0 = link0.get("src").asObject();
280 String device0 = src0.get("device").asString();
281 assertThat(device0, is("of:src1"));
282
283 JsonObject link2 = links.get(2).asObject();
284 JsonObject src2 = link2.get("src").asObject();
285 String device2 = src2.get("device").asString();
286 assertThat(device2, is("of:src3"));
287 }
288
289 /**
290 * Tests a broadcast query.
291 */
292 @Test
293 public void getBroadcast() {
294 WebResource rs = resource();
295 String response = rs.path("topology/broadcast/dev1:1").get(String.class);
296 JsonObject result = JsonObject.readFrom(response);
297 assertThat(result, notNullValue());
298
299 assertThat(result.get("broadcast").asBoolean(), is(true));
300 }
301
302 /**
303 * Tests an infrastructure query.
304 */
305 @Test
306 public void getInfrastructure() {
307 WebResource rs = resource();
308 String response = rs.path("topology/infrastructure/dev2:1").get(String.class);
309 JsonObject result = JsonObject.readFrom(response);
310 assertThat(result, notNullValue());
311
312 assertThat(result.get("infrastructure").asBoolean(), is(true));
313 }
314}