Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/nio/file/attribute/AclFileAttributeView/Basic.java
41159 views
1
/*
2
* Copyright (c) 2008, 2011, 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 6891404
26
* @summary Unit test for java.nio.file.attribute.AclFileAttribueView
27
* @library ../..
28
* @key randomness
29
*/
30
31
import java.nio.file.*;
32
import java.nio.file.attribute.*;
33
import java.io.IOException;
34
import java.util.*;
35
36
import static java.nio.file.attribute.AclEntryType.*;
37
import static java.nio.file.attribute.AclEntryPermission.*;
38
import static java.nio.file.attribute.AclEntryFlag.*;
39
40
public class Basic {
41
42
static void printAcl(List<AclEntry> acl) {
43
for (AclEntry entry: acl) {
44
System.out.format(" %s%n", entry);
45
}
46
}
47
48
// sanity check read and writing ACL
49
static void testReadWrite(Path dir) throws IOException {
50
Path file = dir.resolve("foo");
51
if (Files.notExists(file))
52
Files.createFile(file);
53
54
AclFileAttributeView view =
55
Files.getFileAttributeView(file, AclFileAttributeView.class);
56
57
// print existing ACL
58
List<AclEntry> acl = view.getAcl();
59
System.out.println(" -- current ACL --");
60
printAcl(acl);
61
62
// insert entry to grant owner read access
63
UserPrincipal owner = view.getOwner();
64
AclEntry entry = AclEntry.newBuilder()
65
.setType(ALLOW)
66
.setPrincipal(owner)
67
.setPermissions(READ_DATA, READ_ATTRIBUTES)
68
.build();
69
System.out.println(" -- insert (entry 0) --");
70
System.out.format(" %s%n", entry);
71
acl.add(0, entry);
72
view.setAcl(acl);
73
74
// re-ACL and check entry
75
List<AclEntry> newacl = view.getAcl();
76
System.out.println(" -- current ACL --");
77
printAcl(acl);
78
if (!newacl.get(0).equals(entry)) {
79
throw new RuntimeException("Entry 0 is not expected");
80
}
81
82
// if PosixFileAttributeView then repeat test with OWNER@
83
if (Files.getFileStore(file).supportsFileAttributeView("posix")) {
84
owner = file.getFileSystem().getUserPrincipalLookupService()
85
.lookupPrincipalByName("OWNER@");
86
entry = AclEntry.newBuilder(entry).setPrincipal(owner).build();
87
88
System.out.println(" -- replace (entry 0) --");
89
System.out.format(" %s%n", entry);
90
91
acl.set(0, entry);
92
view.setAcl(acl);
93
newacl = view.getAcl();
94
System.out.println(" -- current ACL --");
95
printAcl(acl);
96
if (!newacl.get(0).equals(entry)) {
97
throw new RuntimeException("Entry 0 is not expected");
98
}
99
}
100
}
101
102
static FileAttribute<List<AclEntry>> asAclAttribute(final List<AclEntry> acl) {
103
return new FileAttribute<List<AclEntry>>() {
104
public String name() { return "acl:acl"; }
105
public List<AclEntry> value() { return acl; }
106
};
107
}
108
109
static void assertEquals(List<AclEntry> actual, List<AclEntry> expected) {
110
if (!actual.equals(expected)) {
111
System.err.format("Actual: %s\n", actual);
112
System.err.format("Expected: %s\n", expected);
113
throw new RuntimeException("ACL not expected");
114
}
115
}
116
117
// sanity check create a file or directory with initial ACL
118
static void testCreateFile(Path dir) throws IOException {
119
UserPrincipal user = Files.getOwner(dir);
120
AclFileAttributeView view;
121
122
// create file with initial ACL
123
System.out.println("-- create file with initial ACL --");
124
Path file = dir.resolve("gus");
125
List<AclEntry> fileAcl = Arrays.asList(
126
AclEntry.newBuilder()
127
.setType(AclEntryType.ALLOW)
128
.setPrincipal(user)
129
.setPermissions(SYNCHRONIZE, READ_DATA, WRITE_DATA,
130
READ_ATTRIBUTES, READ_ACL, WRITE_ATTRIBUTES, DELETE)
131
.build());
132
Files.createFile(file, asAclAttribute(fileAcl));
133
view = Files.getFileAttributeView(file, AclFileAttributeView.class);
134
assertEquals(view.getAcl(), fileAcl);
135
136
// create directory with initial ACL
137
System.out.println("-- create directory with initial ACL --");
138
Path subdir = dir.resolve("stuff");
139
List<AclEntry> dirAcl = Arrays.asList(
140
AclEntry.newBuilder()
141
.setType(AclEntryType.ALLOW)
142
.setPrincipal(user)
143
.setPermissions(SYNCHRONIZE, ADD_FILE, DELETE)
144
.build(),
145
AclEntry.newBuilder(fileAcl.get(0))
146
.setFlags(FILE_INHERIT)
147
.build());
148
Files.createDirectory(subdir, asAclAttribute(dirAcl));
149
view = Files.getFileAttributeView(subdir, AclFileAttributeView.class);
150
assertEquals(view.getAcl(), dirAcl);
151
}
152
153
public static void main(String[] args) throws IOException {
154
// use work directory rather than system temporary directory to
155
// improve chances that ACLs are supported
156
Path dir = Paths.get("./work" + new Random().nextInt());
157
Files.createDirectory(dir);
158
try {
159
if (!Files.getFileStore(dir).supportsFileAttributeView("acl")) {
160
System.out.println("ACLs not supported - test skipped!");
161
return;
162
}
163
testReadWrite(dir);
164
165
// only currently feasible on Windows
166
if (System.getProperty("os.name").startsWith("Windows"))
167
testCreateFile(dir);
168
169
} finally {
170
TestUtil.removeAll(dir);
171
}
172
}
173
}
174
175