From bbfda6599a878746cd0bab72952deae95e9f5dea Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Thu, 29 Feb 2024 16:47:14 +0000 Subject: [PATCH] 8326897: (fs) The utility TestUtil.supportsLinks is wrongly used to check for hard link support Reviewed-by: gli, alanb --- .../nio/file/DirectoryStream/SecureDS.java | 24 +++++----- .../java/nio/file/Files/CheckPermissions.java | 8 ++-- test/jdk/java/nio/file/Files/CopyAndMove.java | 44 +++++++++---------- .../java/nio/file/Files/CopyInterference.java | 4 +- .../nio/file/Files/CreateDirectories.java | 4 +- .../java/nio/file/Files/DeleteOnClose.java | 4 +- test/jdk/java/nio/file/Files/Misc.java | 13 +++--- test/jdk/java/nio/file/Files/SBC.java | 12 ++--- .../nio/file/Files/SetLastModifiedTime.java | 4 +- test/jdk/java/nio/file/Files/StreamTest.java | 22 +++++----- test/jdk/java/nio/file/Files/SubstDrive.java | 7 +-- test/jdk/java/nio/file/Files/SymlinkTime.java | 4 +- .../Files/walkFileTree/CreateFileTree.java | 6 +-- test/jdk/java/nio/file/Path/ToRealPath.java | 14 +++--- test/jdk/java/nio/file/TestUtil.java | 21 ++++++++- .../attribute/DosFileAttributeView/Basic.java | 4 +- .../PosixFileAttributeView/Basic.java | 4 +- .../UserDefinedFileAttributeView/Basic.java | 4 +- 18 files changed, 112 insertions(+), 91 deletions(-) diff --git a/test/jdk/java/nio/file/DirectoryStream/SecureDS.java b/test/jdk/java/nio/file/DirectoryStream/SecureDS.java index 250e84763db..d4f197eb09b 100644 --- a/test/jdk/java/nio/file/DirectoryStream/SecureDS.java +++ b/test/jdk/java/nio/file/DirectoryStream/SecureDS.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ import java.io.IOException; import java.util.*; public class SecureDS { - static boolean supportsLinks; + static boolean supportsSymbolicLinks; public static void main(String[] args) throws IOException { Path dir = TestUtil.createTemporaryDirectory(); @@ -52,7 +52,7 @@ public class SecureDS { return; } - supportsLinks = TestUtil.supportsLinks(dir); + supportsSymbolicLinks = TestUtil.supportsSymbolicLinks(dir); // run tests doBasicTests(dir); @@ -76,11 +76,11 @@ public class SecureDS { createDirectory(dir1.resolve(dirEntry)); // myfilelink -> myfile Path link1Entry = Paths.get("myfilelink"); - if (supportsLinks) + if (supportsSymbolicLinks) createSymbolicLink(dir1.resolve(link1Entry), fileEntry); // mydirlink -> mydir Path link2Entry = Paths.get("mydirlink"); - if (supportsLinks) + if (supportsSymbolicLinks) createSymbolicLink(dir1.resolve(link2Entry), dirEntry); // open directory and then move it so that it is no longer accessible @@ -92,7 +92,7 @@ public class SecureDS { // Test: iterate over all entries int count = 0; for (Path entry: stream) { count++; } - assertTrue(count == (supportsLinks ? 4 : 2)); + assertTrue(count == (supportsSymbolicLinks ? 4 : 2)); // Test: getFileAttributeView to access directory's attributes assertTrue(stream @@ -117,7 +117,7 @@ public class SecureDS { .getFileAttributeView(dirEntry, BasicFileAttributeView.class, NOFOLLOW_LINKS) .readAttributes() .isDirectory()); - if (supportsLinks) { + if (supportsSymbolicLinks) { assertTrue(stream .getFileAttributeView(link1Entry, BasicFileAttributeView.class) .readAttributes() @@ -139,7 +139,7 @@ public class SecureDS { // Test: newByteChannel Set opts = Collections.emptySet(); stream.newByteChannel(fileEntry, opts).close(); - if (supportsLinks) { + if (supportsSymbolicLinks) { stream.newByteChannel(link1Entry, opts).close(); try { Set mixed = new HashSet<>(); @@ -153,7 +153,7 @@ public class SecureDS { // Test: newDirectoryStream stream.newDirectoryStream(dirEntry).close(); stream.newDirectoryStream(dirEntry, LinkOption.NOFOLLOW_LINKS).close(); - if (supportsLinks) { + if (supportsSymbolicLinks) { stream.newDirectoryStream(link2Entry).close(); try { stream.newDirectoryStream(link2Entry, LinkOption.NOFOLLOW_LINKS) @@ -163,7 +163,7 @@ public class SecureDS { } // Test: delete - if (supportsLinks) { + if (supportsSymbolicLinks) { stream.deleteFile(link1Entry); stream.deleteFile(link2Entry); } @@ -186,7 +186,7 @@ public class SecureDS { Path dirEntry = Paths.get("mydir"); createDirectory(dir1.resolve(dirEntry)); Path linkEntry = Paths.get("mylink"); - if (supportsLinks) + if (supportsSymbolicLinks) createSymbolicLink(dir1.resolve(linkEntry), Paths.get("missing")); // target name @@ -211,7 +211,7 @@ public class SecureDS { stream2.deleteDirectory(target); // Test: move dir1/mylink -> dir2/newfile - if (supportsLinks) { + if (supportsSymbolicLinks) { stream1.move(linkEntry, stream2, target); assertTrue(isSymbolicLink(dir2.resolve(target))); stream2.deleteFile(target); diff --git a/test/jdk/java/nio/file/Files/CheckPermissions.java b/test/jdk/java/nio/file/Files/CheckPermissions.java index 5a8ff7f8b67..397ace359f7 100644 --- a/test/jdk/java/nio/file/Files/CheckPermissions.java +++ b/test/jdk/java/nio/file/Files/CheckPermissions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -251,7 +251,7 @@ public class CheckPermissions { delete(target); } - if (TestUtil.supportsLinks(testdir)) { + if (TestUtil.supportsSymbolicLinks(testdir)) { Path link = testdir.resolve("link1234"); createSymbolicLink(link, file); try { @@ -297,7 +297,7 @@ public class CheckPermissions { // -- createSymbolicLink -- - if (TestUtil.supportsLinks(testdir)) { + if (TestUtil.supportsSymbolicLinks(testdir)) { prepare(); Path link = testdir.resolve("link1234"); createSymbolicLink(link, file); @@ -311,7 +311,7 @@ public class CheckPermissions { // -- createLink -- - if (TestUtil.supportsLinks(testdir)) { + if (TestUtil.supportsHardLinks(testdir)) { prepare(); Path link = testdir.resolve("entry234"); createLink(link, file); diff --git a/test/jdk/java/nio/file/Files/CopyAndMove.java b/test/jdk/java/nio/file/Files/CopyAndMove.java index 4f1acf4dcc3..f8bc9f997b7 100644 --- a/test/jdk/java/nio/file/Files/CopyAndMove.java +++ b/test/jdk/java/nio/file/Files/CopyAndMove.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -70,8 +70,8 @@ public class CopyAndMove { FileStore fileStore1 = getFileStore(dir1); printDirInfo("dir1", dir1, fileStore1); testPosixAttributes = fileStore1.supportsFileAttributeView("posix"); - testCopyFileToFile(dir1, dir1, TestUtil.supportsLinks(dir1)); - testMove(dir1, dir1, TestUtil.supportsLinks(dir1)); + testCopyFileToFile(dir1, dir1, TestUtil.supportsSymbolicLinks(dir1)); + testMove(dir1, dir1, TestUtil.supportsSymbolicLinks(dir1)); // Use test.dir to define second directory if possible as it might // be a different volume/file system and so improve test coverage. @@ -87,8 +87,8 @@ public class CopyAndMove { try { testPosixAttributes = fileStore2.supportsFileAttributeView("posix"); - testCopyFileToFile(dir2, dir2, TestUtil.supportsLinks(dir2)); - testMove(dir2, dir2, TestUtil.supportsLinks(dir2)); + testCopyFileToFile(dir2, dir2, TestUtil.supportsSymbolicLinks(dir2)); + testMove(dir2, dir2, TestUtil.supportsSymbolicLinks(dir2)); } finally { TestUtil.removeAll(dir2); } @@ -101,7 +101,7 @@ public class CopyAndMove { dir2 = TestUtil.createTemporaryDirectory(testDir); } boolean testSymbolicLinks = - TestUtil.supportsLinks(dir1) && TestUtil.supportsLinks(dir2); + TestUtil.supportsSymbolicLinks(dir1) && TestUtil.supportsSymbolicLinks(dir2); testPosixAttributes = fileStore1.supportsFileAttributeView("posix") && fileStore2.supportsFileAttributeView("posix"); testCopyFileToFile(dir1, dir2, testSymbolicLinks); @@ -309,7 +309,7 @@ public class CopyAndMove { /** * Tests all possible ways to invoke move */ - static void testMove(Path dir1, Path dir2, boolean supportsLinks) + static void testMove(Path dir1, Path dir2, boolean supportsSymbolicLinks) throws IOException { Path source, target, entry; @@ -531,7 +531,7 @@ public class CopyAndMove { /** * Test: Move symbolic link to file, target does not exist */ - if (supportsLinks) { + if (supportsSymbolicLinks) { Path tmp = createSourceFile(dir1); source = dir1.resolve("link"); createSymbolicLink(source, tmp); @@ -544,7 +544,7 @@ public class CopyAndMove { /** * Test: Move symbolic link to directory, target does not exist */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("link"); createSymbolicLink(source, dir2); target = getTargetFile(dir2); @@ -555,7 +555,7 @@ public class CopyAndMove { /** * Test: Move broken symbolic link, target does not exists */ - if (supportsLinks) { + if (supportsSymbolicLinks) { Path tmp = Paths.get("doesnotexist"); source = dir1.resolve("link"); createSymbolicLink(source, tmp); @@ -567,7 +567,7 @@ public class CopyAndMove { /** * Test: Move symbolic link, target exists */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("link"); createSymbolicLink(source, dir2); target = getTargetFile(dir2); @@ -584,7 +584,7 @@ public class CopyAndMove { /** * Test: Move regular file, target exists */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("link"); createSymbolicLink(source, dir2); target = getTargetFile(dir2); @@ -596,7 +596,7 @@ public class CopyAndMove { /** * Test: move symbolic link, target exists and is empty directory */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("link"); createSymbolicLink(source, dir2); target = getTargetFile(dir2); @@ -608,7 +608,7 @@ public class CopyAndMove { /** * Test: symbolic link, target exists and is non-empty directory */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("link"); createSymbolicLink(source, dir2); target = getTargetFile(dir2); @@ -628,7 +628,7 @@ public class CopyAndMove { /** * Test atomic move of symbolic link (same file store) */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("link"); createSymbolicLink(source, dir1); target = getTargetFile(dir2); @@ -743,7 +743,7 @@ public class CopyAndMove { /** * Tests all possible ways to invoke copy to copy a file to a file */ - static void testCopyFileToFile(Path dir1, Path dir2, boolean supportsLinks) + static void testCopyFileToFile(Path dir1, Path dir2, boolean supportsSymbolicLinks) throws IOException { Path source, target, link, entry; @@ -947,7 +947,7 @@ public class CopyAndMove { /** * Test: Follow link */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = createSourceFile(dir1); link = dir1.resolve("link"); createSymbolicLink(link, source.getFileName()); @@ -960,7 +960,7 @@ public class CopyAndMove { /** * Test: Copy link (to file) */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = createSourceFile(dir1); link = dir1.resolve("link"); createSymbolicLink(link, source); @@ -973,7 +973,7 @@ public class CopyAndMove { /** * Test: Copy link (to directory) */ - if (supportsLinks) { + if (supportsSymbolicLinks) { source = dir1.resolve("mydir"); createDirectory(source); link = dir1.resolve("link"); @@ -987,7 +987,7 @@ public class CopyAndMove { /** * Test: Copy broken link */ - if (supportsLinks) { + if (supportsSymbolicLinks) { assertTrue(notExists(source)); link = dir1.resolve("link"); createSymbolicLink(link, source); @@ -999,7 +999,7 @@ public class CopyAndMove { /** * Test: Copy link to UNC (Windows only) */ - if (supportsLinks && Platform.isWindows()) { + if (supportsSymbolicLinks && Platform.isWindows()) { Path unc = Paths.get("\\\\rialto\\share\\file"); link = dir1.resolve("link"); createSymbolicLink(link, unc); @@ -1066,7 +1066,7 @@ public class CopyAndMove { } Path tmpdir = createTempDirectory("blah"); try { - if (TestUtil.supportsLinks(tmpdir)) { + if (TestUtil.supportsSymbolicLinks(tmpdir)) { Path link = createSymbolicLink(tmpdir.resolve("link"), tmpdir.resolve("target")); try { diff --git a/test/jdk/java/nio/file/Files/CopyInterference.java b/test/jdk/java/nio/file/Files/CopyInterference.java index 310d3e382ca..e3b62398bac 100644 --- a/test/jdk/java/nio/file/Files/CopyInterference.java +++ b/test/jdk/java/nio/file/Files/CopyInterference.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -114,7 +114,7 @@ public class CopyInterference { new CopyOption[] {REPLACE_EXISTING}); list.add(args); - if (TestUtil.supportsLinks(dir)) { + if (TestUtil.supportsSymbolicLinks(dir)) { // symbolic link, followed Path link = dir.resolve("link"); Files.createSymbolicLink(link, sourceFile); diff --git a/test/jdk/java/nio/file/Files/CreateDirectories.java b/test/jdk/java/nio/file/Files/CreateDirectories.java index e3204192cdc..fc5a5025955 100644 --- a/test/jdk/java/nio/file/Files/CreateDirectories.java +++ b/test/jdk/java/nio/file/Files/CreateDirectories.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,7 @@ public class CreateDirectories { public void testSymlinkDir() throws Exception { // create a temp dir as the "root" in which we will run our tests. final Path top = TestUtil.createTemporaryDirectory(); - if (!TestUtil.supportsLinks(top)) { + if (!TestUtil.supportsSymbolicLinks(top)) { System.out.println("Skipping tests since symbolic links isn't " + "supported under directory "+ top); throw new SkipException("Symbolic links not supported"); diff --git a/test/jdk/java/nio/file/Files/DeleteOnClose.java b/test/jdk/java/nio/file/Files/DeleteOnClose.java index f5fab1c5be2..238bb1f87a6 100644 --- a/test/jdk/java/nio/file/Files/DeleteOnClose.java +++ b/test/jdk/java/nio/file/Files/DeleteOnClose.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,7 +82,7 @@ public class DeleteOnClose { Path dir = Files.createTempDirectory("blah"); try { // check that DELETE_ON_CLOSE fails when file is a sym link - if (TestUtil.supportsLinks(dir)) { + if (TestUtil.supportsSymbolicLinks(dir)) { file = dir.resolve("foo"); Files.createFile(file); Path link = dir.resolve("link"); diff --git a/test/jdk/java/nio/file/Files/Misc.java b/test/jdk/java/nio/file/Files/Misc.java index 1d3df155675..024b518141b 100644 --- a/test/jdk/java/nio/file/Files/Misc.java +++ b/test/jdk/java/nio/file/Files/Misc.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,7 +156,7 @@ public class Misc { /** * Test: Symbolic links */ - if (TestUtil.supportsLinks(tmpdir)) { + if (TestUtil.supportsSymbolicLinks(tmpdir)) { createSymbolicLink(thatFile, thisFile); try { assertTrue(isSameFile(thisFile, thatFile)); @@ -198,7 +198,7 @@ public class Misc { assertTrue(!isDirectory(file, NOFOLLOW_LINKS)); assertTrue(!isSymbolicLink(file)); - if (TestUtil.supportsLinks(tmpdir)) { + if (TestUtil.supportsSymbolicLinks(tmpdir)) { Path link = tmpdir.resolve("link"); createSymbolicLink(link, tmpdir); @@ -222,6 +222,10 @@ public class Misc { } finally { delete(link); } + } + + if (TestUtil.supportsHardLinks(tmpdir)) { + Path link = tmpdir.resolve("hardlink"); createLink(link, file); try { @@ -234,7 +238,6 @@ public class Misc { delete(link); } } - } finally { delete(file); } @@ -273,7 +276,7 @@ public class Misc { } // sym link exists - if (TestUtil.supportsLinks(tmpdir)) { + if (TestUtil.supportsSymbolicLinks(tmpdir)) { Path link = tmpdir.resolve("link"); createSymbolicLink(link, file); diff --git a/test/jdk/java/nio/file/Files/SBC.java b/test/jdk/java/nio/file/Files/SBC.java index 8f470b8d9ed..7aa04b18462 100644 --- a/test/jdk/java/nio/file/Files/SBC.java +++ b/test/jdk/java/nio/file/Files/SBC.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,12 +39,12 @@ import java.util.*; public class SBC { - static boolean supportsLinks; + static boolean supportsSymbolicLinks; public static void main(String[] args) throws Exception { Path dir = TestUtil.createTemporaryDirectory(); try { - supportsLinks = TestUtil.supportsLinks(dir); + supportsSymbolicLinks = TestUtil.supportsSymbolicLinks(dir); // open options createTests(dir); @@ -84,7 +84,7 @@ public class SBC { Files.newByteChannel(file, CREATE, WRITE).close(); // create file where existing file is a sym link - if (supportsLinks) { + if (supportsSymbolicLinks) { Path link = Files.createSymbolicLink(dir.resolve("link"), file); try { // file already exists @@ -121,7 +121,7 @@ public class SBC { } catch (FileAlreadyExistsException x) { } // create should fail - if (supportsLinks) { + if (supportsSymbolicLinks) { Path link = dir.resolve("link"); Path target = dir.resolve("thisDoesNotExist"); Files.createSymbolicLink(link, target); @@ -224,7 +224,7 @@ public class SBC { // test NOFOLLOW_LINKS option static void noFollowLinksTests(Path dir) throws Exception { - if (!supportsLinks) + if (!supportsSymbolicLinks) return; Path file = Files.createFile(dir.resolve("foo")); try { diff --git a/test/jdk/java/nio/file/Files/SetLastModifiedTime.java b/test/jdk/java/nio/file/Files/SetLastModifiedTime.java index 98f77d4c8d8..d06b78b2922 100644 --- a/test/jdk/java/nio/file/Files/SetLastModifiedTime.java +++ b/test/jdk/java/nio/file/Files/SetLastModifiedTime.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -87,7 +87,7 @@ public class SetLastModifiedTime { @Test public void testSymbolicLink() throws Exception { - if (TestUtil.supportsLinks(testDir)) { + if (TestUtil.supportsSymbolicLinks(testDir)) { Path target = Files.createFile(testDir.resolve("target")); Path link = testDir.resolve("link"); Files.createSymbolicLink(link, target); diff --git a/test/jdk/java/nio/file/Files/StreamTest.java b/test/jdk/java/nio/file/Files/StreamTest.java index c21faf96627..cc4aa1b1e5c 100644 --- a/test/jdk/java/nio/file/Files/StreamTest.java +++ b/test/jdk/java/nio/file/Files/StreamTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,7 +72,7 @@ public class StreamTest { * - linkFile(./file) */ static Path testFolder; - static boolean supportsLinks; + static boolean supportsSymbolicLinks; static Path[] level1; static Path[] all; static Path[] all_folowLinks; @@ -80,7 +80,7 @@ public class StreamTest { @BeforeClass void setupTestFolder() throws IOException { testFolder = TestUtil.createTemporaryDirectory(); - supportsLinks = TestUtil.supportsLinks(testFolder); + supportsSymbolicLinks = TestUtil.supportsSymbolicLinks(testFolder); TreeSet set = new TreeSet<>(); // Level 1 @@ -96,7 +96,7 @@ public class StreamTest { set.add(file); set.add(dir); set.add(dir2); - if (supportsLinks) { + if (supportsSymbolicLinks) { Path tmp = testFolder.resolve("linkDir"); Files.createSymbolicLink(tmp, dir); set.add(tmp); @@ -113,7 +113,7 @@ public class StreamTest { tmp = dir.resolve("f1"); Files.createFile(tmp); set.add(tmp); - if (supportsLinks) { + if (supportsSymbolicLinks) { tmp = dir.resolve("lnDir2"); Files.createSymbolicLink(tmp, dir2); set.add(tmp); @@ -123,7 +123,7 @@ public class StreamTest { all = set.toArray(new Path[0]); // Follow links - if (supportsLinks) { + if (supportsSymbolicLinks) { tmp = testFolder.resolve("linkDir"); set.add(tmp.resolve("d1")); set.add(tmp.resolve("f1")); @@ -212,7 +212,7 @@ public class StreamTest { } public void testWalkFollowLinkLoop() { - if (!supportsLinks) { + if (!supportsSymbolicLinks) { return; } @@ -513,7 +513,7 @@ public class StreamTest { Path triggerLink = null; Path linkTriggerDir = null; Path linkTriggerFile = null; - if (supportsLinks) { + if (supportsSymbolicLinks) { Path dir = testFolder.resolve("dir"); triggerLink = Files.createSymbolicLink(dir.resolve("SecurityException"), empty); linkTriggerDir = Files.createSymbolicLink(dir.resolve("lnDirSE"), triggerDir); @@ -539,7 +539,7 @@ public class StreamTest { assertEqualsNoOrder(result, new String[] { "dir2", "SecurityException", "fileInSE", "file" }); } - if (supportsLinks) { + if (supportsSymbolicLinks) { try (Stream s = Files.list(fakeRoot.resolve("dir"))) { String[] result = s.map(path -> path.getFileName().toString()) .toArray(String[]::new); @@ -562,7 +562,7 @@ public class StreamTest { assertEqualsNoOrder(result, new String[] { "dir2", "file" }); } - if (supportsLinks) { + if (supportsSymbolicLinks) { // not following links try (Stream s = Files.walk(fakeRoot.resolve("dir"))) { String[] result = s.map(path -> path.getFileName().toString()) @@ -639,7 +639,7 @@ public class StreamTest { if (fs != null) { fs.close(); } - if (supportsLinks) { + if (supportsSymbolicLinks) { Files.delete(triggerLink); Files.delete(linkTriggerDir); Files.delete(linkTriggerFile); diff --git a/test/jdk/java/nio/file/Files/SubstDrive.java b/test/jdk/java/nio/file/Files/SubstDrive.java index 88bf1948926..94fdeadcef3 100644 --- a/test/jdk/java/nio/file/Files/SubstDrive.java +++ b/test/jdk/java/nio/file/Files/SubstDrive.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2020 Microsoft Corporation. All rights reserved. + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -276,7 +277,7 @@ public class SubstDrive { */ @Test public void testGetResolvedSymlinkAttribute() throws IOException { - if (!TestUtil.supportsLinks(TEST_TEMP_DIRECTORY)) { + if (!TestUtil.supportsSymbolicLinks(TEST_TEMP_DIRECTORY)) { return; } @@ -308,7 +309,7 @@ public class SubstDrive { */ @Test public void testSubstWithSymlinkedDirectory() throws IOException { - if (!TestUtil.supportsLinks(TEST_TEMP_DIRECTORY)) { + if (!TestUtil.supportsSymbolicLinks(TEST_TEMP_DIRECTORY)) { return; } @@ -350,7 +351,7 @@ public class SubstDrive { */ @Test public void testMoveAndCopyFilesToSymlinkedDrive() throws IOException { - if (!TestUtil.supportsLinks(TEST_TEMP_DIRECTORY)) { + if (!TestUtil.supportsSymbolicLinks(TEST_TEMP_DIRECTORY)) { return; } diff --git a/test/jdk/java/nio/file/Files/SymlinkTime.java b/test/jdk/java/nio/file/Files/SymlinkTime.java index 89590cfdb3c..5d654b0fad4 100644 --- a/test/jdk/java/nio/file/Files/SymlinkTime.java +++ b/test/jdk/java/nio/file/Files/SymlinkTime.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ import java.nio.file.attribute.FileTime; public class SymlinkTime { public static void main(String[] args) throws IOException { Path dir = TestUtil.createTemporaryDirectory(); - if (!TestUtil.supportsLinks(dir)) { + if (!TestUtil.supportsSymbolicLinks(dir)) { System.out.println("Links not supported: skipping test"); return; } diff --git a/test/jdk/java/nio/file/Files/walkFileTree/CreateFileTree.java b/test/jdk/java/nio/file/Files/walkFileTree/CreateFileTree.java index 98bc2866e7a..9f9be7ad1e0 100644 --- a/test/jdk/java/nio/file/Files/walkFileTree/CreateFileTree.java +++ b/test/jdk/java/nio/file/Files/walkFileTree/CreateFileTree.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ public class CreateFileTree { private static final Random rand = new Random(); - private static boolean supportsLinks(Path dir) { + private static boolean supportsSymbolicLinks(Path dir) { Path link = dir.resolve("testlink"); Path target = dir.resolve("testtarget"); try { @@ -77,7 +77,7 @@ public class CreateFileTree { } // create a few sym links in the file tree so as to create cycles - if (supportsLinks(top)) { + if (supportsSymbolicLinks(top)) { int links = 1 + rand.nextInt(5); for (int i=0; i doesNotExist.toRealPath(NOFOLLOW_LINKS)); } - @EnabledIf("supportsLinks") + @EnabledIf("supportsSymbolicLinks") @Test public void shouldResolveLinks() throws IOException { Path resolvedFile = FILE; @@ -110,7 +110,7 @@ public class ToRealPath { } @Test - @EnabledIf("supportsLinks") + @EnabledIf("supportsSymbolicLinks") public void shouldNotResolveLinks() throws IOException { Files.createSymbolicLink(LINK, FILE.toAbsolutePath()); assertEquals(LINK.toRealPath(NOFOLLOW_LINKS).getFileName(), @@ -143,7 +143,7 @@ public class ToRealPath { } @Test - @EnabledIf("supportsLinks") + @EnabledIf("supportsSymbolicLinks") public void noCollapseDots1() throws IOException { Path subPath = DIR.resolve(Path.of("dir", "subdir")); Path sub = Files.createDirectories(subPath); @@ -163,7 +163,7 @@ public class ToRealPath { } @Test - @EnabledIf("supportsLinks") + @EnabledIf("supportsSymbolicLinks") public void noCollapseDots2() throws IOException { Path subPath = DIR.resolve(Path.of("dir", "subdir")); Path sub = Files.createDirectories(subPath); diff --git a/test/jdk/java/nio/file/TestUtil.java b/test/jdk/java/nio/file/TestUtil.java index 66cf21bfb35..26c06f1dae3 100644 --- a/test/jdk/java/nio/file/TestUtil.java +++ b/test/jdk/java/nio/file/TestUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -102,7 +102,7 @@ public class TestUtil { /** * Returns true if symbolic links are supported */ - static boolean supportsLinks(Path dir) { + static boolean supportsSymbolicLinks(Path dir) { Path link = dir.resolve("testlink"); Path target = dir.resolve("testtarget"); try { @@ -115,4 +115,21 @@ public class TestUtil { return false; } } + + /** + * Returns true if hard links are supported + */ + static boolean supportsHardLinks(Path dir) { + Path link = dir.resolve("testlink"); + Path target = dir.resolve("testtarget"); + try { + Files.createLink(link, target); + Files.delete(link); + return true; + } catch (UnsupportedOperationException x) { + return false; + } catch (IOException x) { + return false; + } + } } diff --git a/test/jdk/java/nio/file/attribute/DosFileAttributeView/Basic.java b/test/jdk/java/nio/file/attribute/DosFileAttributeView/Basic.java index b00ceb56d25..0412401dc58 100644 --- a/test/jdk/java/nio/file/attribute/DosFileAttributeView/Basic.java +++ b/test/jdk/java/nio/file/attribute/DosFileAttributeView/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,7 +79,7 @@ public class Basic { testAttributes(Files.getFileAttributeView(file, DosFileAttributeView.class)); // Following tests use a symbolic link so skip if not supported - if (!TestUtil.supportsLinks(dir)) + if (!TestUtil.supportsSymbolicLinks(dir)) return; Path link = dir.resolve("link"); diff --git a/test/jdk/java/nio/file/attribute/PosixFileAttributeView/Basic.java b/test/jdk/java/nio/file/attribute/PosixFileAttributeView/Basic.java index 6626a289dce..765af125595 100644 --- a/test/jdk/java/nio/file/attribute/PosixFileAttributeView/Basic.java +++ b/test/jdk/java/nio/file/attribute/PosixFileAttributeView/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -167,7 +167,7 @@ public class Basic { Files.delete(file); } - if (TestUtil.supportsLinks(dir)) { + if (TestUtil.supportsSymbolicLinks(dir)) { // create link (to file that doesn't exist) and test reading of // permissions Path link = dir.resolve("link"); diff --git a/test/jdk/java/nio/file/attribute/UserDefinedFileAttributeView/Basic.java b/test/jdk/java/nio/file/attribute/UserDefinedFileAttributeView/Basic.java index 00ab4670ba6..da46e401365 100644 --- a/test/jdk/java/nio/file/attribute/UserDefinedFileAttributeView/Basic.java +++ b/test/jdk/java/nio/file/attribute/UserDefinedFileAttributeView/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -299,7 +299,7 @@ public class Basic { } // test access to user defined attributes of sym link - if (TestUtil.supportsLinks(dir)) { + if (TestUtil.supportsSymbolicLinks(dir)) { Path target = dir.resolve("doesnotexist"); Path link = dir.resolve("link"); Files.createSymbolicLink(link, target);