2 * Copyright (c) 2014 Brocade Communications Systems Inc and others. All rights reserved.
\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
8 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
\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
25 * @author Anton Ivanov aivanov@brocade.com
\r
26 * @author Sai MarapaReddy sai.marapareddy@gmail.com
\r
29 public class IpConversionUtilTest {
\r
31 private static Logger LOG = LoggerFactory
\r
32 .getLogger(IpConversionUtilTest.class);
\r
37 * Test canonicalBinaryV6Address
\r
40 public void canonicalBinaryV6AddressTest() {
\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
45 Assert.assertTrue("Incorrect canonicalization - binary", Arrays.equals(ipv6binary, expected));
\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
54 * Test canonicalBinaryV6Prefix
\r
57 public void canonicalBinaryV6AddressPrefixTest() {
\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
62 Assert.assertTrue("Incorrect canonicalization - binary", Arrays.equals(ipv6binary, expected));
\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
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
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
83 maskSeed = maskSeed.clearBit(i);
\r
89 * Test method for {@link MatchConvertorUtil#getIpv4Mask(byte[])}.
\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
103 int[] maskOutputs = new int[]{
\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
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
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
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
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
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