/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.tests.java.net; import java.io.IOException; import java.io.Serializable; import java.net.DatagramSocket; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Enumeration; import org.apache.harmony.testframework.serialization.SerializationTest; import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert; public class InetAddressTest extends junit.framework.TestCase { /** * java.net.InetAddress#getByName(String) */ public void test_getByName_exceptionContainsUsefulMessage() { // Related to HARMONY-5784 try { InetAddress.getByName("1.2.3.4hello"); fail(); } catch (UnknownHostException e) { assertTrue(e.getMessage().contains("1.2.3.4hello")); } } public void test_equalsLjava_lang_Object() throws Exception { InetAddress ia1 = InetAddress.getByName("localhost"); InetAddress ia2 = InetAddress.getByName("::1"); assertEquals(ia2, ia1); } /** * java.net.InetAddress#getAddress() */ public void test_getAddress() throws UnknownHostException { // Test for method byte [] java.net.InetAddress.getAddress() try { InetAddress ia = InetAddress.getByName("127.0.0.1"); byte[] caddr = new byte[] { 127, 0, 0, 1 }; byte[] addr = ia.getAddress(); for (int i = 0; i < addr.length; i++) assertTrue("Incorrect address returned", caddr[i] == addr[i]); } catch (java.net.UnknownHostException e) { } byte[] origBytes = new byte[] { 0, 1, 2, 3 }; InetAddress address = InetAddress.getByAddress(origBytes); origBytes[0] = -1; byte[] newBytes = address.getAddress(); assertSame((byte) 0, newBytes[0]); } /** * java.net.InetAddress#getAllByName(java.lang.String) */ @SuppressWarnings("nls") public void test_getAllByNameLjava_lang_String() throws Exception { // Test for method java.net.InetAddress [] // java.net.InetAddress.getAllByName(java.lang.String) InetAddress[] all = InetAddress.getAllByName("localhost"); assertNotNull(all); // Number of aliases depends on individual test machine assertTrue(all.length >= 1); for (InetAddress alias : all) { // Check that each alias has the same hostname. Intentionally not // checking for exact string match. assertTrue(alias.getHostName().startsWith("localhost")); }// end for all aliases //Regression for HARMONY-56 InetAddress[] ias = InetAddress.getAllByName(null); assertEquals(2, ias.length); for (InetAddress ia : ias) { assertTrue(ia.isLoopbackAddress()); } ias = InetAddress.getAllByName(""); assertEquals(2, ias.length); for (InetAddress ia : ias) { assertTrue(ia.isLoopbackAddress()); } // Check that getting addresses by dotted string distinguish // IPv4 and IPv6 subtypes. InetAddress[] list = InetAddress.getAllByName("192.168.0.1"); for (InetAddress addr : list) { assertFalse("Expected subclass returned", addr.getClass().equals(InetAddress.class)); } } /** * java.net.InetAddress#getByName(java.lang.String) */ public void test_getByNameLjava_lang_String() throws Exception { // Test for method java.net.InetAddress // java.net.InetAddress.getByName(java.lang.String) InetAddress ia2 = InetAddress.getByName("127.0.0.1"); // TODO : Test to ensure all the address formats are recognized InetAddress i = InetAddress.getByName("1.2.3"); assertEquals("1.2.0.3", i.getHostAddress()); i = InetAddress.getByName("1.2"); assertEquals("1.0.0.2", i.getHostAddress()); i = InetAddress.getByName(String.valueOf(0xffffffffL)); assertEquals("255.255.255.255", i.getHostAddress()); } /** * java.net.InetAddress#getHostAddress() */ public void test_getHostAddress() throws Exception { assertEquals("1.2.3.4", InetAddress.getByName("1.2.3.4").getHostAddress()); assertEquals("::1", InetAddress.getByName("::1").getHostAddress()); } /** * java.net.InetAddress#getLocalHost() */ public void test_getLocalHost() throws Exception { // Test for method java.net.InetAddress // java.net.InetAddress.getLocalHost() // We don't know the host name or ip of the machine // running the test, so we can't build our own address DatagramSocket dg = new DatagramSocket(0, InetAddress .getLocalHost()); assertTrue("Incorrect host returned", InetAddress.getLocalHost() .equals(dg.getLocalAddress())); dg.close(); } /** * java.net.InetAddress#getLocalHost() */ public void test_getLocalHost_extended() throws Exception { // Bogus, but we don't know the host name or ip of the machine // running the test, so we can't build our own address DatagramSocket dg = new DatagramSocket(0, InetAddress.getLocalHost()); assertEquals("Incorrect host returned", InetAddress.getLocalHost(), dg.getLocalAddress()); dg.close(); } /** * java.net.InetAddress#isMulticastAddress() */ public void test_isMulticastAddress() throws UnknownHostException { InetAddress ia2 = InetAddress.getByName("239.255.255.255"); assertTrue(ia2.isMulticastAddress()); ia2 = InetAddress.getByName("localhost"); assertFalse(ia2.isMulticastAddress()); } /** * java.net.InetAddress#isAnyLocalAddress() */ public void test_isAnyLocalAddress() throws UnknownHostException { InetAddress ia2 = InetAddress.getByName("239.255.255.255"); assertFalse(ia2.isAnyLocalAddress()); ia2 = InetAddress.getByName("localhost"); assertFalse(ia2.isAnyLocalAddress()); } /** * java.net.InetAddress#isLinkLocalAddress() */ public void test_isLinkLocalAddress() throws UnknownHostException { InetAddress ia2 = InetAddress.getByName("239.255.255.255"); assertFalse(ia2.isLinkLocalAddress()); ia2 = InetAddress.getByName("localhost"); assertFalse(ia2.isLinkLocalAddress()); } /** * java.net.InetAddress#isLoopbackAddress() */ public void test_isLoopbackAddress() throws UnknownHostException { InetAddress ia2 = InetAddress.getByName("239.255.255.255"); assertFalse(ia2.isLoopbackAddress()); ia2 = InetAddress.getByName("localhost"); assertTrue(ia2.isLoopbackAddress()); ia2 = InetAddress.getByName("127.0.0.2"); assertTrue(ia2.isLoopbackAddress()); } /** * java.net.InetAddress#isLoopbackAddress() */ public void test_isSiteLocalAddress() throws UnknownHostException { InetAddress ia2 = InetAddress.getByName("239.255.255.255"); assertFalse(ia2.isSiteLocalAddress()); ia2 = InetAddress.getByName("localhost"); assertFalse(ia2.isSiteLocalAddress()); ia2 = InetAddress.getByName("127.0.0.2"); assertFalse(ia2.isSiteLocalAddress()); ia2 = InetAddress.getByName("243.243.45.3"); assertFalse(ia2.isSiteLocalAddress()); ia2 = InetAddress.getByName("10.0.0.2"); assertTrue(ia2.isSiteLocalAddress()); } /** * java.net.InetAddress#isMCGlobal()/isMCLinkLocal/isMCNodeLocal/isMCOrgLocal/isMCSiteLocal */ public void test_isMCVerify() throws UnknownHostException { InetAddress ia2 = InetAddress.getByName("239.255.255.255"); assertFalse(ia2.isMCGlobal()); assertFalse(ia2.isMCLinkLocal()); assertFalse(ia2.isMCNodeLocal()); assertFalse(ia2.isMCOrgLocal()); assertTrue(ia2.isMCSiteLocal()); ia2 = InetAddress.getByName("243.243.45.3"); assertFalse(ia2.isMCGlobal()); assertFalse(ia2.isMCLinkLocal()); assertFalse(ia2.isMCNodeLocal()); assertFalse(ia2.isMCOrgLocal()); assertFalse(ia2.isMCSiteLocal()); ia2 = InetAddress.getByName("250.255.255.254"); assertFalse(ia2.isMCGlobal()); assertFalse(ia2.isMCLinkLocal()); assertFalse(ia2.isMCNodeLocal()); assertFalse(ia2.isMCOrgLocal()); assertFalse(ia2.isMCSiteLocal()); ia2 = InetAddress.getByName("10.0.0.2"); assertFalse(ia2.isMCGlobal()); assertFalse(ia2.isMCLinkLocal()); assertFalse(ia2.isMCNodeLocal()); assertFalse(ia2.isMCOrgLocal()); assertFalse(ia2.isMCSiteLocal()); } /** * java.net.InetAddress#toString() */ public void test_toString() throws Exception { // Test for method java.lang.String java.net.InetAddress.toString() InetAddress ia2 = InetAddress.getByName("127.0.0.1"); assertEquals("/127.0.0.1", ia2.toString()); // Regression for HARMONY-84 InetAddress addr2 = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }); assertEquals("Assert 1: wrong string from address", "/127.0.0.1", addr2.toString()); } /** * java.net.InetAddress#getByAddress(java.lang.String, byte[]) */ public void test_getByAddressLjava_lang_String$B() { // Check an IPv4 address with an IPv6 hostname byte ipAddress[] = { 127, 0, 0, 1 }; String addressStr = "::1"; try { InetAddress addr = InetAddress.getByAddress(addressStr, ipAddress); addr = InetAddress.getByAddress(ipAddress); } catch (UnknownHostException e) { fail("Unexpected problem creating IP Address " + ipAddress.length); } byte ipAddress2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 127, 0, 0, 1 }; addressStr = "::1"; try { InetAddress addr = InetAddress.getByAddress(addressStr, ipAddress2); addr = InetAddress.getByAddress(ipAddress); } catch (UnknownHostException e) { fail("Unexpected problem creating IP Address " + ipAddress.length); } } /** * java.net.InetAddress#getCanonicalHostName() */ public void test_getCanonicalHostName() throws Exception { InetAddress theAddress = null; theAddress = InetAddress.getLocalHost(); assertTrue("getCanonicalHostName returned a zero length string ", theAddress.getCanonicalHostName().length() != 0); assertTrue("getCanonicalHostName returned an empty string ", !theAddress.equals("")); } /** * java.net.InetAddress#isReachableI */ public void test_isReachableI() throws Exception { InetAddress ia = Inet4Address.getByName("127.0.0.1"); assertTrue(ia.isReachable(10000)); ia = Inet4Address.getByName("127.0.0.1"); try { ia.isReachable(-1); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // correct } } /** * java.net.InetAddress#isReachableLjava_net_NetworkInterfaceII */ public void test_isReachableLjava_net_NetworkInterfaceII() throws Exception { // tests local address InetAddress ia = Inet4Address.getByName("127.0.0.1"); assertTrue(ia.isReachable(null, 0, 10000)); ia = Inet4Address.getByName("127.0.0.1"); try { ia.isReachable(null, -1, 10000); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // correct } try { ia.isReachable(null, 0, -1); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // correct } try { ia.isReachable(null, -1, -1); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // correct } // tests nowhere ia = Inet4Address.getByName("1.1.1.1"); assertFalse(ia.isReachable(1000)); assertFalse(ia.isReachable(null, 0, 1000)); // Regression test for HARMONY-1842. ia = InetAddress.getByName("localhost"); //$NON-NLS-1$ Enumeration<NetworkInterface> nif = NetworkInterface.getNetworkInterfaces(); NetworkInterface netif; while (nif.hasMoreElements()) { netif = nif.nextElement(); ia.isReachable(netif, 10, 1000); } } // comparator for InetAddress objects private static final SerializableAssert COMPARATOR = new SerializableAssert() { public void assertDeserialized(Serializable initial, Serializable deserialized) { InetAddress initAddr = (InetAddress) initial; InetAddress desrAddr = (InetAddress) deserialized; byte[] iaAddresss = initAddr.getAddress(); byte[] deIAAddresss = desrAddr.getAddress(); for (int i = 0; i < iaAddresss.length; i++) { assertEquals(iaAddresss[i], deIAAddresss[i]); } assertEquals(initAddr.getHostName(), desrAddr.getHostName()); } }; // Regression Test for Harmony-2290 public void test_isReachableLjava_net_NetworkInterfaceII_loopbackInterface() throws IOException { final int TTL = 20; final int TIME_OUT = 3000; NetworkInterface loopbackInterface = null; ArrayList<InetAddress> localAddresses = new ArrayList<InetAddress>(); Enumeration<NetworkInterface> networkInterfaces = NetworkInterface .getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); Enumeration<InetAddress> addresses = networkInterface .getInetAddresses(); while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement(); if (address.isLoopbackAddress()) { loopbackInterface = networkInterface; } else { localAddresses.add(address); } } } //loopbackInterface can reach local address if (null != loopbackInterface) { for (InetAddress destAddress : localAddresses) { assertTrue(destAddress.isReachable(loopbackInterface, TTL, TIME_OUT)); } } //loopback Interface cannot reach outside address InetAddress destAddress = InetAddress.getByName("www.google.com"); assertFalse(destAddress.isReachable(loopbackInterface, TTL, TIME_OUT)); } /** * serialization/deserialization compatibility. */ public void testSerializationSelf() throws Exception { SerializationTest.verifySelf(InetAddress.getByName("localhost"), COMPARATOR); } /** * serialization/deserialization compatibility with RI. */ public void testSerializationCompatibility() throws Exception { SerializationTest.verifyGolden(this, InetAddress.getByName("localhost"), COMPARATOR); } /** * java.net.InetAddress#getByAddress(byte[]) */ public void test_getByAddress() { // Regression for HARMONY-61 try { InetAddress.getByAddress(null); fail("Assert 0: UnknownHostException must be thrown"); } catch (UnknownHostException e) { // Expected } } }