1 /* 2 * Copyright (c) 2005, Oracle and/or its affiliates. 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 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. 22 */ 23 24 /* @test 25 @bug 4167472 5097703 6216563 6284003 6728842 26 @summary Basic test for setWritable/Readable/Executable methods 27 */ 28 29 import java.io.*; 30 import java.nio.file.attribute.*; 31 32 public class SetAccess { 33 public static void main(String[] args) throws Exception { 34 File d = new File(System.getProperty("test.dir", ".")); 35 36 File f = new File(d, "x.SetAccessPermission"); 37 if (f.exists() && !f.delete()) 38 throw new Exception("Can't delete test file: " + f); 39 OutputStream o = new FileOutputStream(f); 40 o.write('x'); 41 o.close(); 42 doTest(f); 43 44 f = new File(d, "x.SetAccessPermission.dir"); 45 if (f.exists() && !f.delete()) 46 throw new Exception("Can't delete test dir: " + f); 47 if (!f.mkdir()) 48 throw new Exception(f + ": Cannot create directory"); 49 doTest(f); 50 } 51 52 public static void doTest(File f) throws Exception { 53 if (!System.getProperty("os.name").startsWith("Windows")) { 54 if (!f.setReadOnly()) 55 throw new Exception(f + ": setReadOnly Failed"); 56 if (!f.setWritable(true, true) || 57 !f.canWrite() || 58 permission(f).charAt(2) != 'w') 59 throw new Exception(f + ": setWritable(true, ture) Failed"); 60 if (!f.setWritable(false, true) || 61 f.canWrite() || 62 permission(f).charAt(2) != '-') 63 throw new Exception(f + ": setWritable(false, true) Failed"); 64 if (!f.setWritable(true, false) || 65 !f.canWrite() || 66 !permission(f).matches(".(.w.){3}")) 67 throw new Exception(f + ": setWritable(true, false) Failed"); 68 if (!f.setWritable(false, false) || 69 f.canWrite() || 70 !permission(f).matches(".(.-.){3}")) 71 throw new Exception(f + ": setWritable(false, true) Failed"); 72 if (!f.setWritable(true) || !f.canWrite() || 73 permission(f).charAt(2) != 'w') 74 throw new Exception(f + ": setWritable(true, ture) Failed"); 75 if (!f.setWritable(false) || f.canWrite() || 76 permission(f).charAt(2) != '-') 77 throw new Exception(f + ": setWritable(false, true) Failed"); 78 if (!f.setExecutable(true, true) || 79 !f.canExecute() || 80 permission(f).charAt(3) != 'x') 81 throw new Exception(f + ": setExecutable(true, true) Failed"); 82 if (!f.setExecutable(false, true) || 83 f.canExecute() || 84 permission(f).charAt(3) != '-') 85 throw new Exception(f + ": setExecutable(false, true) Failed"); 86 if (!f.setExecutable(true, false) || 87 !f.canExecute() || 88 !permission(f).matches(".(..x){3}")) 89 throw new Exception(f + ": setExecutable(true, false) Failed"); 90 if (!f.setExecutable(false, false) || 91 f.canExecute() || 92 !permission(f).matches(".(..-){3}")) 93 throw new Exception(f + ": setExecutable(false, false) Failed"); 94 if (!f.setExecutable(true) || !f.canExecute() || 95 permission(f).charAt(3) != 'x') 96 throw new Exception(f + ": setExecutable(true, true) Failed"); 97 if (!f.setExecutable(false) || f.canExecute() || 98 permission(f).charAt(3) != '-') 99 throw new Exception(f + ": setExecutable(false, true) Failed"); 100 if (!f.setReadable(true, true) || 101 !f.canRead() || 102 permission(f).charAt(1) != 'r') 103 throw new Exception(f + ": setReadable(true, true) Failed"); 104 if (!f.setReadable(false, true) || 105 f.canRead() || 106 permission(f).charAt(1) != '-') 107 throw new Exception(f + ": setReadable(false, true) Failed"); 108 if (!f.setReadable(true, false) || 109 !f.canRead() || 110 !permission(f).matches(".(r..){3}")) 111 throw new Exception(f + ": setReadable(true, false) Failed"); 112 if (!f.setReadable(false, false) || 113 f.canRead() || 114 !permission(f).matches(".(-..){3}")) 115 throw new Exception(f + ": setReadable(false, false) Failed"); 116 if (!f.setReadable(true) || !f.canRead() || 117 permission(f).charAt(1) != 'r') 118 throw new Exception(f + ": setReadable(true, true) Failed"); 119 if (!f.setReadable(false) || f.canRead() || 120 permission(f).charAt(1) != '-') 121 throw new Exception(f + ": setReadable(false, true) Failed"); 122 } else { 123 //Windows platform 124 if (f.isFile()) { 125 if (!f.setReadOnly()) 126 throw new Exception(f + ": setReadOnly Failed"); 127 if (!f.setWritable(true, true) || !f.canWrite()) 128 throw new Exception(f + ": setWritable(true, ture) Failed"); 129 if (!f.setWritable(true, false) || !f.canWrite()) 130 throw new Exception(f + ": setWritable(true, false) Failed"); 131 if (!f.setWritable(true) || !f.canWrite()) 132 throw new Exception(f + ": setWritable(true, ture) Failed"); 133 if (!f.setExecutable(true, true) || !f.canExecute()) 134 throw new Exception(f + ": setExecutable(true, true) Failed"); 135 if (!f.setExecutable(true, false) || !f.canExecute()) 136 throw new Exception(f + ": setExecutable(true, false) Failed"); 137 if (!f.setExecutable(true) || !f.canExecute()) 138 throw new Exception(f + ": setExecutable(true, true) Failed"); 139 if (!f.setReadable(true, true) || !f.canRead()) 140 throw new Exception(f + ": setReadable(true, true) Failed"); 141 if (!f.setReadable(true, false) || !f.canRead()) 142 throw new Exception(f + ": setReadable(true, false) Failed"); 143 if (!f.setReadable(true) || !f.canRead()) 144 throw new Exception(f + ": setReadable(true, true) Failed"); 145 } 146 if (f.isDirectory()) { 147 // setWritable should fail on directories because the DOS readonly 148 // attribute prevents a directory from being deleted. 149 if (f.setWritable(false, true)) 150 throw new Exception(f + ": setWritable(false, true) Succeeded"); 151 if (f.setWritable(false, false)) 152 throw new Exception(f + ": setWritable(false, true) Succeeded"); 153 if (f.setWritable(false)) 154 throw new Exception(f + ": setWritable(false, true) Succeeded"); 155 } else { 156 if (!f.setWritable(false, true) || f.canWrite()) 157 throw new Exception(f + ": setWritable(false, true) Failed"); 158 if (!f.setWritable(false, false) || f.canWrite()) 159 throw new Exception(f + ": setWritable(false, true) Failed"); 160 if (!f.setWritable(false) || f.canWrite()) 161 throw new Exception(f + ": setWritable(false, true) Failed"); 162 } 163 if (f.setExecutable(false, true)) 164 throw new Exception(f + ": setExecutable(false, true) Failed"); 165 if (f.setExecutable(false, false)) 166 throw new Exception(f + ": setExecutable(false, false) Failed"); 167 if (f.setExecutable(false)) 168 throw new Exception(f + ": setExecutable(false, true) Failed"); 169 if (f.setReadable(false, true)) 170 throw new Exception(f + ": setReadable(false, true) Failed"); 171 if (f.setReadable(false, false)) 172 throw new Exception(f + ": setReadable(false, false) Failed"); 173 if (f.setReadable(false)) 174 throw new Exception(f + ": setReadable(false, true) Failed"); 175 } 176 if (f.exists() && !f.delete()) 177 throw new Exception("Can't delete test dir: " + f); 178 } 179 180 private static String permission(File f) throws Exception { 181 PosixFileAttributes attrs = Attributes.readPosixFileAttributes(f.toPath()); 182 String type = attrs.isDirectory() ? "d" : " "; 183 return type + PosixFilePermissions.toString(attrs.permissions()); 184 } 185 }