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.TestTargets; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileDescriptor; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileOutputStream; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 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.io.FileInputStream and java.io.FileOutputStream 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(java.io.FileOutputStream.class) 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class JavaIoFileOutputStreamTest 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 @TestTargets({ 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that FileOutputStream constructor calls checkRead on security manager.", 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "FileOutputStream", 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.FileDescriptor.class} 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that FileOutputStream constructor calls checkRead on security manager.", 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "FileOutputStream", 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.File.class} 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that FileOutputStream constructor calls checkRead on security manager.", 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "FileOutputStream", 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.File.class, boolean.class} 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that FileOutputStream constructor calls checkRead on security manager.", 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "FileOutputStream", 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies that FileOutputStream constructor calls checkRead on security manager.", 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "FileOutputStream", 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, boolean.class} 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_FileOutputStream1() throws IOException { 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class TestSecurityManager extends SecurityManager { 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean called; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String file; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileDescriptor fd; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project void reset(){ 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project called = false; 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project file = null; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fd = null; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkWrite(FileDescriptor fd) { 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project called = true; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.fd = fd; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.checkWrite(fd); 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkWrite(String file){ 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project called = true; 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.file = file; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.checkWrite(file); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPermission(Permission p) { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long id = new java.util.Date().getTime(); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String filename = "SecurityPermissionsTest_"+id; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File f = File.createTempFile(filename, null); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project f.deleteOnExit(); 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project filename = f.getCanonicalPath(); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TestSecurityManager s = new TestSecurityManager(); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.setSecurityManager(s); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileDescriptor fd = new FileDescriptor(); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new FileOutputStream(fd); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("FileOutputStream(FileDescriptor) ctor must call checkWrite on security manager", s.called); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkWrite is not correct", fd, s.fd); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new FileOutputStream(f); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("FileOutputStream(File) ctor must call checkWrite on security manager", s.called); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkWrite is not correct", filename, s.file); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new FileOutputStream(f, true); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("FileOutputStream(File) ctor must call checkWrite on security manager", s.called); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkWrite is not correct", filename, s.file); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new FileOutputStream(filename); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("FileOutputStream(String) ctor must call checkWrite on security manager", s.called); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkWrite is not correct", filename, s.file); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.reset(); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new FileOutputStream(filename, true); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("FileOutputStream(String,boolean) ctor must call checkWrite on security manager", s.called); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Argument of checkWrite is not correct", filename, s.file); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 150