alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (Inet6AddressSerializationTest.java)

This example Java source code file (Inet6AddressSerializationTest.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

bytearrayinputstream, e1000g0hostname, e1000g0ipv6address, enumeration, exception, inet6address, ioexception, loopbackipv6address, net, network, networkinterface, objectinputstream, objectoutputstream, scope_id_zero, string, unknownhostexception, util

The Inet6AddressSerializationTest.java Java example source code

/*
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;

/**
 * @test
 * @bug 8007373
 * @summary jdk7 backward compatibility serialization problem
 */

public class Inet6AddressSerializationTest {

    static boolean failed;

    public static final int LOOPBACK_SCOPE_ID = 0;

    public static final byte[] IN6ADDR_ANY_INIT = { (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };

    public static final byte[] LOOPBACKIPV6ADDRESS = { (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 };

    // fe80::21b:24ff:febd:f29c
    public static final byte[] E1000G0IPV6ADDRESS = { (byte) 0xfe, (byte) 0x80,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x02, (byte) 0x1b, (byte) 0x24, (byte) 0xff,
            (byte) 0xfe, (byte) 0xbd, (byte) 0xf2, (byte) 0x9c };

    public static final String E1000G0HOSTNAME = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";

    public static final String LOCALHOSTNAME = "localhost";

    public static final String NETWORK_IF_E1000G0 = "e1000g0";

    public static final String NETWORK_IF_LO0 = "lo0";

    public static final int SCOPE_ID_E1000G0 = 2;

    public static final int SCOPE_ID_LO0 = 1;

    public static final int SCOPE_ID_ZERO = 0;

    public static void main(String[] args) throws Exception {
        // args[0] == generate-loopback generates serial data for loopback if
        // args[0] == generateAll generates serial data for interfaces with an
        // IPV6 address binding

        if (args.length != 0) {

            if (args[0].equals("generate-loopback")) {

                generateSerializedInet6AddressData(Inet6Address.getByAddress(
                        InetAddress.getLoopbackAddress().getHostName(),
                        LOOPBACKIPV6ADDRESS, LOOPBACK_SCOPE_ID), System.out,
                        true);

            } else {
                generateAllInet6AddressSerializedData();
            }
        } else {
            runTests();
        }
    }

    private static void runTests() throws UnknownHostException, Exception,
            IOException {
        byte[] thisHostIPV6Address = null;
        int scope_id = LOOPBACK_SCOPE_ID;

        System.out.println("Hostname: "
                + InetAddress.getLocalHost().getHostName());
        System.out.println("LocalHost isLoopback : "
                + InetAddress.getLocalHost().isLoopbackAddress());
        thisHostIPV6Address = getThisHostIPV6Address(InetAddress.getLocalHost()
                .getHostName());

        if (thisHostIPV6Address == null) {
            thisHostIPV6Address = IN6ADDR_ANY_INIT;
        }

        // testing JDK7 generated serialized loopback against locally generated
        // loopback address
        testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
                .getLoopbackAddress().getHostName(), LOOPBACKIPV6ADDRESS,
                scope_id), JDK7Inet6AddressSerialData);
        // testing JDK8 generated serialized loopback against locally generated
        // loopback address
        testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
                .getLoopbackAddress().getHostName(), LOOPBACKIPV6ADDRESS,
                scope_id), JDK8Inet6AddressSerialData);
        testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
                .getLocalHost().getHostName(), IN6ADDR_ANY_INIT, scope_id),
                null);
        testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
                .getLocalHost().getHostName(), thisHostIPV6Address, scope_id),
                null);
        testAllNetworkInterfaces();

        // test against lo0
        testSerializedLo0Inet6Address();

        testSerializedE1000gInet6Address();

        if (failed)
            throw new RuntimeException("Some tests failed, check output");
    }

    private static byte[] getThisHostIPV6Address(String hostName)
            throws Exception {
        InetAddress[] thisHostIPAddresses = null;
        try {
            thisHostIPAddresses = InetAddress.getAllByName(InetAddress
                    .getLocalHost().getHostName());
        } catch (UnknownHostException uhEx) {
            uhEx.printStackTrace();
            throw uhEx;
        }
        byte[] thisHostIPV6Address = null;
        for (InetAddress inetAddress : thisHostIPAddresses) {
            if (inetAddress instanceof Inet6Address) {
                if (inetAddress.getHostName().equals(hostName)) {
                    thisHostIPV6Address = inetAddress.getAddress();
                    break;
                }
            }
        }
        // System.err.println("getThisHostIPV6Address: address is "
        // + Arrays.toString(thisHostIPV6Address));
        return thisHostIPV6Address;
    }

    static void testAllNetworkInterfaces() throws Exception {
        System.err.println("\n testAllNetworkInterfaces: \n ");
        for (Enumeration<NetworkInterface> e = NetworkInterface
                .getNetworkInterfaces(); e.hasMoreElements();) {
            NetworkInterface netIF = e.nextElement();
            for (Enumeration<InetAddress> iadrs = netIF.getInetAddresses(); iadrs
                    .hasMoreElements();) {
                InetAddress iadr = iadrs.nextElement();
                if (iadr instanceof Inet6Address) {
                    System.err.println("Test NetworkInterface:  " + netIF);
                    Inet6Address i6adr = (Inet6Address) iadr;
                    System.err.println("Testing with " + iadr);
                    System.err.println(" scoped iface: "
                            + i6adr.getScopedInterface());
                    testInet6AddressSerialization(i6adr, null);
                }
            }
        }
    }

    static void displayExpectedInet6Address(Inet6Address expectedInet6Address) {

        String expectedHostName = expectedInet6Address.getHostName();
        byte[] expectedAddress = expectedInet6Address.getAddress();
        String expectedHostAddress = expectedInet6Address.getHostAddress();
        int expectedScopeId = expectedInet6Address.getScopeId();
        NetworkInterface expectedNetIf = expectedInet6Address
                .getScopedInterface();

        System.err.println("Excpected HostName: " + expectedHostName);
        System.err.println("Expected Address: "
                + Arrays.toString(expectedAddress));
        System.err.println("Expected HostAddress: " + expectedHostAddress);
        System.err.println("Expected Scope Id " + expectedScopeId);
        System.err.println("Expected NetworkInterface " + expectedNetIf);
        System.err.println("Expected Inet6Address " + expectedInet6Address);
    }

    // test serialization deserialization of Inet6Address
    static void testInet6AddressSerialization(
            Inet6Address expectedInet6Address, byte[] serializedAddress)
            throws IOException {
        System.err.println("\n testInet6AddressSerialization:  enter \n");

        // displayExpectedInet6Address(expectedInet6Address);

        byte[] serialData = serializedAddress != null ? serializedAddress
                : generateSerializedInet6AddressData(expectedInet6Address,
                        null, false);
        try (ByteArrayInputStream bis = new ByteArrayInputStream(serialData);
                ObjectInputStream oin = new ObjectInputStream(bis)) {
            Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
            System.err.println("Deserialized Inet6Address "
                    + deserializedIPV6Addr);
            assertHostNameEqual(expectedInet6Address.getHostName(),
                    deserializedIPV6Addr.getHostName());
            assertHostAddressEqual(expectedInet6Address.getHostAddress(),
                    deserializedIPV6Addr.getHostAddress());
            assertAddressEqual(expectedInet6Address.getAddress(),
                    deserializedIPV6Addr.getAddress());
            assertScopeIdEqual(expectedInet6Address.getScopeId(),
                    deserializedIPV6Addr.getScopeId());
            assertNetworkInterfaceEqual(
                    expectedInet6Address.getScopedInterface(),
                    deserializedIPV6Addr.getScopedInterface());
        } catch (Exception e) {
            System.err.println("Exception caught during deserialization");
            failed = true;
            e.printStackTrace();
        }
    }

    static void testSerializedE1000gInet6Address() throws IOException {
        System.err.println("\n testSerializedE1000gInet6Address:  enter \n");
        boolean testWithNetIf = true;
        boolean useMockInet6Address = false;

        NetworkInterface testNetIf = NetworkInterface
                .getByName(NETWORK_IF_E1000G0);
        Inet6Address expectedInet6Address = null;
        if (testNetIf != null) {
            System.err
                    .println("\n testSerializedE1000gInet6Address:  using netif \n");
            try {
                expectedInet6Address = Inet6Address.getByAddress(
                        E1000G0HOSTNAME, E1000G0IPV6ADDRESS, testNetIf);
            } catch (UnknownHostException ukhEx) {
                ukhEx.printStackTrace();
                testWithNetIf = true;
                useMockInet6Address = true;
            }
        } else {
            System.err
                    .println("\n testSerializedE1000gInet6Address:  using index \n");
            try {
                expectedInet6Address = Inet6Address.getByAddress(
                        E1000G0HOSTNAME, E1000G0IPV6ADDRESS, SCOPE_ID_ZERO);
            } catch (UnknownHostException ukhEx1) {
                ukhEx1.printStackTrace();
                useMockInet6Address = true;
            }
            testWithNetIf = false;
        }

        byte[] serializedAddress = SerialData_ifname_e1000g0;

        // displayExpectedInet6Address(expectedInet6Address);

        try (ByteArrayInputStream bis = new ByteArrayInputStream(
                serializedAddress);
                ObjectInputStream oin = new ObjectInputStream(bis)) {
            Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
            System.err.println("Deserialized Inet6Address "
                    + deserializedIPV6Addr);

            if (!useMockInet6Address) {
                assertHostNameEqual(expectedInet6Address.getHostName(),
                        deserializedIPV6Addr.getHostName());
                if (testWithNetIf) {
                    assertHostAddressEqual(
                            expectedInet6Address.getHostAddress(),
                            deserializedIPV6Addr.getHostAddress());
                } else {
                    assertHostAddressEqual(
                            MockE1000g0Inet6Address.getBareHostAddress(),
                            deserializedIPV6Addr.getHostAddress());
                }
                assertAddressEqual(expectedInet6Address.getAddress(),
                        deserializedIPV6Addr.getAddress());
                assertScopeIdEqual(expectedInet6Address.getScopeId(),
                        deserializedIPV6Addr.getScopeId());
                if (testWithNetIf) {
                    assertNetworkInterfaceEqual(
                            expectedInet6Address.getScopedInterface(),
                            deserializedIPV6Addr.getScopedInterface());
                } else {
                    assertNetworkInterfaceEqual(null,
                            deserializedIPV6Addr.getScopedInterface());
                }
            } else { // use MockLo0Inet6Address
                assertHostNameEqual(MockE1000g0Inet6Address.getHostName(),
                        deserializedIPV6Addr.getHostName());
                if (testWithNetIf) {
                    assertHostAddressEqual(
                            MockE1000g0Inet6Address.getHostAddress(),
                            deserializedIPV6Addr.getHostAddress());
                } else {
                    assertHostAddressEqual(
                            MockE1000g0Inet6Address.getHostAddressWithIndex(),
                            deserializedIPV6Addr.getHostAddress());
                }
                assertAddressEqual(MockE1000g0Inet6Address.getAddress(),
                        deserializedIPV6Addr.getAddress());
                if (testWithNetIf) {
                assertScopeIdEqual(MockE1000g0Inet6Address.getScopeId(),
                        deserializedIPV6Addr.getScopeId());
                } else {
                    assertScopeIdEqual(MockE1000g0Inet6Address.getScopeZero(),
                            deserializedIPV6Addr.getScopeId());
                }
                assertNetworkInterfaceNameEqual(
                        MockE1000g0Inet6Address.getScopeIfName(),
                        deserializedIPV6Addr.getScopedInterface());
            }
        } catch (Exception e) {
            System.err.println("Exception caught during deserialization");
            failed = true;
            e.printStackTrace();
        }
    }

    static void testSerializedLo0Inet6Address() throws IOException {
        System.err.println("\n testSerializedLo0Inet6Address:  enter \n");
        boolean testWithNetIf = true;
        boolean useMockInet6Address = false;

        NetworkInterface testNetIf = NetworkInterface.getByName(NETWORK_IF_LO0);
        Inet6Address expectedInet6Address = null;
        if (testNetIf != null) {
            System.err
                    .println("\n testSerializedLo0Inet6Address:  using netif \n");
            try {
                expectedInet6Address = Inet6Address.getByAddress(LOCALHOSTNAME,
                        LOOPBACKIPV6ADDRESS, testNetIf);
            } catch (UnknownHostException ukhEx) {
                ukhEx.printStackTrace();
                testWithNetIf = true;
                useMockInet6Address = true;
            }
        } else {
            System.err
                    .println("\n testSerializedLo0Inet6Address:  using index \n");
            try {
                expectedInet6Address = Inet6Address.getByAddress(LOCALHOSTNAME,
                        LOOPBACKIPV6ADDRESS, SCOPE_ID_ZERO);
            } catch (UnknownHostException ukhEx1) {
                ukhEx1.printStackTrace();
                useMockInet6Address = true;
            }
            testWithNetIf = false;
        }

        // displayExpectedInet6Address(expectedInet6Address);

        byte[] serializedAddress = SerialData_ifname_lo0;

        try (ByteArrayInputStream bis = new ByteArrayInputStream(
                serializedAddress);
                ObjectInputStream oin = new ObjectInputStream(bis)) {
            Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
            System.err.println("Deserialized Inet6Address "
                    + deserializedIPV6Addr);
            if (!useMockInet6Address) {
                assertHostNameEqual(expectedInet6Address.getHostName(),
                        deserializedIPV6Addr.getHostName());
                if (testWithNetIf) {
                    assertHostAddressEqual(
                            expectedInet6Address.getHostAddress(),
                            deserializedIPV6Addr.getHostAddress());
                } else {
                    assertHostAddressEqual(
                            MockLo0Inet6Address.getBareHostAddress(),
                            deserializedIPV6Addr.getHostAddress());
                }
                assertAddressEqual(expectedInet6Address.getAddress(),
                        deserializedIPV6Addr.getAddress());
                assertScopeIdEqual(expectedInet6Address.getScopeId(),
                        deserializedIPV6Addr.getScopeId());
                if (testWithNetIf) {
                    assertNetworkInterfaceEqual(
                            expectedInet6Address.getScopedInterface(),
                            deserializedIPV6Addr.getScopedInterface());
                } else {
                    assertNetworkInterfaceEqual(null,
                            deserializedIPV6Addr.getScopedInterface());
                }
            } else { // use MockLo0Inet6Address
                assertHostNameEqual(MockLo0Inet6Address.getHostName(),
                        deserializedIPV6Addr.getHostName());
                if (testWithNetIf) {
                    assertHostAddressEqual(
                            MockLo0Inet6Address.getHostAddress(),
                            deserializedIPV6Addr.getHostAddress());
                } else {
                    assertHostAddressEqual(
                            MockLo0Inet6Address.getHostAddressWithIndex(),
                            deserializedIPV6Addr.getHostAddress());
                }
                assertAddressEqual(MockLo0Inet6Address.getAddress(),
                        deserializedIPV6Addr.getAddress());
                if (testWithNetIf) {
                assertScopeIdEqual(MockLo0Inet6Address.getScopeId(),
                        deserializedIPV6Addr.getScopeId());
                } else {
                    assertScopeIdEqual(MockLo0Inet6Address.getScopeZero(),
                            deserializedIPV6Addr.getScopeId());
                }
                assertNetworkInterfaceNameEqual(
                        MockLo0Inet6Address.getScopeIfName(),
                        deserializedIPV6Addr.getScopedInterface());
            }
        } catch (Exception e) {
            System.err.println("Exception caught during deserialization");
            failed = true;
            e.printStackTrace();
        }
    }

    static List<Inet6Address> getAllInet6Addresses() throws Exception {
        // System.err.println("\n getAllInet6Addresses: \n ");
        ArrayList<Inet6Address> inet6Addresses = new ArrayList();
        for (Enumeration<NetworkInterface> e = NetworkInterface
                .getNetworkInterfaces(); e.hasMoreElements();) {
            NetworkInterface netIF = e.nextElement();
            for (Enumeration<InetAddress> iadrs = netIF.getInetAddresses(); iadrs
                    .hasMoreElements();) {
                InetAddress iadr = iadrs.nextElement();
                if (iadr instanceof Inet6Address) {
                    System.err.println("Test NetworkInterface:  " + netIF);
                    Inet6Address i6adr = (Inet6Address) iadr;
                    System.err.println(" address " + iadr);
                    System.err.println(" scoped iface: "
                            + i6adr.getScopedInterface());
                    // using this to actually set the hostName for an
                    // InetAddress
                    // created through the NetworkInterface
                    // have found that the fabricated instances has a null
                    // hostName
                    System.err.println(" hostName: " + i6adr.getHostName());
                    inet6Addresses.add(i6adr);
                }
            }
        }
        return inet6Addresses;
    }

    static void assertHostNameEqual(String expectedHostName,
            String deserializedHostName) {
        System.err
                .println("Inet6AddressSerializationTest.assertHostNameEqual:");
        if (expectedHostName == null) {
            if (deserializedHostName == null) {
                // ok, do nothing.
            } else {
                System.err.println("Error checking " + " HostName, expected:"
                        + expectedHostName + ", got :" + deserializedHostName);
                failed = true;
            }
        } else if (!expectedHostName.equals(deserializedHostName)) {
            System.err.println("Error checking "
                    + // versionStr +
                    " HostName, expected:" + expectedHostName + ", got :"
                    + deserializedHostName);
            failed = true;
        } else {
            System.err.println("HostName equality "
                    + // versionStr +
                    " HostName, expected:" + expectedHostName + ", got :"
                    + deserializedHostName);
        }
    }

    static void assertHostAddressEqual(String expectedHostAddress,
            String deserializedHostAddress) {
        System.err
                .println("Inet6AddressSerializationTest.assertHostAddressEqual:");
        if (expectedHostAddress == null) {
            if (deserializedHostAddress == null) {
                // ok, do nothing.
            } else {
                System.err.println("Error checking "
                        + " HostAddress, expected: " + expectedHostAddress
                        + ", got: " + deserializedHostAddress);
                failed = true;
            }
        } else if (!expectedHostAddress.equals(deserializedHostAddress)) {
            System.err.println("Error checking "
                    + // versionStr +
                    " HostAddress, expected: " + expectedHostAddress
                    + ", got: " + deserializedHostAddress);
            failed = true;
        } else {
            System.err.println("HostAddress equality "
                    + // versionStr +
                    " HostAddress, expected: " + expectedHostAddress
                    + ", got: " + deserializedHostAddress);
        }
    }

    static void assertAddressEqual(byte[] expectedAddress,
            byte[] deserializedAddress) {
        System.err.println("Inet6AddressSerializationTest.assertAddressEqual:");
        if (expectedAddress == null) {
            if (deserializedAddress == null) {
                // ok, do nothing.
            } else {
                System.err.println("Error checking " + " Address, expected:"
                        + Arrays.toString(expectedAddress) + ", got: "
                        + Arrays.toString(deserializedAddress));
                failed = true;
            }
        } else if (!Arrays.equals(expectedAddress, deserializedAddress)) {
            System.err.println("Error checking "
                    + // versionStr +
                    " Address, expected: " + Arrays.toString(expectedAddress)
                    + ", got: " + Arrays.toString(deserializedAddress));
            failed = true;
        } else {
            System.err.println("Address equality "
                    + // versionStr +
                    " Address, expected: " + Arrays.toString(expectedAddress)
                    + ", got: " + Arrays.toString(deserializedAddress));
        }
    }

    static void assertScopeIdEqual(int expectedScopeId, int deserializedScopeId) {
        System.err.println("Inet6AddressSerializationTest.assertScopeIdEqual:");
        if (expectedScopeId != deserializedScopeId) {
            System.err.println("Error checking " + " ScopeId, expected:"
                    + expectedScopeId + ", got: " + deserializedScopeId);
            failed = true;
        } else {
            System.err.println("ScopeId equality "
                    + // versionStr +
                    " ScopeId, expected: " + expectedScopeId + ", got: "
                    + deserializedScopeId);
        }
    }

    static void assertNetworkInterfaceNameEqual(String expectedNetworkIfName,
            NetworkInterface deserializedNetworkInterface) {

        if (deserializedNetworkInterface != null) {
            String deserializedNetworkIfName = deserializedNetworkInterface
                    .getName();
            System.err
                    .println("Inet6AddressSerializationTest.assertHostNameEqual:");
            if (expectedNetworkIfName == null) {
                if (deserializedNetworkIfName == null) {
                    // ok, do nothing.
                } else {
                    System.err.println("Error checking "
                            + " NetworkIfName, expected: "
                            + expectedNetworkIfName + ", got: "
                            + deserializedNetworkIfName);
                    failed = true;
                }
            } else if (!expectedNetworkIfName.equals(deserializedNetworkIfName)) {
                System.err.println("Error checking "
                        + " NetworkIfName, expected: " + expectedNetworkIfName
                        + ", got: " + deserializedNetworkIfName);
                failed = true;
            } else {
                System.err.println("NetworkIfName equality "
                        + " NetworkIfName, expected: " + expectedNetworkIfName
                        + ", got: " + deserializedNetworkIfName);
            }
        } else {
            System.err
                    .println("Warning "
                            + " NetworkInterface  expected, but is null - ifname not relevant on deserializing host");
        }
    }

    static void assertNetworkInterfaceEqual(
            NetworkInterface expectedNetworkInterface,
            NetworkInterface deserializedNetworkInterface) {
        System.err
                .println("Inet6AddressSerializationTest.assertNetworkInterfaceEqual:");
        if (expectedNetworkInterface == null) {
            if (deserializedNetworkInterface == null) {
                // ok, do nothing.
                System.err.println("Network Interface equality "
                        + " NetworkInterface, expected:"
                        + expectedNetworkInterface + ", got :"
                        + deserializedNetworkInterface);
            } else {
                System.err.println("Error checking "
                        + " NetworkInterface, expected:"
                        + expectedNetworkInterface + ", got :"
                        + deserializedNetworkInterface);
                failed = true;
            }
        } else if (!expectedNetworkInterface
                .equals(deserializedNetworkInterface)) {
            System.err.println("Error checking "
                    + // versionStr +
                    " NetworkInterface, expected:" + expectedNetworkInterface
                    + ", got :" + deserializedNetworkInterface);
            failed = true;
        } else {
            System.err.println("Network Interface equality "
                    + " NetworkInterface, expected:" + expectedNetworkInterface
                    + ", got :" + deserializedNetworkInterface);
        }
    }

    static void equal(Object expected, Object got) {
        if (expected == null) {
            if (got == null) {
                // ok, do nothing.
            } else {
                System.err.println("Error checking "
                        + " serial data, expected:" + expected + ", got :"
                        + got);
                failed = true;
            }
        } else if (!expected.equals(got)) {
            System.err.println("Error checking " + // versionStr +
                    " serial data, expected:" + expected + ", got :" + got);
            failed = true;
        }
    }

    // Used to generate serialData.
    static byte[] generateSerializedInet6AddressData(Inet6Address addr,
            PrintStream out, boolean outputToFile) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try (ObjectOutputStream oos = new ObjectOutputStream(bos)) {
            oos.writeObject(addr);
        }

        String ifname = getIfName(addr);
        byte[] ba = bos.toByteArray();
        if (out != null) {
            out.format("static final byte[] SerialData" + ifname + " = {\n");
            for (int i = 0; i < ba.length; i++) {
                out.format(" (byte)0x%02X", ba[i]);
                if (i != (ba.length - 1))
                    out.format(",");
                if (((i + 1) % 6) == 0)
                    out.format("\n");
            }
            out.format(" };\n \n");
        }
        if (outputToFile) {
            serializeInet6AddressToFile(addr);
        }
        return ba;
    }

    private static String getIfName(Inet6Address inet6Addr) {
        String ifname;
        if (inet6Addr.getScopedInterface() != null) {
            ifname = "_ifname_" + inet6Addr.getScopedInterface().getName();
        } else {
            ifname = "_ifname_"
                    + Integer.valueOf(inet6Addr.getScopeId()).toString();
        }
        return ifname;
    }

    static void generateAllInet6AddressSerializedData() throws IOException {
        // System.err.println("generateAllInet6AddressSerializedData: enter ....");

        List<Inet6Address> inet6Addresses;

        try {
            inet6Addresses = getAllInet6Addresses();
        } catch (Exception e) {
            e.printStackTrace();
            throw new IOException(e);
        }

        for (Inet6Address inet6Address : inet6Addresses) {
            generateSerializedInet6AddressData(inet6Address, System.out, true);
        }
    }

    static void serializeInet6AddressToFile(Inet6Address inet6Addr) {

        // System.err
        // .println("serializeInet6AddressToIPV6AddressFile: enter ....");

        FileOutputStream fOut = null;
        String inet6AddressOutputFilename = null;
        inet6AddressOutputFilename = createOutputFileName(inet6Addr);
        try {
            fOut = new FileOutputStream(inet6AddressOutputFilename);
        } catch (FileNotFoundException fnfEx) {

            fnfEx.printStackTrace();
        }
        ObjectOutputStream ooStream = null;
        try {
            if (fOut != null) {
                ooStream = new ObjectOutputStream(fOut);
            } else {
                System.err.println("Problem initilising Object output stream ");
                System.exit(-1);
            }

        } catch (IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }

        // serialise the last Inet6Address
        /*
         * System.err
         * .println("serializeInet6AddressToIPV6AddressFile scoped iface:  \n" +
         * inet6Addr.getScopedInterface());
         */
        try {
            ooStream.writeObject(inet6Addr);
        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(-1);
        }

        try {
            ooStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String createOutputFileName(Inet6Address inet6Addr) {
        String inet6AddressOutputFilename;
        if (inet6Addr.getScopedInterface() != null) {
            inet6AddressOutputFilename = "IPV6Address_"
                    + inet6Addr.getScopedInterface().getName() + ".out";
        } else {
            inet6AddressOutputFilename = "IPV6Address_"
                    + Integer.valueOf(inet6Addr.getScopeId()).toString()
                    + ".out";
        }
        return inet6AddressOutputFilename;
    }

    // --- Generated data ---
    // JDK7 output java Inet6AddressSerializationTest generate.

    // loopback lo0 interface on Solaris 10

    static final byte[] JDK7Inet6AddressSerialData = { (byte) 0xAC,
            (byte) 0xED, (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
            (byte) 0x00, (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
            (byte) 0x61, (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
            (byte) 0x2E, (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
            (byte) 0x36, (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72,
            (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C,
            (byte) 0x20, (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80,
            (byte) 0x21, (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49,
            (byte) 0x00, (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
            (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
            (byte) 0x5A, (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63,
            (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
            (byte) 0x64, (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74,
            (byte) 0x5A, (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63,
            (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
            (byte) 0x66, (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
            (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C,
            (byte) 0x00, (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E,
            (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00,
            (byte) 0x12, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
            (byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
            (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
            (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B,
            (byte) 0x00, (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61,
            (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
            (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
            (byte) 0x42, (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14,
            (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E,
            (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49,
            (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64,
            (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
            (byte) 0x2D, (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F,
            (byte) 0xE3, (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00,
            (byte) 0x03, (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61,
            (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
            (byte) 0x73, (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66,
            (byte) 0x61, (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79,
            (byte) 0x4C, (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F,
            (byte) 0x73, (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D,
            (byte) 0x65, (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00,
            (byte) 0x01, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x02, (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C,
            (byte) 0x6F, (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68,
            (byte) 0x6F, (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x70,
            (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
            (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8,
            (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02,
            (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };

    // JDK8 output java Inet6AddressSerializationTest generate.
    // loopback lo0 interface on Solaris 10

    static final byte[] JDK8Inet6AddressSerialData = { (byte) 0xAC,
            (byte) 0xED, (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
            (byte) 0x00, (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
            (byte) 0x61, (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
            (byte) 0x2E, (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
            (byte) 0x36, (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72,
            (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C,
            (byte) 0x20, (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80,
            (byte) 0x21, (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49,
            (byte) 0x00, (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
            (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
            (byte) 0x5A, (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63,
            (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
            (byte) 0x64, (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74,
            (byte) 0x5A, (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63,
            (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
            (byte) 0x66, (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
            (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C,
            (byte) 0x00, (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E,
            (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00,
            (byte) 0x12, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
            (byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
            (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
            (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B,
            (byte) 0x00, (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61,
            (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
            (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
            (byte) 0x42, (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14,
            (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E,
            (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49,
            (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64,
            (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
            (byte) 0x2D, (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F,
            (byte) 0xE3, (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00,
            (byte) 0x03, (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61,
            (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
            (byte) 0x73, (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66,
            (byte) 0x61, (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79,
            (byte) 0x4C, (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F,
            (byte) 0x73, (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D,
            (byte) 0x65, (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00,
            (byte) 0x01, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x02, (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C,
            (byte) 0x6F, (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68,
            (byte) 0x6F, (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x70,
            (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
            (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8,
            (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02,
            (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };

    // java Inet6AddressSerializationTest generateAll produces this inet6address
    // serial data
    // jdk8 generated serialization of on address fe80:0:0:0:21b:24ff:febd:f29c
    // net if e1000g0

    static final byte[] SerialData_ifname_e1000g0 = { (byte) 0xAC, (byte) 0xED,
            (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, (byte) 0x00,
            (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
            (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E,
            (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x36,
            (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65,
            (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C, (byte) 0x20,
            (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80, (byte) 0x21,
            (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49, (byte) 0x00,
            (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F, (byte) 0x70,
            (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64, (byte) 0x5A,
            (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
            (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
            (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x5A,
            (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
            (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x66,
            (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x5F,
            (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C, (byte) 0x00,
            (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E, (byte) 0x61,
            (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x12,
            (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
            (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
            (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
            (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B, (byte) 0x00,
            (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61, (byte) 0x64,
            (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
            (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
            (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6A,
            (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E, (byte) 0x6E,
            (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49, (byte) 0x6E,
            (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64, (byte) 0x64,
            (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x2D,
            (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F, (byte) 0xE3,
            (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00, (byte) 0x03,
            (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61, (byte) 0x64,
            (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
            (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66, (byte) 0x61,
            (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79, (byte) 0x4C,
            (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F, (byte) 0x73,
            (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
            (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00, (byte) 0x01,
            (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
            (byte) 0x74, (byte) 0x00, (byte) 0x25, (byte) 0x66, (byte) 0x65,
            (byte) 0x38, (byte) 0x30, (byte) 0x3A, (byte) 0x30, (byte) 0x3A,
            (byte) 0x30, (byte) 0x3A, (byte) 0x30, (byte) 0x3A, (byte) 0x32,
            (byte) 0x31, (byte) 0x62, (byte) 0x3A, (byte) 0x32, (byte) 0x34,
            (byte) 0x66, (byte) 0x66, (byte) 0x3A, (byte) 0x66, (byte) 0x65,
            (byte) 0x62, (byte) 0x64, (byte) 0x3A, (byte) 0x66, (byte) 0x32,
            (byte) 0x39, (byte) 0x63, (byte) 0x25, (byte) 0x65, (byte) 0x31,
            (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x67, (byte) 0x30,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x01,
            (byte) 0x01, (byte) 0x74, (byte) 0x00, (byte) 0x07, (byte) 0x65,
            (byte) 0x31, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x67,
            (byte) 0x30, (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02,
            (byte) 0x5B, (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17,
            (byte) 0xF8, (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0,
            (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0xFE,
            (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x1B, (byte) 0x24,
            (byte) 0xFF, (byte) 0xFE, (byte) 0xBD, (byte) 0xF2, (byte) 0x9C,
            (byte) 0x78 };

    // jdk8 generated serialization of address 0::1 on net if lo0 hostname
    // localhost scope_id 1

    static final byte[] SerialData_ifname_lo0 = { (byte) 0xAC, (byte) 0xED,
            (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, (byte) 0x00,
            (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
            (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E,
            (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x36,
            (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65,
            (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C, (byte) 0x20,
            (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80, (byte) 0x21,
            (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49, (byte) 0x00,
            (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F, (byte) 0x70,
            (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64, (byte) 0x5A,
            (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
            (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
            (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x5A,
            (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
            (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x66,
            (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x5F,
            (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C, (byte) 0x00,
            (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E, (byte) 0x61,
            (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x12,
            (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
            (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
            (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
            (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B, (byte) 0x00,
            (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61, (byte) 0x64,
            (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
            (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
            (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6A,
            (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E, (byte) 0x6E,
            (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49, (byte) 0x6E,
            (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64, (byte) 0x64,
            (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x2D,
            (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F, (byte) 0xE3,
            (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00, (byte) 0x03,
            (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61, (byte) 0x64,
            (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
            (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66, (byte) 0x61,
            (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79, (byte) 0x4C,
            (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F, (byte) 0x73,
            (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
            (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00, (byte) 0x01,
            (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
            (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C, (byte) 0x6F,
            (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68, (byte) 0x6F,
            (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x74, (byte) 0x00,
            (byte) 0x03, (byte) 0x6C, (byte) 0x6F, (byte) 0x30, (byte) 0x75,
            (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
            (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8, (byte) 0x06,
            (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02, (byte) 0x00,
            (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };

}

class MockLo0Inet6Address {

    private static final byte[] LOOPBACKIPV6ADDRESS = { (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 };

    private static final String LOCALHOSTNAME = "localhost";

    private static final String LO0HOSTADDRESS = "0:0:0:0:0:0:0:1%lo0";

    private static final String BARE_LO0HOSTADDRESS = "0:0:0:0:0:0:0:1";

    private static final String LO0HOSTADDRESS_WITHINDEX = "0:0:0:0:0:0:0:1%1";

    private static final int SCOPE_ID_LO0 = 1;

    private static final int SCOPE_ID_ZERO = 0;

    public static final String NETWORK_IF_LO0 = "lo0";

    static String getHostName() {
        return LOCALHOSTNAME;
    }

    static String getHostAddress() {
        return LO0HOSTADDRESS;
    }

    static String getBareHostAddress() {
        return BARE_LO0HOSTADDRESS;
    }

    static String getHostAddressWithIndex() {
        return LO0HOSTADDRESS_WITHINDEX;
    }

    static byte[] getAddress() {
        return LOOPBACKIPV6ADDRESS;
    }

    static int getScopeId() {
        return SCOPE_ID_LO0;
    }

    static int getScopeZero() {
        return SCOPE_ID_ZERO;
    }

    static String getScopeIfName() {
        return NETWORK_IF_LO0;
    }

}

class MockE1000g0Inet6Address {

    // fe80::21b:24ff:febd:f29c
    private static final byte[] E1000G0IPV6ADDRESS = { (byte) 0xfe,
            (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x1b, (byte) 0x24,
            (byte) 0xff, (byte) 0xfe, (byte) 0xbd, (byte) 0xf2, (byte) 0x9c };

    private static final String E1000G0HOSTNAME = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";

    private static final String BARE_E1000G0HOSTADDRESS = "fe80:0:0:0:21b:24ff:febd:f29c";

    private static final String E1000G0HOSTADDRESS_WITHINDEX = "fe80:0:0:0:21b:24ff:febd:f29c%2";

    private static final String E1000G0HOSTADDRESS = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";

    private static final String NETWORK_IF_E1000G0 = "e1000g0";

    private static final int SCOPE_ID_E1000G0 = 2;

    private static final int SCOPE_ID_ZERO = 0;

    static String getHostName() {
        return E1000G0HOSTNAME;
    }

    static String getHostAddress() {
        return E1000G0HOSTADDRESS;
    }

    static String getHostAddressWithIndex() {
        return E1000G0HOSTADDRESS_WITHINDEX;
    }

    static String getBareHostAddress() {
        return BARE_E1000G0HOSTADDRESS;
    }

    static byte[] getAddress() {
        return E1000G0IPV6ADDRESS;
    }

    static int getScopeId() {
        return SCOPE_ID_E1000G0;
    }

    static int getScopeZero() {
        return SCOPE_ID_ZERO;
    }

    static String getScopeIfName() {
        return NETWORK_IF_E1000G0;
    }

}

Other Java examples (source code examples)

Here is a short list of links related to this Java Inet6AddressSerializationTest.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.