1 /* 2 * Copyright (c) 2008, 2009, 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 4313887 6838333 26 * @summary Unit test for java.nio.file.attribute.FileStoreAttributeView 27 * @library ../.. 28 */ 29 30 import java.nio.file.*; 31 import java.nio.file.attribute.*; 32 import java.io.File; 33 import java.io.IOException; 34 import java.util.*; 35 36 /** 37 * Simple unit test for FileStoreAttributeView that checks that the disk space 38 * attribtues are "close" to the equivalent values reported by java.io.File. 39 */ 40 41 public class Basic { 42 43 static final long K = 1024L; 44 static final long G = 1024L * 1024L * 1024L; 45 46 /** 47 * Print out the disk space information for the given file system 48 */ 49 static void printFileStore(FileStore fs) throws IOException { 50 FileStoreSpaceAttributeView view = 51 fs.getFileStoreAttributeView(FileStoreSpaceAttributeView.class); 52 FileStoreSpaceAttributes attrs = view.readAttributes(); 53 54 long total = attrs.totalSpace() / K; 55 long used = (attrs.totalSpace() - attrs.unallocatedSpace()) / K; 56 long avail = attrs.usableSpace() / K; 57 58 String s = fs.toString(); 59 if (s.length() > 20) { 60 System.out.println(s); 61 s = ""; 62 } 63 System.out.format("%-20s %12d %12d %12d\n", s, total, used, avail); 64 } 65 66 /** 67 * Check that two values are within 1GB of each other 68 */ 69 static void checkWithin1GB(long value1, long value2) { 70 long diff = Math.abs(value1 - value2); 71 if (diff > G) 72 throw new RuntimeException("values differ by more than 1GB"); 73 } 74 75 /** 76 * Check disk space on the file system of the given file 77 */ 78 static void checkSpace(Path file) throws IOException { 79 System.out.println(" -- check space -- "); 80 System.out.println(file); 81 82 FileStore fs = file.getFileStore(); 83 System.out.format("Filesystem: %s\n", fs); 84 85 // get values reported by java.io.File 86 File f = new File(file.toString()); 87 long total = f.getTotalSpace(); 88 long free = f.getFreeSpace(); 89 long usable = f.getUsableSpace(); 90 System.out.println("java.io.File"); 91 System.out.format(" Total: %d\n", total); 92 System.out.format(" Free: %d\n", free); 93 System.out.format(" Usable: %d\n", usable); 94 95 // get values reported by the FileStoreSpaceAttributeView 96 FileStoreSpaceAttributes attrs = fs 97 .getFileStoreAttributeView(FileStoreSpaceAttributeView.class) 98 .readAttributes(); 99 System.out.println("java.nio.file.FileStoreSpaceAttributeView:"); 100 System.out.format(" Total: %d\n", attrs.totalSpace()); 101 System.out.format(" Free: %d\n", attrs.unallocatedSpace()); 102 System.out.format(" Usable: %d\n", attrs.usableSpace()); 103 104 // check values are "close" 105 checkWithin1GB(total, attrs.totalSpace()); 106 checkWithin1GB(free, attrs.unallocatedSpace()); 107 checkWithin1GB(usable, attrs.usableSpace()); 108 109 // get values by name 110 checkWithin1GB(total, (Long)fs.getAttribute("space:totalSpace")); 111 checkWithin1GB(free, (Long)fs.getAttribute("space:unallocatedSpace")); 112 checkWithin1GB(usable, (Long)fs.getAttribute("space:usableSpace")); 113 } 114 115 public static void main(String[] args) throws IOException { 116 // print out the disk space information for all file systems 117 FileSystem fs = FileSystems.getDefault(); 118 for (FileStore store: fs.getFileStores()) { 119 printFileStore(store); 120 } 121 122 Path dir = TestUtil.createTemporaryDirectory(); 123 try { 124 // check space using directory 125 checkSpace(dir); 126 127 // check space using file 128 Path file = dir.resolve("foo").createFile(); 129 checkSpace(file); 130 131 } finally { 132 TestUtil.removeAll(dir); 133 } 134 } 135 }