Path: blob/master/test/jdk/java/nio/file/Files/FileAttributes.java
41153 views
/*1* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/* @test24* @bug 4313887 6838333 701744625* @summary Unit test for java.nio.file.Files26* @library ..27*/2829import java.nio.file.*;30import java.nio.file.attribute.*;31import java.io.IOException;32import java.util.*;33import java.util.concurrent.TimeUnit;3435/**36* Exercises getAttribute/setAttribute/readAttributes methods.37*/3839public class FileAttributes {4041static void assertTrue(boolean okay) {42if (!okay)43throw new RuntimeException("Assertion Failed");44}4546static void checkEqual(Object o1, Object o2) {47if (o1 == null) {48assertTrue(o2 == null);49} else {50assertTrue (o1.equals(o2));51}52}5354// Exercise getAttribute/setAttribute/readAttributes on basic attributes55static void checkBasicAttributes(Path file, BasicFileAttributes attrs)56throws IOException57{58// getAttribute59checkEqual(attrs.size(), Files.getAttribute(file, "size"));60checkEqual(attrs.lastModifiedTime(), Files.getAttribute(file, "basic:lastModifiedTime"));61checkEqual(attrs.lastAccessTime(), Files.getAttribute(file, "lastAccessTime"));62checkEqual(attrs.creationTime(), Files.getAttribute(file, "basic:creationTime"));63assertTrue((Boolean)Files.getAttribute(file, "isRegularFile"));64assertTrue(!(Boolean)Files.getAttribute(file, "basic:isDirectory"));65assertTrue(!(Boolean)Files.getAttribute(file, "isSymbolicLink"));66assertTrue(!(Boolean)Files.getAttribute(file, "basic:isOther"));67checkEqual(attrs.fileKey(), Files.getAttribute(file, "basic:fileKey"));6869// setAttribute70FileTime modTime = attrs.lastModifiedTime();71Files.setAttribute(file, "basic:lastModifiedTime", FileTime.fromMillis(0L));72checkEqual(Files.getLastModifiedTime(file),73FileTime.fromMillis(0L));74Files.setAttribute(file, "lastModifiedTime", modTime);75checkEqual(Files.getLastModifiedTime(file), modTime);7677Map<String,Object> map;78map = Files.readAttributes(file, "*");79assertTrue(map.size() >= 9);80checkEqual(attrs.isRegularFile(), map.get("isRegularFile")); // check one8182map = Files.readAttributes(file, "basic:*");83assertTrue(map.size() >= 9);84checkEqual(attrs.lastAccessTime(), map.get("lastAccessTime")); // check one8586map = Files.readAttributes(file, "size,lastModifiedTime");87assertTrue(map.size() == 2);88checkEqual(attrs.size(), map.get("size"));89checkEqual(attrs.lastModifiedTime(), map.get("lastModifiedTime"));90}9192// Exercise getAttribute/setAttribute/readAttributes on posix attributes93static void checkPosixAttributes(Path file, PosixFileAttributes attrs)94throws IOException95{96checkBasicAttributes(file, attrs);9798// getAttribute99checkEqual(attrs.permissions(), Files.getAttribute(file, "posix:permissions"));100checkEqual(attrs.owner(), Files.getAttribute(file, "posix:owner"));101checkEqual(attrs.group(), Files.getAttribute(file, "posix:group"));102103// setAttribute104Set<PosixFilePermission> orig = attrs.permissions();105Set<PosixFilePermission> newPerms = new HashSet<>(orig);106newPerms.remove(PosixFilePermission.OTHERS_READ);107newPerms.remove(PosixFilePermission.OTHERS_WRITE);108newPerms.remove(PosixFilePermission.OTHERS_EXECUTE);109Files.setAttribute(file, "posix:permissions", newPerms);110checkEqual(Files.getPosixFilePermissions(file), newPerms);111Files.setAttribute(file, "posix:permissions", orig);112checkEqual(Files.getPosixFilePermissions(file), orig);113Files.setAttribute(file, "posix:owner", attrs.owner());114Files.setAttribute(file, "posix:group", attrs.group());115116// readAttributes117Map<String,Object> map;118map = Files.readAttributes(file, "posix:*");119assertTrue(map.size() >= 12);120checkEqual(attrs.permissions(), map.get("permissions")); // check one121122map = Files.readAttributes(file, "posix:size,owner");123assertTrue(map.size() == 2);124checkEqual(attrs.size(), map.get("size"));125checkEqual(attrs.owner(), map.get("owner"));126}127128// Exercise getAttribute/readAttributes on unix attributes129static void checkUnixAttributes(Path file) throws IOException {130// getAttribute131int mode = (Integer)Files.getAttribute(file, "unix:mode");132long ino = (Long)Files.getAttribute(file, "unix:ino");133long dev = (Long)Files.getAttribute(file, "unix:dev");134long rdev = (Long)Files.getAttribute(file, "unix:rdev");135int nlink = (Integer)Files.getAttribute(file, "unix:nlink");136int uid = (Integer)Files.getAttribute(file, "unix:uid");137int gid = (Integer)Files.getAttribute(file, "unix:gid");138FileTime ctime = (FileTime)Files.getAttribute(file, "unix:ctime");139140// readAttributes141Map<String,Object> map;142map = Files.readAttributes(file, "unix:*");143assertTrue(map.size() >= 20);144145map = Files.readAttributes(file, "unix:size,uid,gid");146assertTrue(map.size() == 3);147checkEqual(map.get("size"),148Files.readAttributes(file, BasicFileAttributes.class).size());149}150151// Exercise getAttribute/setAttribute on dos attributes152static void checkDosAttributes(Path file, DosFileAttributes attrs)153throws IOException154{155checkBasicAttributes(file, attrs);156157// getAttribute158checkEqual(attrs.isReadOnly(), Files.getAttribute(file, "dos:readonly"));159checkEqual(attrs.isHidden(), Files.getAttribute(file, "dos:hidden"));160checkEqual(attrs.isSystem(), Files.getAttribute(file, "dos:system"));161checkEqual(attrs.isArchive(), Files.getAttribute(file, "dos:archive"));162163// setAttribute164boolean value;165166value = attrs.isReadOnly();167Files.setAttribute(file, "dos:readonly", !value);168checkEqual(Files.readAttributes(file, DosFileAttributes.class).isReadOnly(), !value);169Files.setAttribute(file, "dos:readonly", value);170checkEqual(Files.readAttributes(file, DosFileAttributes.class).isReadOnly(), value);171172value = attrs.isHidden();173Files.setAttribute(file, "dos:hidden", !value);174checkEqual(Files.readAttributes(file, DosFileAttributes.class).isHidden(), !value);175Files.setAttribute(file, "dos:hidden", value);176checkEqual(Files.readAttributes(file, DosFileAttributes.class).isHidden(), value);177178value = attrs.isSystem();179Files.setAttribute(file, "dos:system", !value);180checkEqual(Files.readAttributes(file, DosFileAttributes.class).isSystem(), !value);181Files.setAttribute(file, "dos:system", value);182checkEqual(Files.readAttributes(file, DosFileAttributes.class).isSystem(), value);183184value = attrs.isArchive();185Files.setAttribute(file, "dos:archive", !value);186checkEqual(Files.readAttributes(file, DosFileAttributes.class).isArchive(), !value);187Files.setAttribute(file, "dos:archive", value);188checkEqual(Files.readAttributes(file, DosFileAttributes.class).isArchive(), value);189190// readAttributes191Map<String,Object> map;192map = Files.readAttributes(file, "dos:*");193assertTrue(map.size() >= 13);194checkEqual(attrs.isReadOnly(), map.get("readonly")); // check one195196map = Files.readAttributes(file, "dos:size,hidden");197assertTrue(map.size() == 2);198checkEqual(attrs.size(), map.get("size"));199checkEqual(attrs.isHidden(), map.get("hidden"));200}201202static void checkBadSet(Path file, String attribute, Object value)203throws IOException204{205try {206Files.setAttribute(file, attribute, 0);207throw new RuntimeException("IllegalArgumentException expected");208} catch (IllegalArgumentException ignore) { }209}210211static void checkBadGet(Path file, String attribute) throws IOException {212try {213Files.getAttribute(file, attribute);214throw new RuntimeException("IllegalArgumentException expected");215} catch (IllegalArgumentException ignore) { }216}217218static void checkBadRead(Path file, String attribute) throws IOException {219try {220Files.readAttributes(file, attribute);221throw new RuntimeException("IllegalArgumentException expected");222} catch (IllegalArgumentException ignore) { }223}224225static void miscTests(Path file) throws IOException {226// unsupported views227try {228Files.setAttribute(file, "foo:bar", 0);229throw new RuntimeException("UnsupportedOperationException expected");230} catch (UnsupportedOperationException ignore) { }231try {232Files.getAttribute(file, "foo:bar");233throw new RuntimeException("UnsupportedOperationException expected");234} catch (UnsupportedOperationException ignore) { }235try {236Files.readAttributes(file, "foo:*");237throw new RuntimeException("UnsupportedOperationException expected");238} catch (UnsupportedOperationException ignore) { }239240// bad args241checkBadSet(file, "", 0);242checkBadSet(file, "basic:", 0);243checkBadSet(file, "basic:foobar", 0);244checkBadGet(file, "");245checkBadGet(file, "basic:");246checkBadGet(file, "basic:foobar");247checkBadGet(file, "basic:size,lastModifiedTime");248checkBadGet(file, "basic:*");249checkBadRead(file, "");250checkBadRead(file, "basic:");251checkBadRead(file, "basic:foobar");252checkBadRead(file, "basic:size,foobar");253254// nulls255try {256Files.getAttribute(file, null);257throw new RuntimeException("NullPointerException expected");258} catch (NullPointerException npe) { }259try {260Files.getAttribute(file, "isRegularFile", (LinkOption[])null);261throw new RuntimeException("NullPointerException expected");262} catch (NullPointerException npe) { }263try {264Files.setAttribute(file, null, 0L);265throw new RuntimeException("NullPointerException expected");266} catch (NullPointerException npe) { }267}268269static void doTests(Path dir) throws IOException {270Path file = dir.resolve("foo");271Files.createFile(file);272FileStore store = Files.getFileStore(file);273try {274checkBasicAttributes(file,275Files.readAttributes(file, BasicFileAttributes.class));276277if (store.supportsFileAttributeView("posix"))278checkPosixAttributes(file,279Files.readAttributes(file, PosixFileAttributes.class));280281if (store.supportsFileAttributeView("unix"))282checkUnixAttributes(file);283284if (store.supportsFileAttributeView("dos"))285checkDosAttributes(file,286Files.readAttributes(file, DosFileAttributes.class));287288miscTests(file);289} finally {290Files.delete(file);291}292}293294295public static void main(String[] args) throws IOException {296Path dir = TestUtil.createTemporaryDirectory();297try {298doTests(dir);299} finally {300TestUtil.removeAll(dir);301}302}303}304305306