• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2008, 2013, 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.BasicFileAttributeView
27  * @library ../..
28  */
29 // Android-changed: Adapted from
30 // jdk/test/java/nio/file/attribute/BasicFileAttributeView/Basic.java
31 // Android-changed: Added package & Test import
32 package test.java.nio.file.attribute;
33 import org.testng.annotations.Test;
34 import test.java.nio.file.TestUtil;
35 
36 import java.nio.file.*;
37 import java.nio.file.attribute.*;
38 import java.util.*;
39 import java.util.concurrent.TimeUnit;
40 import java.io.*;
41 
42 // Android-changed: Renamed from "Basic"
43 public class BasicFileAttributeViewTest {
44 
check(boolean okay, String msg)45     static void check(boolean okay, String msg) {
46         if (!okay)
47             throw new RuntimeException(msg);
48     }
49 
checkAttributesOfDirectory(Path dir)50     static void checkAttributesOfDirectory(Path dir)
51         throws IOException
52     {
53         BasicFileAttributes attrs = Files.readAttributes(dir, BasicFileAttributes.class);
54         check(attrs.isDirectory(), "is a directory");
55         check(!attrs.isRegularFile(), "is not a regular file");
56         check(!attrs.isSymbolicLink(), "is not a link");
57         check(!attrs.isOther(), "is not other");
58 
59         // last-modified-time should match java.io.File in seconds
60         File f = new File(dir.toString());
61         check(f.lastModified()/1000 == attrs.lastModifiedTime().to(TimeUnit.SECONDS),
62               "last-modified time should be the same");
63     }
64 
checkAttributesOfFile(Path dir, Path file)65     static void checkAttributesOfFile(Path dir, Path file)
66         throws IOException
67     {
68         BasicFileAttributes attrs = Files.readAttributes(file, BasicFileAttributes.class);
69         check(attrs.isRegularFile(), "is a regular file");
70         check(!attrs.isDirectory(), "is not a directory");
71         check(!attrs.isSymbolicLink(), "is not a link");
72         check(!attrs.isOther(), "is not other");
73 
74         // size and last-modified-time should match java.io.File in seconds
75         File f = new File(file.toString());
76         check(f.length() == attrs.size(), "size should be the same");
77         check(f.lastModified()/1000 == attrs.lastModifiedTime().to(TimeUnit.SECONDS),
78               "last-modified time should be the same");
79 
80         // copy last-modified time from directory to file,
81         // re-read attribtues, and check they match
82         BasicFileAttributeView view =
83             Files.getFileAttributeView(file, BasicFileAttributeView.class);
84         BasicFileAttributes dirAttrs = Files.readAttributes(dir, BasicFileAttributes.class);
85         view.setTimes(dirAttrs.lastModifiedTime(), null, null);
86 
87         attrs = view.readAttributes();
88         check(attrs.lastModifiedTime().equals(dirAttrs.lastModifiedTime()),
89             "last-modified time should be equal");
90 
91         // security tests
92         check (!(attrs instanceof PosixFileAttributes),
93             "should not be able to cast to PosixFileAttributes");
94     }
95 
checkAttributesOfLink(Path link)96     static void checkAttributesOfLink(Path link)
97         throws IOException
98     {
99         BasicFileAttributes attrs =
100             Files.readAttributes(link, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
101         check(attrs.isSymbolicLink(), "is a link");
102         check(!attrs.isDirectory(), "is a directory");
103         check(!attrs.isRegularFile(), "is not a regular file");
104         check(!attrs.isOther(), "is not other");
105     }
106 
attributeReadWriteTests(Path dir)107     static void attributeReadWriteTests(Path dir)
108         throws IOException
109     {
110         // create file
111         Path file = dir.resolve("foo");
112         try (OutputStream out = Files.newOutputStream(file)) {
113             out.write("this is not an empty file".getBytes("UTF-8"));
114         }
115 
116         // check attributes of directory and file
117         checkAttributesOfDirectory(dir);
118         checkAttributesOfFile(dir, file);
119 
120         // symbolic links may be supported
121         Path link = dir.resolve("link");
122         try {
123             Files.createSymbolicLink(link, file);
124         } catch (UnsupportedOperationException x) {
125             return;
126         } catch (IOException x) {
127             return;
128         }
129         checkAttributesOfLink(link);
130     }
131 
132     // Android-changed: Removed args & added @Test
133     @Test
main()134     public static void main() throws IOException {
135         // create temporary directory to run tests
136         Path dir = TestUtil.createTemporaryDirectory();
137         try {
138             attributeReadWriteTests(dir);
139         } finally {
140             TestUtil.removeAll(dir);
141         }
142     }
143 }
144