Cleaned up Subnet.java and added/extended unit tests.
[packetcable.git] / packetcable-policy-server / src / test / java / org / opendaylight / controller / packetcable / provider / SubnetTest.java
index 229c7d726b5ea8d34833f24c98acabce4bb29e17..b0360ad8ac9528e682ab9412f935b4e5f2f739b9 100644 (file)
 package org.opendaylight.controller.packetcable.provider;
 
+import com.google.common.net.InetAddresses;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 
+import static org.hamcrest.CoreMatchers.*;
 import static org.junit.Assert.*;
 
+public class SubnetTest {
 
-import java.net.UnknownHostException;
+    // Various address class level prefix lengths
+    private static final int CLASS_A = 8;
+    private static final int CLASS_B = 16;
+    private static final int CLASS_C = 24;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
-import org.mockito.runners.MockitoJUnitRunner;
+    private InetAddress addressV4 = null;
+    private InetAddress addressV6 = null;
 
-import com.google.common.net.InetAddresses;
+    private InetAddress v4MaskClassA;
+    private InetAddress v4MaskClassB;
+    private InetAddress v4MaskClassC;
 
-@RunWith(MockitoJUnitRunner.class)
-public class SubnetTest {
+    @Before
+    public final void setup()
+    {
+        addressV4 = InetAddresses.forString("192.168.0.1");
+        addressV6 = InetAddresses.forString("2001:db8::1");
+
+        v4MaskClassA = InetAddresses.forString("255.0.0.0");
+        v4MaskClassB = InetAddresses.forString("255.255.0.0");
+        v4MaskClassC = InetAddresses.forString("255.255.255.0");
+    }
+
+    @After
+    public final void tearDown()
+    {
+        addressV4 = null;
+        addressV6 = null;
+
+        v4MaskClassA = null;
+        v4MaskClassB = null;
+        v4MaskClassC = null;
+    }
+
+    @Test
+    public final void testCtorCidr()
+    {
+        assertThat(new Subnet(addressV4, 24), is(notNullValue()));
+        assertThat(new Subnet(addressV6, 24), is(notNullValue()));
+    }
+
+    @Test
+    public final void testCtorAddressAndMask()
+    {
+        assertThat(new Subnet(addressV4, InetAddresses.forString("255.255.255.0")), is(notNullValue()));
+        assertThat(new Subnet(addressV4, null), is(notNullValue()));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public final void testSubnetCtorCidrBadMaskv4_1()
+    {
+        new Subnet(addressV4, -1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public final void testSubnetCtorCidrBadMaskv4_2()
+    {
+        new Subnet(addressV4, 33);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public final void testSubnetCtorCidrBadMaskv6_1()
+    {
+        new Subnet(addressV6, -1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public final void testSubnetCtorCidrBadMaskv6_2()
+    {
+        new Subnet(addressV6, 129);
+    }
+
+    @Test
+    public final void testGetPrefixLen()
+    {
+        Subnet subnet = new Subnet(addressV4, CLASS_C);
+        assertThat(subnet, is(notNullValue()) );
+        assertThat(subnet.getPrefixLen(), is(CLASS_C) );
+
+        subnet = new Subnet(addressV4, CLASS_B);
+        assertThat(subnet, is(notNullValue()) );
+        assertThat(subnet.getPrefixLen(), is(CLASS_B) );
+
+        subnet = new Subnet(addressV4, CLASS_A);
+        assertThat(subnet, is(notNullValue()) );
+        assertThat(subnet.getPrefixLen(), is(CLASS_A) );
+
+        subnet = new Subnet(addressV4, v4MaskClassC);
+        assertThat(subnet, is(notNullValue()) );
+        assertThat(subnet.getPrefixLen(), is(CLASS_C) );
+
+        subnet = new Subnet(addressV4, v4MaskClassB);
+        assertThat(subnet, is(notNullValue()) );
+        assertThat(subnet.getPrefixLen(), is(CLASS_B) );
+
+        subnet = new Subnet(addressV4, v4MaskClassA);
+        assertThat(subnet, is(notNullValue()) );
+        assertThat(subnet.getPrefixLen(), is(CLASS_A) );
+
+    }
+
+    @Test
+    public final void testSubnetCtorCidrAllValidMasks()
+    {
+        // validating no exceptions are thrown for valid masks
+        for (int iMask = 0; iMask < 33; ++iMask) {
+            final Subnet subnet = new Subnet(addressV4, iMask);
+            assertThat(subnet.getPrefixLen(),  is(iMask) );
+        }
+
+        for (int iMask = 0; iMask < 129; ++iMask) {
+            final Subnet subnet = new Subnet(addressV6, iMask);
+            assertThat(subnet.getPrefixLen(),  is(iMask) );
+        }
+    }
+
+
+    @Test
+    public final void testEquals()
+    {
+        final Subnet s41 = new Subnet(addressV4, 24);
+        final Subnet s42 = new Subnet(addressV4, 24);
+        final Subnet s43 = new Subnet(addressV4, 16);
+
+        final Subnet s61 = new Subnet(addressV6, 24);
+        final Subnet s62 = new Subnet(addressV6, 56);
+        final Subnet s63 = new Subnet(addressV6, 56);
+
+        assertThat(s41, is(equalTo(s41)));
+        assertThat(s41, is(equalTo(s42)));
+        assertThat(s41, is(not(equalTo(s43))));
+        assertThat(s41, is(not(equalTo(s61))));
+        assertThat(s41, is(not(equalTo(s62))));
+        assertThat(s41, is(not(equalTo(s63))));
+        assertThat(s41, is(not(equalTo(null))));
+        assertNotEquals(s41, "random string");
+
+        assertThat(s42, is(equalTo(s41)));
+        assertThat(s42, is(equalTo(s42)));
+        assertThat(s42, is(not(equalTo(s43))));
+        assertThat(s42, is(not(equalTo(s61))));
+        assertThat(s42, is(not(equalTo(s62))));
+        assertThat(s42, is(not(equalTo(s63))));
+        assertThat(s42, is(not(equalTo(null))));
+        assertNotEquals(s42, "random string");
+
+        assertThat(s43, is(not(equalTo(s41))));
+        assertThat(s43, is(not(equalTo(s42))));
+        assertThat(s43, is(equalTo(s43)));
+        assertThat(s43, is(not(equalTo(s61))));
+        assertThat(s43, is(not(equalTo(s62))));
+        assertThat(s43, is(not(equalTo(s63))));
+        assertThat(s43, is(not(equalTo(null))));
+        assertNotEquals(s43, "random string");
+
+        assertThat(s61, is(not(equalTo(s41))));
+        assertThat(s61, is(not(equalTo(s42))));
+        assertThat(s61, is(not(equalTo(s43))));
+        assertThat(s61, is(equalTo(s61)));
+        assertThat(s61, is(not(equalTo(s62))));
+        assertThat(s61, is(not(equalTo(s63))));
+        assertThat(s61, is(not(equalTo(null))));
+        assertNotEquals(s61, "random string");
+
+        assertThat(s62, is(not(equalTo(s41))));
+        assertThat(s62, is(not(equalTo(s42))));
+        assertThat(s62, is(not(equalTo(s43))));
+        assertThat(s62, is(not(equalTo(s61))));
+        assertThat(s62, is(equalTo(s62)));
+        assertThat(s62, is(equalTo(s63)));
+        assertThat(s62, is(not(equalTo(null))));
+        assertNotEquals(s62, "random string");
+
+        assertThat(s63, is(not(equalTo(s41))));
+        assertThat(s63, is(not(equalTo(s42))));
+        assertThat(s63, is(not(equalTo(s43))));
+        assertThat(s63, is(not(equalTo(s61))));
+        assertThat(s63, is(equalTo(s62)));
+        assertThat(s63, is(equalTo(s63)));
+        assertThat(s63, is(not(equalTo(null))));
+        assertNotEquals(s63, "random string");
+    }
+
+    @Test
+    public final void testHashcode()
+    {
+        final Subnet s41 = new Subnet(addressV4, 24);
+        final Subnet s42 = new Subnet(addressV4, 24);
+        final Subnet s43 = new Subnet(addressV4, 16);
+
+        final Subnet s61 = new Subnet(addressV6, 24);
+        final Subnet s62 = new Subnet(addressV6, 56);
+        final Subnet s63 = new Subnet(addressV6, 56);
+
+        assertThat(s41.hashCode(), is(equalTo(s41.hashCode())));
+        assertThat(s41.hashCode(), is(equalTo(s42.hashCode())));
+        assertThat(s41.hashCode(), is(not(equalTo(s43.hashCode()))));
+        assertThat(s41.hashCode(), is(not(equalTo(s61.hashCode()))));
+        assertThat(s41.hashCode(), is(not(equalTo(s62.hashCode()))));
+        assertThat(s41.hashCode(), is(not(equalTo(s63.hashCode()))));
+
+        assertThat(s42.hashCode(), is(equalTo(s41.hashCode())));
+        assertThat(s42.hashCode(), is(equalTo(s42.hashCode())));
+        assertThat(s42.hashCode(), is(not(equalTo(s43.hashCode()))));
+        assertThat(s42.hashCode(), is(not(equalTo(s61.hashCode()))));
+        assertThat(s42.hashCode(), is(not(equalTo(s62.hashCode()))));
+        assertThat(s42.hashCode(), is(not(equalTo(s63.hashCode()))));
+
+        assertThat(s43.hashCode(), is(not(equalTo(s41.hashCode()))));
+        assertThat(s43.hashCode(), is(not(equalTo(s42.hashCode()))));
+        assertThat(s43.hashCode(), is(equalTo(s43.hashCode())));
+        assertThat(s43.hashCode(), is(not(equalTo(s61.hashCode()))));
+        assertThat(s43.hashCode(), is(not(equalTo(s62.hashCode()))));
+        assertThat(s43.hashCode(), is(not(equalTo(s63.hashCode()))));
+
+        assertThat(s61.hashCode(), is(not(equalTo(s41.hashCode()))));
+        assertThat(s61.hashCode(), is(not(equalTo(s42.hashCode()))));
+        assertThat(s61.hashCode(), is(not(equalTo(s43.hashCode()))));
+        assertThat(s61.hashCode(), is(equalTo(s61.hashCode())));
+        assertThat(s61.hashCode(), is(not(equalTo(s62.hashCode()))));
+        assertThat(s61.hashCode(), is(not(equalTo(s63.hashCode()))));
+
+        assertThat(s62.hashCode(), is(not(equalTo(s41.hashCode()))));
+        assertThat(s62.hashCode(), is(not(equalTo(s42.hashCode()))));
+        assertThat(s62.hashCode(), is(not(equalTo(s43.hashCode()))));
+        assertThat(s62.hashCode(), is(not(equalTo(s61.hashCode()))));
+        assertThat(s62.hashCode(), is(equalTo(s62.hashCode())));
+        assertThat(s62.hashCode(), is(equalTo(s63.hashCode())));
+
+        assertThat(s63.hashCode(), is(not(equalTo(s41.hashCode()))));
+        assertThat(s63.hashCode(), is(not(equalTo(s42.hashCode()))));
+        assertThat(s63.hashCode(), is(not(equalTo(s43.hashCode()))));
+        assertThat(s63.hashCode(), is(not(equalTo(s61.hashCode()))));
+        assertThat(s63.hashCode(), is(equalTo(s62.hashCode())));
+        assertThat(s63.hashCode(), is(equalTo(s63.hashCode())));
+    }
 
     @Test
     public final void testCreateInstance() throws UnknownHostException {
-           Subnet localSubnet = Subnet.createInstance("192.168.0.0/255.255.255.0");
-           assertNotNull(localSubnet);
-           assertEquals("192.168.0.0/255.255.255.0", localSubnet.toString());
-           assertEquals(Subnet.createInstance("192.168.0.0/255.255.255.0"), localSubnet);
+        Subnet subnet = Subnet.createInstance("192.168.0.0/255.255.255.0");
+        assertThat(subnet, is(notNullValue(Subnet.class)));
+        assertThat(subnet.toString(), is("192.168.0.0/255.255.255.0"));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.0/255.255.255.0"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.0/24"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.10/255.255.255.0"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.10/24"))));
+
+        subnet = Subnet.createInstance("192.168.0.1");
+        assertThat(subnet, is(notNullValue(Subnet.class)));
+        assertThat(subnet.toString(), is("192.168.0.1/255.255.255.255"));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.1"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.1/32"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.1/255.255.255.255"))));
+
+        subnet = Subnet.createInstance("192.168.0.0/8");
+        assertThat(subnet, is(notNullValue(Subnet.class)));
+        assertThat(subnet.toString(), is("192.0.0.0/255.0.0.0"));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.0/8"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.175.0.10/8"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.10.0.0/255.0.0.0"))));
+        assertThat(subnet, is(equalTo(Subnet.createInstance("192.1.0.100/255.0.0.0"))));
+
+    }
+
+    @Test
+    public final void testIsInNet()
+    {
+        Subnet subnet = new Subnet(addressV4, CLASS_C);
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
+        assertFalse(subnet.isInNet(addressV6));
+
+        subnet = new Subnet(addressV4, CLASS_B);
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
+        assertFalse(subnet.isInNet(addressV6));
+
+        subnet = new Subnet(addressV4, CLASS_A);
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.255")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
+        assertFalse(subnet.isInNet(addressV6));
+
+        subnet = new Subnet(addressV4, 32);
+        assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.168.1.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
+        assertFalse(subnet.isInNet(addressV6));
+
+        subnet = new Subnet(addressV6, 64);
+        assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8::1")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8::100")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8::ffff")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("2001:db7::1")));
+        assertFalse(subnet.isInNet(InetAddresses.forString("2000:db8::")));
+        assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8:0:0:1::1")));
+        assertFalse(subnet.isInNet(addressV4));
+
     }
 }