030a13d8fe
4313887: New I/O: Improved filesystem interface 4607272: New I/O: Support asynchronous I/O Reviewed-by: sherman, chegar
172 lines
6.4 KiB
Java
172 lines
6.4 KiB
Java
/*
|
|
* Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
|
* have any questions.
|
|
*/
|
|
|
|
/* @test
|
|
* @bug 4313887
|
|
* @summary Unit test for java.nio.file.attribute.FileStoreAttributeView
|
|
* @library ../..
|
|
*/
|
|
|
|
import java.nio.file.*;
|
|
import java.nio.file.attribute.*;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Simple unit test for FileStoreAttributeView that checks that the disk space
|
|
* attribtues are "close" to the equivalent values reported by java.io.File.
|
|
*/
|
|
|
|
public class Basic {
|
|
|
|
static final long K = 1024L;
|
|
static final long G = 1024L * 1024L * 1024L;
|
|
|
|
/**
|
|
* Print out the disk space information for the given file system
|
|
*/
|
|
static void printFileStore(FileStore fs) throws IOException {
|
|
FileStoreSpaceAttributeView view =
|
|
fs.getFileStoreAttributeView(FileStoreSpaceAttributeView.class);
|
|
FileStoreSpaceAttributes attrs = view.readAttributes();
|
|
|
|
long total = attrs.totalSpace() / K;
|
|
long used = (attrs.totalSpace() - attrs.unallocatedSpace()) / K;
|
|
long avail = attrs.usableSpace() / K;
|
|
|
|
String s = fs.toString();
|
|
if (s.length() > 20) {
|
|
System.out.println(s);
|
|
s = "";
|
|
}
|
|
System.out.format("%-20s %12d %12d %12d\n", s, total, used, avail);
|
|
}
|
|
|
|
/**
|
|
* Check that two values are within 1GB of each other
|
|
*/
|
|
static void checkWithin1GB(long value1, long value2) {
|
|
long diff = Math.abs(value1 - value2);
|
|
if (diff > G)
|
|
throw new RuntimeException("values differ by more than 1GB");
|
|
}
|
|
|
|
/**
|
|
* Check disk space on the file system of the given file
|
|
*/
|
|
static void checkSpace(Path file) throws IOException {
|
|
System.out.println(" -- check space -- ");
|
|
System.out.println(file);
|
|
|
|
FileStore fs = file.getFileStore();
|
|
System.out.format("Filesystem: %s\n", fs);
|
|
|
|
// get values reported by java.io.File
|
|
File f = new File(file.toString());
|
|
long total = f.getTotalSpace();
|
|
long free = f.getFreeSpace();
|
|
long usable = f.getUsableSpace();
|
|
System.out.println("java.io.File");
|
|
System.out.format(" Total: %d\n", total);
|
|
System.out.format(" Free: %d\n", free);
|
|
System.out.format(" Usable: %d\n", usable);
|
|
|
|
// get values reported by the FileStoreSpaceAttributeView
|
|
FileStoreSpaceAttributes attrs = fs
|
|
.getFileStoreAttributeView(FileStoreSpaceAttributeView.class)
|
|
.readAttributes();
|
|
System.out.println("java.nio.file.FileStoreSpaceAttributeView:");
|
|
System.out.format(" Total: %d\n", attrs.totalSpace());
|
|
System.out.format(" Free: %d\n", attrs.unallocatedSpace());
|
|
System.out.format(" Usable: %d\n", attrs.usableSpace());
|
|
|
|
// check values are "close"
|
|
checkWithin1GB(total, attrs.totalSpace());
|
|
checkWithin1GB(free, attrs.unallocatedSpace());
|
|
checkWithin1GB(usable, attrs.usableSpace());
|
|
|
|
// get values by name (and in bulk)
|
|
FileStoreAttributeView view = fs.getFileStoreAttributeView("space");
|
|
checkWithin1GB(total, (Long)view.getAttribute("totalSpace"));
|
|
checkWithin1GB(free, (Long)view.getAttribute("unallocatedSpace"));
|
|
checkWithin1GB(usable, (Long)view.getAttribute("usableSpace"));
|
|
Map<String,?> map = view.readAttributes("*");
|
|
checkWithin1GB(total, (Long)map.get("totalSpace"));
|
|
checkWithin1GB(free, (Long)map.get("unallocatedSpace"));
|
|
checkWithin1GB(usable, (Long)map.get("usableSpace"));
|
|
map = view.readAttributes("totalSpace", "unallocatedSpace", "usableSpace");
|
|
checkWithin1GB(total, (Long)map.get("totalSpace"));
|
|
checkWithin1GB(free, (Long)map.get("unallocatedSpace"));
|
|
checkWithin1GB(usable, (Long)map.get("usableSpace"));
|
|
}
|
|
|
|
/**
|
|
* Check (Windows-specific) volume attributes
|
|
*/
|
|
static void checkVolumeAttributes() throws IOException {
|
|
System.out.println(" -- volumes -- ");
|
|
for (FileStore store: FileSystems.getDefault().getFileStores()) {
|
|
FileStoreAttributeView view = store.getFileStoreAttributeView("volume");
|
|
if (view == null)
|
|
continue;
|
|
Map<String,?> attrs = view.readAttributes("*");
|
|
int vsn = (Integer)attrs.get("vsn");
|
|
boolean compressed = (Boolean)attrs.get("compressed");
|
|
boolean removable = (Boolean)attrs.get("removable");
|
|
boolean cdrom = (Boolean)attrs.get("cdrom");
|
|
String type;
|
|
if (removable) type = "removable";
|
|
else if (cdrom) type = "cdrom";
|
|
else type = "unknown";
|
|
System.out.format("%s (%s) vsn:%x compressed:%b%n", store.name(),
|
|
type, vsn, compressed);
|
|
}
|
|
|
|
}
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
// print out the disk space information for all file systems
|
|
FileSystem fs = FileSystems.getDefault();
|
|
for (FileStore store: fs.getFileStores()) {
|
|
printFileStore(store);
|
|
}
|
|
|
|
Path dir = TestUtil.createTemporaryDirectory();
|
|
try {
|
|
// check space using directory
|
|
checkSpace(dir);
|
|
|
|
// check space using file
|
|
Path file = dir.resolve("foo").createFile();
|
|
checkSpace(file);
|
|
|
|
// volume attributes (Windows specific)
|
|
checkVolumeAttributes();
|
|
|
|
} finally {
|
|
TestUtil.removeAll(dir);
|
|
}
|
|
}
|
|
}
|