jdk/test/java/net/Inet6Address/serialize/Inet6AddressSerializationTest.java
changeset 17198 32db080a2a70
child 29528 d1a052f7ccef
equal deleted inserted replaced
17197:8ee6909f1320 17198:32db080a2a70
       
     1 /*
       
     2  * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 import java.io.ByteArrayInputStream;
       
    25 import java.io.ByteArrayOutputStream;
       
    26 import java.io.FileNotFoundException;
       
    27 import java.io.FileOutputStream;
       
    28 import java.io.IOException;
       
    29 import java.io.ObjectInputStream;
       
    30 import java.io.ObjectOutputStream;
       
    31 import java.io.PrintStream;
       
    32 import java.net.Inet6Address;
       
    33 import java.net.InetAddress;
       
    34 import java.net.NetworkInterface;
       
    35 import java.net.UnknownHostException;
       
    36 import java.util.ArrayList;
       
    37 import java.util.Arrays;
       
    38 import java.util.Enumeration;
       
    39 import java.util.List;
       
    40 
       
    41 /**
       
    42  * @test
       
    43  * @bug 8007373
       
    44  * @summary jdk7 backward compatibility serialization problem
       
    45  */
       
    46 
       
    47 public class Inet6AddressSerializationTest {
       
    48 
       
    49     static boolean failed;
       
    50 
       
    51     public static final int LOOPBACK_SCOPE_ID = 0;
       
    52 
       
    53     public static final byte[] IN6ADDR_ANY_INIT = { (byte) 0x00, (byte) 0x00,
       
    54             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
    55             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
    56             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
       
    57 
       
    58     public static final byte[] LOOPBACKIPV6ADDRESS = { (byte) 0x00,
       
    59             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
    60             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
    61             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 };
       
    62 
       
    63     // fe80::21b:24ff:febd:f29c
       
    64     public static final byte[] E1000G0IPV6ADDRESS = { (byte) 0xfe, (byte) 0x80,
       
    65             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
    66             (byte) 0x00, (byte) 0x02, (byte) 0x1b, (byte) 0x24, (byte) 0xff,
       
    67             (byte) 0xfe, (byte) 0xbd, (byte) 0xf2, (byte) 0x9c };
       
    68 
       
    69     public static final String E1000G0HOSTNAME = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";
       
    70 
       
    71     public static final String LOCALHOSTNAME = "localhost";
       
    72 
       
    73     public static final String NETWORK_IF_E1000G0 = "e1000g0";
       
    74 
       
    75     public static final String NETWORK_IF_LO0 = "lo0";
       
    76 
       
    77     public static final int SCOPE_ID_E1000G0 = 2;
       
    78 
       
    79     public static final int SCOPE_ID_LO0 = 1;
       
    80 
       
    81     public static final int SCOPE_ID_ZERO = 0;
       
    82 
       
    83     public static void main(String[] args) throws Exception {
       
    84         // args[0] == generate-loopback generates serial data for loopback if
       
    85         // args[0] == generateAll generates serial data for interfaces with an
       
    86         // IPV6 address binding
       
    87 
       
    88         if (args.length != 0) {
       
    89 
       
    90             if (args[0].equals("generate-loopback")) {
       
    91 
       
    92                 generateSerializedInet6AddressData(Inet6Address.getByAddress(
       
    93                         InetAddress.getLoopbackAddress().getHostName(),
       
    94                         LOOPBACKIPV6ADDRESS, LOOPBACK_SCOPE_ID), System.out,
       
    95                         true);
       
    96 
       
    97             } else {
       
    98                 generateAllInet6AddressSerializedData();
       
    99             }
       
   100         } else {
       
   101             runTests();
       
   102         }
       
   103     }
       
   104 
       
   105     private static void runTests() throws UnknownHostException, Exception,
       
   106             IOException {
       
   107         byte[] thisHostIPV6Address = null;
       
   108         int scope_id = LOOPBACK_SCOPE_ID;
       
   109 
       
   110         System.out.println("Hostname: "
       
   111                 + InetAddress.getLocalHost().getHostName());
       
   112         System.out.println("LocalHost isLoopback : "
       
   113                 + InetAddress.getLocalHost().isLoopbackAddress());
       
   114         thisHostIPV6Address = getThisHostIPV6Address(InetAddress.getLocalHost()
       
   115                 .getHostName());
       
   116 
       
   117         if (thisHostIPV6Address == null) {
       
   118             thisHostIPV6Address = IN6ADDR_ANY_INIT;
       
   119         }
       
   120 
       
   121         // testing JDK7 generated serialized loopback against locally generated
       
   122         // loopback address
       
   123         testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
       
   124                 .getLoopbackAddress().getHostName(), LOOPBACKIPV6ADDRESS,
       
   125                 scope_id), JDK7Inet6AddressSerialData);
       
   126         // testing JDK8 generated serialized loopback against locally generated
       
   127         // loopback address
       
   128         testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
       
   129                 .getLoopbackAddress().getHostName(), LOOPBACKIPV6ADDRESS,
       
   130                 scope_id), JDK8Inet6AddressSerialData);
       
   131         testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
       
   132                 .getLocalHost().getHostName(), IN6ADDR_ANY_INIT, scope_id),
       
   133                 null);
       
   134         testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
       
   135                 .getLocalHost().getHostName(), thisHostIPV6Address, scope_id),
       
   136                 null);
       
   137         testAllNetworkInterfaces();
       
   138 
       
   139         // test against lo0
       
   140         testSerializedLo0Inet6Address();
       
   141 
       
   142         testSerializedE1000gInet6Address();
       
   143 
       
   144         if (failed)
       
   145             throw new RuntimeException("Some tests failed, check output");
       
   146     }
       
   147 
       
   148     private static byte[] getThisHostIPV6Address(String hostName)
       
   149             throws Exception {
       
   150         InetAddress[] thisHostIPAddresses = null;
       
   151         try {
       
   152             thisHostIPAddresses = InetAddress.getAllByName(InetAddress
       
   153                     .getLocalHost().getHostName());
       
   154         } catch (UnknownHostException uhEx) {
       
   155             uhEx.printStackTrace();
       
   156             throw uhEx;
       
   157         }
       
   158         byte[] thisHostIPV6Address = null;
       
   159         for (InetAddress inetAddress : thisHostIPAddresses) {
       
   160             if (inetAddress instanceof Inet6Address) {
       
   161                 if (inetAddress.getHostName().equals(hostName)) {
       
   162                     thisHostIPV6Address = inetAddress.getAddress();
       
   163                     break;
       
   164                 }
       
   165             }
       
   166         }
       
   167         // System.err.println("getThisHostIPV6Address: address is "
       
   168         // + Arrays.toString(thisHostIPV6Address));
       
   169         return thisHostIPV6Address;
       
   170     }
       
   171 
       
   172     static void testAllNetworkInterfaces() throws Exception {
       
   173         System.err.println("\n testAllNetworkInterfaces: \n ");
       
   174         for (Enumeration<NetworkInterface> e = NetworkInterface
       
   175                 .getNetworkInterfaces(); e.hasMoreElements();) {
       
   176             NetworkInterface netIF = e.nextElement();
       
   177             for (Enumeration<InetAddress> iadrs = netIF.getInetAddresses(); iadrs
       
   178                     .hasMoreElements();) {
       
   179                 InetAddress iadr = iadrs.nextElement();
       
   180                 if (iadr instanceof Inet6Address) {
       
   181                     System.err.println("Test NetworkInterface:  " + netIF);
       
   182                     Inet6Address i6adr = (Inet6Address) iadr;
       
   183                     System.err.println("Testing with " + iadr);
       
   184                     System.err.println(" scoped iface: "
       
   185                             + i6adr.getScopedInterface());
       
   186                     testInet6AddressSerialization(i6adr, null);
       
   187                 }
       
   188             }
       
   189         }
       
   190     }
       
   191 
       
   192     static void displayExpectedInet6Address(Inet6Address expectedInet6Address) {
       
   193 
       
   194         String expectedHostName = expectedInet6Address.getHostName();
       
   195         byte[] expectedAddress = expectedInet6Address.getAddress();
       
   196         String expectedHostAddress = expectedInet6Address.getHostAddress();
       
   197         int expectedScopeId = expectedInet6Address.getScopeId();
       
   198         NetworkInterface expectedNetIf = expectedInet6Address
       
   199                 .getScopedInterface();
       
   200 
       
   201         System.err.println("Excpected HostName: " + expectedHostName);
       
   202         System.err.println("Expected Address: "
       
   203                 + Arrays.toString(expectedAddress));
       
   204         System.err.println("Expected HostAddress: " + expectedHostAddress);
       
   205         System.err.println("Expected Scope Id " + expectedScopeId);
       
   206         System.err.println("Expected NetworkInterface " + expectedNetIf);
       
   207         System.err.println("Expected Inet6Address " + expectedInet6Address);
       
   208     }
       
   209 
       
   210     // test serialization deserialization of Inet6Address
       
   211     static void testInet6AddressSerialization(
       
   212             Inet6Address expectedInet6Address, byte[] serializedAddress)
       
   213             throws IOException {
       
   214         System.err.println("\n testInet6AddressSerialization:  enter \n");
       
   215 
       
   216         // displayExpectedInet6Address(expectedInet6Address);
       
   217 
       
   218         byte[] serialData = serializedAddress != null ? serializedAddress
       
   219                 : generateSerializedInet6AddressData(expectedInet6Address,
       
   220                         null, false);
       
   221         try (ByteArrayInputStream bis = new ByteArrayInputStream(serialData);
       
   222                 ObjectInputStream oin = new ObjectInputStream(bis)) {
       
   223             Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
       
   224             System.err.println("Deserialized Inet6Address "
       
   225                     + deserializedIPV6Addr);
       
   226             assertHostNameEqual(expectedInet6Address.getHostName(),
       
   227                     deserializedIPV6Addr.getHostName());
       
   228             assertHostAddressEqual(expectedInet6Address.getHostAddress(),
       
   229                     deserializedIPV6Addr.getHostAddress());
       
   230             assertAddressEqual(expectedInet6Address.getAddress(),
       
   231                     deserializedIPV6Addr.getAddress());
       
   232             assertScopeIdEqual(expectedInet6Address.getScopeId(),
       
   233                     deserializedIPV6Addr.getScopeId());
       
   234             assertNetworkInterfaceEqual(
       
   235                     expectedInet6Address.getScopedInterface(),
       
   236                     deserializedIPV6Addr.getScopedInterface());
       
   237         } catch (Exception e) {
       
   238             System.err.println("Exception caught during deserialization");
       
   239             failed = true;
       
   240             e.printStackTrace();
       
   241         }
       
   242     }
       
   243 
       
   244     static void testSerializedE1000gInet6Address() throws IOException {
       
   245         System.err.println("\n testSerializedE1000gInet6Address:  enter \n");
       
   246         boolean testWithNetIf = true;
       
   247         boolean useMockInet6Address = false;
       
   248 
       
   249         NetworkInterface testNetIf = NetworkInterface
       
   250                 .getByName(NETWORK_IF_E1000G0);
       
   251         Inet6Address expectedInet6Address = null;
       
   252         if (testNetIf != null) {
       
   253             System.err
       
   254                     .println("\n testSerializedE1000gInet6Address:  using netif \n");
       
   255             try {
       
   256                 expectedInet6Address = Inet6Address.getByAddress(
       
   257                         E1000G0HOSTNAME, E1000G0IPV6ADDRESS, testNetIf);
       
   258             } catch (UnknownHostException ukhEx) {
       
   259                 ukhEx.printStackTrace();
       
   260                 testWithNetIf = true;
       
   261                 useMockInet6Address = true;
       
   262             }
       
   263         } else {
       
   264             System.err
       
   265                     .println("\n testSerializedE1000gInet6Address:  using index \n");
       
   266             try {
       
   267                 expectedInet6Address = Inet6Address.getByAddress(
       
   268                         E1000G0HOSTNAME, E1000G0IPV6ADDRESS, SCOPE_ID_ZERO);
       
   269             } catch (UnknownHostException ukhEx1) {
       
   270                 ukhEx1.printStackTrace();
       
   271                 useMockInet6Address = true;
       
   272             }
       
   273             testWithNetIf = false;
       
   274         }
       
   275 
       
   276         byte[] serializedAddress = SerialData_ifname_e1000g0;
       
   277 
       
   278         // displayExpectedInet6Address(expectedInet6Address);
       
   279 
       
   280         try (ByteArrayInputStream bis = new ByteArrayInputStream(
       
   281                 serializedAddress);
       
   282                 ObjectInputStream oin = new ObjectInputStream(bis)) {
       
   283             Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
       
   284             System.err.println("Deserialized Inet6Address "
       
   285                     + deserializedIPV6Addr);
       
   286 
       
   287             if (!useMockInet6Address) {
       
   288                 assertHostNameEqual(expectedInet6Address.getHostName(),
       
   289                         deserializedIPV6Addr.getHostName());
       
   290                 if (testWithNetIf) {
       
   291                     assertHostAddressEqual(
       
   292                             expectedInet6Address.getHostAddress(),
       
   293                             deserializedIPV6Addr.getHostAddress());
       
   294                 } else {
       
   295                     assertHostAddressEqual(
       
   296                             MockE1000g0Inet6Address.getBareHostAddress(),
       
   297                             deserializedIPV6Addr.getHostAddress());
       
   298                 }
       
   299                 assertAddressEqual(expectedInet6Address.getAddress(),
       
   300                         deserializedIPV6Addr.getAddress());
       
   301                 assertScopeIdEqual(expectedInet6Address.getScopeId(),
       
   302                         deserializedIPV6Addr.getScopeId());
       
   303                 if (testWithNetIf) {
       
   304                     assertNetworkInterfaceEqual(
       
   305                             expectedInet6Address.getScopedInterface(),
       
   306                             deserializedIPV6Addr.getScopedInterface());
       
   307                 } else {
       
   308                     assertNetworkInterfaceEqual(null,
       
   309                             deserializedIPV6Addr.getScopedInterface());
       
   310                 }
       
   311             } else { // use MockLo0Inet6Address
       
   312                 assertHostNameEqual(MockE1000g0Inet6Address.getHostName(),
       
   313                         deserializedIPV6Addr.getHostName());
       
   314                 if (testWithNetIf) {
       
   315                     assertHostAddressEqual(
       
   316                             MockE1000g0Inet6Address.getHostAddress(),
       
   317                             deserializedIPV6Addr.getHostAddress());
       
   318                 } else {
       
   319                     assertHostAddressEqual(
       
   320                             MockE1000g0Inet6Address.getHostAddressWithIndex(),
       
   321                             deserializedIPV6Addr.getHostAddress());
       
   322                 }
       
   323                 assertAddressEqual(MockE1000g0Inet6Address.getAddress(),
       
   324                         deserializedIPV6Addr.getAddress());
       
   325                 if (testWithNetIf) {
       
   326                 assertScopeIdEqual(MockE1000g0Inet6Address.getScopeId(),
       
   327                         deserializedIPV6Addr.getScopeId());
       
   328                 } else {
       
   329                     assertScopeIdEqual(MockE1000g0Inet6Address.getScopeZero(),
       
   330                             deserializedIPV6Addr.getScopeId());
       
   331                 }
       
   332                 assertNetworkInterfaceNameEqual(
       
   333                         MockE1000g0Inet6Address.getScopeIfName(),
       
   334                         deserializedIPV6Addr.getScopedInterface());
       
   335             }
       
   336         } catch (Exception e) {
       
   337             System.err.println("Exception caught during deserialization");
       
   338             failed = true;
       
   339             e.printStackTrace();
       
   340         }
       
   341     }
       
   342 
       
   343     static void testSerializedLo0Inet6Address() throws IOException {
       
   344         System.err.println("\n testSerializedLo0Inet6Address:  enter \n");
       
   345         boolean testWithNetIf = true;
       
   346         boolean useMockInet6Address = false;
       
   347 
       
   348         NetworkInterface testNetIf = NetworkInterface.getByName(NETWORK_IF_LO0);
       
   349         Inet6Address expectedInet6Address = null;
       
   350         if (testNetIf != null) {
       
   351             System.err
       
   352                     .println("\n testSerializedLo0Inet6Address:  using netif \n");
       
   353             try {
       
   354                 expectedInet6Address = Inet6Address.getByAddress(LOCALHOSTNAME,
       
   355                         LOOPBACKIPV6ADDRESS, testNetIf);
       
   356             } catch (UnknownHostException ukhEx) {
       
   357                 ukhEx.printStackTrace();
       
   358                 testWithNetIf = true;
       
   359                 useMockInet6Address = true;
       
   360             }
       
   361         } else {
       
   362             System.err
       
   363                     .println("\n testSerializedLo0Inet6Address:  using index \n");
       
   364             try {
       
   365                 expectedInet6Address = Inet6Address.getByAddress(LOCALHOSTNAME,
       
   366                         LOOPBACKIPV6ADDRESS, SCOPE_ID_ZERO);
       
   367             } catch (UnknownHostException ukhEx1) {
       
   368                 ukhEx1.printStackTrace();
       
   369                 useMockInet6Address = true;
       
   370             }
       
   371             testWithNetIf = false;
       
   372         }
       
   373 
       
   374         // displayExpectedInet6Address(expectedInet6Address);
       
   375 
       
   376         byte[] serializedAddress = SerialData_ifname_lo0;
       
   377 
       
   378         try (ByteArrayInputStream bis = new ByteArrayInputStream(
       
   379                 serializedAddress);
       
   380                 ObjectInputStream oin = new ObjectInputStream(bis)) {
       
   381             Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
       
   382             System.err.println("Deserialized Inet6Address "
       
   383                     + deserializedIPV6Addr);
       
   384             if (!useMockInet6Address) {
       
   385                 assertHostNameEqual(expectedInet6Address.getHostName(),
       
   386                         deserializedIPV6Addr.getHostName());
       
   387                 if (testWithNetIf) {
       
   388                     assertHostAddressEqual(
       
   389                             expectedInet6Address.getHostAddress(),
       
   390                             deserializedIPV6Addr.getHostAddress());
       
   391                 } else {
       
   392                     assertHostAddressEqual(
       
   393                             MockLo0Inet6Address.getBareHostAddress(),
       
   394                             deserializedIPV6Addr.getHostAddress());
       
   395                 }
       
   396                 assertAddressEqual(expectedInet6Address.getAddress(),
       
   397                         deserializedIPV6Addr.getAddress());
       
   398                 assertScopeIdEqual(expectedInet6Address.getScopeId(),
       
   399                         deserializedIPV6Addr.getScopeId());
       
   400                 if (testWithNetIf) {
       
   401                     assertNetworkInterfaceEqual(
       
   402                             expectedInet6Address.getScopedInterface(),
       
   403                             deserializedIPV6Addr.getScopedInterface());
       
   404                 } else {
       
   405                     assertNetworkInterfaceEqual(null,
       
   406                             deserializedIPV6Addr.getScopedInterface());
       
   407                 }
       
   408             } else { // use MockLo0Inet6Address
       
   409                 assertHostNameEqual(MockLo0Inet6Address.getHostName(),
       
   410                         deserializedIPV6Addr.getHostName());
       
   411                 if (testWithNetIf) {
       
   412                     assertHostAddressEqual(
       
   413                             MockLo0Inet6Address.getHostAddress(),
       
   414                             deserializedIPV6Addr.getHostAddress());
       
   415                 } else {
       
   416                     assertHostAddressEqual(
       
   417                             MockLo0Inet6Address.getHostAddressWithIndex(),
       
   418                             deserializedIPV6Addr.getHostAddress());
       
   419                 }
       
   420                 assertAddressEqual(MockLo0Inet6Address.getAddress(),
       
   421                         deserializedIPV6Addr.getAddress());
       
   422                 if (testWithNetIf) {
       
   423                 assertScopeIdEqual(MockLo0Inet6Address.getScopeId(),
       
   424                         deserializedIPV6Addr.getScopeId());
       
   425                 } else {
       
   426                     assertScopeIdEqual(MockLo0Inet6Address.getScopeZero(),
       
   427                             deserializedIPV6Addr.getScopeId());
       
   428                 }
       
   429                 assertNetworkInterfaceNameEqual(
       
   430                         MockLo0Inet6Address.getScopeIfName(),
       
   431                         deserializedIPV6Addr.getScopedInterface());
       
   432             }
       
   433         } catch (Exception e) {
       
   434             System.err.println("Exception caught during deserialization");
       
   435             failed = true;
       
   436             e.printStackTrace();
       
   437         }
       
   438     }
       
   439 
       
   440     static List<Inet6Address> getAllInet6Addresses() throws Exception {
       
   441         // System.err.println("\n getAllInet6Addresses: \n ");
       
   442         ArrayList<Inet6Address> inet6Addresses = new ArrayList<Inet6Address>();
       
   443         for (Enumeration<NetworkInterface> e = NetworkInterface
       
   444                 .getNetworkInterfaces(); e.hasMoreElements();) {
       
   445             NetworkInterface netIF = e.nextElement();
       
   446             for (Enumeration<InetAddress> iadrs = netIF.getInetAddresses(); iadrs
       
   447                     .hasMoreElements();) {
       
   448                 InetAddress iadr = iadrs.nextElement();
       
   449                 if (iadr instanceof Inet6Address) {
       
   450                     System.err.println("Test NetworkInterface:  " + netIF);
       
   451                     Inet6Address i6adr = (Inet6Address) iadr;
       
   452                     System.err.println(" address " + iadr);
       
   453                     System.err.println(" scoped iface: "
       
   454                             + i6adr.getScopedInterface());
       
   455                     // using this to actually set the hostName for an
       
   456                     // InetAddress
       
   457                     // created through the NetworkInterface
       
   458                     // have found that the fabricated instances has a null
       
   459                     // hostName
       
   460                     System.err.println(" hostName: " + i6adr.getHostName());
       
   461                     inet6Addresses.add(i6adr);
       
   462                 }
       
   463             }
       
   464         }
       
   465         return inet6Addresses;
       
   466     }
       
   467 
       
   468     static void assertHostNameEqual(String expectedHostName,
       
   469             String deserializedHostName) {
       
   470         System.err
       
   471                 .println("Inet6AddressSerializationTest.assertHostNameEqual:");
       
   472         if (expectedHostName == null) {
       
   473             if (deserializedHostName == null) {
       
   474                 // ok, do nothing.
       
   475             } else {
       
   476                 System.err.println("Error checking " + " HostName, expected:"
       
   477                         + expectedHostName + ", got :" + deserializedHostName);
       
   478                 failed = true;
       
   479             }
       
   480         } else if (!expectedHostName.equals(deserializedHostName)) {
       
   481             System.err.println("Error checking "
       
   482                     + // versionStr +
       
   483                     " HostName, expected:" + expectedHostName + ", got :"
       
   484                     + deserializedHostName);
       
   485             failed = true;
       
   486         } else {
       
   487             System.err.println("HostName equality "
       
   488                     + // versionStr +
       
   489                     " HostName, expected:" + expectedHostName + ", got :"
       
   490                     + deserializedHostName);
       
   491         }
       
   492     }
       
   493 
       
   494     static void assertHostAddressEqual(String expectedHostAddress,
       
   495             String deserializedHostAddress) {
       
   496         System.err
       
   497                 .println("Inet6AddressSerializationTest.assertHostAddressEqual:");
       
   498         if (expectedHostAddress == null) {
       
   499             if (deserializedHostAddress == null) {
       
   500                 // ok, do nothing.
       
   501             } else {
       
   502                 System.err.println("Error checking "
       
   503                         + " HostAddress, expected: " + expectedHostAddress
       
   504                         + ", got: " + deserializedHostAddress);
       
   505                 failed = true;
       
   506             }
       
   507         } else if (!expectedHostAddress.equals(deserializedHostAddress)) {
       
   508             System.err.println("Error checking "
       
   509                     + // versionStr +
       
   510                     " HostAddress, expected: " + expectedHostAddress
       
   511                     + ", got: " + deserializedHostAddress);
       
   512             failed = true;
       
   513         } else {
       
   514             System.err.println("HostAddress equality "
       
   515                     + // versionStr +
       
   516                     " HostAddress, expected: " + expectedHostAddress
       
   517                     + ", got: " + deserializedHostAddress);
       
   518         }
       
   519     }
       
   520 
       
   521     static void assertAddressEqual(byte[] expectedAddress,
       
   522             byte[] deserializedAddress) {
       
   523         System.err.println("Inet6AddressSerializationTest.assertAddressEqual:");
       
   524         if (expectedAddress == null) {
       
   525             if (deserializedAddress == null) {
       
   526                 // ok, do nothing.
       
   527             } else {
       
   528                 System.err.println("Error checking " + " Address, expected:"
       
   529                         + Arrays.toString(expectedAddress) + ", got: "
       
   530                         + Arrays.toString(deserializedAddress));
       
   531                 failed = true;
       
   532             }
       
   533         } else if (!Arrays.equals(expectedAddress, deserializedAddress)) {
       
   534             System.err.println("Error checking "
       
   535                     + // versionStr +
       
   536                     " Address, expected: " + Arrays.toString(expectedAddress)
       
   537                     + ", got: " + Arrays.toString(deserializedAddress));
       
   538             failed = true;
       
   539         } else {
       
   540             System.err.println("Address equality "
       
   541                     + // versionStr +
       
   542                     " Address, expected: " + Arrays.toString(expectedAddress)
       
   543                     + ", got: " + Arrays.toString(deserializedAddress));
       
   544         }
       
   545     }
       
   546 
       
   547     static void assertScopeIdEqual(int expectedScopeId, int deserializedScopeId) {
       
   548         System.err.println("Inet6AddressSerializationTest.assertScopeIdEqual:");
       
   549         if (expectedScopeId != deserializedScopeId) {
       
   550             System.err.println("Error checking " + " ScopeId, expected:"
       
   551                     + expectedScopeId + ", got: " + deserializedScopeId);
       
   552             failed = true;
       
   553         } else {
       
   554             System.err.println("ScopeId equality "
       
   555                     + // versionStr +
       
   556                     " ScopeId, expected: " + expectedScopeId + ", got: "
       
   557                     + deserializedScopeId);
       
   558         }
       
   559     }
       
   560 
       
   561     static void assertNetworkInterfaceNameEqual(String expectedNetworkIfName,
       
   562             NetworkInterface deserializedNetworkInterface) {
       
   563 
       
   564         if (deserializedNetworkInterface != null) {
       
   565             String deserializedNetworkIfName = deserializedNetworkInterface
       
   566                     .getName();
       
   567             System.err
       
   568                     .println("Inet6AddressSerializationTest.assertHostNameEqual:");
       
   569             if (expectedNetworkIfName == null) {
       
   570                 if (deserializedNetworkIfName == null) {
       
   571                     // ok, do nothing.
       
   572                 } else {
       
   573                     System.err.println("Error checking "
       
   574                             + " NetworkIfName, expected: "
       
   575                             + expectedNetworkIfName + ", got: "
       
   576                             + deserializedNetworkIfName);
       
   577                     failed = true;
       
   578                 }
       
   579             } else if (!expectedNetworkIfName.equals(deserializedNetworkIfName)) {
       
   580                 System.err.println("Error checking "
       
   581                         + " NetworkIfName, expected: " + expectedNetworkIfName
       
   582                         + ", got: " + deserializedNetworkIfName);
       
   583                 failed = true;
       
   584             } else {
       
   585                 System.err.println("NetworkIfName equality "
       
   586                         + " NetworkIfName, expected: " + expectedNetworkIfName
       
   587                         + ", got: " + deserializedNetworkIfName);
       
   588             }
       
   589         } else {
       
   590             System.err
       
   591                     .println("Warning "
       
   592                             + " NetworkInterface  expected, but is null - ifname not relevant on deserializing host");
       
   593         }
       
   594     }
       
   595 
       
   596     static void assertNetworkInterfaceEqual(
       
   597             NetworkInterface expectedNetworkInterface,
       
   598             NetworkInterface deserializedNetworkInterface) {
       
   599         System.err
       
   600                 .println("Inet6AddressSerializationTest.assertNetworkInterfaceEqual:");
       
   601         if (expectedNetworkInterface == null) {
       
   602             if (deserializedNetworkInterface == null) {
       
   603                 // ok, do nothing.
       
   604                 System.err.println("Network Interface equality "
       
   605                         + " NetworkInterface, expected:"
       
   606                         + expectedNetworkInterface + ", got :"
       
   607                         + deserializedNetworkInterface);
       
   608             } else {
       
   609                 System.err.println("Error checking "
       
   610                         + " NetworkInterface, expected:"
       
   611                         + expectedNetworkInterface + ", got :"
       
   612                         + deserializedNetworkInterface);
       
   613                 failed = true;
       
   614             }
       
   615         } else if (!expectedNetworkInterface
       
   616                 .equals(deserializedNetworkInterface)) {
       
   617             System.err.println("Error checking "
       
   618                     + // versionStr +
       
   619                     " NetworkInterface, expected:" + expectedNetworkInterface
       
   620                     + ", got :" + deserializedNetworkInterface);
       
   621             failed = true;
       
   622         } else {
       
   623             System.err.println("Network Interface equality "
       
   624                     + " NetworkInterface, expected:" + expectedNetworkInterface
       
   625                     + ", got :" + deserializedNetworkInterface);
       
   626         }
       
   627     }
       
   628 
       
   629     static void equal(Object expected, Object got) {
       
   630         if (expected == null) {
       
   631             if (got == null) {
       
   632                 // ok, do nothing.
       
   633             } else {
       
   634                 System.err.println("Error checking "
       
   635                         + " serial data, expected:" + expected + ", got :"
       
   636                         + got);
       
   637                 failed = true;
       
   638             }
       
   639         } else if (!expected.equals(got)) {
       
   640             System.err.println("Error checking " + // versionStr +
       
   641                     " serial data, expected:" + expected + ", got :" + got);
       
   642             failed = true;
       
   643         }
       
   644     }
       
   645 
       
   646     // Used to generate serialData.
       
   647     static byte[] generateSerializedInet6AddressData(Inet6Address addr,
       
   648             PrintStream out, boolean outputToFile) throws IOException {
       
   649         ByteArrayOutputStream bos = new ByteArrayOutputStream();
       
   650         try (ObjectOutputStream oos = new ObjectOutputStream(bos)) {
       
   651             oos.writeObject(addr);
       
   652         }
       
   653 
       
   654         String ifname = getIfName(addr);
       
   655         byte[] ba = bos.toByteArray();
       
   656         if (out != null) {
       
   657             out.format("static final byte[] SerialData" + ifname + " = {\n");
       
   658             for (int i = 0; i < ba.length; i++) {
       
   659                 out.format(" (byte)0x%02X", ba[i]);
       
   660                 if (i != (ba.length - 1))
       
   661                     out.format(",");
       
   662                 if (((i + 1) % 6) == 0)
       
   663                     out.format("\n");
       
   664             }
       
   665             out.format(" };\n \n");
       
   666         }
       
   667         if (outputToFile) {
       
   668             serializeInet6AddressToFile(addr);
       
   669         }
       
   670         return ba;
       
   671     }
       
   672 
       
   673     private static String getIfName(Inet6Address inet6Addr) {
       
   674         String ifname;
       
   675         if (inet6Addr.getScopedInterface() != null) {
       
   676             ifname = "_ifname_" + inet6Addr.getScopedInterface().getName();
       
   677         } else {
       
   678             ifname = "_ifname_"
       
   679                     + Integer.valueOf(inet6Addr.getScopeId()).toString();
       
   680         }
       
   681         return ifname;
       
   682     }
       
   683 
       
   684     static void generateAllInet6AddressSerializedData() throws IOException {
       
   685         // System.err.println("generateAllInet6AddressSerializedData: enter ....");
       
   686 
       
   687         List<Inet6Address> inet6Addresses;
       
   688 
       
   689         try {
       
   690             inet6Addresses = getAllInet6Addresses();
       
   691         } catch (Exception e) {
       
   692             e.printStackTrace();
       
   693             throw new IOException(e);
       
   694         }
       
   695 
       
   696         for (Inet6Address inet6Address : inet6Addresses) {
       
   697             generateSerializedInet6AddressData(inet6Address, System.out, true);
       
   698         }
       
   699     }
       
   700 
       
   701     static void serializeInet6AddressToFile(Inet6Address inet6Addr) {
       
   702 
       
   703         // System.err
       
   704         // .println("serializeInet6AddressToIPV6AddressFile: enter ....");
       
   705 
       
   706         FileOutputStream fOut = null;
       
   707         String inet6AddressOutputFilename = null;
       
   708         inet6AddressOutputFilename = createOutputFileName(inet6Addr);
       
   709         try {
       
   710             fOut = new FileOutputStream(inet6AddressOutputFilename);
       
   711         } catch (FileNotFoundException fnfEx) {
       
   712 
       
   713             fnfEx.printStackTrace();
       
   714         }
       
   715         ObjectOutputStream ooStream = null;
       
   716         try {
       
   717             if (fOut != null) {
       
   718                 ooStream = new ObjectOutputStream(fOut);
       
   719             } else {
       
   720                 System.err.println("Problem initilising Object output stream ");
       
   721                 System.exit(-1);
       
   722             }
       
   723 
       
   724         } catch (IOException e) {
       
   725             e.printStackTrace();
       
   726             System.exit(-1);
       
   727         }
       
   728 
       
   729         // serialise the last Inet6Address
       
   730         /*
       
   731          * System.err
       
   732          * .println("serializeInet6AddressToIPV6AddressFile scoped iface:  \n" +
       
   733          * inet6Addr.getScopedInterface());
       
   734          */
       
   735         try {
       
   736             ooStream.writeObject(inet6Addr);
       
   737         } catch (Exception ex) {
       
   738             ex.printStackTrace();
       
   739             System.exit(-1);
       
   740         }
       
   741 
       
   742         try {
       
   743             ooStream.close();
       
   744         } catch (IOException e) {
       
   745             e.printStackTrace();
       
   746         }
       
   747     }
       
   748 
       
   749     private static String createOutputFileName(Inet6Address inet6Addr) {
       
   750         String inet6AddressOutputFilename;
       
   751         if (inet6Addr.getScopedInterface() != null) {
       
   752             inet6AddressOutputFilename = "IPV6Address_"
       
   753                     + inet6Addr.getScopedInterface().getName() + ".out";
       
   754         } else {
       
   755             inet6AddressOutputFilename = "IPV6Address_"
       
   756                     + Integer.valueOf(inet6Addr.getScopeId()).toString()
       
   757                     + ".out";
       
   758         }
       
   759         return inet6AddressOutputFilename;
       
   760     }
       
   761 
       
   762     // --- Generated data ---
       
   763     // JDK7 output java Inet6AddressSerializationTest generate.
       
   764 
       
   765     // loopback lo0 interface on Solaris 10
       
   766 
       
   767     static final byte[] JDK7Inet6AddressSerialData = { (byte) 0xAC,
       
   768             (byte) 0xED, (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
       
   769             (byte) 0x00, (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
       
   770             (byte) 0x61, (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
       
   771             (byte) 0x2E, (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
       
   772             (byte) 0x36, (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72,
       
   773             (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C,
       
   774             (byte) 0x20, (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80,
       
   775             (byte) 0x21, (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49,
       
   776             (byte) 0x00, (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
       
   777             (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
       
   778             (byte) 0x5A, (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63,
       
   779             (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
       
   780             (byte) 0x64, (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74,
       
   781             (byte) 0x5A, (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63,
       
   782             (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
       
   783             (byte) 0x66, (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
       
   784             (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C,
       
   785             (byte) 0x00, (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E,
       
   786             (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00,
       
   787             (byte) 0x12, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
       
   788             (byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
       
   789             (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
       
   790             (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B,
       
   791             (byte) 0x00, (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61,
       
   792             (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
       
   793             (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
       
   794             (byte) 0x42, (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14,
       
   795             (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E,
       
   796             (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49,
       
   797             (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64,
       
   798             (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
       
   799             (byte) 0x2D, (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F,
       
   800             (byte) 0xE3, (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00,
       
   801             (byte) 0x03, (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61,
       
   802             (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
       
   803             (byte) 0x73, (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66,
       
   804             (byte) 0x61, (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79,
       
   805             (byte) 0x4C, (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F,
       
   806             (byte) 0x73, (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D,
       
   807             (byte) 0x65, (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00,
       
   808             (byte) 0x01, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
       
   809             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   810             (byte) 0x02, (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C,
       
   811             (byte) 0x6F, (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68,
       
   812             (byte) 0x6F, (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00,
       
   813             (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x70,
       
   814             (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
       
   815             (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8,
       
   816             (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02,
       
   817             (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00,
       
   818             (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
       
   819             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   820             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   821             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };
       
   822 
       
   823     // JDK8 output java Inet6AddressSerializationTest generate.
       
   824     // loopback lo0 interface on Solaris 10
       
   825 
       
   826     static final byte[] JDK8Inet6AddressSerialData = { (byte) 0xAC,
       
   827             (byte) 0xED, (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
       
   828             (byte) 0x00, (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
       
   829             (byte) 0x61, (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
       
   830             (byte) 0x2E, (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
       
   831             (byte) 0x36, (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72,
       
   832             (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C,
       
   833             (byte) 0x20, (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80,
       
   834             (byte) 0x21, (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49,
       
   835             (byte) 0x00, (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
       
   836             (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
       
   837             (byte) 0x5A, (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63,
       
   838             (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
       
   839             (byte) 0x64, (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74,
       
   840             (byte) 0x5A, (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63,
       
   841             (byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
       
   842             (byte) 0x66, (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
       
   843             (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C,
       
   844             (byte) 0x00, (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E,
       
   845             (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00,
       
   846             (byte) 0x12, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
       
   847             (byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
       
   848             (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
       
   849             (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B,
       
   850             (byte) 0x00, (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61,
       
   851             (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
       
   852             (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
       
   853             (byte) 0x42, (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14,
       
   854             (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E,
       
   855             (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49,
       
   856             (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64,
       
   857             (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
       
   858             (byte) 0x2D, (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F,
       
   859             (byte) 0xE3, (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00,
       
   860             (byte) 0x03, (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61,
       
   861             (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
       
   862             (byte) 0x73, (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66,
       
   863             (byte) 0x61, (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79,
       
   864             (byte) 0x4C, (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F,
       
   865             (byte) 0x73, (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D,
       
   866             (byte) 0x65, (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00,
       
   867             (byte) 0x01, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
       
   868             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   869             (byte) 0x02, (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C,
       
   870             (byte) 0x6F, (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68,
       
   871             (byte) 0x6F, (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00,
       
   872             (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x70,
       
   873             (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
       
   874             (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8,
       
   875             (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02,
       
   876             (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00,
       
   877             (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
       
   878             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   879             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   880             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };
       
   881 
       
   882     // java Inet6AddressSerializationTest generateAll produces this inet6address
       
   883     // serial data
       
   884     // jdk8 generated serialization of on address fe80:0:0:0:21b:24ff:febd:f29c
       
   885     // net if e1000g0
       
   886 
       
   887     static final byte[] SerialData_ifname_e1000g0 = { (byte) 0xAC, (byte) 0xED,
       
   888             (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, (byte) 0x00,
       
   889             (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
       
   890             (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E,
       
   891             (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x36,
       
   892             (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65,
       
   893             (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C, (byte) 0x20,
       
   894             (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80, (byte) 0x21,
       
   895             (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49, (byte) 0x00,
       
   896             (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F, (byte) 0x70,
       
   897             (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64, (byte) 0x5A,
       
   898             (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
       
   899             (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
       
   900             (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x5A,
       
   901             (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
       
   902             (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x66,
       
   903             (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x5F,
       
   904             (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C, (byte) 0x00,
       
   905             (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E, (byte) 0x61,
       
   906             (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x12,
       
   907             (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
       
   908             (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
       
   909             (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
       
   910             (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B, (byte) 0x00,
       
   911             (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61, (byte) 0x64,
       
   912             (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
       
   913             (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
       
   914             (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6A,
       
   915             (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E, (byte) 0x6E,
       
   916             (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49, (byte) 0x6E,
       
   917             (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64, (byte) 0x64,
       
   918             (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x2D,
       
   919             (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F, (byte) 0xE3,
       
   920             (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00, (byte) 0x03,
       
   921             (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61, (byte) 0x64,
       
   922             (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
       
   923             (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66, (byte) 0x61,
       
   924             (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79, (byte) 0x4C,
       
   925             (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F, (byte) 0x73,
       
   926             (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
       
   927             (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00, (byte) 0x01,
       
   928             (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   929             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
       
   930             (byte) 0x74, (byte) 0x00, (byte) 0x25, (byte) 0x66, (byte) 0x65,
       
   931             (byte) 0x38, (byte) 0x30, (byte) 0x3A, (byte) 0x30, (byte) 0x3A,
       
   932             (byte) 0x30, (byte) 0x3A, (byte) 0x30, (byte) 0x3A, (byte) 0x32,
       
   933             (byte) 0x31, (byte) 0x62, (byte) 0x3A, (byte) 0x32, (byte) 0x34,
       
   934             (byte) 0x66, (byte) 0x66, (byte) 0x3A, (byte) 0x66, (byte) 0x65,
       
   935             (byte) 0x62, (byte) 0x64, (byte) 0x3A, (byte) 0x66, (byte) 0x32,
       
   936             (byte) 0x39, (byte) 0x63, (byte) 0x25, (byte) 0x65, (byte) 0x31,
       
   937             (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x67, (byte) 0x30,
       
   938             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x01,
       
   939             (byte) 0x01, (byte) 0x74, (byte) 0x00, (byte) 0x07, (byte) 0x65,
       
   940             (byte) 0x31, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x67,
       
   941             (byte) 0x30, (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02,
       
   942             (byte) 0x5B, (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17,
       
   943             (byte) 0xF8, (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0,
       
   944             (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70,
       
   945             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0xFE,
       
   946             (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   947             (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x1B, (byte) 0x24,
       
   948             (byte) 0xFF, (byte) 0xFE, (byte) 0xBD, (byte) 0xF2, (byte) 0x9C,
       
   949             (byte) 0x78 };
       
   950 
       
   951     // jdk8 generated serialization of address 0::1 on net if lo0 hostname
       
   952     // localhost scope_id 1
       
   953 
       
   954     static final byte[] SerialData_ifname_lo0 = { (byte) 0xAC, (byte) 0xED,
       
   955             (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, (byte) 0x00,
       
   956             (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
       
   957             (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E,
       
   958             (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x36,
       
   959             (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65,
       
   960             (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C, (byte) 0x20,
       
   961             (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80, (byte) 0x21,
       
   962             (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49, (byte) 0x00,
       
   963             (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F, (byte) 0x70,
       
   964             (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64, (byte) 0x5A,
       
   965             (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
       
   966             (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
       
   967             (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x5A,
       
   968             (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
       
   969             (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x66,
       
   970             (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x5F,
       
   971             (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C, (byte) 0x00,
       
   972             (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E, (byte) 0x61,
       
   973             (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x12,
       
   974             (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
       
   975             (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
       
   976             (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
       
   977             (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B, (byte) 0x00,
       
   978             (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61, (byte) 0x64,
       
   979             (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
       
   980             (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
       
   981             (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6A,
       
   982             (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E, (byte) 0x6E,
       
   983             (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49, (byte) 0x6E,
       
   984             (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64, (byte) 0x64,
       
   985             (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x2D,
       
   986             (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F, (byte) 0xE3,
       
   987             (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00, (byte) 0x03,
       
   988             (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61, (byte) 0x64,
       
   989             (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
       
   990             (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66, (byte) 0x61,
       
   991             (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79, (byte) 0x4C,
       
   992             (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F, (byte) 0x73,
       
   993             (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
       
   994             (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00, (byte) 0x01,
       
   995             (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
   996             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
       
   997             (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C, (byte) 0x6F,
       
   998             (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68, (byte) 0x6F,
       
   999             (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1000             (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x74, (byte) 0x00,
       
  1001             (byte) 0x03, (byte) 0x6C, (byte) 0x6F, (byte) 0x30, (byte) 0x75,
       
  1002             (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
       
  1003             (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8, (byte) 0x06,
       
  1004             (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02, (byte) 0x00,
       
  1005             (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
       
  1006             (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1007             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1008             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1009             (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };
       
  1010 
       
  1011 }
       
  1012 
       
  1013 class MockLo0Inet6Address {
       
  1014 
       
  1015     private static final byte[] LOOPBACKIPV6ADDRESS = { (byte) 0x00,
       
  1016             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1017             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1018             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 };
       
  1019 
       
  1020     private static final String LOCALHOSTNAME = "localhost";
       
  1021 
       
  1022     private static final String LO0HOSTADDRESS = "0:0:0:0:0:0:0:1%lo0";
       
  1023 
       
  1024     private static final String BARE_LO0HOSTADDRESS = "0:0:0:0:0:0:0:1";
       
  1025 
       
  1026     private static final String LO0HOSTADDRESS_WITHINDEX = "0:0:0:0:0:0:0:1%1";
       
  1027 
       
  1028     private static final int SCOPE_ID_LO0 = 1;
       
  1029 
       
  1030     private static final int SCOPE_ID_ZERO = 0;
       
  1031 
       
  1032     public static final String NETWORK_IF_LO0 = "lo0";
       
  1033 
       
  1034     static String getHostName() {
       
  1035         return LOCALHOSTNAME;
       
  1036     }
       
  1037 
       
  1038     static String getHostAddress() {
       
  1039         return LO0HOSTADDRESS;
       
  1040     }
       
  1041 
       
  1042     static String getBareHostAddress() {
       
  1043         return BARE_LO0HOSTADDRESS;
       
  1044     }
       
  1045 
       
  1046     static String getHostAddressWithIndex() {
       
  1047         return LO0HOSTADDRESS_WITHINDEX;
       
  1048     }
       
  1049 
       
  1050     static byte[] getAddress() {
       
  1051         return LOOPBACKIPV6ADDRESS;
       
  1052     }
       
  1053 
       
  1054     static int getScopeId() {
       
  1055         return SCOPE_ID_LO0;
       
  1056     }
       
  1057 
       
  1058     static int getScopeZero() {
       
  1059         return SCOPE_ID_ZERO;
       
  1060     }
       
  1061 
       
  1062     static String getScopeIfName() {
       
  1063         return NETWORK_IF_LO0;
       
  1064     }
       
  1065 
       
  1066 }
       
  1067 
       
  1068 class MockE1000g0Inet6Address {
       
  1069 
       
  1070     // fe80::21b:24ff:febd:f29c
       
  1071     private static final byte[] E1000G0IPV6ADDRESS = { (byte) 0xfe,
       
  1072             (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
       
  1073             (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x1b, (byte) 0x24,
       
  1074             (byte) 0xff, (byte) 0xfe, (byte) 0xbd, (byte) 0xf2, (byte) 0x9c };
       
  1075 
       
  1076     private static final String E1000G0HOSTNAME = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";
       
  1077 
       
  1078     private static final String BARE_E1000G0HOSTADDRESS = "fe80:0:0:0:21b:24ff:febd:f29c";
       
  1079 
       
  1080     private static final String E1000G0HOSTADDRESS_WITHINDEX = "fe80:0:0:0:21b:24ff:febd:f29c%2";
       
  1081 
       
  1082     private static final String E1000G0HOSTADDRESS = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";
       
  1083 
       
  1084     private static final String NETWORK_IF_E1000G0 = "e1000g0";
       
  1085 
       
  1086     private static final int SCOPE_ID_E1000G0 = 2;
       
  1087 
       
  1088     private static final int SCOPE_ID_ZERO = 0;
       
  1089 
       
  1090     static String getHostName() {
       
  1091         return E1000G0HOSTNAME;
       
  1092     }
       
  1093 
       
  1094     static String getHostAddress() {
       
  1095         return E1000G0HOSTADDRESS;
       
  1096     }
       
  1097 
       
  1098     static String getHostAddressWithIndex() {
       
  1099         return E1000G0HOSTADDRESS_WITHINDEX;
       
  1100     }
       
  1101 
       
  1102     static String getBareHostAddress() {
       
  1103         return BARE_E1000G0HOSTADDRESS;
       
  1104     }
       
  1105 
       
  1106     static byte[] getAddress() {
       
  1107         return E1000G0IPV6ADDRESS;
       
  1108     }
       
  1109 
       
  1110     static int getScopeId() {
       
  1111         return SCOPE_ID_E1000G0;
       
  1112     }
       
  1113 
       
  1114     static int getScopeZero() {
       
  1115         return SCOPE_ID_ZERO;
       
  1116     }
       
  1117 
       
  1118     static String getScopeIfName() {
       
  1119         return NETWORK_IF_E1000G0;
       
  1120     }
       
  1121 
       
  1122 }