2 * Copyright (c) 2014, 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowplugin.applications.statistics.manager.impl.helper;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.junit.Assert.fail;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMaskBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
28 import org.junit.Test;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
32 * @author sai.marapareddy@gmail.com (arbitrary masks)
36 * test of {@link MatchComparatorHelper}
38 public class MatchComparatorHelperTest {
43 private static final int DEFAULT_IPV4_MASK = 0xffffffff;
48 private static final int IPV4_30_MASK = 0xfffffffc;
49 private static final int IP_ADDRESS = 0xC0A80101;
52 * The test of conversion valid IP addres without mask to binary form.
55 public void validIpWithoutMaskTest() {
56 IntegerIpAddress intIp = MatchComparatorHelper.strIpToIntIp("192.168.1.1");
57 assertEquals(IP_ADDRESS, intIp.getIp());
58 assertEquals(DEFAULT_IPV4_MASK, intIp.getMask());
62 * The test of conversion of valid IP address with valid mask to binary form.
65 public void validIpWithValidMaskTest() {
66 IntegerIpAddress intIp = MatchComparatorHelper.strIpToIntIp("192.168.1.1/30");
67 assertEquals(IP_ADDRESS, intIp.getIp());
68 assertEquals(IPV4_30_MASK, intIp.getMask());
72 * The test of conversion of valid IP address invalid mask to binary form.
75 public void validIpWithInvalidMaskTest() {
77 MatchComparatorHelper.strIpToIntIp("192.168.1.1/40");
78 } catch (IllegalStateException e) {
79 assertEquals("Valid values for mask are from range 0 - 32. Value 40 is invalid.", e.getMessage());
82 fail("IllegalStateException was awaited (40 subnet is invalid)");
86 * The test of conversion invalid IP address with valid mask to binary form.
89 public void invalidIpWithValidMaskTest() {
91 MatchComparatorHelper.strIpToIntIp("257.168.1.1/25");
92 } catch (IllegalArgumentException e) {
93 assertEquals("'257.168.1.1' is not an IP string literal.", e.getMessage());
98 public void ethernetMatchEqualsTest() {
99 final EthernetMatchBuilder statsEthernetBuilder = new EthernetMatchBuilder();
100 final EthernetMatchBuilder storedEthernetBuilder = new EthernetMatchBuilder();
102 assertEquals(true, MatchComparatorHelper.ethernetMatchEquals(null, null));
104 statsEthernetBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
105 new MacAddress("11:22:33:44:55:66")).build());
106 storedEthernetBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
107 new MacAddress("11:22:33:44:55:77")).build());
109 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
111 storedEthernetBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
112 new MacAddress("11:22:33:44:55:66")).build());
113 statsEthernetBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
114 new MacAddress("66:55:44:33:22:11")).build());
115 storedEthernetBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
116 new MacAddress("77:55:44:33:22:11")).build());
118 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
120 storedEthernetBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
121 new MacAddress("66:55:44:33:22:11")).build());
122 statsEthernetBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType((long) 1)).build());
123 storedEthernetBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType((long) 1)).build());
125 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
127 statsEthernetBuilder.setEthernetType(null).build();
129 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
131 storedEthernetBuilder.setEthernetType(null).build();
133 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
138 public void ethernetMatchFieldsEqualsTest() {
139 final EthernetSourceBuilder statsBuilder = new EthernetSourceBuilder();
140 final EthernetSourceBuilder storedBuilder = new EthernetSourceBuilder();
142 assertEquals(true, MatchComparatorHelper.ethernetMatchFieldsEquals(null, null));
144 statsBuilder.setAddress(new MacAddress("11:22:33:44:55:66"));
145 storedBuilder.setAddress(new MacAddress("11:22:33:44:55:77"));
147 MatchComparatorHelper.ethernetMatchFieldsEquals(statsBuilder.build(), storedBuilder.build()));
149 storedBuilder.setAddress(new MacAddress("11:22:33:44:55:66"));
150 assertEquals(true, MatchComparatorHelper.ethernetMatchFieldsEquals(statsBuilder.build(), storedBuilder.build()));
154 public void macAddressEqualsTest() {
155 assertEquals(true, MatchComparatorHelper.macAddressEquals(null, null));
156 assertEquals(true, MatchComparatorHelper.macAddressEquals(new MacAddress("11:22:33:44:55:66"), new MacAddress(
157 "11:22:33:44:55:66")));
158 assertEquals(false, MatchComparatorHelper.macAddressEquals(new MacAddress("11:22:33:44:55:66"), new MacAddress(
159 "11:22:33:44:55:77")));
163 public void checkNullValuesTest() {
164 assertEquals(false, MatchComparatorHelper.checkNullValues(null, ""));
165 assertEquals(false, MatchComparatorHelper.checkNullValues("", null));
166 assertEquals(true, MatchComparatorHelper.checkNullValues(null, null));
167 assertTrue(MatchComparatorHelper.checkNullValues("", "") == null);
171 public void compareIpv4PrefixNullSafeTest() {
172 assertEquals(true, MatchComparatorHelper.compareIpv4PrefixNullSafe(null, null));
173 assertEquals(true, MatchComparatorHelper.compareIpv4PrefixNullSafe(new Ipv4Prefix("192.168.1.1/31"),
174 new Ipv4Prefix("192.168.1.1/31")));
176 assertEquals(false, MatchComparatorHelper.compareIpv4PrefixNullSafe(new Ipv4Prefix("192.168.1.1/31"),
177 new Ipv4Prefix("191.168.1.1/31")));
181 public void compareStringNullSafeTest() {
182 assertEquals(true, MatchComparatorHelper.compareStringNullSafe(null,null));
183 assertEquals(true, MatchComparatorHelper.compareStringNullSafe("Hello", "Hello"));
184 assertEquals(false, MatchComparatorHelper.compareStringNullSafe("Hello", "hello"));
187 private static final int ip_192_168_1_1 = 0xC0A80101;
188 private static final int ip_192_168_1_4 = 0xC0A80104;
191 public void ipBasedMatchTest() {
192 // are equals because only IP address is compared
193 assertEquals(true, MatchComparatorHelper.ipBasedMatch(new IntegerIpAddress(ip_192_168_1_1, 32),
194 new IntegerIpAddress(ip_192_168_1_1, 16)));
198 public void ipAndMaskBasedMatchTest() {
199 // true because both cases are network 192.168.1.0
200 assertEquals(true, MatchComparatorHelper.ipBasedMatch(new IntegerIpAddress(ip_192_168_1_1, 31),
201 new IntegerIpAddress(ip_192_168_1_1, 30)));
203 // false because first is network 192.168.1.0 and second is 192.168.1.4
204 assertEquals(false, MatchComparatorHelper.ipBasedMatch(new IntegerIpAddress(ip_192_168_1_1, 31),
205 new IntegerIpAddress(ip_192_168_1_4, 30)));
209 public void layer3MatchEqualsTest() {
210 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
211 final Ipv4MatchBuilder storedBuilder = new Ipv4MatchBuilder();
212 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
213 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.1/30"));
214 storedBuilder.setIpv4Destination(new Ipv4Prefix("191.168.1.1/30"));
215 assertEquals(false, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
216 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
218 MatchComparatorHelper.layer3MatchEquals(new ArpMatchBuilder().build(), new ArpMatchBuilder().build()));
222 public void layer3MatchEqualsIpv6Test() {
223 final Ipv6MatchBuilder statsBuilder = new Ipv6MatchBuilder();
224 final Ipv6MatchBuilder storedBuilder = new Ipv6MatchBuilder();
225 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
227 statsBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000D:0000:0000:0000:5D99/64"));
228 storedBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000D:0000:0000:0000:4D99/64"));
229 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
231 statsBuilder.setIpv6Destination(new Ipv6Prefix("aabb:1234:2acf:000d:0000:0000:0000:5d99/64"));
232 storedBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000D:0000:0000:0000:4D99/64"));
233 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
235 statsBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000C:0000:0000:0000:5D99/64"));
236 storedBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000D:0000:0000:0000:4D99/64"));
237 assertEquals(false, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
239 statsBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000C:0000:0000:0000:5D99/63"));
240 storedBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000D:0000:0000:0000:4D99/63"));
241 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
243 statsBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000D:0000:0000:0000:5D99/63"));
244 storedBuilder.setIpv6Destination(new Ipv6Prefix("AABB:1234:2ACF:000E:0000:0000:0000:4D99/63"));
245 assertEquals(false, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
249 public void layer3MatchEqualsIpv4ArbitraryMaskTest(){
250 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
251 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
252 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
253 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.1/24"));
254 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.1.1"));
255 storedBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("255.255.255.0"));
256 statsBuilder.setIpv4Source(new Ipv4Prefix("192.168.1.1/24"));
257 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.168.1.1"));
258 storedBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("255.255.255.0"));
259 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
260 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
265 public void layer3MatchEqualsIpv4ArbitraryMaskRandomTest() {
266 final Ipv4MatchArbitraryBitMaskBuilder statsBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
267 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
268 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
269 statsBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.0.1"));
270 statsBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("255.255.0.255"));
271 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.1.1"));
272 storedBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("255.255.0.255"));
273 statsBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.0.0.1"));
274 statsBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("255.0.0.255"));
275 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.7.1.1"));
276 storedBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("255.0.0.255"));
277 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
278 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
282 public void layer3MatchEqualsIpv4ArbitraryMaskEqualsNullTest() {
283 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
284 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
285 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
286 statsBuilder.setIpv4Source(new Ipv4Prefix("192.168.0.1/32"));
287 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.0.1"));
288 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.1.0.0/32"));
289 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.1.0.0"));
290 assertEquals(false, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
291 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
295 public void layer3MatchEqualsIpv4ArbitraryEmptyBitMaskTest(){
296 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
297 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
298 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
299 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.1/32"));
300 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.1.1"));
301 statsBuilder.setIpv4Source(new Ipv4Prefix("192.168.1.1/32"));
302 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.168.1.1"));
303 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
304 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
308 public void extractIpv4AddressTest() {
309 Ipv4Address ipAddress = new Ipv4Address("1.1.1.1");
310 DottedQuad netMask = new DottedQuad("255.255.255.0");
311 String extractedIpAddress;
312 extractedIpAddress = MatchComparatorHelper.normalizeIpv4Address(ipAddress,netMask);
313 assertEquals(extractedIpAddress,"1.1.1.0");
317 public void convertArbitraryMaskToByteArrayTest() {
318 int value = 0xffffffff;
319 byte[] bytes = new byte[]{
320 (byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) };
322 maskBytes = MatchComparatorHelper.convertArbitraryMaskToByteArray(new DottedQuad("255.255.255.255"));
323 for (int i=0; i<bytes.length;i++) {
324 int mask = maskBytes[i];
325 assertEquals(bytes[i],mask);
330 public void isArbitraryBitMaskTest() {
331 boolean arbitraryBitMask;
332 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(new byte[] {1,1,1,1});
333 assertEquals(arbitraryBitMask,true);
334 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(new byte[] {-1,-1,-1,-1});
335 assertEquals(arbitraryBitMask,false);
336 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(new byte[] {-1,-1,0,-1});
337 assertEquals(arbitraryBitMask,true);
338 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(null);
339 assertEquals(arbitraryBitMask,false);
343 public void createPrefixTest() {
344 Ipv4Address ipv4Address = new Ipv4Address("1.1.1.1");
345 byte [] byteMask = new byte[] {-1,-1,-1,-1};
346 Ipv4Prefix ipv4Prefix = MatchComparatorHelper.createPrefix(ipv4Address,byteMask);
347 assertEquals(ipv4Prefix,new Ipv4Prefix("1.1.1.1/32"));
348 String nullMask = "";
349 Ipv4Prefix ipv4PrefixNullMask = MatchComparatorHelper.createPrefix(ipv4Address,nullMask);
350 assertEquals(ipv4PrefixNullMask,new Ipv4Prefix("1.1.1.1/32"));
351 Ipv4Prefix ipv4PrefixNoMask = MatchComparatorHelper.createPrefix(ipv4Address);
352 assertEquals(ipv4PrefixNoMask,new Ipv4Prefix("1.1.1.1/32"));