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 Projectpackage tests.api.java.security; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FilePermission; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AccessControlContext; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AccessControlException; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AccessController; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.PermissionCollection; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permissions; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.ProtectionDomain; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecurityPermission; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Iterator; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.PropertyPermission; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.security.auth.Subject; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.security.auth.SubjectDomainCombiner; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(AccessControlContext.class) 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class AccessControlContextTest extends junit.framework.TestCase { 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private class TestSecurityManager extends SecurityManager { 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ArrayList<Permission> notAllowed; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public TestSecurityManager() { 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notAllowed = new ArrayList<Permission>(2); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notAllowed.add(new SecurityPermission("createAccessControlContext")); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notAllowed.add(new SecurityPermission("getDomainCombiner")); 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPermission(Permission p) { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator<Permission> i = notAllowed.iterator(); i.hasNext(); ) { 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (i.next().equals(p)) { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new SecurityException(); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlContext#AccessControlContext(java.security.ProtectionDomain[]) 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "AccessControlContext", 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.ProtectionDomain[].class} 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_Constructor$Ljava_security_ProtectionDomain() { 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Test for method 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // java.security.AccessControlContext(java.security.ProtectionDomain []) 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Create a permission which is not normally granted 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Permission perm = new PropertyPermission("java.class.path", 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "read"); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PermissionCollection col = perm.newPermissionCollection(); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col.add(perm); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final ProtectionDomain pd = new ProtectionDomain(null, col); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc = new AccessControlContext( 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd }); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(perm); 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SecurityException e) { 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have permission"); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final boolean[] result = new boolean[] { false }; 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread th = new Thread(new Runnable() { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc = new AccessControlContext( 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd }); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(perm); 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result[0] = true; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SecurityException e) { 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project th.start(); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project th.join(); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InterruptedException e) { 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Test 1: Thread should have permission", result[0]); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //Null parameter checking 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new AccessControlContext(null); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 2: NullPointerException expected."); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ex) { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlContext#AccessControlContext(java.security.AccessControlContext, 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.DomainCombiner) 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "AccessControlContext", 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.AccessControlContext.class, java.security.DomainCombiner.class} 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_ConstructorLjava_security_AccessControlContextLjava_security_DomainCombiner() { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext context = AccessController.getContext(); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new AccessControlContext(context, null); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("should not throw NullPointerException"); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new AccessControlContext(context, new SubjectDomainCombiner( 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Subject())); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("should not throw Exception"); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlContext#AccessControlContext(java.security.AccessControlContext, 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.DomainCombiner) 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks SecurityException.", 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "AccessControlContext", 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.AccessControlContext.class, java.security.DomainCombiner.class} 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_ConstructorLjava_security_AccessControlContextLjava_security_DomainCombiner2() { 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecurityManager oldSm = System.getSecurityManager(); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(new TestSecurityManager()); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext context = AccessController.getContext(); 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new AccessControlContext(context, null); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: SecurityException expected."); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SecurityException e) { 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(oldSm); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlException#checkPermission(Permission) 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "checkPermission", 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.Permission.class} 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_checkPermission() { 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char s = File.separatorChar; 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FilePermission perm[] = new FilePermission[7]; 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[0] = new FilePermission("test1.file", "write"); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[1] = new FilePermission("test1.file", "read, execute, delete"); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[2] = new FilePermission(s + "tmp" + s + "test" + s + "*", 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "read, write"); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[3] = new FilePermission(s + "tmp" + s + "test" + s 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "collection.file", "read"); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[4] = new FilePermission(s + "windows" + "*", "delete"); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[5] = new FilePermission("aFile.file", "read"); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perm[6] = new FilePermission("hello.file", "write"); 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Permissions perms = new Permissions(); 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < perm.length; i++) { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project perms.add(perm[i]); 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ProtectionDomain pd = new ProtectionDomain(null, perms); 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc = new AccessControlContext( 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd }); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < perm.length; i++) { 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(perm[i]); 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (AccessControlException e) { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have permission " + perm[i]); 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(new FilePermission("test1.file", "execute")); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (AccessControlException e) { 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have permission "); 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(new FilePermission(s + "tmp" + s + "test" + s 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "hello.file", "read")); 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (AccessControlException e) { 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have permission "); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(new FilePermission("test2.file", "execute")); 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SecurityException expected"); 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (AccessControlException e) { 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(new FilePermission(s + "tmp" + s + "test" + s 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "hello.file", "delete")); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SecurityException expected"); 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (AccessControlException e) { 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc.checkPermission(null); 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException expected"); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException npe) { 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlException#equals() 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "equals", 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.Object.class} 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_equals() { 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Permission perm1 = new PropertyPermission("java.class.path", 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "read"); 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Permission perm2 = new PropertyPermission("java.path", "write"); 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PermissionCollection col1 = perm1.newPermissionCollection(); 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col1.add(perm1); 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final ProtectionDomain pd1 = new ProtectionDomain(null, col1); 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc1 = new AccessControlContext( 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd1 }); 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc2 = new AccessControlContext( 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd1 }); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PermissionCollection col2 = perm2.newPermissionCollection(); 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col2.add(perm2); 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col2.add(perm2); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final ProtectionDomain pd2 = new ProtectionDomain(null, col2); 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc3 = new AccessControlContext( 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd2 }); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc1.equals(null)); 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc2.equals(null)); 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc3.equals(null)); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc1.equals(acc2)); 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc2.equals(acc1)); 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc1.equals(acc3)); 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc2.equals(acc3)); 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext context = AccessController.getContext(); 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc4 = new AccessControlContext(context, null); 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc5 = new AccessControlContext(context, 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SubjectDomainCombiner(new Subject())); 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc6 = new AccessControlContext(context, null); 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc4.equals(null)); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc5.equals(null)); 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc4.equals(acc5)); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(acc5.equals(acc4)); 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc4.equals(acc6)); 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc6.equals(acc4)); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlException#getDomainCombiner() 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getDomainCombiner", 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getDomainCombiner() { 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext context = AccessController.getContext(); 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc1 = new AccessControlContext(context, null); 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc2 = new AccessControlContext(context, 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SubjectDomainCombiner(new Subject())); 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Permission perm1 = new PropertyPermission("java.class.path", 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "read"); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PermissionCollection col1 = perm1.newPermissionCollection(); 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col1.add(perm1); 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final ProtectionDomain pd1 = new ProtectionDomain(null, col1); 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc3 = new AccessControlContext( 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd1 }); 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull(acc1.getDomainCombiner()); 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(acc2.getDomainCombiner()); 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull(acc3.getDomainCombiner()); 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecurityManager oldSm = System.getSecurityManager(); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(new TestSecurityManager()); 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project acc1.getDomainCombiner(); 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SecurityException expected."); 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SecurityException e) { 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(oldSm); 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.security.AccessControlException#hashCode() 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "hashCode", 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_hashCode() { 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Permission perm1 = new PropertyPermission("java.class.path", 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "read"); 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Permission perm2 = new PropertyPermission("java.path", "write"); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PermissionCollection col1 = perm1.newPermissionCollection(); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col1.add(perm1); 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final ProtectionDomain pd1 = new ProtectionDomain(null, col1); 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc1 = new AccessControlContext( 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd1 }); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc2 = new AccessControlContext( 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd1 }); 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PermissionCollection col2 = perm2.newPermissionCollection(); 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col2.add(perm2); 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project col2.add(perm2); 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final ProtectionDomain pd2 = new ProtectionDomain(null, col2); 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc3 = new AccessControlContext( 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ProtectionDomain[] { pd2 }); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc1.hashCode() == acc1.hashCode()); 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc2.hashCode() == acc2.hashCode()); 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc3.hashCode() == acc3.hashCode()); 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc1.hashCode() == acc2.hashCode()); 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc2.hashCode() != acc3.hashCode()); 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc3.hashCode() != acc1.hashCode()); 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext context = AccessController.getContext(); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc4 = new AccessControlContext(context, null); 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc5 = new AccessControlContext(context, 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SubjectDomainCombiner(new Subject())); 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AccessControlContext acc6 = new AccessControlContext(context, null); 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc4.hashCode() == acc4.hashCode()); 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc5.hashCode() == acc5.hashCode()); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc6.hashCode() == acc6.hashCode()); 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc4.hashCode() == acc5.hashCode()); 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc5.hashCode() == acc6.hashCode()); 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(acc6.hashCode() == acc4.hashCode()); 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}