1 package org.opendaylight.openflowplugin.applications.statistics.manager.impl.helper;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5 import static org.junit.Assert.fail;
7 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
8 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMaskBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
20 import org.junit.Test;
23 * @author sai.marapareddy@gmail.com (arbitrary masks)
27 * test of {@link MatchComparatorHelper}
29 public class MatchComparatorHelperTest {
34 private static final int DEFAULT_IPV4_MASK = 0xffffffff;
39 private static final int IPV4_30_MASK = 0xfffffffc;
40 private static final int IP_ADDRESS = 0xC0A80101;
43 * The test of conversion valid IP addres without mask to binary form.
46 public void validIpWithoutMaskTest() {
47 IntegerIpAddress intIp = MatchComparatorHelper.strIpToIntIp("192.168.1.1");
48 assertEquals(IP_ADDRESS, intIp.getIp());
49 assertEquals(DEFAULT_IPV4_MASK, intIp.getMask());
53 * The test of conversion of valid IP address with valid mask to binary form.
56 public void validIpWithValidMaskTest() {
57 IntegerIpAddress intIp = MatchComparatorHelper.strIpToIntIp("192.168.1.1/30");
58 assertEquals(IP_ADDRESS, intIp.getIp());
59 assertEquals(IPV4_30_MASK, intIp.getMask());
63 * The test of conversion of valid IP address invalid mask to binary form.
66 public void validIpWithInvalidMaskTest() {
68 MatchComparatorHelper.strIpToIntIp("192.168.1.1/40");
69 } catch (IllegalStateException e) {
70 assertEquals("Valid values for mask are from range 0 - 32. Value 40 is invalid.", e.getMessage());
73 fail("IllegalStateException was awaited (40 subnet is invalid)");
77 * The test of conversion invalid IP address with valid mask to binary form.
80 public void invalidIpWithValidMaskTest() {
82 MatchComparatorHelper.strIpToIntIp("257.168.1.1/25");
83 } catch (IllegalArgumentException e) {
84 assertEquals("'257.168.1.1' is not an IP string literal.", e.getMessage());
89 public void ethernetMatchEqualsTest() {
90 final EthernetMatchBuilder statsEthernetBuilder = new EthernetMatchBuilder();
91 final EthernetMatchBuilder storedEthernetBuilder = new EthernetMatchBuilder();
93 assertEquals(true, MatchComparatorHelper.ethernetMatchEquals(null, null));
95 statsEthernetBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
96 new MacAddress("11:22:33:44:55:66")).build());
97 storedEthernetBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
98 new MacAddress("11:22:33:44:55:77")).build());
100 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
102 storedEthernetBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
103 new MacAddress("11:22:33:44:55:66")).build());
104 statsEthernetBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
105 new MacAddress("66:55:44:33:22:11")).build());
106 storedEthernetBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
107 new MacAddress("77:55:44:33:22:11")).build());
109 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
111 storedEthernetBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
112 new MacAddress("66:55:44:33:22:11")).build());
113 statsEthernetBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType((long) 1)).build());
114 storedEthernetBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType((long) 1)).build());
116 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
118 statsEthernetBuilder.setEthernetType(null).build();
120 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
122 storedEthernetBuilder.setEthernetType(null).build();
124 MatchComparatorHelper.ethernetMatchEquals(statsEthernetBuilder.build(), storedEthernetBuilder.build()));
129 public void ethernetMatchFieldsEqualsTest() {
130 final EthernetSourceBuilder statsBuilder = new EthernetSourceBuilder();
131 final EthernetSourceBuilder storedBuilder = new EthernetSourceBuilder();
133 assertEquals(true, MatchComparatorHelper.ethernetMatchFieldsEquals(null, null));
135 statsBuilder.setAddress(new MacAddress("11:22:33:44:55:66"));
136 storedBuilder.setAddress(new MacAddress("11:22:33:44:55:77"));
138 MatchComparatorHelper.ethernetMatchFieldsEquals(statsBuilder.build(), storedBuilder.build()));
140 storedBuilder.setAddress(new MacAddress("11:22:33:44:55:66"));
141 assertEquals(true, MatchComparatorHelper.ethernetMatchFieldsEquals(statsBuilder.build(), storedBuilder.build()));
145 public void macAddressEqualsTest() {
146 assertEquals(true, MatchComparatorHelper.macAddressEquals(null, null));
147 assertEquals(true, MatchComparatorHelper.macAddressEquals(new MacAddress("11:22:33:44:55:66"), new MacAddress(
148 "11:22:33:44:55:66")));
149 assertEquals(false, MatchComparatorHelper.macAddressEquals(new MacAddress("11:22:33:44:55:66"), new MacAddress(
150 "11:22:33:44:55:77")));
154 public void checkNullValuesTest() {
155 assertEquals(false, MatchComparatorHelper.checkNullValues(null, ""));
156 assertEquals(false, MatchComparatorHelper.checkNullValues("", null));
157 assertEquals(true, MatchComparatorHelper.checkNullValues(null, null));
158 assertTrue(MatchComparatorHelper.checkNullValues("", "") == null);
162 public void compareIpv4PrefixNullSafeTest() {
163 assertEquals(true, MatchComparatorHelper.compareIpv4PrefixNullSafe(null, null));
164 assertEquals(true, MatchComparatorHelper.compareIpv4PrefixNullSafe(new Ipv4Prefix("192.168.1.1/31"),
165 new Ipv4Prefix("192.168.1.1/31")));
167 assertEquals(false, MatchComparatorHelper.compareIpv4PrefixNullSafe(new Ipv4Prefix("192.168.1.1/31"),
168 new Ipv4Prefix("191.168.1.1/31")));
172 public void compareStringNullSafeTest() {
173 assertEquals(true, MatchComparatorHelper.compareStringNullSafe(null,null));
174 assertEquals(true, MatchComparatorHelper.compareStringNullSafe("Hello", "Hello"));
175 assertEquals(false, MatchComparatorHelper.compareStringNullSafe("Hello", "hello"));
178 private static final int ip_192_168_1_1 = 0xC0A80101;
179 private static final int ip_192_168_1_4 = 0xC0A80104;
182 public void ipBasedMatchTest() {
183 // are equals because only IP address is compared
184 assertEquals(true, MatchComparatorHelper.ipBasedMatch(new IntegerIpAddress(ip_192_168_1_1, 32),
185 new IntegerIpAddress(ip_192_168_1_1, 16)));
189 public void ipAndMaskBasedMatchTest() {
190 // true because both cases are network 192.168.1.0
191 assertEquals(true, MatchComparatorHelper.ipBasedMatch(new IntegerIpAddress(ip_192_168_1_1, 31),
192 new IntegerIpAddress(ip_192_168_1_1, 30)));
194 // false because first is network 192.168.1.0 and second is 192.168.1.4
195 assertEquals(false, MatchComparatorHelper.ipBasedMatch(new IntegerIpAddress(ip_192_168_1_1, 31),
196 new IntegerIpAddress(ip_192_168_1_4, 30)));
200 public void layer3MatchEqualsTest() {
201 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
202 final Ipv4MatchBuilder storedBuilder = new Ipv4MatchBuilder();
203 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
204 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.1/30"));
205 storedBuilder.setIpv4Destination(new Ipv4Prefix("191.168.1.1/30"));
206 assertEquals(false, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
207 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
209 MatchComparatorHelper.layer3MatchEquals(new ArpMatchBuilder().build(), new ArpMatchBuilder().build()));
213 public void layer3MatchEqualsIpv4ArbitraryMaskTest(){
214 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
215 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
216 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
217 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.1/24"));
218 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.1.1"));
219 storedBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("255.255.255.0"));
220 statsBuilder.setIpv4Source(new Ipv4Prefix("192.168.1.1/24"));
221 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.168.1.1"));
222 storedBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("255.255.255.0"));
223 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
224 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
229 public void layer3MatchEqualsIpv4ArbitraryMaskRandomTest() {
230 final Ipv4MatchArbitraryBitMaskBuilder statsBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
231 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
232 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
233 statsBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.0.1"));
234 statsBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("255.255.0.255"));
235 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.1.1"));
236 storedBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("255.255.0.255"));
237 statsBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.0.0.1"));
238 statsBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("255.0.0.255"));
239 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.7.1.1"));
240 storedBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("255.0.0.255"));
241 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
242 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
246 public void layer3MatchEqualsIpv4ArbitraryMaskEqualsNullTest() {
247 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
248 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
249 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
250 statsBuilder.setIpv4Source(new Ipv4Prefix("192.168.0.1/32"));
251 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.0.1"));
252 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.1.0.0/32"));
253 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.1.0.0"));
254 assertEquals(false, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
255 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
259 public void layer3MatchEqualsIpv4ArbitraryEmptyBitMaskTest(){
260 final Ipv4MatchBuilder statsBuilder = new Ipv4MatchBuilder();
261 final Ipv4MatchArbitraryBitMaskBuilder storedBuilder = new Ipv4MatchArbitraryBitMaskBuilder();
262 assertEquals(true,MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(),storedBuilder.build()));
263 statsBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.1/32"));
264 storedBuilder.setIpv4DestinationAddressNoMask(new Ipv4Address("192.168.1.1"));
265 statsBuilder.setIpv4Source(new Ipv4Prefix("192.168.1.1/32"));
266 storedBuilder.setIpv4SourceAddressNoMask(new Ipv4Address("192.168.1.1"));
267 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(statsBuilder.build(), storedBuilder.build()));
268 assertEquals(true, MatchComparatorHelper.layer3MatchEquals(null, null));
272 public void extractIpv4AddressTest() {
273 Ipv4Address ipAddress = new Ipv4Address("1.1.1.1");
274 DottedQuad netMask = new DottedQuad("255.255.255.0");
275 String extractedIpAddress;
276 extractedIpAddress = MatchComparatorHelper.normalizeIpv4Address(ipAddress,netMask);
277 assertEquals(extractedIpAddress,"1.1.1.0");
281 public void convertArbitraryMaskToByteArrayTest() {
282 int value = 0xffffffff;
283 byte[] bytes = new byte[]{
284 (byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) };
286 maskBytes = MatchComparatorHelper.convertArbitraryMaskToByteArray(new DottedQuad("255.255.255.255"));
287 for (int i=0; i<bytes.length;i++) {
288 int mask = maskBytes[i];
289 assertEquals(bytes[i],mask);
294 public void isArbitraryBitMaskTest() {
295 boolean arbitraryBitMask;
296 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(new byte[] {1,1,1,1});
297 assertEquals(arbitraryBitMask,true);
298 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(new byte[] {-1,-1,-1,-1});
299 assertEquals(arbitraryBitMask,false);
300 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(new byte[] {-1,-1,0,-1});
301 assertEquals(arbitraryBitMask,true);
302 arbitraryBitMask = MatchComparatorHelper.isArbitraryBitMask(null);
303 assertEquals(arbitraryBitMask,false);
307 public void createPrefixTest() {
308 Ipv4Address ipv4Address = new Ipv4Address("1.1.1.1");
309 byte [] byteMask = new byte[] {-1,-1,-1,-1};
310 Ipv4Prefix ipv4Prefix = MatchComparatorHelper.createPrefix(ipv4Address,byteMask);
311 assertEquals(ipv4Prefix,new Ipv4Prefix("1.1.1.1/32"));
312 String nullMask = "";
313 Ipv4Prefix ipv4PrefixNullMask = MatchComparatorHelper.createPrefix(ipv4Address,nullMask);
314 assertEquals(ipv4PrefixNullMask,new Ipv4Prefix("1.1.1.1/32"));
315 Ipv4Prefix ipv4PrefixNoMask = MatchComparatorHelper.createPrefix(ipv4Address);
316 assertEquals(ipv4PrefixNoMask,new Ipv4Prefix("1.1.1.1/32"));