1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.BufferedReader; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStreamReader; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Please note that this case can only be passed on Linux due to some file 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * system dependent reason. 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class UnixFileTest extends TestCase { 338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private boolean root = false; 348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private File testFile; 368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private File testDir; 388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private static final int TOTAL_SPACE_NUM = 0; 408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private static final int FREE_SPACE_NUM = 1; 428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private static final int USABLE_SPACE_NUM = 2; 448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private static class ConsoleResulter extends Thread { 468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Process proc; 478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath InputStream is; 498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String resStr; 518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath ConsoleResulter(Process p, InputStream in) { 538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath proc = p; 548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath is = in; 558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath @Override 588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void run() { 598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath StringBuffer result = new StringBuffer(); 608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath synchronized (result) { 618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath try { 628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath BufferedReader br = new BufferedReader( 638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath new InputStreamReader(is)); 648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String line; 658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath while ((line = br.readLine()) != null) { 668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath result.append(line); 678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (result.length() != 0) { 698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath resStr = result.toString(); 708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath br.close(); 738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ioe) { 748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath result = null; 758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath synchronized (proc) { 778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath proc.notifyAll(); 788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private static long getLinuxSpace(int index, File file) throws Exception { 848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long[] result = new long[3]; 858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String par = file.getAbsolutePath(); 868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String osName = System.getProperty("os.name"); 878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // in case the test case will run under other OS. 888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (osName.toLowerCase().indexOf("linux") != -1) { 898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String[] cmd = new String[2]; 908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath cmd[0] = "df"; 918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath cmd[1] = par; // get the total space of file 928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Runtime rt = Runtime.getRuntime(); 938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Process proc = rt.exec(cmd); 958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // get output from the command 968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath ConsoleResulter outputResult = new ConsoleResulter(proc, proc 978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath .getInputStream()); 988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath synchronized (proc) { 1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath outputResult.start(); 1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath proc.wait(); 1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // If there is no error, obtain the result 1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (outputResult.resStr != null) { 1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // exit the subprocess safely 1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath proc.waitFor(); 1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // filter unnecessary information 1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String[] txtResult = outputResult.resStr 1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath .split("\\D|\\p{javaLowerCase}|\\p{javaUpperCase}"); 1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0, j = 0; i < txtResult.length; i++) { 1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (txtResult[i].length() > 3) { 1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath result[j++] = Long.parseLong(txtResult[i]) * 1024L; 1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // calculate free spaces according to df command 1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath result[1] = result[0] - result[1]; 1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath return result[index]; 1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#canExecute() 1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_canExecute() { 1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true, false)); 1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true, true)); 1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(false, false)); 1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(false, true)); 1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true, false)); 1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // tests directory 1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(false, true)); 1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canExecute()); 1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(true, false)); 1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#getFreeSpace() 1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_getFreeSpace() throws Exception { 1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long fileSpace = getLinuxSpace(FREE_SPACE_NUM, testFile); 1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long dirSpace = getLinuxSpace(FREE_SPACE_NUM, testDir); 1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // in case we cannot fetch the value from command line 1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (fileSpace > 0) { 1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(fileSpace, testFile.getFreeSpace()); 1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (dirSpace > 0) { 1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(dirSpace, testDir.getFreeSpace()); 1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#getTotalSpace() 1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_getTotalSpace() throws Exception { 1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long fileSpace = getLinuxSpace(TOTAL_SPACE_NUM, testFile); 1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long dirSpace = getLinuxSpace(TOTAL_SPACE_NUM, testDir); 1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (fileSpace > 0) { 1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(fileSpace, testFile.getTotalSpace()); 1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (dirSpace > 0) { 1838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(dirSpace, testDir.getTotalSpace()); 1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 1888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#getUsableSpace() 1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_getUsableSpace() throws Exception { 1928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long fileSpace = getLinuxSpace(USABLE_SPACE_NUM, testFile); 1938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath long dirSpace = getLinuxSpace(USABLE_SPACE_NUM, testDir); 1948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (fileSpace > 0) { 1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(fileSpace, testFile.getUsableSpace()); 1968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (dirSpace > 0) { 1988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(dirSpace, testDir.getUsableSpace()); 1998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#setExecutable(boolean, boolean) 2048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 2058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_setExecutableZZ() { 2078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // setExecutable(true, true/false) 2088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 2098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true, false)); 2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 2118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true, true)); 2128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 2138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // setExecutable(false, true/false) 2158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(false, true)); 2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(false, false)); 2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // tests directory 2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(false, true)); 2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canExecute()); 2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(false, false)); 2338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canExecute()); 2378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(true, true)); 2408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(true, false)); 2428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 2468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#setExecutable(boolean) 2478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 2488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 2498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_setExecutableZ() { 2508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // So far this method only deals with the situation that the user is the 2518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // owner of the file 2528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true)); 2538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canExecute()); 2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(false)); 2558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canExecute()); 2568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setExecutable(true)); 2578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // tests directory 2598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(false)); 2618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canExecute()); 2658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setExecutable(true)); 2678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canExecute()); 2688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 2718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#setReadable(boolean, boolean) 2728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 2738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 2748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_setReadableZZ() throws Exception { 2758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // setReadable(false, false/true) succeeds on Linux 2768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // However, canRead() always returns true when the user is 'root'. 2778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 2788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(false, false)); 2798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 2818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canRead()); 2838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(false, true)); 2858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 2878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canRead()); 2898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 2918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // tests directory, setReadable(false, true/false) 2928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 2938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setReadable(false, true)); 2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 2968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 2978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canRead()); 2988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 2998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setReadable(false, false)); 3008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 3018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 3028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 3038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canRead()); 3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 3068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // setReadable(true, false/true) and set them in turn 3078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(true, false)); 3088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(false, true)); 3108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 3118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canRead()); 3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(true, true)); 3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(false, true)); 3188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 3198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 3218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canRead()); 3228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 3248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // tests directory, setReadable(true, true/false) 3258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setReadable(true, false)); 3268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 3278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setReadable(true, true)); 3288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 3298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 3318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 3328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @tests java.io.File#setReadable(boolean) 3338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @since 1.6 3348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 3358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_setReadableZ() { 3368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // So far this method only deals with the situation that the user is the 3378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // owner of the file. setReadable(false) succeeds on Linux 3388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // However, canRead() always returns true when the user is 'root'. 3398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(false)); 3418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 3428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 3448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testFile.canRead()); 3458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.setReadable(true)); 3478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testFile.canRead()); 3488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 3498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 3508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.setReadable(false)); 3518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (root) { 3528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertTrue(testDir.canRead()); 3538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } else { 3548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertFalse(testDir.canRead()); 3558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 3588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath @Override 3598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath protected void setUp() throws Exception { 3608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath super.setUp(); 3618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testFile = File.createTempFile("testfile", null); 3628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testDir = new File(System.getProperty("java.io.tmpdir") + "/temp"); 3638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (!testDir.exists()) { 3648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testDir.mkdir(); 3658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath root = System.getProperty("user.name").equals("root"); 3678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 3688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 3698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath @Override 3708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath protected void tearDown() throws Exception { 3718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testFile.delete(); 3728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testDir.delete(); 3738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testFile = null; 3748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath testDir = null; 3758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath root = false; 3768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath super.tearDown(); 3778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getCanonicalPath() throws IOException, 3808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath InterruptedException { 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File tmpFolder1 = new File("folder1"); 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder1.mkdirs(); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder1.deleteOnExit(); 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File tmpFolder2 = new File(tmpFolder1.toString() + "/folder2"); 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder2.mkdirs(); 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder2.deleteOnExit(); 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File tmpFolder3 = new File(tmpFolder2.toString() + "/folder3"); 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder3.mkdirs(); 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder3.deleteOnExit(); 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File tmpFolder4 = new File(tmpFolder3.toString() + "/folder4"); 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder4.mkdirs(); 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tmpFolder4.deleteOnExit(); 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make a link to folder1/folder2 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Process ln = Runtime.getRuntime().exec("ln -s folder1/folder2 folder2"); 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ln.waitFor(); 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File linkFile = new File("folder2"); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes linkFile.deleteOnExit(); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File file = new File("folder2"); 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(tmpFolder2.getCanonicalPath(), file.getCanonicalPath()); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File("folder1/folder2"); 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(tmpFolder2.getCanonicalPath(), file.getCanonicalPath()); 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File("folder2/folder3"); 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(tmpFolder3.getCanonicalPath(), file.getCanonicalPath()); 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File("folder2/folder3/folder4"); 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(tmpFolder4.getCanonicalPath(), file.getCanonicalPath()); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File("folder1/folder2/folder3"); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(tmpFolder3.getCanonicalPath(), file.getCanonicalPath()); 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File("folder1/folder2/folder3/folder4"); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(tmpFolder4.getCanonicalPath(), file.getCanonicalPath()); 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 422