/*
* 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 tests.api.java.net;
import org.apache.harmony.testframework.serialization.SerializationTest;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import java.net.InetAddress;
import java.net.SocketPermission;
import java.net.UnknownHostException;
import java.security.PermissionCollection;
import tests.support.Support_Configuration;
@TestTargetClass(SocketPermission.class)
public class SocketPermissionTest extends junit.framework.TestCase {
String starName = "*." + Support_Configuration.DomainAddress;
String wwwName = Support_Configuration.HomeAddress;
SocketPermission star_Resolve = new SocketPermission(starName, "resolve");
SocketPermission star_All = new SocketPermission(starName,
"listen,accept,connect");
SocketPermission www_All = new SocketPermission(wwwName,
"connect,listen,accept");
SocketPermission copyOfWww_All = new SocketPermission(wwwName,
"connect,listen,accept");
/**
* @tests java.net.SocketPermission#SocketPermission(java.lang.String,
* java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "SocketPermission",
args = {java.lang.String.class, java.lang.String.class}
)
public void test_ConstructorLjava_lang_StringLjava_lang_String() {
// Test for method java.net.SocketPermission(java.lang.String,
// java.lang.String)
assertTrue("Incorrect name", star_Resolve.getName().equals(starName));
assertEquals("Incorrect actions",
"resolve", star_Resolve.getActions());
SocketPermission sp1 = new SocketPermission("", "connect");
assertEquals("Wrong name1", "localhost", sp1.getName());
SocketPermission sp2 = new SocketPermission(":80", "connect");
assertEquals("Wrong name2", ":80", sp2.getName());
// regression for HARMONY-1462
SocketPermission sp3 = new SocketPermission("localhost:*", "listen");
assertEquals("Wrong name3", "localhost:*", sp3.getName());
// for all ports
SocketPermission spAllPorts = new SocketPermission("localhost:0-65535",
"listen");
assertTrue("Port range error", sp3.implies(spAllPorts));
assertTrue("Port range error", spAllPorts.implies(sp3));
}
/**
* @tests java.net.SocketPermission#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.SocketPermission.equals(java.lang.Object)
assertTrue("Different names but returned equal", !star_All
.equals(www_All));
assertTrue("Different actions but returned equal", !star_Resolve
.equals(star_All));
assertTrue("Same but returned unequal", www_All.equals(copyOfWww_All));
assertTrue("Returned true when compared to a String", !www_All
.equals(www_All.toString()));
SocketPermission sp1 = new SocketPermission("TEST1.com",
"resolve,connect");
SocketPermission sp2 = new SocketPermission("test1.com",
"resolve,connect");
assertTrue("Different cases should be equal", sp1.equals(sp2));
// Regression for HARMONY-1524
assertFalse(sp1.equals(null));
// Regression for HARMONY-3333
sp1 = new SocketPermission("TEST1.com:333", "resolve");
sp2 = new SocketPermission("test1.com:444", "resolve");
assertTrue("Different cases should be equal", sp1.equals(sp2));
}
/**
* @tests java.net.SocketPermission#equals(java.lang.Object)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "equals",
args = {java.lang.Object.class}
)
public void test_equalsLjava_lang_Object_subtest0() {
SocketPermission sp1 = new SocketPermission(
Support_Configuration.InetTestAddress, "resolve,connect");
SocketPermission sp2 = new SocketPermission(
Support_Configuration.InetTestIP, "resolve,connect");
assertTrue("Same IP address should be equal", sp1.equals(sp2));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "hashCode",
args = {}
)
public void test_hashCode() {
SocketPermission sp1 = new SocketPermission(
Support_Configuration.InetTestIP, "resolve,connect");
SocketPermission sp2 = new SocketPermission(
Support_Configuration.InetTestIP, "resolve,connect");
assertTrue("Same IP address should have equal hash codes",
sp1.hashCode() == sp2.hashCode());
assertTrue("Different names but returned equal hash codes",
star_All.hashCode() != www_All.hashCode());
}
/**
* @tests java.net.SocketPermission#getActions()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getActions",
args = {}
)
public void test_getActions() {
// Test for method java.lang.String
// java.net.SocketPermission.getActions()
assertEquals("Incorrect actions",
"resolve", star_Resolve.getActions());
assertEquals("Incorrect actions/not in canonical form", "connect,listen,accept,resolve", star_All
.getActions());
}
/**
* @tests java.net.SocketPermission#implies(java.security.Permission)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "implies",
args = {java.security.Permission.class}
)
public void test_impliesLjava_security_Permission() {
// Test for method boolean
// java.net.SocketPermission.implies(java.security.Permission)
assertTrue("All should imply resolve", star_All.implies(star_Resolve));
// regression for HARMONY-1200
assertFalse("Null should not be implied", star_All.implies((SocketPermission)null));
assertTrue("Equals should imply eachother", www_All
.implies(copyOfWww_All));
assertTrue("Wild should imply normal", star_All.implies(www_All));
assertTrue("Normal shouldn't imply wildcard", !www_All
.implies(star_Resolve));
assertTrue("Resolve shouldn't imply all", !star_Resolve
.implies(star_All));
SocketPermission p1 = new SocketPermission(wwwName + ":80-81",
"connect");
SocketPermission p2 = new SocketPermission(wwwName + ":80", "connect");
assertTrue("Port 80 is implied by 80-81", p1.implies(p2));
p1 = new SocketPermission(wwwName + ":79-80", "connect");
assertTrue("Port 80 is implied by 79-80", p1.implies(p2));
p1 = new SocketPermission(wwwName + ":79-81", "connect");
assertTrue("Port 80 is implied by 79-81", p1.implies(p2));
p2 = new SocketPermission(wwwName + ":79-80", "connect");
assertTrue("Port 79-80 is implied by 79-81", p1.implies(p2));
p2 = new SocketPermission(wwwName, "resolve");
assertTrue(
"Any identical host should imply resolve regardless of the ports",
p1.implies(p2));
SocketPermission sp1 = new SocketPermission("www.Ibm.com", "resolve");
SocketPermission sp2 = new SocketPermission("www.IBM.com", "resolve");
assertTrue("SocketPermission is case sensitive", sp1.implies(sp2));
SocketPermission sp3 = new SocketPermission("*.ibm.com", "resolve");
assertTrue("SocketPermission wildcard is case sensitive", sp3
.implies(sp2));
InetAddress host = null;
try {
host = InetAddress.getByName(Support_Configuration.UnresolvedIP);
} catch (UnknownHostException e) {
}
SocketPermission perm1 = new SocketPermission(
Support_Configuration.UnresolvedIP, "connect");
SocketPermission perm2 = new SocketPermission(
Support_Configuration.UnresolvedIP + ":80", "connect");
assertTrue("should imply port 80", perm1.implies(perm2));
PermissionCollection col = perm1.newPermissionCollection();
col.add(perm1);
assertTrue("collection should imply port 80", col.implies(perm2));
}
/**
* @tests java.net.SocketPermission#newPermissionCollection()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "newPermissionCollection",
args = {}
)
public void test_newPermissionCollection() {
// Test for method java.security.PermissionCollection
// java.net.SocketPermission.newPermissionCollection()
java.security.PermissionCollection pc = star_Resolve
.newPermissionCollection();
pc.add(star_Resolve);
pc.add(www_All);
assertTrue("Should imply all on " + wwwName, pc.implies(www_All));
assertTrue("Should imply resolve on " + starName, pc
.implies(star_Resolve));
assertTrue("Should not imply all on " + starName, !pc.implies(star_All));
// wipe out pc
pc = star_Resolve.newPermissionCollection();
pc.add(star_All);
assertTrue("Should imply resolve on " + starName, pc
.implies(star_Resolve));
assertTrue("Should imply all on " + wwwName, pc.implies(www_All));
pc = star_Resolve.newPermissionCollection();
SocketPermission p1 = new SocketPermission(wwwName + ":79-80",
"connect");
pc.add(p1);
SocketPermission p2 = new SocketPermission(wwwName, "resolve");
assertTrue(
"Any identical host should imply resolve regardless of the ports",
pc.implies(p2));
assertTrue("A different host should not imply resolve", !pc
.implies(star_Resolve));
}
/**
* @tests serialization/deserialization.
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization/deserialization compatibility.",
method = "!SerializationSelf",
args = {}
)
public void testSerializationSelf() throws Exception {
SocketPermission permission = new SocketPermission("harmony.apache.org", "connect");;
SerializationTest.verifySelf(permission);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "SocketPermission",
args = {java.lang.String.class, java.lang.String.class}
)
public void test_ConstructorLjava_lang_StringLjava_lang_String_subtestIPv6() {
String[] goodTestStrings = {
"12334.0.0.01", "[fe80::1]",
"[FE80:0000:0000:0000:0000:0000:0000:0001]:80",
"[::ffff]:80-82", "[ffff::]:80-82", "[fe80::1]:80",
"FE80:0000:0000:0000:0000:0000:0000:0001",
"FE80:0000:0000:0000:0000:0000:0000:0001:80"
};
String[] badTestStrings = {"someName:withColonInit:80", "fg80::1", "[ffff:::80-82]",
":[:fff]:80", "FE80:0000:0000:0000:0000:0000:0000:0001:80:82", "FE80::1"
};
for (int i=0; i < goodTestStrings.length; i++) {
try {
SocketPermission sp = new SocketPermission(goodTestStrings[i], "connect");
} catch (IllegalArgumentException e) {
e.printStackTrace();
fail("SocketPermission named: " + goodTestStrings[i] + " failed construction: " + e.getMessage());
}
}
for (int i=0; i < badTestStrings.length; i++) {
try {
SocketPermission sp = new SocketPermission(badTestStrings[i], "connect");
fail("SocketPermission named: " + badTestStrings[i] + " should have thrown an IllegalArgumentException on construction");
} catch (IllegalArgumentException e) {}
}
}
/**
* Sets up the fixture, for example, open a network connection. This method
* is called before a test is executed.
*/
protected void setUp() {
}
/**
* Tears down the fixture, for example, close a network connection. This
* method is called after a test is executed.
*/
protected void tearDown() {
}
}
|