blob: 8562d7e1d4af6eea634dd33b45094f8ed5057a03 [file] [log] [blame]
Yuta HIGUCHI9312a802017-06-12 20:01:27 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Yuta HIGUCHI9312a802017-06-12 20:01:27 -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.
15 */
16
Sbhat3599d66962017-06-08 11:25:35 -070017package org.onosproject.utils;
18
Yuta HIGUCHI9312a802017-06-12 20:01:27 -070019import static org.junit.Assert.assertEquals;
20import static org.junit.Assert.assertFalse;
21import static org.junit.Assert.assertNotEquals;
22import static org.junit.Assert.assertTrue;
23import static org.onosproject.app.DefaultApplicationDescriptionTest.APPS;
24import static org.onosproject.app.DefaultApplicationDescriptionTest.CATEGORY;
25import static org.onosproject.app.DefaultApplicationDescriptionTest.DESC;
26import static org.onosproject.app.DefaultApplicationDescriptionTest.FEATURES;
27import static org.onosproject.app.DefaultApplicationDescriptionTest.FURL;
28import static org.onosproject.app.DefaultApplicationDescriptionTest.ICON;
29import static org.onosproject.app.DefaultApplicationDescriptionTest.ORIGIN;
30import static org.onosproject.app.DefaultApplicationDescriptionTest.PERMS;
31import static org.onosproject.app.DefaultApplicationDescriptionTest.README;
32import static org.onosproject.app.DefaultApplicationDescriptionTest.ROLE;
33import static org.onosproject.app.DefaultApplicationDescriptionTest.TITLE;
34import static org.onosproject.app.DefaultApplicationDescriptionTest.URL;
35import static org.onosproject.app.DefaultApplicationDescriptionTest.VER;
Sbhat3599d66962017-06-08 11:25:35 -070036import static org.onosproject.net.DeviceId.deviceId;
37import static org.onosproject.net.NetTestTools.APP_ID;
38import static org.onosproject.net.NetTestTools.did;
39import static org.onosproject.net.topology.ClusterId.clusterId;
40import static org.onosproject.utils.Comparators.APP_COMPARATOR;
41import static org.onosproject.utils.Comparators.APP_ID_COMPARATOR;
42import static org.onosproject.utils.Comparators.CLUSTER_COMPARATOR;
43import static org.onosproject.utils.Comparators.DEVICE_KEY_COMPARATOR;
44import static org.onosproject.utils.Comparators.ELEMENT_COMPARATOR;
45import static org.onosproject.utils.Comparators.ELEMENT_ID_COMPARATOR;
46import static org.onosproject.utils.Comparators.FLOWENTRY_WITHLOAD_COMPARATOR;
47import static org.onosproject.utils.Comparators.FLOW_RULE_COMPARATOR;
48import static org.onosproject.utils.Comparators.GROUP_COMPARATOR;
49import static org.onosproject.utils.Comparators.INTERFACES_COMPARATOR;
50import static org.onosproject.utils.Comparators.LAYOUT_COMPARATOR;
51import static org.onosproject.utils.Comparators.NODE_COMPARATOR;
52import static org.onosproject.utils.Comparators.PORT_COMPARATOR;
53import static org.onosproject.utils.Comparators.REGION_COMPARATOR;
54import static org.onosproject.utils.Comparators.TENANT_ID_COMPARATOR;
55import static org.onosproject.utils.Comparators.VIRTUAL_DEVICE_COMPARATOR;
56import static org.onosproject.utils.Comparators.VIRTUAL_NETWORK_COMPARATOR;
57import static org.onosproject.utils.Comparators.VIRTUAL_PORT_COMPARATOR;
58
Yuta HIGUCHI9312a802017-06-12 20:01:27 -070059import java.util.Optional;
60
61import org.junit.Test;
62import org.onlab.packet.ChassisId;
63import org.onlab.packet.Ip4Address;
64import org.onosproject.cluster.ControllerNode;
65import org.onosproject.cluster.DefaultControllerNode;
66import org.onosproject.cluster.NodeId;
67import org.onosproject.core.Application;
68import org.onosproject.core.ApplicationId;
69import org.onosproject.core.DefaultApplication;
70import org.onosproject.core.DefaultApplicationId;
71import org.onosproject.core.GroupId;
Ray Milkeyfacf2862017-08-03 11:58:29 -070072import org.onosproject.net.intf.Interface;
Yuta HIGUCHI9312a802017-06-12 20:01:27 -070073import org.onosproject.incubator.net.virtual.DefaultVirtualDevice;
74import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
75import org.onosproject.incubator.net.virtual.DefaultVirtualPort;
76import org.onosproject.incubator.net.virtual.NetworkId;
77import org.onosproject.incubator.net.virtual.TenantId;
78import org.onosproject.incubator.net.virtual.VirtualDevice;
79import org.onosproject.incubator.net.virtual.VirtualNetwork;
80import org.onosproject.incubator.net.virtual.VirtualPort;
81import org.onosproject.net.ConnectPoint;
82import org.onosproject.net.DefaultAnnotations;
83import org.onosproject.net.DefaultDevice;
84import org.onosproject.net.DefaultPort;
85import org.onosproject.net.DeviceId;
86import org.onosproject.net.Element;
87import org.onosproject.net.ElementId;
88import org.onosproject.net.Port;
89import org.onosproject.net.PortNumber;
90import org.onosproject.net.flow.DefaultFlowEntry;
91import org.onosproject.net.flow.DefaultFlowRule;
92import org.onosproject.net.flow.DefaultTrafficTreatment;
93import org.onosproject.net.flow.FlowEntry;
94import org.onosproject.net.flow.FlowRule;
95import org.onosproject.net.group.DefaultGroup;
96import org.onosproject.net.group.DefaultGroupBucket;
97import org.onosproject.net.group.DefaultGroupDescription;
98import org.onosproject.net.group.Group;
99import org.onosproject.net.group.GroupBucket;
100import org.onosproject.net.group.GroupBuckets;
101import org.onosproject.net.group.GroupDescription;
102import org.onosproject.net.key.DeviceKey;
103import org.onosproject.net.key.DeviceKeyId;
104import org.onosproject.net.provider.ProviderId;
105import org.onosproject.net.region.DefaultRegion;
106import org.onosproject.net.region.Region;
107import org.onosproject.net.region.RegionId;
108import org.onosproject.net.statistic.DefaultLoad;
109import org.onosproject.net.statistic.FlowEntryWithLoad;
110import org.onosproject.net.topology.DefaultTopologyCluster;
111import org.onosproject.net.topology.DefaultTopologyVertex;
112import org.onosproject.net.topology.TopologyCluster;
113import org.onosproject.ui.model.topo.UiTopoLayout;
114import org.onosproject.ui.model.topo.UiTopoLayoutId;
115
116import com.google.common.collect.ImmutableList;
117
Sbhat3599d66962017-06-08 11:25:35 -0700118
119public class ComparatorsTest {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700120 private static final ProviderId PID = new ProviderId("of", "foo");
121 private static final DeviceId DID = deviceId("of:foo");
122 private static final String MFR = "whitebox";
123 private static final String HW = "1.1.x";
124 private static final String HW1 = "2.2.x";
125 private static final String SW = "3.9.1";
126 private static final String SW1 = "4.0.0";
127 private static final String SN = "43311-12345";
128 private static final ChassisId CID = new ChassisId();
Sbhat3599d66962017-06-08 11:25:35 -0700129 private final ConnectPoint cp =
130 new ConnectPoint(DeviceId.deviceId("of:00001"), PortNumber.portNumber(100));
131 private final GroupBucket testBucket =
132 DefaultGroupBucket.createSelectGroupBucket(
133 DefaultTrafficTreatment.emptyTreatment());
134 private final GroupBuckets groupBuckets =
135 new GroupBuckets(ImmutableList.of(testBucket));
136 private final GroupDescription groupDesc1 =
137 new DefaultGroupDescription(did("1"),
138 GroupDescription.Type.ALL,
139 groupBuckets);
140 private final DefaultFlowEntry fEntry = new DefaultFlowEntry(fRule(10, 10),
141 FlowEntry.FlowEntryState.ADDED, 5, 5, 5);
142 Ip4Address ipAddress;
143
144 @Test
145 public void testAppIdComparator() {
146 assertEquals(0, APP_ID_COMPARATOR.compare(appID(1, "a"), appID(1, "a")));
147 assertTrue(APP_ID_COMPARATOR.compare(appID(2, "a"), appID(0, "a")) > 0);
148 assertTrue(APP_ID_COMPARATOR.compare(appID(1, "b"), appID(3, "x")) < 0);
149 }
150
151 private ApplicationId appID(int id, String name) {
152 return new DefaultApplicationId(id, name);
153 }
154
155 @Test
156 public void testAppComparator() {
157 assertEquals(0, APP_COMPARATOR.compare(app(1, "foo"), app(1, "foo")));
158 assertEquals(0, (APP_COMPARATOR.compare(app(2, "foo"), app(2, "bar"))));
159 assertNotEquals(0, APP_COMPARATOR.compare(app(1, "foo"), app(2, "foo")));
160 assertNotEquals(0, APP_COMPARATOR.compare(app(1, "bar"), app(2, "foo")));
161 }
162
163 private Application app(int id, String name) {
164 return new DefaultApplication(new DefaultApplicationId(id, name), VER, TITLE, DESC, ORIGIN,
165 CATEGORY, URL, README, ICON, ROLE,
166 PERMS, Optional.of(FURL), FEATURES, APPS);
167 }
168
169 @Test
170 public void testElementIdComparator() {
171 ElementId elementid1 = new ElementId() {
172 };
173 ElementId elementid2 = elementid1;
174 ElementId elementid3 = new ElementId() {
175 };
176 while (elementid1 == elementid3) {
177 elementid3 = new ElementId() {
178 };
179 }
180 assertTrue(0 == ELEMENT_ID_COMPARATOR.compare(elementid1, elementid2));
181 assertFalse(0 == ELEMENT_ID_COMPARATOR.compare(elementid3, elementid1));
182 }
183
184 @Test
185 public void testFlowRuleComparator() {
186 assertEquals(0, FLOW_RULE_COMPARATOR.compare(fRule(100, 10), fRule(100, 10)));
187 assertEquals(-8, FLOW_RULE_COMPARATOR.compare(fRule(100, 10), fRule(100, 2)));
188 assertEquals(90, FLOW_RULE_COMPARATOR.compare(fRule(100, 10), fRule(10, 10)));
189 assertEquals(20, FLOW_RULE_COMPARATOR.compare(fRule(40, 10), fRule(20, 2)));
190
191 }
192
193 private FlowRule fRule(int tableID, int priority) {
194 return DefaultFlowRule.builder()
195 .forDevice(did("id" + Integer.toString(10)))
196 .withPriority(priority)
197 .forTable(tableID)
198 .fromApp(APP_ID)
199 .makeTemporary(44)
200 .build();
201 }
202
203 @Test
204 public void testFlowEntryWithLoad() {
205 //Rate = (current-previous)/interval
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700206 assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(20, 10, 1),
207 flowEntryWithLoad(20, 10, 1)));
208 assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(50, 30, 2),
209 flowEntryWithLoad(100, 50, 5)));
210 assertEquals(-1, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(200, 100, 4),
211 flowEntryWithLoad(300, 200, 10)));
Sbhat3599d66962017-06-08 11:25:35 -0700212 }
213
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700214 private FlowEntryWithLoad flowEntryWithLoad(long current, long previous, long interval) {
Sbhat3599d66962017-06-08 11:25:35 -0700215 return new FlowEntryWithLoad(cp, fEntry, new DefaultLoad(current, previous, interval));
216 }
217
218 @Test
219 public void testElementComparator() {
220 assertEquals(0, ELEMENT_COMPARATOR.compare(element("of", "foo", "of:foo"), element("of", "foo", "of:foo")));
221 assertEquals(0, ELEMENT_COMPARATOR.compare(element("of", "bar", "of:bar"), element("of", "foo", "of:bar")));
222 assertNotEquals(0, ELEMENT_COMPARATOR.compare(element("of", "foo", "of:foo"), element("of", "foo", "of:bar")));
223 }
224
225 private Element element(String scheme, String provID, String devID) {
226 return new DefaultDevice((new ProviderId(scheme, provID)), deviceId(devID), null, MFR, HW1, SW1, SN, CID);
227 }
228
229 @Test
230 public void testGroupComparator() {
231 assertEquals(0, GROUP_COMPARATOR.compare(group(10), group(10)));
232 assertEquals(-1, GROUP_COMPARATOR.compare(group(25), group(100)));
233 assertEquals(1, GROUP_COMPARATOR.compare(group(20), group(10)));
234 }
235
236 private Group group(int id) {
237 return new DefaultGroup(new GroupId(id), groupDesc1);
238 }
239
240 @Test
241 public void testPortComparator() {
242 assertEquals(0, PORT_COMPARATOR.compare(portTest(100), portTest(100)));
243 assertNotEquals(0, PORT_COMPARATOR.compare(portTest(100), portTest(200)));
244 }
245
246 private Port portTest(long portNumber) {
247 return new DefaultPort(null, PortNumber.portNumber(portNumber), true, Port.Type.COPPER, 100);
248 }
249
250 @Test
251 public void testTopologyClusterTest() {
252 assertEquals(0, CLUSTER_COMPARATOR.compare(cluster(3, 2, 1, "of:1"), cluster(3, 2, 1, "of:1")));
253 assertNotEquals(0, CLUSTER_COMPARATOR.compare(cluster(5, 2, 1, "of:1"), cluster(3, 2, 1, "of:1")));
254 }
255
256 private TopologyCluster cluster(int id, int dc, int lc, String root) {
257 return new DefaultTopologyCluster(clusterId(id), dc, lc,
258 new DefaultTopologyVertex(deviceId(root)));
259 }
260
261 @Test
262 public void testControllerNode() {
263 assertEquals(0, NODE_COMPARATOR.compare(node("testId"), node("testId")));
264 assertTrue(NODE_COMPARATOR.compare(node("abc"), node("xyz")) < 0);
265 assertTrue(NODE_COMPARATOR.compare(node("xyz"), node("abc")) > 0);
266 }
267
268 private ControllerNode node(String id) {
269 return new DefaultControllerNode(NodeId.nodeId(id), ipAddress, 9876);
270 }
271
272 @Test
273 public void testInterfaceComparator() {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700274 assertEquals(0, INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 100),
275 intface("of:0000000000000001", 100)));
276 assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2),
277 intface("of:0000000000000001", 100)) < 0);
278 assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2),
279 intface("of:0000000000000002", 2)) < 0);
Sbhat3599d66962017-06-08 11:25:35 -0700280 }
281
282 private Interface intface(String deviceID, long port) {
283 return new Interface("testInterface", connectPoint1(deviceID, port), null, null, null);
284 }
285
286 final ConnectPoint connectPoint1(String deviceID, long portNumber) {
287 return new ConnectPoint(DeviceId.deviceId(deviceID), PortNumber.portNumber(portNumber));
288 }
289
290 @Test
291 public void testDeviceKeyComparator() {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700292 assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"),
293 testDK("ID1", "label", "name")));
294 assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID2", "label", "name"),
295 testDK("ID2", "label", "name")));
296 assertNotEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"),
297 testDK("ID2", "label", "name")));
Sbhat3599d66962017-06-08 11:25:35 -0700298 }
299
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700300 private DeviceKey testDK(String id, String testLabel, String testName) {
301 return DeviceKey.createDeviceKeyUsingCommunityName(DeviceKeyId.deviceKeyId(id), testLabel, testName);
Sbhat3599d66962017-06-08 11:25:35 -0700302 }
303
304 @Test
305 public void testRegionComparator() {
306 assertEquals(0, REGION_COMPARATOR.compare(region("id1"), region("id1")));
307 assertNotEquals(0, REGION_COMPARATOR.compare(region("id1"), region("id2")));
308 }
309
310 private Region region(String id) {
311 return new DefaultRegion(RegionId.regionId(id), "name", Region.Type.METRO, DefaultAnnotations.EMPTY, null);
312 }
313
314 @Test
315 public void testTopographicLayoutComparator() {
316 assertEquals(0, LAYOUT_COMPARATOR.compare(layout("test"), layout("test")));
317 assertNotEquals(0, LAYOUT_COMPARATOR.compare(layout("same"), layout("different")));
318 }
319
320 private UiTopoLayout layout(String id) {
321 return new UiTopoLayout(UiTopoLayoutId.layoutId(id));
322 }
323
324 @Test
325 public void testTenantIdComparator() {
326 assertEquals(0, TENANT_ID_COMPARATOR.compare(id("1"), id("1")));
327 assertEquals(0, TENANT_ID_COMPARATOR.compare(id("tenant1"), id("tenant1")));
328 assertNotEquals(0, TENANT_ID_COMPARATOR.compare(id("tenant1"), id("tenant2")));
329 assertTrue(TENANT_ID_COMPARATOR.compare(id("1"), id("9")) < 0);
330 assertTrue(TENANT_ID_COMPARATOR.compare(id("Tenant5"), id("Tenant0")) > 0);
331 }
332
333 private TenantId id(String id) {
334 return TenantId.tenantId(id);
335 }
336
337 @Test
338 public void testVirtualNetworkComparator() {
339 assertNotEquals(0, VIRTUAL_NETWORK_COMPARATOR.compare(network(10, "tenantID"), network(10, "tenantID1")));
340 assertNotEquals(0, VIRTUAL_NETWORK_COMPARATOR.compare(network(10, "tenantID"), network(15, "tenantID1")));
Harold Huangd5abc4b2017-07-01 19:57:26 +0800341 assertNotEquals(0, VIRTUAL_NETWORK_COMPARATOR.compare(network(15, "tenantID1"), network(10, "tenantID1")));
Sbhat3599d66962017-06-08 11:25:35 -0700342 assertNotEquals(0, VIRTUAL_NETWORK_COMPARATOR.compare(network(15, "tenantID"), network(10, "tenantID1")));
343 }
344
345 private VirtualNetwork network(int networkID, String tenantID) {
346 return new DefaultVirtualNetwork(NetworkId.networkId(networkID), TenantId.tenantId(tenantID));
347 }
348
349 @Test
350 public void testVirtualDeviceComparator() {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700351 assertEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(0, "of:foo"), vd(0, "of:foo")));
352 assertEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(3, "of:foo"), vd(0, "of:foo")));
353 assertNotEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(0, "of:bar"), vd(0, "of:foo")));
354 assertNotEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(3, "of:bar"), vd(0, "of:foo")));
Sbhat3599d66962017-06-08 11:25:35 -0700355 }
356
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700357 private VirtualDevice vd(int netID, String devID) {
Sbhat3599d66962017-06-08 11:25:35 -0700358 return new DefaultVirtualDevice(NetworkId.networkId(netID), DeviceId.deviceId(devID));
359 }
360
361 @Test
362 public void testVirtualPortComparator() {
363 assertEquals(0, VIRTUAL_PORT_COMPARATOR.compare(vPort(2), vPort(2)));
364 assertEquals(4, VIRTUAL_PORT_COMPARATOR.compare(vPort(900), vPort(5)));
365 assertEquals(-8, VIRTUAL_PORT_COMPARATOR.compare(vPort(0), vPort(8)));
366 }
367
368 private VirtualPort vPort(int portNumber) {
369 return new DefaultVirtualPort(NetworkId.networkId(20), new DefaultDevice(PID, DID, null, MFR, HW, SW, SN, CID),
370 PortNumber.portNumber(portNumber), new ConnectPoint(DID, PortNumber.portNumber(900)));
371 }
372}
373
374
375
376
377
378
379
380
381
382
383