blob: 36d291e446cb75b9a69538af0328b355f603785b [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;
Sbhat3599d66962017-06-08 11:25:35 -070055
Yuta HIGUCHI9312a802017-06-12 20:01:27 -070056import java.util.Optional;
57
58import org.junit.Test;
59import org.onlab.packet.ChassisId;
60import org.onlab.packet.Ip4Address;
61import org.onosproject.cluster.ControllerNode;
62import org.onosproject.cluster.DefaultControllerNode;
63import org.onosproject.cluster.NodeId;
64import org.onosproject.core.Application;
65import org.onosproject.core.ApplicationId;
66import org.onosproject.core.DefaultApplication;
67import org.onosproject.core.DefaultApplicationId;
68import org.onosproject.core.GroupId;
Ray Milkeyfacf2862017-08-03 11:58:29 -070069import org.onosproject.net.intf.Interface;
Thomas Vachuska52f2cd12018-11-08 21:20:04 -080070import org.onosproject.net.TenantId;
Yuta HIGUCHI9312a802017-06-12 20:01:27 -070071import org.onosproject.net.ConnectPoint;
72import org.onosproject.net.DefaultAnnotations;
73import org.onosproject.net.DefaultDevice;
74import org.onosproject.net.DefaultPort;
75import org.onosproject.net.DeviceId;
76import org.onosproject.net.Element;
77import org.onosproject.net.ElementId;
78import org.onosproject.net.Port;
79import org.onosproject.net.PortNumber;
80import org.onosproject.net.flow.DefaultFlowEntry;
81import org.onosproject.net.flow.DefaultFlowRule;
82import org.onosproject.net.flow.DefaultTrafficTreatment;
83import org.onosproject.net.flow.FlowEntry;
84import org.onosproject.net.flow.FlowRule;
85import org.onosproject.net.group.DefaultGroup;
86import org.onosproject.net.group.DefaultGroupBucket;
87import org.onosproject.net.group.DefaultGroupDescription;
88import org.onosproject.net.group.Group;
89import org.onosproject.net.group.GroupBucket;
90import org.onosproject.net.group.GroupBuckets;
91import org.onosproject.net.group.GroupDescription;
92import org.onosproject.net.key.DeviceKey;
93import org.onosproject.net.key.DeviceKeyId;
94import org.onosproject.net.provider.ProviderId;
95import org.onosproject.net.region.DefaultRegion;
96import org.onosproject.net.region.Region;
97import org.onosproject.net.region.RegionId;
98import org.onosproject.net.statistic.DefaultLoad;
99import org.onosproject.net.statistic.FlowEntryWithLoad;
100import org.onosproject.net.topology.DefaultTopologyCluster;
101import org.onosproject.net.topology.DefaultTopologyVertex;
102import org.onosproject.net.topology.TopologyCluster;
103import org.onosproject.ui.model.topo.UiTopoLayout;
104import org.onosproject.ui.model.topo.UiTopoLayoutId;
105
106import com.google.common.collect.ImmutableList;
107
Sbhat3599d66962017-06-08 11:25:35 -0700108
109public class ComparatorsTest {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700110 private static final String MFR = "whitebox";
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700111 private static final String HW1 = "2.2.x";
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700112 private static final String SW1 = "4.0.0";
113 private static final String SN = "43311-12345";
114 private static final ChassisId CID = new ChassisId();
Sbhat3599d66962017-06-08 11:25:35 -0700115 private final ConnectPoint cp =
116 new ConnectPoint(DeviceId.deviceId("of:00001"), PortNumber.portNumber(100));
117 private final GroupBucket testBucket =
Charles Chanc88ebaa2018-11-01 20:08:47 -0700118 DefaultGroupBucket.createAllGroupBucket(DefaultTrafficTreatment.emptyTreatment());
Sbhat3599d66962017-06-08 11:25:35 -0700119 private final GroupBuckets groupBuckets =
120 new GroupBuckets(ImmutableList.of(testBucket));
121 private final GroupDescription groupDesc1 =
122 new DefaultGroupDescription(did("1"),
123 GroupDescription.Type.ALL,
124 groupBuckets);
125 private final DefaultFlowEntry fEntry = new DefaultFlowEntry(fRule(10, 10),
126 FlowEntry.FlowEntryState.ADDED, 5, 5, 5);
127 Ip4Address ipAddress;
128
129 @Test
130 public void testAppIdComparator() {
131 assertEquals(0, APP_ID_COMPARATOR.compare(appID(1, "a"), appID(1, "a")));
132 assertTrue(APP_ID_COMPARATOR.compare(appID(2, "a"), appID(0, "a")) > 0);
133 assertTrue(APP_ID_COMPARATOR.compare(appID(1, "b"), appID(3, "x")) < 0);
134 }
135
136 private ApplicationId appID(int id, String name) {
137 return new DefaultApplicationId(id, name);
138 }
139
140 @Test
141 public void testAppComparator() {
142 assertEquals(0, APP_COMPARATOR.compare(app(1, "foo"), app(1, "foo")));
143 assertEquals(0, (APP_COMPARATOR.compare(app(2, "foo"), app(2, "bar"))));
144 assertNotEquals(0, APP_COMPARATOR.compare(app(1, "foo"), app(2, "foo")));
145 assertNotEquals(0, APP_COMPARATOR.compare(app(1, "bar"), app(2, "foo")));
146 }
147
148 private Application app(int id, String name) {
Ray Milkey47c95412017-09-15 10:40:48 -0700149 return DefaultApplication.builder()
150 .withAppId(new DefaultApplicationId(id, name))
151 .withVersion(VER)
152 .withTitle(TITLE)
153 .withDescription(DESC)
154 .withOrigin(ORIGIN)
155 .withCategory(CATEGORY)
156 .withUrl(URL)
157 .withReadme(README)
158 .withIcon(ICON)
159 .withRole(ROLE)
160 .withPermissions(PERMS)
161 .withFeaturesRepo(Optional.of(FURL))
162 .withFeatures(FEATURES)
163 .withRequiredApps(APPS)
164 .build();
Sbhat3599d66962017-06-08 11:25:35 -0700165 }
166
167 @Test
168 public void testElementIdComparator() {
169 ElementId elementid1 = new ElementId() {
170 };
171 ElementId elementid2 = elementid1;
172 ElementId elementid3 = new ElementId() {
173 };
174 while (elementid1 == elementid3) {
175 elementid3 = new ElementId() {
176 };
177 }
178 assertTrue(0 == ELEMENT_ID_COMPARATOR.compare(elementid1, elementid2));
179 assertFalse(0 == ELEMENT_ID_COMPARATOR.compare(elementid3, elementid1));
180 }
181
182 @Test
183 public void testFlowRuleComparator() {
184 assertEquals(0, FLOW_RULE_COMPARATOR.compare(fRule(100, 10), fRule(100, 10)));
185 assertEquals(-8, FLOW_RULE_COMPARATOR.compare(fRule(100, 10), fRule(100, 2)));
186 assertEquals(90, FLOW_RULE_COMPARATOR.compare(fRule(100, 10), fRule(10, 10)));
187 assertEquals(20, FLOW_RULE_COMPARATOR.compare(fRule(40, 10), fRule(20, 2)));
188
189 }
190
191 private FlowRule fRule(int tableID, int priority) {
192 return DefaultFlowRule.builder()
193 .forDevice(did("id" + Integer.toString(10)))
194 .withPriority(priority)
195 .forTable(tableID)
196 .fromApp(APP_ID)
197 .makeTemporary(44)
198 .build();
199 }
200
201 @Test
202 public void testFlowEntryWithLoad() {
203 //Rate = (current-previous)/interval
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700204 assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(20, 10, 1),
205 flowEntryWithLoad(20, 10, 1)));
206 assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(50, 30, 2),
207 flowEntryWithLoad(100, 50, 5)));
208 assertEquals(-1, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(200, 100, 4),
209 flowEntryWithLoad(300, 200, 10)));
Sbhat3599d66962017-06-08 11:25:35 -0700210 }
211
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700212 private FlowEntryWithLoad flowEntryWithLoad(long current, long previous, long interval) {
Sbhat3599d66962017-06-08 11:25:35 -0700213 return new FlowEntryWithLoad(cp, fEntry, new DefaultLoad(current, previous, interval));
214 }
215
216 @Test
217 public void testElementComparator() {
218 assertEquals(0, ELEMENT_COMPARATOR.compare(element("of", "foo", "of:foo"), element("of", "foo", "of:foo")));
219 assertEquals(0, ELEMENT_COMPARATOR.compare(element("of", "bar", "of:bar"), element("of", "foo", "of:bar")));
220 assertNotEquals(0, ELEMENT_COMPARATOR.compare(element("of", "foo", "of:foo"), element("of", "foo", "of:bar")));
221 }
222
223 private Element element(String scheme, String provID, String devID) {
224 return new DefaultDevice((new ProviderId(scheme, provID)), deviceId(devID), null, MFR, HW1, SW1, SN, CID);
225 }
226
227 @Test
228 public void testGroupComparator() {
229 assertEquals(0, GROUP_COMPARATOR.compare(group(10), group(10)));
230 assertEquals(-1, GROUP_COMPARATOR.compare(group(25), group(100)));
231 assertEquals(1, GROUP_COMPARATOR.compare(group(20), group(10)));
232 }
233
234 private Group group(int id) {
235 return new DefaultGroup(new GroupId(id), groupDesc1);
236 }
237
238 @Test
239 public void testPortComparator() {
240 assertEquals(0, PORT_COMPARATOR.compare(portTest(100), portTest(100)));
241 assertNotEquals(0, PORT_COMPARATOR.compare(portTest(100), portTest(200)));
242 }
243
244 private Port portTest(long portNumber) {
245 return new DefaultPort(null, PortNumber.portNumber(portNumber), true, Port.Type.COPPER, 100);
246 }
247
248 @Test
249 public void testTopologyClusterTest() {
250 assertEquals(0, CLUSTER_COMPARATOR.compare(cluster(3, 2, 1, "of:1"), cluster(3, 2, 1, "of:1")));
251 assertNotEquals(0, CLUSTER_COMPARATOR.compare(cluster(5, 2, 1, "of:1"), cluster(3, 2, 1, "of:1")));
252 }
253
254 private TopologyCluster cluster(int id, int dc, int lc, String root) {
255 return new DefaultTopologyCluster(clusterId(id), dc, lc,
256 new DefaultTopologyVertex(deviceId(root)));
257 }
258
259 @Test
260 public void testControllerNode() {
261 assertEquals(0, NODE_COMPARATOR.compare(node("testId"), node("testId")));
262 assertTrue(NODE_COMPARATOR.compare(node("abc"), node("xyz")) < 0);
263 assertTrue(NODE_COMPARATOR.compare(node("xyz"), node("abc")) > 0);
264 }
265
266 private ControllerNode node(String id) {
267 return new DefaultControllerNode(NodeId.nodeId(id), ipAddress, 9876);
268 }
269
270 @Test
271 public void testInterfaceComparator() {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700272 assertEquals(0, INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 100),
273 intface("of:0000000000000001", 100)));
274 assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2),
275 intface("of:0000000000000001", 100)) < 0);
276 assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2),
277 intface("of:0000000000000002", 2)) < 0);
Sbhat3599d66962017-06-08 11:25:35 -0700278 }
279
280 private Interface intface(String deviceID, long port) {
281 return new Interface("testInterface", connectPoint1(deviceID, port), null, null, null);
282 }
283
284 final ConnectPoint connectPoint1(String deviceID, long portNumber) {
285 return new ConnectPoint(DeviceId.deviceId(deviceID), PortNumber.portNumber(portNumber));
286 }
287
288 @Test
289 public void testDeviceKeyComparator() {
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700290 assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"),
291 testDK("ID1", "label", "name")));
292 assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID2", "label", "name"),
293 testDK("ID2", "label", "name")));
294 assertNotEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"),
295 testDK("ID2", "label", "name")));
Sbhat3599d66962017-06-08 11:25:35 -0700296 }
297
Yuta HIGUCHI9312a802017-06-12 20:01:27 -0700298 private DeviceKey testDK(String id, String testLabel, String testName) {
299 return DeviceKey.createDeviceKeyUsingCommunityName(DeviceKeyId.deviceKeyId(id), testLabel, testName);
Sbhat3599d66962017-06-08 11:25:35 -0700300 }
301
302 @Test
303 public void testRegionComparator() {
304 assertEquals(0, REGION_COMPARATOR.compare(region("id1"), region("id1")));
305 assertNotEquals(0, REGION_COMPARATOR.compare(region("id1"), region("id2")));
306 }
307
308 private Region region(String id) {
309 return new DefaultRegion(RegionId.regionId(id), "name", Region.Type.METRO, DefaultAnnotations.EMPTY, null);
310 }
311
312 @Test
313 public void testTopographicLayoutComparator() {
314 assertEquals(0, LAYOUT_COMPARATOR.compare(layout("test"), layout("test")));
315 assertNotEquals(0, LAYOUT_COMPARATOR.compare(layout("same"), layout("different")));
316 }
317
318 private UiTopoLayout layout(String id) {
319 return new UiTopoLayout(UiTopoLayoutId.layoutId(id));
320 }
321
322 @Test
323 public void testTenantIdComparator() {
324 assertEquals(0, TENANT_ID_COMPARATOR.compare(id("1"), id("1")));
325 assertEquals(0, TENANT_ID_COMPARATOR.compare(id("tenant1"), id("tenant1")));
326 assertNotEquals(0, TENANT_ID_COMPARATOR.compare(id("tenant1"), id("tenant2")));
327 assertTrue(TENANT_ID_COMPARATOR.compare(id("1"), id("9")) < 0);
328 assertTrue(TENANT_ID_COMPARATOR.compare(id("Tenant5"), id("Tenant0")) > 0);
329 }
330
331 private TenantId id(String id) {
332 return TenantId.tenantId(id);
333 }
334
Sbhat3599d66962017-06-08 11:25:35 -0700335}
336
337
338
339
340
341
342
343
344
345
346