blob: 4275ef37bea110795fe1aa7ef83d2db1b706915e [file] [log] [blame]
/*
* 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.luni.tests.java.net;
import dalvik.annotation.BrokenTest;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import java.io.IOException;
import java.io.Serializable;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.security.Permission;
import java.util.ArrayList;
import java.util.Enumeration;
import org.apache.harmony.testframework.serialization.SerializationTest;
import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
import tests.support.Support_Configuration;
@TestTargetClass(InetAddress.class)
public class InetAddressTest extends junit.framework.TestCase {
private static boolean someoneDone[] = new boolean[2];
protected static boolean threadedTestSucceeded;
protected static String threadedTestErrorString;
@Override protected void setUp() throws Exception {
super.setUp();
}
@Override protected void tearDown() throws Exception {
super.tearDown();
}
/**
* This class is used to test inet_ntoa, gethostbyaddr and gethostbyname
* functions in the VM to make sure they're threadsafe. getByName will cause
* the gethostbyname function to be called. getHostName will cause the
* gethostbyaddr to be called. getHostAddress will cause inet_ntoa to be
* called.
*/
static class threadsafeTestThread extends Thread {
private String lookupName;
private InetAddress testAddress;
private int testType;
/*
* REP_NUM can be adjusted if desired. Since this error is
* non-deterministic it may not always occur. Setting REP_NUM higher,
* increases the chances of an error being detected, but causes the test
* to take longer. Because the Java threads spend a lot of time
* performing operations other than running the native code that may not
* be threadsafe, it is quite likely that several thousand iterations
* will elapse before the first error is detected.
*/
private static final int REP_NUM = 20000;
public threadsafeTestThread(String name, String lookupName,
InetAddress testAddress, int type) {
super(name);
this.lookupName = lookupName;
this.testAddress = testAddress;
testType = type;
}
public void run() {
try {
String correctName = testAddress.getHostName();
String correctAddress = testAddress.getHostAddress();
long startTime = System.currentTimeMillis();
synchronized (someoneDone) {
}
for (int i = 0; i < REP_NUM; i++) {
if (someoneDone[testType]) {
break;
} else if ((i % 25) == 0
&& System.currentTimeMillis() - startTime > 240000) {
System.out
.println("Exiting due to time limitation after "
+ i + " iterations");
break;
}
InetAddress ia = InetAddress.getByName(lookupName);
String hostName = ia.getHostName();
String hostAddress = ia.getHostAddress();
// Intentionally not looking for exact name match so that
// the test works across different platforms that may or
// may not include a domain suffix on the hostname
if (!hostName.startsWith(correctName)) {
threadedTestSucceeded = false;
threadedTestErrorString = (testType == 0 ? "gethostbyname"
: "gethostbyaddr")
+ ": getHostName() returned "
+ hostName
+ " instead of " + correctName;
break;
}
// IP addresses should match exactly
if (!correctAddress.equals(hostAddress)) {
threadedTestSucceeded = false;
threadedTestErrorString = (testType == 0 ? "gethostbyname"
: "gethostbyaddr")
+ ": getHostName() returned "
+ hostAddress
+ " instead of " + correctAddress;
break;
}
}
someoneDone[testType] = true;
} catch (Exception e) {
threadedTestSucceeded = false;
threadedTestErrorString = e.toString();
}
}
}
/**
* @tests java.net.InetAddress#equals(java.lang.Object)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "equals",
args = {java.lang.Object.class}
)
public void test_equalsLjava_lang_Object() {
// Test for method boolean java.net.InetAddress.equals(java.lang.Object)
try {
InetAddress ia1 = InetAddress
.getByName(Support_Configuration.InetTestAddress);
InetAddress ia2 = InetAddress
.getByName(Support_Configuration.InetTestIP);
assertTrue("Equals returned incorrect result - " + ia1 + " != "
+ ia2, ia1.equals(ia2));
} catch (Exception e) {
fail("Exception during equals test : " + e.getMessage());
}
}
/**
* @tests java.net.InetAddress#getAddress()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getAddress",
args = {}
)
public void test_getAddress() {
// Test for method byte [] java.net.InetAddress.getAddress()
try {
InetAddress ia = InetAddress
.getByName(Support_Configuration.InetTestIP);
// BEGIN android-changed
// using different address. The old one was { 9, 26, -56, -111 }
// this lead to a crash, also in RI.
byte[] caddr = Support_Configuration.InetTestAddr;
// END android-changed
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) {
}
}
/**
* @tests java.net.InetAddress#getAllByName(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getAllByName",
args = {java.lang.String.class}
)
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(Support_Configuration.SpecialInetTestAddress);
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(
Support_Configuration.SpecialInetTestAddress));
}// end for all aliases
// Regression for HARMONY-56
InetAddress[] addresses = InetAddress.getAllByName(null);
assertTrue("getAllByName(null): no results", addresses.length > 0);
for (int i = 0; i < addresses.length; i++) {
InetAddress address = addresses[i];
assertTrue("Assert 1: getAllByName(null): " + address +
" is not loopback", address.isLoopbackAddress());
}
try {
InetAddress.getAllByName("unknown.host");
fail("UnknownHostException was not thrown.");
} catch(UnknownHostException uhe) {
//expected
}
}
/**
* @tests java.net.InetAddress#getByName(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getByName",
args = {java.lang.String.class}
)
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(Support_Configuration.InetTestIP);
// Intentionally not testing for exact string match
/* FIXME: comment the assertion below because it is platform/configuration dependent
* Please refer to HARMONY-1664 (https://issues.apache.org/jira/browse/HARMONY-1664)
* for details
*/
// assertTrue(
// "Expected " + Support_Configuration.InetTestAddress + "*",
// ia2.getHostName().startsWith(Support_Configuration.InetTestAddress));
// 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());
// BEGIN android-removed
// This test checks a bug in the RI that allows any number of '.' after
// a valid ipv4 address. This bug doesn't exist in this implementation.
// String s = "222.222.222.222....";
// i = InetAddress.getByName(s);
// assertEquals("222.222.222.222",i.getHostAddress());
// END android-removed
class MockSecurityManager extends SecurityManager {
public void checkPermission(Permission permission) {
if (permission.getName().equals("setSecurityManager")){
return;
}
if (permission.getName().equals("3d.com")){
throw new SecurityException();
}
super.checkPermission(permission);
}
public void checkConnect(String host, int port) {
if(host.equals("google.com")) {
throw new SecurityException();
}
}
}
try {
InetAddress.getByName("0.0.0.0.0");
fail("UnknownHostException was not thrown.");
} catch(UnknownHostException ue) {
//expected
}
}
/**
* @tests java.net.InetAddress#getHostAddress()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getHostAddress",
args = {}
)
public void test_getHostAddress() {
// Test for method java.lang.String
// java.net.InetAddress.getHostAddress()
try {
InetAddress ia2 = InetAddress
.getByName(Support_Configuration.InetTestAddress);
assertTrue("getHostAddress returned incorrect result: "
+ ia2.getHostAddress() + " != "
+ Support_Configuration.InetTestIP, ia2.getHostAddress()
.equals(Support_Configuration.InetTestIP));
} catch (Exception e) {
fail("Exception during getHostAddress test : " + e.getMessage());
}
}
/**
* @tests java.net.InetAddress#getHostName()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getHostName",
args = {}
)
public void test_getHostName() throws Exception {
// Test for method java.lang.String java.net.InetAddress.getHostName()
InetAddress ia = InetAddress
.getByName(Support_Configuration.InetTestIP);
// Intentionally not testing for exact string match
/* FIXME: comment the assertion below because it is platform/configuration dependent
* Please refer to HARMONY-1664 (https://issues.apache.org/jira/browse/HARMONY-1664)
* for details
*/
// assertTrue(
// "Expected " + Support_Configuration.InetTestAddress + "*",
// ia.getHostName().startsWith(Support_Configuration.InetTestAddress));
// Make sure there is no caching
System.setProperty("networkaddress.cache.ttl", "0");
// Test for threadsafety
InetAddress lookup1 = InetAddress
.getByName(Support_Configuration.InetTestAddress);
assertTrue(lookup1 + " expected "
+ Support_Configuration.InetTestIP,
Support_Configuration.InetTestIP.equals(lookup1
.getHostAddress()));
InetAddress lookup2 = InetAddress
.getByName(Support_Configuration.InetTestAddress2);
assertTrue(lookup2 + " expected "
+ Support_Configuration.InetTestIP2,
Support_Configuration.InetTestIP2.equals(lookup2
.getHostAddress()));
threadsafeTestThread thread1 = new threadsafeTestThread("1",
lookup1.getHostName(), lookup1, 0);
threadsafeTestThread thread2 = new threadsafeTestThread("2",
lookup2.getHostName(), lookup2, 0);
threadsafeTestThread thread3 = new threadsafeTestThread("3",
lookup1.getHostAddress(), lookup1, 1);
threadsafeTestThread thread4 = new threadsafeTestThread("4",
lookup2.getHostAddress(), lookup2, 1);
// initialize the flags
threadedTestSucceeded = true;
synchronized (someoneDone) {
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
thread1.join();
thread2.join();
thread3.join();
thread4.join();
/* FIXME: comment the assertion below because it is platform/configuration dependent
* Please refer to HARMONY-1664 (https://issues.apache.org/jira/browse/HARMONY-1664)
* for details
*/
// assertTrue(threadedTestErrorString, threadedTestSucceeded);
}
/**
* @tests java.net.InetAddress#getLocalHost()
*/
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "UnknownHostException should be thrown if no IP address for the host could be found.",
method = "getLocalHost",
args = {}
)
public void test_getLocalHost() {
// Test for method java.net.InetAddress
// java.net.InetAddress.getLocalHost()
try {
// 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();
} catch (Exception e) {
fail("Exception during getLocalHost test : " + e.getMessage());
}
}
/**
* @tests java.net.InetAddress#hashCode()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "hashCode",
args = {}
)
int getHashCode(String literal) {
InetAddress host = null;
try {
host = InetAddress.getByName(literal);
} catch(UnknownHostException e) {
fail("Exception during hashCode test : " + e.getMessage());
}
return host.hashCode();
}
public void test_hashCode() {
int hashCode = getHashCode(Support_Configuration.InetTestIP);
int ip6HashCode = getHashCode(Support_Configuration.InetTestIP6);
int ip6LOHashCode = getHashCode(Support_Configuration.InetTestIP6LO);
assertFalse("Hash collision", hashCode == ip6HashCode);
assertFalse("Hash collision", ip6HashCode == ip6LOHashCode);
assertFalse("Hash collision", hashCode == ip6LOHashCode);
assertFalse("Hash collision", ip6LOHashCode == 0);
assertFalse("Hash collision", ip6LOHashCode == 1);
}
/**
* @tests java.net.InetAddress#isMulticastAddress()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isMulticastAddress",
args = {}
)
public void test_isMulticastAddress() {
// Test for method boolean java.net.InetAddress.isMulticastAddress()
try {
InetAddress ia1 = InetAddress.getByName("ff02::1");
assertTrue("isMulticastAddress returned incorrect result", ia1
.isMulticastAddress());
InetAddress ia2 = InetAddress.getByName("239.255.255.255");
assertTrue("isMulticastAddress returned incorrect result", ia2
.isMulticastAddress());
InetAddress ia3 = InetAddress.getByName("fefb::");
assertFalse("isMulticastAddress returned incorrect result", ia3
.isMulticastAddress());
InetAddress ia4 = InetAddress.getByName("10.0.0.1");
assertFalse("isMulticastAddress returned incorrect result", ia4
.isMulticastAddress());
} catch (Exception e) {
fail("Exception during isMulticastAddress test : " + e.getMessage());
}
}
/**
* @tests java.net.InetAddress#toString()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "toString",
args = {}
)
public void test_toString() throws Exception {
// Test for method java.lang.String java.net.InetAddress.toString()
InetAddress ia2 = InetAddress
.getByName(Support_Configuration.InetTestIP);
assertEquals("/" + Support_Configuration.InetTestIP, ia2.toString());
// Regression for HARMONY-84
InetAddress addr = InetAddress.getByName("localhost");
assertEquals("Assert 0: wrong string from name", "localhost/127.0.0.1", addr.toString());
InetAddress addr2 = InetAddress.getByAddress(new byte[]{127, 0, 0, 1});
assertEquals("Assert 1: wrong string from address", "/127.0.0.1", addr2.toString());
}
/**
* @tests java.net.InetAddress#getByAddress(java.lang.String, byte[])
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getByAddress",
args = {java.lang.String.class, byte[].class}
)
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);
}
try {
InetAddress addr = InetAddress.getByAddress(addressStr,
new byte [] {0, 0, 0, 0, 0});
fail("UnknownHostException was thrown.");
} catch(UnknownHostException uhe) {
//expected
}
}
/**
* @tests java.net.InetAddress#getCanonicalHostName()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getCanonicalHostName",
args = {}
)
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(""));
// test against an expected value
InetAddress ia = InetAddress
.getByName(Support_Configuration.InetTestIP);
// Intentionally not testing for exact string match
/* FIXME: comment the assertion below because it is platform/configuration dependent
* Please refer to HARMONY-1664 (https://issues.apache.org/jira/browse/HARMONY-1664)
* for details
*/
// assertTrue(
// "Expected " + Support_Configuration.InetTestAddress + "*",
// ia.getCanonicalHostName().startsWith(Support_Configuration.InetTestAddress));
}
/**
* @tests java.net.InetAddress#isReachableI
*/
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "IOException checking missed (if network error occurs).",
method = "isReachable",
args = {int.class}
)
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
}
}
/**
* @tests java.net.InetAddress#isReachableLjava_net_NetworkInterfaceII
*/
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "IOException checking missed (if network error occurs).",
method = "isReachable",
args = {java.net.NetworkInterface.class, int.class, int.class}
)
@BrokenTest("Depends on external network address and shows different" +
"behavior with WLAN and 3G networks")
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");
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
@TestTargetNew(
level = TestLevel.ADDITIONAL,
notes = "Regeression test. Functional test.",
method = "isReachable",
args = {java.net.NetworkInterface.class, int.class, int.class}
)
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));
}
/**
* @tests serialization/deserialization compatibility.
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Checks serialization.",
method = "!SerializationSelf",
args = {}
)
public void testSerializationSelf() throws Exception {
SerializationTest.verifySelf(InetAddress.getByName("localhost"),
COMPARATOR);
}
/**
* @tests serialization/deserialization compatibility with RI.
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Checks serialization.",
method = "!SerializationGolden",
args = {}
)
public void testSerializationCompatibility() throws Exception {
SerializationTest.verifyGolden(this,
InetAddress.getByName("localhost"), COMPARATOR);
}
/**
* @tests java.net.InetAddress#getByAddress(byte[])
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getByAddress",
args = {byte[].class}
)
public void test_getByAddress() {
byte ipAddress[] = { 127, 0, 0, 1 };
try {
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 };
try {
InetAddress.getByAddress(ipAddress2);
} catch (UnknownHostException e) {
fail("Unexpected problem creating IP Address "
+ ipAddress.length);
}
// Regression for HARMONY-61
try {
InetAddress.getByAddress(null);
fail("Assert 0: UnknownHostException must be thrown");
} catch (UnknownHostException e) {
// Expected
}
try {
byte [] byteArray = new byte[] {};
InetAddress.getByAddress(byteArray);
fail("Assert 1: UnknownHostException must be thrown");
} catch (UnknownHostException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isAnyLocalAddress",
args = {}
)
public void test_isAnyLocalAddress() throws Exception {
byte [] ipAddress1 = { 127, 42, 42, 42 };
InetAddress ia1 = InetAddress.getByAddress(ipAddress1);
assertFalse(ia1.isAnyLocalAddress());
byte [] ipAddress2 = { 0, 0, 0, 0 };
InetAddress ia2 = InetAddress.getByAddress(ipAddress2);
assertTrue(ia2.isAnyLocalAddress());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isLinkLocalAddress",
args = {}
)
public void test_isLinkLocalAddress() throws Exception {
String addrName = "FE80::0";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue(
"IPv6 link local address " + addrName + " not detected.",
addr.isLinkLocalAddress());
addrName = "FEBF::FFFF:FFFF:FFFF:FFFF";
addr = Inet6Address.getByName(addrName);
assertTrue(
"IPv6 link local address " + addrName + " not detected.",
addr.isLinkLocalAddress());
addrName = "FEC0::1";
addr = Inet6Address.getByName(addrName);
assertTrue("IPv6 address " + addrName
+ " detected incorrectly as a link local address.", !addr
.isLinkLocalAddress());
addrName = "42.42.42.42";
addr = Inet4Address.getByName(addrName);
assertTrue("IPv4 address " + addrName
+ " incorrectly reporting as a link local address.", !addr
.isLinkLocalAddress());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isLoopbackAddress",
args = {}
)
public void test_isLoopbackAddress() throws Exception {
String addrName = "127.0.0.0";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue("Loopback address " + addrName + " not detected.", addr
.isLoopbackAddress());
addrName = "127.42.42.42";
addr = InetAddress.getByName(addrName);
assertTrue("Loopback address " + addrName + " not detected.", addr
.isLoopbackAddress());
addrName = "42.42.42.42";
addr = Inet4Address.getByName(addrName);
assertTrue("Address incorrectly " + addrName
+ " detected as a loopback address.", !addr
.isLoopbackAddress());
addrName = "::FFFF:127.42.42.42";
addr = InetAddress.getByName(addrName);
assertTrue("IPv4-compatible IPv6 loopback address " + addrName
+ " not detected.", addr.isLoopbackAddress());
addrName = "::FFFF:42.42.42.42";
addr = InetAddress.getByName(addrName);
assertTrue("IPv4-compatible IPv6 address incorrectly " + addrName
+ " detected as a loopback address.", !addr
.isLoopbackAddress());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isMCGlobal",
args = {}
)
public void test_isMCGlobal() throws Exception {
String addrName = "224.0.0.255";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue("IPv4 link-local multicast address " + addrName
+ " incorrectly identified as a global multicast address.",
!addr.isMCGlobal());
addrName = "224.0.1.0"; // a multicast addr 1110
addr = Inet4Address.getByName(addrName);
assertTrue("IPv4 global multicast address " + addrName
+ " not identified as a global multicast address.", addr
.isMCGlobal());
addrName = "FFFE:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 global multicast address " + addrName
+ " not detected.", addr.isMCGlobal());
addrName = "FF08:42:42:42:42:42:42:42";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 mulitcast organizational " + addrName
+ " incorrectly indicated as a global address.", !addr
.isMCGlobal());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isMCLinkLocal",
args = {}
)
public void test_isMCLinkLocal() throws Exception {
String addrName = "224.0.0.255";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue("IPv4 link-local multicast address " + addrName
+ " not identified as a link-local multicast address.",
addr.isMCLinkLocal());
addrName = "224.0.1.0";
addr = InetAddress.getByName(addrName);
assertTrue(
"IPv4 global multicast address "
+ addrName
+ " incorrectly identified as a link-local " +
"multicast address.",
!addr.isMCLinkLocal());
addrName = "FFF2:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 link local multicast address " + addrName
+ " not detected.", addr.isMCLinkLocal());
addrName = "FF08:42:42:42:42:42:42:42";
addr = InetAddress.getByName(addrName);
assertTrue(
"IPv6 organization multicast address "
+ addrName
+ " incorrectly indicated as a link-local " +
"mulitcast address.",
!addr.isMCLinkLocal());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isMCNodeLocal",
args = {}
)
public void test_isMCNodeLocal() throws Exception {
String addrName = "224.42.42.42";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue(
"IPv4 multicast address "
+ addrName
+ " incorrectly identified as a node-local " +
"multicast address.",
!addr.isMCNodeLocal());
addrName = "FFF1:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 node-local multicast address " + addrName
+ " not detected.", addr.isMCNodeLocal());
addrName = "FF08:42:42:42:42:42:42:42";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 mulitcast organizational address " + addrName
+ " incorrectly indicated as a node-local address.", !addr
.isMCNodeLocal());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isMCOrgLocal",
args = {}
)
public void test_isMCOrgLocal() throws Exception {
String addrName = "239.252.0.0"; // a multicast addr 1110
InetAddress addr = InetAddress.getByName(addrName);
assertTrue(
"IPv4 site-local multicast address "
+ addrName
+ " incorrectly identified as a org-local multicast address.",
!addr.isMCOrgLocal());
addrName = "239.192.0.0"; // a multicast addr 1110
addr = InetAddress.getByName(addrName);
assertTrue("IPv4 org-local multicast address " + addrName
+ " not identified as a org-local multicast address.", addr
.isMCOrgLocal());
addrName = "FFF8:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 organization-local multicast address " + addrName
+ " not detected.", addr.isMCOrgLocal());
addrName = "FF0E:42:42:42:42:42:42:42";
addr = InetAddress.getByName(addrName);
assertTrue(
"IPv6 global multicast address "
+ addrName
+ " incorrectly indicated as an organization-local mulitcast address.",
!addr.isMCOrgLocal());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isMCSiteLocal",
args = {}
)
public void test_isMCSiteLocal() throws Exception {
String addrName = "FFF5:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue("IPv6 site-local multicast address " + addrName
+ " not detected.", addr.isMCSiteLocal());
// a sample MC organizational address
addrName = "FF08:42:42:42:42:42:42:42";
addr = Inet6Address.getByName(addrName);
assertTrue(
"IPv6 organization multicast address "
+ addrName
+ " incorrectly indicated as a site-local " +
"mulitcast address.",
!addr.isMCSiteLocal());
addrName = "239.0.0.0";
addr = Inet4Address.getByName(addrName);
assertTrue(
"IPv4 reserved multicast address "
+ addrName
+ " incorrectly identified as a site-local " +
"multicast address.",
!addr.isMCSiteLocal());
addrName = "239.255.0.0";
addr = Inet4Address.getByName(addrName);
assertTrue("IPv4 site-local multicast address " + addrName
+ " not identified as a site-local multicast address.",
addr.isMCSiteLocal());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isSiteLocalAddress",
args = {}
)
public void test_isSiteLocalAddress() throws Exception {
String addrName = "42.42.42.42";
InetAddress addr = InetAddress.getByName(addrName);
assertTrue("IPv4 address " + addrName
+ " incorrectly reporting as a site local address.", !addr
.isSiteLocalAddress());
addrName = "FEFF::FFFF:FFFF:FFFF:FFFF:FFFF";
addr = InetAddress.getByName(addrName);
assertTrue(
"IPv6 site local address " + addrName + " not detected.",
addr.isSiteLocalAddress());
addrName = "FEBF::FFFF:FFFF:FFFF:FFFF:FFFF";
addr = InetAddress.getByName(addrName);
assertTrue("IPv6 address " + addrName
+ " detected incorrectly as a site local address.", !addr
.isSiteLocalAddress());
}
class MockSecurityManager extends SecurityManager {
public void checkPermission(Permission permission) {
if (permission.getName().equals("setSecurityManager")){
return;
}
if (permission.getName().equals("3d.com")){
throw new SecurityException();
}
super.checkPermission(permission);
}
}
}