Bug-5562 - Ipv4 L3-ArbitraryMask patch
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / IpConversionUtilTest.java
1 /*\r
2  * Copyright (c) 2014 Brocade Communications Systems Inc and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
9 \r
10 import java.math.BigInteger;\r
11 import java.util.Arrays;\r
12 import org.junit.Assert;\r
13 import org.junit.Test;\r
14 import org.opendaylight.openflowjava.util.ByteBufUtils;\r
15 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorUtil;\r
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;\r
21 import org.slf4j.Logger;\r
22 import org.slf4j.LoggerFactory;\r
23 \r
24 /**\r
25  * @author Anton Ivanov aivanov@brocade.com\r
26  * @author Sai MarapaReddy sai.marapareddy@gmail.com\r
27  *\r
28  */\r
29 public class IpConversionUtilTest {\r
30 \r
31     private static Logger LOG = LoggerFactory\r
32             .getLogger(IpConversionUtilTest.class);\r
33 \r
34 \r
35 \r
36     /*\r
37      * Test canonicalBinaryV6Address\r
38      */\r
39     @Test\r
40     public void canonicalBinaryV6AddressTest() {\r
41 \r
42         byte [] ipv6binary = IpConversionUtil.canonicalBinaryV6Address(new Ipv6Address("0000:0000:0000:0000:0000:0000:0000:0001"));\r
43         byte [] expected = {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1};\r
44 \r
45         Assert.assertTrue("Incorrect canonicalization - binary", Arrays.equals(ipv6binary, expected));\r
46         try {\r
47             Assert.assertEquals("Incorrect canonicalization - string", "::1", IpConversionUtil.byteArrayV6AddressToString(ipv6binary));\r
48         } catch (java.net.UnknownHostException e) {\r
49             Assert.assertTrue("Incorrect canonicalization - wrong length of byte[]", false);\r
50         }\r
51     }\r
52 \r
53     /*\r
54      * Test canonicalBinaryV6Prefix\r
55      */\r
56     @Test\r
57     public void canonicalBinaryV6AddressPrefixTest() {\r
58 \r
59         byte [] ipv6binary = IpConversionUtil.canonicalBinaryV6Prefix(new Ipv6Prefix("0000:0000:0000:0000:0000:0000:0000:0001/64"));\r
60         byte [] expected = {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 64};\r
61 \r
62         Assert.assertTrue("Incorrect canonicalization - binary", Arrays.equals(ipv6binary, expected));\r
63         try {\r
64             Assert.assertEquals("Incorrect canonicalization - string", "::/64", IpConversionUtil.byteArrayV6PrefixToString(ipv6binary));\r
65         } catch (java.net.UnknownHostException e){\r
66             Assert.assertTrue("Incorrect canonicalization - wrong length of byte[]", false);\r
67         }\r
68     }\r
69 \r
70     @Test\r
71     public void testCountBitsAsCIDRReplacement() throws Exception {\r
72         BigInteger maskSeed = new BigInteger("1ffffffffffffffffffffffffffffffff", 16);\r
73         byte[] maskArray = new byte[16];\r
74         LOG.debug("maskSeed= {}", ByteBufUtils.bytesToHexString(maskSeed.toByteArray()));\r
75 \r
76         for (int i = 0; i <= 128; i++) {\r
77             System.arraycopy(maskSeed.toByteArray(), 1, maskArray, 0, 16);\r
78             LOG.debug("maskHex[{}] = {}", i, ByteBufUtils.bytesToHexString(maskArray));\r
79             int cidr = IpConversionUtil.countBits(maskArray);\r
80             LOG.debug("cidr = {}", cidr);\r
81             Assert.assertEquals(128 - i, cidr);\r
82 \r
83             maskSeed = maskSeed.clearBit(i);\r
84         }\r
85     }\r
86 \r
87 \r
88     /**\r
89      * Test method for {@link MatchConvertorUtil#getIpv4Mask(byte[])}.\r
90      *\r
91      * @throws Exception\r
92      */\r
93 \r
94     @Test\r
95     public void testcountBitsAsGetIpv4Mask() {\r
96         byte[][] maskInputs = new byte[][]{\r
97                 {(byte) 255, (byte) 255, (byte) 255, (byte) 255},\r
98                 {(byte) 255, (byte) 255, (byte) 254, 0},\r
99                 {(byte) 128, 0, 0, 0},\r
100                 {0, 0, 0, 0},\r
101         };\r
102 \r
103         int[] maskOutputs = new int[]{\r
104                 32, 23, 1, 0\r
105         };\r
106 \r
107         for (int i = 0; i < maskInputs.length; i++) {\r
108             int mask = IpConversionUtil.countBits(maskInputs[i]);\r
109             Assert.assertEquals(maskOutputs[i], mask);\r
110         }\r
111     }\r
112 \r
113     @Test\r
114     public void convertArbitraryMaskToByteArrayTest() {\r
115         int value = 0xffffffff;\r
116         byte[] bytes = new byte[]{\r
117                 (byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) };\r
118         byte[] maskBytes;\r
119         maskBytes = IpConversionUtil.convertArbitraryMaskToByteArray(new DottedQuad("255.255.255.255"));\r
120         for (int i=0; i<bytes.length;i++) {\r
121             int mask = maskBytes[i];\r
122             Assert.assertEquals(bytes[i],mask);\r
123         }\r
124     }\r
125 \r
126     @Test\r
127     public void isArbitraryBitMaskTest() {\r
128         boolean arbitraryBitMask;\r
129         arbitraryBitMask = IpConversionUtil.isArbitraryBitMask(new byte[] {1,1,1,1});\r
130         Assert.assertEquals(arbitraryBitMask,true);\r
131         arbitraryBitMask = IpConversionUtil.isArbitraryBitMask(new byte[] {-1,-1,-1,-1});\r
132         Assert.assertEquals(arbitraryBitMask,false);\r
133         arbitraryBitMask = IpConversionUtil.isArbitraryBitMask(new byte[] {-1,-1,0,-1});\r
134         Assert.assertEquals(arbitraryBitMask,true);\r
135         arbitraryBitMask = IpConversionUtil.isArbitraryBitMask(null);\r
136         Assert.assertEquals(arbitraryBitMask,false);\r
137     }\r
138 \r
139     @Test\r
140     public void extractIpv4AddressTest() {\r
141         Ipv4Address ipv4Address;\r
142         ipv4Address = IpConversionUtil.extractIpv4Address(new Ipv4Prefix("1.0.1.0/16"));\r
143         Assert.assertEquals(ipv4Address.getValue(),"1.0.1.0");\r
144     }\r
145 \r
146     @Test\r
147     public void extractIpv4AddressMaskTest() {\r
148         DottedQuad dottedQuad;\r
149         dottedQuad = IpConversionUtil.extractIpv4AddressMask(new Ipv4Prefix("1.1.1.1/24"));\r
150         Assert.assertEquals(dottedQuad.getValue(),"255.255.255.0");\r
151     }\r
152 }\r