Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/nio/file/attribute/PosixFileAttributeView/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
26
* @summary Unit test for java.nio.file.attribute.PosixFileAttributeView
27
* @library ../..
28
*/
29
30
import java.nio.file.*;
31
import static java.nio.file.LinkOption.*;
32
import java.nio.file.attribute.*;
33
import java.io.IOException;
34
import java.util.*;
35
36
/**
37
* Unit test for PosixFileAttributeView, passing silently if this attribute
38
* view is not available.
39
*/
40
41
public class Basic {
42
43
/**
44
* Use view to update permission to the given mode and check that the
45
* permissions have been updated.
46
*/
47
static void testPermissions(Path file, String mode) throws IOException {
48
System.out.format("change mode: %s\n", mode);
49
Set<PosixFilePermission> perms = PosixFilePermissions.fromString(mode);
50
51
// change permissions and re-read them.
52
Files.setPosixFilePermissions(file, perms);
53
Set<PosixFilePermission> current = Files.getPosixFilePermissions(file);
54
if (!current.equals(perms)) {
55
throw new RuntimeException("Actual permissions: " +
56
PosixFilePermissions.toString(current) + ", expected: " +
57
PosixFilePermissions.toString(perms));
58
}
59
60
// repeat test using setAttribute/getAttribute
61
Files.setAttribute(file, "posix:permissions", perms);
62
current = (Set<PosixFilePermission>)Files.getAttribute(file, "posix:permissions");
63
if (!current.equals(perms)) {
64
throw new RuntimeException("Actual permissions: " +
65
PosixFilePermissions.toString(current) + ", expected: " +
66
PosixFilePermissions.toString(perms));
67
}
68
}
69
70
/**
71
* Check that the actual permissions of a file match or make it more
72
* secure than requested
73
*/
74
static void checkSecure(Set<PosixFilePermission> requested,
75
Set<PosixFilePermission> actual)
76
{
77
for (PosixFilePermission perm: actual) {
78
if (!requested.contains(perm)) {
79
throw new RuntimeException("Actual permissions: " +
80
PosixFilePermissions.toString(actual) + ", requested: " +
81
PosixFilePermissions.toString(requested) +
82
" - file is less secure than requested");
83
}
84
}
85
}
86
87
/**
88
* Create file with given mode and check that the file is created with a
89
* mode that is not less secure
90
*/
91
static void createWithPermissions(Path file,
92
String mode)
93
throws IOException
94
{
95
Set<PosixFilePermission> requested = PosixFilePermissions.fromString(mode);
96
FileAttribute<Set<PosixFilePermission>> attr =
97
PosixFilePermissions.asFileAttribute(requested);
98
System.out.format("create file with mode: %s\n", mode);
99
Files.createFile(file, attr);
100
try {
101
checkSecure(requested,
102
Files.getFileAttributeView(file, PosixFileAttributeView.class)
103
.readAttributes()
104
.permissions());
105
} finally {
106
Files.delete(file);
107
}
108
109
System.out.format("create directory with mode: %s\n", mode);
110
Files.createDirectory(file, attr);
111
try {
112
checkSecure(requested,
113
Files.getFileAttributeView(file, PosixFileAttributeView.class)
114
.readAttributes()
115
.permissions());
116
} finally {
117
Files.delete(file);
118
}
119
}
120
121
/**
122
* Test the setPermissions/permissions methods.
123
*/
124
static void permissionTests(Path dir)
125
throws IOException
126
{
127
System.out.println("-- Permission Tests --");
128
129
// create file and test updating and reading its permissions
130
Path file = dir.resolve("foo");
131
System.out.format("create %s\n", file);
132
Files.createFile(file);
133
try {
134
// get initial permissions so that we can restore them later
135
PosixFileAttributeView view =
136
Files.getFileAttributeView(file, PosixFileAttributeView.class);
137
Set<PosixFilePermission> save = view.readAttributes()
138
.permissions();
139
140
// test various modes
141
try {
142
testPermissions(file, "---------");
143
testPermissions(file, "r--------");
144
testPermissions(file, "-w-------");
145
testPermissions(file, "--x------");
146
testPermissions(file, "rwx------");
147
testPermissions(file, "---r-----");
148
testPermissions(file, "----w----");
149
testPermissions(file, "-----x---");
150
testPermissions(file, "---rwx---");
151
testPermissions(file, "------r--");
152
testPermissions(file, "-------w-");
153
testPermissions(file, "--------x");
154
testPermissions(file, "------rwx");
155
testPermissions(file, "r--r-----");
156
testPermissions(file, "r--r--r--");
157
testPermissions(file, "rw-rw----");
158
testPermissions(file, "rwxrwx---");
159
testPermissions(file, "rw-rw-r--");
160
testPermissions(file, "r-xr-x---");
161
testPermissions(file, "r-xr-xr-x");
162
testPermissions(file, "rwxrwxrwx");
163
} finally {
164
view.setPermissions(save);
165
}
166
} finally {
167
Files.delete(file);
168
}
169
170
// create link (to file that doesn't exist) and test reading of
171
// permissions
172
if (TestUtil.supportsLinks(dir)) {
173
Path link = dir.resolve("link");
174
System.out.format("create link %s\n", link);
175
Files.createSymbolicLink(link, file);
176
try {
177
PosixFileAttributes attrs =
178
Files.getFileAttributeView(link,
179
PosixFileAttributeView.class,
180
NOFOLLOW_LINKS)
181
.readAttributes();
182
if (!attrs.isSymbolicLink()) {
183
throw new RuntimeException("not a link");
184
}
185
} finally {
186
Files.delete(link);
187
}
188
}
189
190
System.out.println("OKAY");
191
}
192
193
/**
194
* Test creating a file and directory with initial permissios
195
*/
196
static void createTests(Path dir)
197
throws IOException
198
{
199
System.out.println("-- Create Tests --");
200
201
Path file = dir.resolve("foo");
202
203
createWithPermissions(file, "---------");
204
createWithPermissions(file, "r--------");
205
createWithPermissions(file, "-w-------");
206
createWithPermissions(file, "--x------");
207
createWithPermissions(file, "rwx------");
208
createWithPermissions(file, "---r-----");
209
createWithPermissions(file, "----w----");
210
createWithPermissions(file, "-----x---");
211
createWithPermissions(file, "---rwx---");
212
createWithPermissions(file, "------r--");
213
createWithPermissions(file, "-------w-");
214
createWithPermissions(file, "--------x");
215
createWithPermissions(file, "------rwx");
216
createWithPermissions(file, "r--r-----");
217
createWithPermissions(file, "r--r--r--");
218
createWithPermissions(file, "rw-rw----");
219
createWithPermissions(file, "rwxrwx---");
220
createWithPermissions(file, "rw-rw-r--");
221
createWithPermissions(file, "r-xr-x---");
222
createWithPermissions(file, "r-xr-xr-x");
223
createWithPermissions(file, "rwxrwxrwx");
224
225
System.out.println("OKAY");
226
}
227
228
/**
229
* Test setOwner/setGroup methods - this test simply exercises the
230
* methods to avoid configuration.
231
*/
232
static void ownerTests(Path dir)
233
throws IOException
234
{
235
System.out.println("-- Owner Tests --");
236
237
Path file = dir.resolve("gus");
238
System.out.format("create %s\n", file);
239
240
Files.createFile(file);
241
try {
242
243
// read attributes of directory to get owner/group
244
PosixFileAttributeView view =
245
Files.getFileAttributeView(file, PosixFileAttributeView.class);
246
PosixFileAttributes attrs = view.readAttributes();
247
248
// set to existing owner/group
249
view.setOwner(attrs.owner());
250
view.setGroup(attrs.group());
251
252
// repeat test using set/getAttribute
253
UserPrincipal owner = (UserPrincipal)Files.getAttribute(file, "posix:owner");
254
Files.setAttribute(file, "posix:owner", owner);
255
UserPrincipal group = (UserPrincipal)Files.getAttribute(file, "posix:group");
256
Files.setAttribute(file, "posix:group", group);
257
258
} finally {
259
Files.delete(file);
260
}
261
262
System.out.println("OKAY");
263
}
264
265
/**
266
* Test the lookupPrincipalByName/lookupPrincipalByGroupName methods
267
*/
268
static void lookupPrincipalTests(Path dir)
269
throws IOException
270
{
271
System.out.println("-- Lookup UserPrincipal Tests --");
272
273
UserPrincipalLookupService lookupService = dir.getFileSystem()
274
.getUserPrincipalLookupService();
275
276
// read attributes of directory to get owner/group
277
PosixFileAttributes attrs = Files.readAttributes(dir, PosixFileAttributes.class);
278
279
// lookup owner and check it matches file's owner
280
System.out.format("lookup: %s\n", attrs.owner().getName());
281
try {
282
UserPrincipal owner = lookupService.lookupPrincipalByName(attrs.owner().getName());
283
if (owner instanceof GroupPrincipal)
284
throw new RuntimeException("owner is a group?");
285
if (!owner.equals(attrs.owner()))
286
throw new RuntimeException("owner different from file owner");
287
} catch (UserPrincipalNotFoundException x) {
288
System.out.println("user not found - test skipped");
289
}
290
291
// lookup group and check it matches file's group-owner
292
System.out.format("lookup group: %s\n", attrs.group().getName());
293
try {
294
GroupPrincipal group = lookupService.lookupPrincipalByGroupName(attrs.group().getName());
295
if (!group.equals(attrs.group()))
296
throw new RuntimeException("group different from file group-owner");
297
} catch (UserPrincipalNotFoundException x) {
298
System.out.println("group not found - test skipped");
299
}
300
301
// test that UserPrincipalNotFoundException is thrown
302
String invalidPrincipal = "scumbag99";
303
try {
304
System.out.format("lookup: %s\n", invalidPrincipal);
305
lookupService.lookupPrincipalByName(invalidPrincipal);
306
throw new RuntimeException("'" + invalidPrincipal + "' is a valid user?");
307
} catch (UserPrincipalNotFoundException x) {
308
}
309
try {
310
System.out.format("lookup group: %s\n", invalidPrincipal);
311
lookupService.lookupPrincipalByGroupName("idonotexist");
312
throw new RuntimeException("'" + invalidPrincipal + "' is a valid group?");
313
} catch (UserPrincipalNotFoundException x) {
314
}
315
System.out.println("OKAY");
316
}
317
318
/**
319
* Test various exceptions are thrown as expected
320
*/
321
@SuppressWarnings("unchecked")
322
static void exceptionsTests(Path dir)
323
throws IOException
324
{
325
System.out.println("-- Exceptions --");
326
327
PosixFileAttributeView view =
328
Files.getFileAttributeView(dir,PosixFileAttributeView.class);
329
330
// NullPointerException
331
try {
332
view.setOwner(null);
333
throw new RuntimeException("NullPointerException not thrown");
334
} catch (NullPointerException x) {
335
}
336
try {
337
view.setGroup(null);
338
throw new RuntimeException("NullPointerException not thrown");
339
} catch (NullPointerException x) {
340
}
341
342
UserPrincipalLookupService lookupService = dir.getFileSystem()
343
.getUserPrincipalLookupService();
344
try {
345
lookupService.lookupPrincipalByName(null);
346
throw new RuntimeException("NullPointerException not thrown");
347
} catch (NullPointerException x) {
348
}
349
try {
350
lookupService.lookupPrincipalByGroupName(null);
351
throw new RuntimeException("NullPointerException not thrown");
352
} catch (NullPointerException x) {
353
}
354
try {
355
view.setPermissions(null);
356
throw new RuntimeException("NullPointerException not thrown");
357
} catch (NullPointerException x) {
358
}
359
try {
360
Set<PosixFilePermission> perms = new HashSet<>();
361
perms.add(null);
362
view.setPermissions(perms);
363
throw new RuntimeException("NullPointerException not thrown");
364
} catch (NullPointerException x) {
365
}
366
367
// ClassCastException
368
try {
369
Set perms = new HashSet(); // raw type
370
perms.add(new Object());
371
view.setPermissions(perms);
372
throw new RuntimeException("ClassCastException not thrown");
373
} catch (ClassCastException x) {
374
}
375
376
System.out.println("OKAY");
377
}
378
379
public static void main(String[] args) throws IOException {
380
Path dir = TestUtil.createTemporaryDirectory();
381
try {
382
if (!Files.getFileStore(dir).supportsFileAttributeView("posix")) {
383
System.out.println("PosixFileAttributeView not supported");
384
return;
385
}
386
387
permissionTests(dir);
388
createTests(dir);
389
ownerTests(dir);
390
lookupPrincipalTests(dir);
391
exceptionsTests(dir);
392
393
} finally {
394
TestUtil.removeAll(dir);
395
}
396
}
397
}
398
399