1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.security.permissions; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.KnownFailure; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.InetAddress; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Socket; 302f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Projectimport java.net.UnknownHostException; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class tests the security permissions which are documented in 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://java.sun.com/j2se/1.5.0/docs/guide/security/permissions.html#PermsAndMethods 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for class java.net.Socket 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(java.net.Socket.class) 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class JavaNetSocketTest extends TestCase { 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecurityManager old; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void setUp() throws Exception { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project old = System.getSecurityManager(); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.setUp(); 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void tearDown() throws Exception { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(old); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.tearDown(); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that java.net.Socket constructor calls checkConnect on security manager.", 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Socket", 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, int.class} 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that java.net.Socket constructor calls checkConnect on security manager.", 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Socket", 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, int.class, boolean.class} 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that java.net.Socket constructor calls checkConnect on security manager.", 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Socket", 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, int.class, java.net.InetAddress.class, int.class} 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that java.net.Socket constructor calls checkConnect on security manager.", 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Socket", 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.net.InetAddress.class, int.class} 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that java.net.Socket constructor calls checkConnect on security manager.", 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Socket", 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.net.InetAddress.class, int.class, boolean.class} 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that java.net.Socket constructor calls checkConnect on security manager.", 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Socket", 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.net.InetAddress.class, int.class, java.net.InetAddress.class, int.class} 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_ctor() throws IOException { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class TestSecurityManager extends SecurityManager { 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean called = false; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String host = null; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int port = -1; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project void reset(){ 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project called = false; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project host = null; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project port = -1; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkConnect(String host, int port) { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.called = true; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.port = port; 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.host = host; 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPermission(Permission permission) { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String host = "www.google.ch"; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int port = 80; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String hostAddress = InetAddress.getByName(host).getHostAddress(); 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TestSecurityManager s = new TestSecurityManager(); 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(s); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Socket(host, port); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Socket(host, port, true); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Socket(host, port, InetAddress.getByAddress(new byte[] {0,0,0,0}), 0); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Socket(InetAddress.getByName(host), port); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Socket(InetAddress.getByName(host), port, true); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Socket(InetAddress.getByName(host), port, InetAddress.getByAddress(new byte[] {0,0,0,0}), 0); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1572f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project 1582f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project @TestTargetNew( 1592f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project level = TestLevel.PARTIAL, 1602f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project notes = "", 1612f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project method = "Socket", 1622f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project args = {java.net.InetAddress.class, int.class, java.net.InetAddress.class, int.class} 1632f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project ) 1642f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project @KnownFailure("throws SocketException with message: the socket level is invalid. Works on the RI") 1652f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project public void test_ctor2() throws IOException { 1662f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project class TestSecurityManager extends SecurityManager { 1672f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project boolean called = false; 1682f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project String host = null; 1692f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project int port = -1; 1702f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project void reset(){ 1712f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project called = false; 1722f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project host = null; 1732f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project port = -1; 1742f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project } 1752f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project @Override 1762f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project public void checkConnect(String host, int port) { 1772f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project this.called = true; 1782f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project this.port = port; 1792f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project this.host = host; 1802f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project } 1812f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project @Override 1822f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project public void checkPermission(Permission permission) { 1832f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project 1842f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project } 1852f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project } 1862f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project 1872f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project String host = "www.google.ch"; 1882f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project int port = 80; 1892f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project String hostAddress = InetAddress.getByName(host).getHostAddress(); 1902f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project 1912f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project TestSecurityManager s = new TestSecurityManager(); 1922f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project System.setSecurityManager(s); 1932f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project 1942f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project s.reset(); 1952f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project new Socket(InetAddress.getByName(host), port, InetAddress.getLocalHost(), 0); 1962f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project assertTrue("java.net.ServerSocket ctor must call checkConnect on security permissions", s.called); 1972f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project assertEquals("Argument of checkConnect is not correct", hostAddress, s.host); 1982f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project assertEquals("Argument of checkConnect is not correct", port, s.port); 1992f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project } 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 201