blob: 1fc4e971acdf28adfa69d1249b59faa23480d547 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001/*
robm79e61cc2012-08-15 22:46:35 +01002 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
duke6e45e102007-12-01 00:00:00 +00003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
ohair2283b9d2010-05-25 15:58:33 -070019 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
duke6e45e102007-12-01 00:00:00 +000022 */
23
24/* @test
alanb5ebcbc62010-10-12 08:49:33 +010025 @bug 4167472 5097703 6216563 6284003 6728842 6464744
duke6e45e102007-12-01 00:00:00 +000026 @summary Basic test for setWritable/Readable/Executable methods
robm79e61cc2012-08-15 22:46:35 +010027 @build SetAccess Util
28 @run main SetAccess
duke6e45e102007-12-01 00:00:00 +000029 */
30
31import java.io.*;
alanbb75d5382011-01-28 09:28:43 +000032import java.nio.file.*;
alanb5ebcbc62010-10-12 08:49:33 +010033import java.nio.file.attribute.*;
duke6e45e102007-12-01 00:00:00 +000034
35public class SetAccess {
36 public static void main(String[] args) throws Exception {
robm79e61cc2012-08-15 22:46:35 +010037 if (Util.isPrivileged()) {
38 System.out.println("Unable to test file permissions when running with privileges");
39 return;
40 }
41
duke6e45e102007-12-01 00:00:00 +000042 File d = new File(System.getProperty("test.dir", "."));
43
44 File f = new File(d, "x.SetAccessPermission");
45 if (f.exists() && !f.delete())
46 throw new Exception("Can't delete test file: " + f);
47 OutputStream o = new FileOutputStream(f);
48 o.write('x');
49 o.close();
50 doTest(f);
51
52 f = new File(d, "x.SetAccessPermission.dir");
53 if (f.exists() && !f.delete())
54 throw new Exception("Can't delete test dir: " + f);
55 if (!f.mkdir())
56 throw new Exception(f + ": Cannot create directory");
57 doTest(f);
58 }
59
60 public static void doTest(File f) throws Exception {
duke6e45e102007-12-01 00:00:00 +000061 if (!System.getProperty("os.name").startsWith("Windows")) {
alanb5ebcbc62010-10-12 08:49:33 +010062 if (!f.setReadOnly())
63 throw new Exception(f + ": setReadOnly Failed");
duke6e45e102007-12-01 00:00:00 +000064 if (!f.setWritable(true, true) ||
65 !f.canWrite() ||
66 permission(f).charAt(2) != 'w')
67 throw new Exception(f + ": setWritable(true, ture) Failed");
68 if (!f.setWritable(false, true) ||
69 f.canWrite() ||
70 permission(f).charAt(2) != '-')
71 throw new Exception(f + ": setWritable(false, true) Failed");
72 if (!f.setWritable(true, false) ||
73 !f.canWrite() ||
74 !permission(f).matches(".(.w.){3}"))
75 throw new Exception(f + ": setWritable(true, false) Failed");
76 if (!f.setWritable(false, false) ||
77 f.canWrite() ||
78 !permission(f).matches(".(.-.){3}"))
79 throw new Exception(f + ": setWritable(false, true) Failed");
80 if (!f.setWritable(true) || !f.canWrite() ||
81 permission(f).charAt(2) != 'w')
82 throw new Exception(f + ": setWritable(true, ture) Failed");
83 if (!f.setWritable(false) || f.canWrite() ||
84 permission(f).charAt(2) != '-')
85 throw new Exception(f + ": setWritable(false, true) Failed");
86 if (!f.setExecutable(true, true) ||
87 !f.canExecute() ||
88 permission(f).charAt(3) != 'x')
89 throw new Exception(f + ": setExecutable(true, true) Failed");
90 if (!f.setExecutable(false, true) ||
91 f.canExecute() ||
92 permission(f).charAt(3) != '-')
93 throw new Exception(f + ": setExecutable(false, true) Failed");
94 if (!f.setExecutable(true, false) ||
95 !f.canExecute() ||
96 !permission(f).matches(".(..x){3}"))
97 throw new Exception(f + ": setExecutable(true, false) Failed");
98 if (!f.setExecutable(false, false) ||
99 f.canExecute() ||
100 !permission(f).matches(".(..-){3}"))
101 throw new Exception(f + ": setExecutable(false, false) Failed");
102 if (!f.setExecutable(true) || !f.canExecute() ||
103 permission(f).charAt(3) != 'x')
104 throw new Exception(f + ": setExecutable(true, true) Failed");
105 if (!f.setExecutable(false) || f.canExecute() ||
106 permission(f).charAt(3) != '-')
107 throw new Exception(f + ": setExecutable(false, true) Failed");
108 if (!f.setReadable(true, true) ||
109 !f.canRead() ||
110 permission(f).charAt(1) != 'r')
111 throw new Exception(f + ": setReadable(true, true) Failed");
112 if (!f.setReadable(false, true) ||
113 f.canRead() ||
114 permission(f).charAt(1) != '-')
115 throw new Exception(f + ": setReadable(false, true) Failed");
116 if (!f.setReadable(true, false) ||
117 !f.canRead() ||
118 !permission(f).matches(".(r..){3}"))
119 throw new Exception(f + ": setReadable(true, false) Failed");
120 if (!f.setReadable(false, false) ||
121 f.canRead() ||
122 !permission(f).matches(".(-..){3}"))
123 throw new Exception(f + ": setReadable(false, false) Failed");
124 if (!f.setReadable(true) || !f.canRead() ||
125 permission(f).charAt(1) != 'r')
126 throw new Exception(f + ": setReadable(true, true) Failed");
127 if (!f.setReadable(false) || f.canRead() ||
128 permission(f).charAt(1) != '-')
129 throw new Exception(f + ": setReadable(false, true) Failed");
130 } else {
131 //Windows platform
alanb5ebcbc62010-10-12 08:49:33 +0100132 if (f.isFile()) {
133 if (!f.setReadOnly())
134 throw new Exception(f + ": setReadOnly Failed");
135 if (!f.setWritable(true, true) || !f.canWrite())
136 throw new Exception(f + ": setWritable(true, ture) Failed");
137 if (!f.setWritable(true, false) || !f.canWrite())
138 throw new Exception(f + ": setWritable(true, false) Failed");
139 if (!f.setWritable(true) || !f.canWrite())
140 throw new Exception(f + ": setWritable(true, ture) Failed");
141 if (!f.setExecutable(true, true) || !f.canExecute())
142 throw new Exception(f + ": setExecutable(true, true) Failed");
143 if (!f.setExecutable(true, false) || !f.canExecute())
144 throw new Exception(f + ": setExecutable(true, false) Failed");
145 if (!f.setExecutable(true) || !f.canExecute())
146 throw new Exception(f + ": setExecutable(true, true) Failed");
147 if (!f.setReadable(true, true) || !f.canRead())
148 throw new Exception(f + ": setReadable(true, true) Failed");
149 if (!f.setReadable(true, false) || !f.canRead())
150 throw new Exception(f + ": setReadable(true, false) Failed");
151 if (!f.setReadable(true) || !f.canRead())
152 throw new Exception(f + ": setReadable(true, true) Failed");
153 }
duke6e45e102007-12-01 00:00:00 +0000154 if (f.isDirectory()) {
alanb5ebcbc62010-10-12 08:49:33 +0100155 // setWritable should fail on directories because the DOS readonly
156 // attribute prevents a directory from being deleted.
157 if (f.setWritable(false, true))
158 throw new Exception(f + ": setWritable(false, true) Succeeded");
159 if (f.setWritable(false, false))
160 throw new Exception(f + ": setWritable(false, false) Succeeded");
161 if (f.setWritable(false))
162 throw new Exception(f + ": setWritable(false) Succeeded");
duke6e45e102007-12-01 00:00:00 +0000163 } else {
164 if (!f.setWritable(false, true) || f.canWrite())
165 throw new Exception(f + ": setWritable(false, true) Failed");
166 if (!f.setWritable(false, false) || f.canWrite())
alanb5ebcbc62010-10-12 08:49:33 +0100167 throw new Exception(f + ": setWritable(false, false) Failed");
duke6e45e102007-12-01 00:00:00 +0000168 if (!f.setWritable(false) || f.canWrite())
alanb5ebcbc62010-10-12 08:49:33 +0100169 throw new Exception(f + ": setWritable(false) Failed");
duke6e45e102007-12-01 00:00:00 +0000170 }
171 if (f.setExecutable(false, true))
172 throw new Exception(f + ": setExecutable(false, true) Failed");
173 if (f.setExecutable(false, false))
174 throw new Exception(f + ": setExecutable(false, false) Failed");
175 if (f.setExecutable(false))
176 throw new Exception(f + ": setExecutable(false, true) Failed");
177 if (f.setReadable(false, true))
178 throw new Exception(f + ": setReadable(false, true) Failed");
179 if (f.setReadable(false, false))
180 throw new Exception(f + ": setReadable(false, false) Failed");
181 if (f.setReadable(false))
182 throw new Exception(f + ": setReadable(false, true) Failed");
183 }
184 if (f.exists() && !f.delete())
185 throw new Exception("Can't delete test dir: " + f);
186 }
187
188 private static String permission(File f) throws Exception {
alanbb75d5382011-01-28 09:28:43 +0000189 PosixFileAttributes attrs = Files.readAttributes(f.toPath(), PosixFileAttributes.class);
alanb5ebcbc62010-10-12 08:49:33 +0100190 String type = attrs.isDirectory() ? "d" : " ";
191 return type + PosixFilePermissions.toString(attrs.permissions());
duke6e45e102007-12-01 00:00:00 +0000192 }
193}