1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @author Aleksei Y. Semenov 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.security.tests.java.security; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.IdentityScope; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permissions; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Security; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecurityPermission; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.IdentityScopeStub; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(IdentityScope.class) 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests for <code>IdentityScope</code> 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@SuppressWarnings("deprecation") 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class IdentityScopeTest extends TestCase { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class MySecurityManager extends SecurityManager { 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Permissions denied = new Permissions(); 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPermission(Permission permission){ 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (denied!=null && denied.implies(permission)) throw new SecurityException(); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void main(String[] args) { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project junit.textui.TestRunner.run(IdentityScopeTest.class); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScope is; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class under test for String toString() 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "toString", 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testToString() { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(new IdentityScopeStub("Aleksei Semenov").toString()); 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * test default constructor void IdentityScope() 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "IdentityScope", 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testIdentityScope() { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(new IdentityScopeStub()); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check that void IdentityScope(String) creates instance with given name 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies just positive case with non null parameter", 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "IdentityScope", 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testIdentityScopeString() { 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is = new IdentityScopeStub("Aleksei Semenov"); 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(is); 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Aleksei Semenov", is.getName()); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check that void IdentityScope(String, IdentityScope) creates instance with given name and within given scope 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL, 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies just positive test with both non null parameters", 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "IdentityScope", 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, java.security.IdentityScope.class} 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testIdentityScopeStringIdentityScope() throws Exception { 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScope scope = new IdentityScopeStub("my scope"); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is = new IdentityScopeStub("Aleksei Semenov", scope); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(is); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Aleksei Semenov", is.getName()); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals(scope.getName(), is.getScope().getName()); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * just call IdentityScope.getSystemScope() 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getSystemScope", 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testGetSystemScope() { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String name = Security.getProperty("system.scope"); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(name); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScope scope = IdentityScope.getSystemScope(); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(scope); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals(name, scope.getClass().getName()); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check that if permission given - set/get works 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if permission is denied than SecurityException is thrown 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "setSystemScope", 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.IdentityScope.class} 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getSystemScope", 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testSetSystemScope() { 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// default implementation is specified by security property system.scope 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScope systemScope = IdentityScope.getSystemScope(); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // all permissions are granted - sm is not installed 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is = new IdentityScopeStub("Aleksei Semenov"); 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScopeStub.mySetSystemScope(is); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame(is, IdentityScope.getSystemScope()); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // all permissions are granted - sm is installed 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MySecurityManager sm = new MySecurityManager(); 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(sm); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is = new IdentityScopeStub("aaa"); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScopeStub.mySetSystemScope(is); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame(is, IdentityScope.getSystemScope()); 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // permission is denied 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sm.denied.add(new SecurityPermission("setSystemScope")); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScope is2 = new IdentityScopeStub("bbb"); 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try{ 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScopeStub.mySetSystemScope(is2); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SecurityException should be thrown"); 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SecurityException e){ 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame(is, IdentityScope.getSystemScope()); 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } finally { 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(null); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull("Error, security manager is not removed!", System.getSecurityManager()); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } finally { 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IdentityScopeStub.mySetSystemScope(systemScope); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 188