blob: 0be12bb4488828fcb12307a46a9194d07c3dc3e2 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001/*
2 * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
3 * 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 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/* @test
25 @bug 4167472 5097703 6216563 6284003
26 @summary Basic test for setWritable/Readable/Executable methods
27 */
28
29import java.io.*;
30
31public class SetAccess {
32 public static void main(String[] args) throws Exception {
33 File d = new File(System.getProperty("test.dir", "."));
34
35 File f = new File(d, "x.SetAccessPermission");
36 if (f.exists() && !f.delete())
37 throw new Exception("Can't delete test file: " + f);
38 OutputStream o = new FileOutputStream(f);
39 o.write('x');
40 o.close();
41 doTest(f);
42
43 f = new File(d, "x.SetAccessPermission.dir");
44 if (f.exists() && !f.delete())
45 throw new Exception("Can't delete test dir: " + f);
46 if (!f.mkdir())
47 throw new Exception(f + ": Cannot create directory");
48 doTest(f);
49 }
50
51 public static void doTest(File f) throws Exception {
52 f.setReadOnly();
53 if (!System.getProperty("os.name").startsWith("Windows")) {
54 if (!f.setWritable(true, true) ||
55 !f.canWrite() ||
56 permission(f).charAt(2) != 'w')
57 throw new Exception(f + ": setWritable(true, ture) Failed");
58 if (!f.setWritable(false, true) ||
59 f.canWrite() ||
60 permission(f).charAt(2) != '-')
61 throw new Exception(f + ": setWritable(false, true) Failed");
62 if (!f.setWritable(true, false) ||
63 !f.canWrite() ||
64 !permission(f).matches(".(.w.){3}"))
65 throw new Exception(f + ": setWritable(true, false) Failed");
66 if (!f.setWritable(false, false) ||
67 f.canWrite() ||
68 !permission(f).matches(".(.-.){3}"))
69 throw new Exception(f + ": setWritable(false, true) Failed");
70 if (!f.setWritable(true) || !f.canWrite() ||
71 permission(f).charAt(2) != 'w')
72 throw new Exception(f + ": setWritable(true, ture) Failed");
73 if (!f.setWritable(false) || f.canWrite() ||
74 permission(f).charAt(2) != '-')
75 throw new Exception(f + ": setWritable(false, true) Failed");
76 if (!f.setExecutable(true, true) ||
77 !f.canExecute() ||
78 permission(f).charAt(3) != 'x')
79 throw new Exception(f + ": setExecutable(true, true) Failed");
80 if (!f.setExecutable(false, true) ||
81 f.canExecute() ||
82 permission(f).charAt(3) != '-')
83 throw new Exception(f + ": setExecutable(false, true) Failed");
84 if (!f.setExecutable(true, false) ||
85 !f.canExecute() ||
86 !permission(f).matches(".(..x){3}"))
87 throw new Exception(f + ": setExecutable(true, false) Failed");
88 if (!f.setExecutable(false, false) ||
89 f.canExecute() ||
90 !permission(f).matches(".(..-){3}"))
91 throw new Exception(f + ": setExecutable(false, false) Failed");
92 if (!f.setExecutable(true) || !f.canExecute() ||
93 permission(f).charAt(3) != 'x')
94 throw new Exception(f + ": setExecutable(true, true) Failed");
95 if (!f.setExecutable(false) || f.canExecute() ||
96 permission(f).charAt(3) != '-')
97 throw new Exception(f + ": setExecutable(false, true) Failed");
98 if (!f.setReadable(true, true) ||
99 !f.canRead() ||
100 permission(f).charAt(1) != 'r')
101 throw new Exception(f + ": setReadable(true, true) Failed");
102 if (!f.setReadable(false, true) ||
103 f.canRead() ||
104 permission(f).charAt(1) != '-')
105 throw new Exception(f + ": setReadable(false, true) Failed");
106 if (!f.setReadable(true, false) ||
107 !f.canRead() ||
108 !permission(f).matches(".(r..){3}"))
109 throw new Exception(f + ": setReadable(true, false) Failed");
110 if (!f.setReadable(false, false) ||
111 f.canRead() ||
112 !permission(f).matches(".(-..){3}"))
113 throw new Exception(f + ": setReadable(false, false) Failed");
114 if (!f.setReadable(true) || !f.canRead() ||
115 permission(f).charAt(1) != 'r')
116 throw new Exception(f + ": setReadable(true, true) Failed");
117 if (!f.setReadable(false) || f.canRead() ||
118 permission(f).charAt(1) != '-')
119 throw new Exception(f + ": setReadable(false, true) Failed");
120 } else {
121 //Windows platform
122 if (!f.setWritable(true, true) || !f.canWrite())
123 throw new Exception(f + ": setWritable(true, ture) Failed");
124 if (!f.setWritable(true, false) || !f.canWrite())
125 throw new Exception(f + ": setWritable(true, false) Failed");
126 if (!f.setWritable(true) || !f.canWrite())
127 throw new Exception(f + ": setWritable(true, ture) Failed");
128 if (!f.setExecutable(true, true) || !f.canExecute())
129 throw new Exception(f + ": setExecutable(true, true) Failed");
130 if (!f.setExecutable(true, false) || !f.canExecute())
131 throw new Exception(f + ": setExecutable(true, false) Failed");
132 if (!f.setExecutable(true) || !f.canExecute())
133 throw new Exception(f + ": setExecutable(true, true) Failed");
134 if (!f.setReadable(true, true) || !f.canRead())
135 throw new Exception(f + ": setReadable(true, true) Failed");
136 if (!f.setReadable(true, false) || !f.canRead())
137 throw new Exception(f + ": setReadable(true, false) Failed");
138 if (!f.setReadable(true) || !f.canRead())
139 throw new Exception(f + ": setReadable(true, true) Failed");
140 if (f.isDirectory()) {
141 //All directories on Windows always have read&write access perm,
142 //setting a directory to "unwritable" actually means "not deletable"
143 if (!f.setWritable(false, true) || !f.canWrite())
144 throw new Exception(f + ": setWritable(false, true) Failed");
145 if (!f.setWritable(false, false) || !f.canWrite())
146 throw new Exception(f + ": setWritable(false, true) Failed");
147 if (!f.setWritable(false) || !f.canWrite())
148 throw new Exception(f + ": setWritable(false, true) Failed");
149 } else {
150 if (!f.setWritable(false, true) || f.canWrite())
151 throw new Exception(f + ": setWritable(false, true) Failed");
152 if (!f.setWritable(false, false) || f.canWrite())
153 throw new Exception(f + ": setWritable(false, true) Failed");
154 if (!f.setWritable(false) || f.canWrite())
155 throw new Exception(f + ": setWritable(false, true) Failed");
156 }
157 if (f.setExecutable(false, true))
158 throw new Exception(f + ": setExecutable(false, true) Failed");
159 if (f.setExecutable(false, false))
160 throw new Exception(f + ": setExecutable(false, false) Failed");
161 if (f.setExecutable(false))
162 throw new Exception(f + ": setExecutable(false, true) Failed");
163 if (f.setReadable(false, true))
164 throw new Exception(f + ": setReadable(false, true) Failed");
165 if (f.setReadable(false, false))
166 throw new Exception(f + ": setReadable(false, false) Failed");
167 if (f.setReadable(false))
168 throw new Exception(f + ": setReadable(false, true) Failed");
169 }
170 if (f.exists() && !f.delete())
171 throw new Exception("Can't delete test dir: " + f);
172 }
173
174 private static String permission(File f) throws Exception {
175 byte[] bb = new byte[1024];
176 String command = f.isDirectory()?"ls -dl ":"ls -l ";
177 int len = Runtime.getRuntime()
178 .exec(command + f.getPath())
179 .getInputStream()
180 .read(bb, 0, 1024);
181 if (len > 0)
182 return new String(bb, 0, len).substring(0, 10);
183 return "";
184 }
185}