Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/nio/file/Files/FileAttributes.java
38828 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// checks that two time values are within 1s of each other55static void checkNearEqual(FileTime t1, FileTime t2) {56long diff = Math.abs(t1.toMillis() - t2.toMillis());57assertTrue(diff <= 1000);58}5960// Exercise getAttribute/setAttribute/readAttributes on basic attributes61static void checkBasicAttributes(Path file, BasicFileAttributes attrs)62throws IOException63{64// getAttribute65checkEqual(attrs.size(), Files.getAttribute(file, "size"));66checkEqual(attrs.lastModifiedTime(), Files.getAttribute(file, "basic:lastModifiedTime"));67checkEqual(attrs.lastAccessTime(), Files.getAttribute(file, "lastAccessTime"));68checkEqual(attrs.creationTime(), Files.getAttribute(file, "basic:creationTime"));69assertTrue((Boolean)Files.getAttribute(file, "isRegularFile"));70assertTrue(!(Boolean)Files.getAttribute(file, "basic:isDirectory"));71assertTrue(!(Boolean)Files.getAttribute(file, "isSymbolicLink"));72assertTrue(!(Boolean)Files.getAttribute(file, "basic:isOther"));73checkEqual(attrs.fileKey(), Files.getAttribute(file, "basic:fileKey"));7475// setAttribute76FileTime modTime = attrs.lastModifiedTime();77Files.setAttribute(file, "basic:lastModifiedTime", FileTime.fromMillis(0L));78checkEqual(Files.getLastModifiedTime(file),79FileTime.fromMillis(0L));80Files.setAttribute(file, "lastModifiedTime", modTime);81checkEqual(Files.getLastModifiedTime(file), modTime);8283Map<String,Object> map;84map = Files.readAttributes(file, "*");85assertTrue(map.size() >= 9);86checkEqual(attrs.isRegularFile(), map.get("isRegularFile")); // check one8788map = Files.readAttributes(file, "basic:*");89assertTrue(map.size() >= 9);90checkEqual(attrs.lastAccessTime(), map.get("lastAccessTime")); // check one9192map = Files.readAttributes(file, "size,lastModifiedTime");93assertTrue(map.size() == 2);94checkEqual(attrs.size(), map.get("size"));95checkEqual(attrs.lastModifiedTime(), map.get("lastModifiedTime"));96}9798// Exercise getAttribute/setAttribute/readAttributes on posix attributes99static void checkPosixAttributes(Path file, PosixFileAttributes attrs)100throws IOException101{102checkBasicAttributes(file, attrs);103104// getAttribute105checkEqual(attrs.permissions(), Files.getAttribute(file, "posix:permissions"));106checkEqual(attrs.owner(), Files.getAttribute(file, "posix:owner"));107checkEqual(attrs.group(), Files.getAttribute(file, "posix:group"));108109// setAttribute110Set<PosixFilePermission> orig = attrs.permissions();111Set<PosixFilePermission> newPerms = new HashSet<>(orig);112newPerms.remove(PosixFilePermission.OTHERS_READ);113newPerms.remove(PosixFilePermission.OTHERS_WRITE);114newPerms.remove(PosixFilePermission.OTHERS_EXECUTE);115Files.setAttribute(file, "posix:permissions", newPerms);116checkEqual(Files.getPosixFilePermissions(file), newPerms);117Files.setAttribute(file, "posix:permissions", orig);118checkEqual(Files.getPosixFilePermissions(file), orig);119Files.setAttribute(file, "posix:owner", attrs.owner());120Files.setAttribute(file, "posix:group", attrs.group());121122// readAttributes123Map<String,Object> map;124map = Files.readAttributes(file, "posix:*");125assertTrue(map.size() >= 12);126checkEqual(attrs.permissions(), map.get("permissions")); // check one127128map = Files.readAttributes(file, "posix:size,owner");129assertTrue(map.size() == 2);130checkEqual(attrs.size(), map.get("size"));131checkEqual(attrs.owner(), map.get("owner"));132}133134// Exercise getAttribute/readAttributes on unix attributes135static void checkUnixAttributes(Path file) throws IOException {136// getAttribute137int mode = (Integer)Files.getAttribute(file, "unix:mode");138long ino = (Long)Files.getAttribute(file, "unix:ino");139long dev = (Long)Files.getAttribute(file, "unix:dev");140long rdev = (Long)Files.getAttribute(file, "unix:rdev");141int nlink = (Integer)Files.getAttribute(file, "unix:nlink");142int uid = (Integer)Files.getAttribute(file, "unix:uid");143int gid = (Integer)Files.getAttribute(file, "unix:gid");144FileTime ctime = (FileTime)Files.getAttribute(file, "unix:ctime");145146// readAttributes147Map<String,Object> map;148map = Files.readAttributes(file, "unix:*");149assertTrue(map.size() >= 20);150151map = Files.readAttributes(file, "unix:size,uid,gid");152assertTrue(map.size() == 3);153checkEqual(map.get("size"),154Files.readAttributes(file, BasicFileAttributes.class).size());155}156157// Exercise getAttribute/setAttribute on dos attributes158static void checkDosAttributes(Path file, DosFileAttributes attrs)159throws IOException160{161checkBasicAttributes(file, attrs);162163// getAttribute164checkEqual(attrs.isReadOnly(), Files.getAttribute(file, "dos:readonly"));165checkEqual(attrs.isHidden(), Files.getAttribute(file, "dos:hidden"));166checkEqual(attrs.isSystem(), Files.getAttribute(file, "dos:system"));167checkEqual(attrs.isArchive(), Files.getAttribute(file, "dos:archive"));168169// setAttribute170boolean value;171172value = attrs.isReadOnly();173Files.setAttribute(file, "dos:readonly", !value);174checkEqual(Files.readAttributes(file, DosFileAttributes.class).isReadOnly(), !value);175Files.setAttribute(file, "dos:readonly", value);176checkEqual(Files.readAttributes(file, DosFileAttributes.class).isReadOnly(), value);177178value = attrs.isHidden();179Files.setAttribute(file, "dos:hidden", !value);180checkEqual(Files.readAttributes(file, DosFileAttributes.class).isHidden(), !value);181Files.setAttribute(file, "dos:hidden", value);182checkEqual(Files.readAttributes(file, DosFileAttributes.class).isHidden(), value);183184value = attrs.isSystem();185Files.setAttribute(file, "dos:system", !value);186checkEqual(Files.readAttributes(file, DosFileAttributes.class).isSystem(), !value);187Files.setAttribute(file, "dos:system", value);188checkEqual(Files.readAttributes(file, DosFileAttributes.class).isSystem(), value);189190value = attrs.isArchive();191Files.setAttribute(file, "dos:archive", !value);192checkEqual(Files.readAttributes(file, DosFileAttributes.class).isArchive(), !value);193Files.setAttribute(file, "dos:archive", value);194checkEqual(Files.readAttributes(file, DosFileAttributes.class).isArchive(), value);195196// readAttributes197Map<String,Object> map;198map = Files.readAttributes(file, "dos:*");199assertTrue(map.size() >= 13);200checkEqual(attrs.isReadOnly(), map.get("readonly")); // check one201202map = Files.readAttributes(file, "dos:size,hidden");203assertTrue(map.size() == 2);204checkEqual(attrs.size(), map.get("size"));205checkEqual(attrs.isHidden(), map.get("hidden"));206}207208static void checkBadSet(Path file, String attribute, Object value)209throws IOException210{211try {212Files.setAttribute(file, attribute, 0);213throw new RuntimeException("IllegalArgumentException expected");214} catch (IllegalArgumentException ignore) { }215}216217static void checkBadGet(Path file, String attribute) throws IOException {218try {219Files.getAttribute(file, attribute);220throw new RuntimeException("IllegalArgumentException expected");221} catch (IllegalArgumentException ignore) { }222}223224static void checkBadRead(Path file, String attribute) throws IOException {225try {226Files.readAttributes(file, attribute);227throw new RuntimeException("IllegalArgumentException expected");228} catch (IllegalArgumentException ignore) { }229}230231static void miscTests(Path file) throws IOException {232// unsupported views233try {234Files.setAttribute(file, "foo:bar", 0);235throw new RuntimeException("UnsupportedOperationException expected");236} catch (UnsupportedOperationException ignore) { }237try {238Files.getAttribute(file, "foo:bar");239throw new RuntimeException("UnsupportedOperationException expected");240} catch (UnsupportedOperationException ignore) { }241try {242Files.readAttributes(file, "foo:*");243throw new RuntimeException("UnsupportedOperationException expected");244} catch (UnsupportedOperationException ignore) { }245246// bad args247checkBadSet(file, "", 0);248checkBadSet(file, "basic:", 0);249checkBadSet(file, "basic:foobar", 0);250checkBadGet(file, "");251checkBadGet(file, "basic:");252checkBadGet(file, "basic:foobar");253checkBadGet(file, "basic:size,lastModifiedTime");254checkBadGet(file, "basic:*");255checkBadRead(file, "");256checkBadRead(file, "basic:");257checkBadRead(file, "basic:foobar");258checkBadRead(file, "basic:size,foobar");259260// nulls261try {262Files.getAttribute(file, null);263throw new RuntimeException("NullPointerException expected");264} catch (NullPointerException npe) { }265try {266Files.getAttribute(file, "isRegularFile", (LinkOption[])null);267throw new RuntimeException("NullPointerException expected");268} catch (NullPointerException npe) { }269try {270Files.setAttribute(file, null, 0L);271throw new RuntimeException("NullPointerException expected");272} catch (NullPointerException npe) { }273}274275static void doTests(Path dir) throws IOException {276Path file = dir.resolve("foo");277Files.createFile(file);278FileStore store = Files.getFileStore(file);279try {280checkBasicAttributes(file,281Files.readAttributes(file, BasicFileAttributes.class));282283if (store.supportsFileAttributeView("posix"))284checkPosixAttributes(file,285Files.readAttributes(file, PosixFileAttributes.class));286287if (store.supportsFileAttributeView("unix"))288checkUnixAttributes(file);289290if (store.supportsFileAttributeView("dos"))291checkDosAttributes(file,292Files.readAttributes(file, DosFileAttributes.class));293294miscTests(file);295} finally {296Files.delete(file);297}298}299300301public static void main(String[] args) throws IOException {302Path dir = TestUtil.createTemporaryDirectory();303try {304doTests(dir);305} finally {306TestUtil.removeAll(dir);307}308}309}310311312