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