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 java.io.File;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileFilter;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FilenameFilter;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
252be0c815dda289b09f3bb26f751c124f30eaf612Jesse Wilsonimport dalvik.annotation.KnownFailure;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
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.File.
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(java.io.File.class)
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class JavaIoFileTest 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_COMPLETE,
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.delete and File.deleteOnExit methods call checkDelete on security manager.",
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "delete",
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.delete and File.deleteOnExit methods call checkDelete on security manager.",
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "deleteOnExit",
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_File1() throws IOException {
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class TestSecurityManager extends SecurityManager {
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean called;
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String filename;
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            void reset(){
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                called = false;
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                filename = null;
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkDelete(String file) {
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                called = true;
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.filename = file;
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission p) {
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        long id = new java.util.Date().getTime();
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String filename = "SecurityPermissionsTest_"+id;
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File f = File.createTempFile(filename, null);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.deleteOnExit();
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        filename = f.getCanonicalPath();
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestSecurityManager s = new TestSecurityManager();
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(s);
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.delete();
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.delete must call checkDelete on security manager", s.called);
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkDelete is not correct", filename, s.filename);
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.deleteOnExit();
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.deleteOnExit must call checkDelete on security manager", s.called);
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkDelete is not correct", filename, s.filename);
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "exists",
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "canRead",
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "isFile",
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "isDirectory",
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "isHidden",
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "lastModified",
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "length",
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "list",
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "list",
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.io.FilenameFilter.class}
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "listFiles",
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "listFiles",
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.io.FilenameFilter.class}
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that File.exists(), File.canRead(), File.isFile(), File.isDirectory(), File.isHidden(), File.lastModified(), File.length(), File.list(...), File.listFiles(...) methods call checkRead method of security manager.",
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "listFiles",
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.io.FileFilter.class}
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_File2() throws IOException {
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class TestSecurityManager extends SecurityManager {
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean called;
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String file;
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            void reset(){
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                called = false;
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                file = null;
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkRead(String file){
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                called = true;
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.file = file;
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission p) {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        long id = new java.util.Date().getTime();
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String filename = "SecurityPermissionsTest_"+id;
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File f = File.createTempFile(filename, null);
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.deleteOnExit();
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        filename = f.getCanonicalPath();
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestSecurityManager s = new TestSecurityManager();
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(s);
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.exists();
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.exists() must call checkRead on security manager", s.called);
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.canRead();
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.canRead() must call checkRead on security manager", s.called);
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.isFile();
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.isFile() must call checkRead on security manager", s.called);
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.isDirectory();
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.isDirectory() must call checkRead on security manager", s.called);
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.isHidden();
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.isHidden() must call checkRead on security manager", s.called);
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.lastModified();
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.lastModified() must call checkRead on security manager", s.called);
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.length();
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.length() must call checkRead on security manager", s.called);
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.list();
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.list() must call checkRead on security manager", s.called);
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.list((FilenameFilter)null);
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.list(FilenameFilter) must call checkRead on security manager", s.called);
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.listFiles();
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.listFiles() must call checkRead on security manager", s.called);
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.listFiles((FilenameFilter)null);
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.listFiles(FilenameFilter) must call checkRead on security manager", s.called);
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.listFiles((FileFilter)null);
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.listFiles(FileFilter) must call checkRead on security manager", s.called);
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkRead is not correct", filename, s.file);
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "canWrite",
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "createNewFile",
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "createTempFile",
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, java.lang.String.class}
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "createTempFile",
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, java.lang.String.class, java.io.File.class}
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "mkdir",
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "mkdirs",
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "renameTo",
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.io.File.class}
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "setLastModified",
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {long.class}
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that write/create methods of File class call checkWrite on security manager.",
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "setReadOnly",
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_File3() throws IOException {
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class TestSecurityManager extends SecurityManager {
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean called;
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String file;
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            void reset(){
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                called = false;
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                file = null;
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkWrite(String file){
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                called = true;
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.file = file;
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission p) {
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String tmpPath = System.getProperty("java.io.tmpdir");
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if(!tmpPath.endsWith("/")) {
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            tmpPath += "/";
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        long id = new java.util.Date().getTime();
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String filename  = "SecurityPermissionsTest_"+id;
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String filename2 = "SecurityPermissionsTest_"+(id+1);
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File f = File.createTempFile(filename, null);
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.deleteOnExit();
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        filename = f.getCanonicalPath();
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File f2 = File.createTempFile(filename2, null);
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f2.deleteOnExit();
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        filename2 = f2.getCanonicalPath();
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestSecurityManager s = new TestSecurityManager();
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(s);
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.canWrite();
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.canWrite() must call checkWrite on security manager", s.called);
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename, s.file);
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.createNewFile();
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.createNewFile() must call checkWrite on security manager", s.called);
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename, s.file);
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File tmp = new File(tmpPath + "dir"+id);
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp.mkdir();
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.canWrite() must call checkWrite on security manager", s.called);
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", tmpPath + "dir"+id, s.file);
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp = new File(tmpPath + "a"+id+"/b/c");
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp.mkdirs();
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.mkdirs() must call checkWrite on security manager", s.called);
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", tmpPath +"a"+id+"/b/c", s.file);
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.renameTo(f2);
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.renameTo(File) must call checkWrite on security manager", s.called);
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename2, s.file);
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.setLastModified(id);
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.setLastModified() must call checkWrite on security manager", s.called);
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename, s.file);
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f.setReadOnly();
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.setReadOnly() must call checkWrite on security manager", s.called);
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename, s.file);
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp = File.createTempFile("xxx", "yyy");
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp.deleteOnExit();
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        filename = tmp.getCanonicalPath();
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.createTempFile(String,String) must call checkWrite on security manager", s.called);
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename, s.file);
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.reset();
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp = File.createTempFile("xxx", "yyy", (File)null);
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tmp.deleteOnExit();
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        filename = tmp.getCanonicalPath();
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("File.createTempFile(String,String,File) must call checkWrite on security manager", s.called);
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Argument of checkWrite is not correct", filename, s.file);
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that checkRead(java.io.FileDescriptor) " +
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "and checkPropertyAccess(java.lang.String) on " +
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "security manager are called.",
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getCanonicalFile",
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that checkRead(java.io.FileDescriptor) " +
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "and checkPropertyAccess(java.lang.String) on " +
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "security manager are called.",
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getCanonicalPath",
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
4352be0c815dda289b09f3bb26f751c124f30eaf612Jesse Wilson    @KnownFailure("We need to finish cleaning up java.io.File (bug 2281992)")
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_File4() throws IOException {
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class TestSecurityManager extends SecurityManager {
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean checkPropertyAccessCalled;
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            void reset(){
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                checkPropertyAccessCalled = false;
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPropertyAccess(String key){
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                checkPropertyAccessCalled = true;
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission p) {
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        long id = new java.util.Date().getTime();
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestSecurityManager s = new TestSecurityManager();
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(s);
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String filename = "SecurityPermissionsTest_" + id;
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File f = new File(filename);
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.reset();
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            f.getCanonicalFile();
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("File.getCanonicalFile() must call checkPropertyAccess " +
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "on security manager", s.checkPropertyAccessCalled);
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.reset();
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            f = new File(filename);
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            filename = f.getCanonicalPath();
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("File.getCanonicalPath() must call checkPropertyAccess " +
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    " on security manager", s.checkPropertyAccessCalled);
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            f.delete();
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that checkPropertyAccess(java.lang.String) on " +
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "security manager is called.",
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getAbsoluteFile",
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that checkPropertyAccess(java.lang.String) on " +
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "security manager is called.",
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getAbsolutePath",
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
4922be0c815dda289b09f3bb26f751c124f30eaf612Jesse Wilson    @KnownFailure("We need to finish cleaning up java.io.File (bug 2281992)")
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_File5() throws IOException {
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class TestSecurityManager extends SecurityManager {
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean checkPropertyAccessCalled;
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            void reset(){
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                checkPropertyAccessCalled = false;
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPropertyAccess(String key){
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                checkPropertyAccessCalled = true;
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission p) {
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        long id = new java.util.Date().getTime();
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestSecurityManager s = new TestSecurityManager();
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(s);
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String filename = "SecurityPermissionsTest_" + id;
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File f = new File(filename);
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.reset();
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            f.getAbsoluteFile();
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("File.getAbsoluteFile() must call checkPropertyAccess " +
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "on security manager", s.checkPropertyAccessCalled);
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.reset();
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            f = new File(filename);
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            filename = f.getAbsolutePath();
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("File.getAbsolutePath() must call checkPropertyAccess " +
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    " on security manager", s.checkPropertyAccessCalled);
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            f.delete();
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
534