Ip6PrefixTest.java 9.51 KB
/*
 * Copyright 2014 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onlab.packet;

import org.junit.Test;

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;

/**
 * Tests for class {@link Ip6Prefix}.
 */
public class Ip6PrefixTest {
    /**
     * Tests the immutability of {@link Ip6Prefix}.
     */
    @Test
    public void testImmutable() {
        assertThatClassIsImmutable(Ip6Prefix.class);
    }

    /**
     * Tests default class constructor.
     */
    @Test
    public void testDefaultConstructor() {
        Ip6Prefix ip6prefix = new Ip6Prefix();
        assertThat(ip6prefix.toString(), is("::/0"));
    }

    /**
     * Tests valid class copy constructor.
     */
    @Test
    public void testCopyConstructor() {
        Ip6Prefix fromAddr = new Ip6Prefix("1100::/8");
        Ip6Prefix ip6prefix = new Ip6Prefix(fromAddr);
        assertThat(ip6prefix.toString(), is("1100::/8"));

        fromAddr = new Ip6Prefix("::/0");
        ip6prefix = new Ip6Prefix(fromAddr);
        assertThat(ip6prefix.toString(), is("::/0"));

        fromAddr =
            new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        ip6prefix = new Ip6Prefix(fromAddr);
        assertThat(ip6prefix.toString(),
                   is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));
    }

    /**
     * Tests invalid class copy constructor for a null object to copy from.
     */
    @Test(expected = NullPointerException.class)
    public void testInvalidConstructorNullObject() {
        Ip6Prefix fromAddr = null;
        Ip6Prefix ip6prefix = new Ip6Prefix(fromAddr);
    }

    /**
     * Tests valid class constructor for an address and prefix length.
     */
    @Test
    public void testConstructorForAddressAndPrefixLength() {
        Ip6Prefix ip6prefix =
            new Ip6Prefix(new Ip6Address("1100::"), (short) 8);
        assertThat(ip6prefix.toString(), is("1100::/8"));

        ip6prefix =
            new Ip6Prefix(new Ip6Address("1111:2222:3333:4444:5555:6666:7777:8885"),
                        (short) 8);
        assertThat(ip6prefix.toString(), is("1100::/8"));

        ip6prefix =
            new Ip6Prefix(new Ip6Address("1111:2222:3333:4444:5555:6666:7777:8800"),
                        (short) 120);
        assertThat(ip6prefix.toString(),
                   is("1111:2222:3333:4444:5555:6666:7777:8800/120"));

        ip6prefix = new Ip6Prefix(new Ip6Address("::"), (short) 0);
        assertThat(ip6prefix.toString(), is("::/0"));

        ip6prefix =
            new Ip6Prefix(new Ip6Address("1111:2222:3333:4444:5555:6666:7777:8885"),
                        (short) 128);
        assertThat(ip6prefix.toString(),
                   is("1111:2222:3333:4444:5555:6666:7777:8885/128"));

        ip6prefix =
            new Ip6Prefix(new Ip6Address("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"),
                        (short) 128);
        assertThat(ip6prefix.toString(),
                   is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));

        ip6prefix =
            new Ip6Prefix(new Ip6Address("1111:2222:3333:4444:5555:6666:7777:8885"),
                        (short) 64);
        assertThat(ip6prefix.toString(), is("1111:2222:3333:4444::/64"));
    }

    /**
     * Tests valid class constructor for a string.
     */
    @Test
    public void testConstructorForString() {
        Ip6Prefix ip6prefix = new Ip6Prefix("1100::/8");
        assertThat(ip6prefix.toString(), is("1100::/8"));

        ip6prefix = new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/8");
        assertThat(ip6prefix.toString(), is("1100::/8"));

        ip6prefix =
            new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8800/120");
        assertThat(ip6prefix.toString(),
                   is("1111:2222:3333:4444:5555:6666:7777:8800/120"));

        ip6prefix = new Ip6Prefix("::/0");
        assertThat(ip6prefix.toString(), is("::/0"));

        ip6prefix =
            new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/128");
        assertThat(ip6prefix.toString(),
                   is("1111:2222:3333:4444:5555:6666:7777:8885/128"));

        ip6prefix = new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        assertThat(ip6prefix.toString(),
                   is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));

        ip6prefix =
            new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/64");
        assertThat(ip6prefix.toString(), is("1111:2222:3333:4444::/64"));
    }

    /**
     * Tests invalid class constructor for a null string.
     */
    @Test(expected = NullPointerException.class)
    public void testInvalidConstructorNullString() {
        String fromString = null;
        Ip6Prefix ip6prefix = new Ip6Prefix(fromString);
    }

    /**
     * Tests invalid class constructor for an empty string.
     */
    @Test(expected = IllegalArgumentException.class)
    public void testInvalidConstructors() {
        // Check constructor for invalid ID: empty string
        Ip6Prefix ip6prefix = new Ip6Prefix("");
    }

    /**
     * Tests getting the value of an address.
     */
    @Test
    public void testGetValue() {
        Ip6Prefix ip6prefix = new Ip6Prefix("1100::/8");
        assertThat(ip6prefix.getAddress(), equalTo(new Ip6Address("1100::")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 8));

        ip6prefix = new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/8");
        assertThat(ip6prefix.getAddress(), equalTo(new Ip6Address("1100::")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 8));

        ip6prefix =
            new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8800/120");
        assertThat(ip6prefix.getAddress(),
                   equalTo(new Ip6Address("1111:2222:3333:4444:5555:6666:7777:8800")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 120));

        ip6prefix = new Ip6Prefix("::/0");
        assertThat(ip6prefix.getAddress(), equalTo(new Ip6Address("::")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 0));

        ip6prefix =
            new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/128");
        assertThat(ip6prefix.getAddress(),
                   equalTo(new Ip6Address("1111:2222:3333:4444:5555:6666:7777:8885")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 128));

        ip6prefix =
            new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        assertThat(ip6prefix.getAddress(),
                   equalTo(new Ip6Address("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 128));

        ip6prefix =
            new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/64");
        assertThat(ip6prefix.getAddress(),
                   equalTo(new Ip6Address("1111:2222:3333:4444::")));
        assertThat(ip6prefix.getPrefixLen(), is((short) 64));
    }

    /**
     * Tests equality of {@link Ip6Address}.
     */
    @Test
    public void testEquality() {
        Ip6Prefix addr1net = new Ip6Prefix("1100::/8");
        Ip6Prefix addr2net = new Ip6Prefix("1100::/8");
        assertThat(addr1net, is(addr2net));

        addr1net = new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/8");
        addr2net = new Ip6Prefix("1100::/8");
        assertThat(addr1net, is(addr2net));

        addr1net = new Ip6Prefix("::/0");
        addr2net = new Ip6Prefix("::/0");
        assertThat(addr1net, is(addr2net));

        addr1net =
            new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        addr2net =
            new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        assertThat(addr1net, is(addr2net));
    }

    /**
     * Tests non-equality of {@link Ip6Address}.
     */
    @Test
    public void testNonEquality() {
        Ip6Prefix addr1net = new Ip6Prefix("1100::/8");
        Ip6Prefix addr2net = new Ip6Prefix("1200::/8");
        Ip6Prefix addr3net = new Ip6Prefix("1200::/12");
        Ip6Prefix addr4net = new Ip6Prefix("::/0");
        Ip6Prefix addr5net =
            new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        assertThat(addr1net, is(not(addr2net)));
        assertThat(addr3net, is(not(addr2net)));
        assertThat(addr4net, is(not(addr2net)));
        assertThat(addr5net, is(not(addr2net)));
    }

    /**
     * Tests object string representation.
     */
    @Test
    public void testToString() {
        Ip6Prefix ip6prefix = new Ip6Prefix("1100::/8");
        assertThat(ip6prefix.toString(), is("1100::/8"));

        ip6prefix = new Ip6Prefix("1111:2222:3333:4444:5555:6666:7777:8885/8");
        assertThat(ip6prefix.toString(), is("1100::/8"));

        ip6prefix = new Ip6Prefix("::/0");
        assertThat(ip6prefix.toString(), is("::/0"));

        ip6prefix =
            new Ip6Prefix("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
        assertThat(ip6prefix.toString(),
                   is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));
    }
}