From 222cea0b931a5b66b9f9a0ed1d8d5954d774880b Mon Sep 17 00:00:00 2001 From: TheRealMDoerr Date: Tue, 1 Jul 2025 14:04:07 +0200 Subject: [PATCH 1/2] 8361183: JDK-8360887 needs fixes to avoid cycles and better tests (aix) --- .../sun/nio/fs/AixFileSystemProvider.java | 15 ++++++---- test/jdk/java/nio/file/FileStore/Basic.java | 30 +++++++++---------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java index 9ceb2ac2fbf02..e34c7cb026557 100644 --- a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java +++ b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java @@ -52,9 +52,10 @@ AixFileStore getFileStore(UnixPath path) throws IOException { return new AixFileStore(path); } - static boolean supportsUserDefinedFileAttributeView(Path obj) { + private static boolean supportsUserDefinedFileAttributeView(Path obj) { + if (obj == null || !(obj instanceof UnixPath)) return false; try { - FileStore store = Files.getFileStore(obj); + FileStore store = new AixFileStore((UnixPath) obj); return store.supportsFileAttributeView(UserDefinedFileAttributeView.class); } catch (IOException e) { return false; @@ -68,8 +69,9 @@ public V getFileAttributeView(Path obj, LinkOption... options) { if (type == UserDefinedFileAttributeView.class) { - return !supportsUserDefinedFileAttributeView(obj) ? null : - (V) new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)); + return supportsUserDefinedFileAttributeView(obj) ? + (V) new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)) + : null; } return super.getFileAttributeView(obj, type, options); } @@ -80,8 +82,9 @@ public DynamicFileAttributeView getFileAttributeView(Path obj, LinkOption... options) { if (name.equals("user")) { - return !supportsUserDefinedFileAttributeView(obj) ? null : - new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)); + return supportsUserDefinedFileAttributeView(obj) ? + new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)) + : null; } return super.getFileAttributeView(obj, name, options); } diff --git a/test/jdk/java/nio/file/FileStore/Basic.java b/test/jdk/java/nio/file/FileStore/Basic.java index 1b7793246c90d..0a7b3d5e2f663 100644 --- a/test/jdk/java/nio/file/FileStore/Basic.java +++ b/test/jdk/java/nio/file/FileStore/Basic.java @@ -67,6 +67,16 @@ static void checkWithin1GB(String space, long expected, long actual) { } } + static void testFileAttributes(Path file, + Class viewClass, + String viewName) throws IOException { + FileStore store = Files.getFileStore(file); + boolean supported = store.supportsFileAttributeView(viewClass); + assertTrue(store.supportsFileAttributeView(viewName) == supported); + boolean haveView = Files.getFileAttributeView(file, viewClass) != null; + assertTrue(haveView == supported); + } + static void doTests(Path dir) throws IOException { /** * Test: Directory should be on FileStore that is writable @@ -97,21 +107,11 @@ static void doTests(Path dir) throws IOException { * Test: File and FileStore attributes */ assertTrue(store1.supportsFileAttributeView("basic")); - assertTrue(store1.supportsFileAttributeView(BasicFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("posix") == - store1.supportsFileAttributeView(PosixFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("dos") == - store1.supportsFileAttributeView(DosFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("acl") == - store1.supportsFileAttributeView(AclFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("user") == - store1.supportsFileAttributeView(UserDefinedFileAttributeView.class)); - - // check if getFileAttributeView behaves as specified if the user defined view is unsupported - if (!store1.supportsFileAttributeView(UserDefinedFileAttributeView.class) && - Files.getFileAttributeView(dir, UserDefinedFileAttributeView.class) != null) { - throw new RuntimeException("UserDefinedFileAttributeView not supported, getFileAttributeView should return null"); - } + testFileAttributes(dir, BasicFileAttributeView.class, "basic"); + testFileAttributes(dir, PosixFileAttributeView.class, "posix"); + testFileAttributes(dir, DosFileAttributeView.class, "dos"); + testFileAttributes(dir, AclFileAttributeView.class, "acl"); + testFileAttributes(dir, UserDefinedFileAttributeView.class, "user"); /** * Test: Space atributes From f1659ca3fd731c7a4f50afc10be254f466cf4262 Mon Sep 17 00:00:00 2001 From: TheRealMDoerr Date: Tue, 1 Jul 2025 22:00:59 +0200 Subject: [PATCH 2/2] Use UnixPath.toUnixPath(). --- .../classes/sun/nio/fs/AixFileSystemProvider.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java index e34c7cb026557..fabd2086fa5c0 100644 --- a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java +++ b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java @@ -52,10 +52,9 @@ AixFileStore getFileStore(UnixPath path) throws IOException { return new AixFileStore(path); } - private static boolean supportsUserDefinedFileAttributeView(Path obj) { - if (obj == null || !(obj instanceof UnixPath)) return false; + private static boolean supportsUserDefinedFileAttributeView(UnixPath file) { try { - FileStore store = new AixFileStore((UnixPath) obj); + FileStore store = new AixFileStore(file); return store.supportsFileAttributeView(UserDefinedFileAttributeView.class); } catch (IOException e) { return false; @@ -69,8 +68,9 @@ public V getFileAttributeView(Path obj, LinkOption... options) { if (type == UserDefinedFileAttributeView.class) { - return supportsUserDefinedFileAttributeView(obj) ? - (V) new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)) + UnixPath file = UnixPath.toUnixPath(obj); + return supportsUserDefinedFileAttributeView(file) ? + (V) new AixUserDefinedFileAttributeView(file, Util.followLinks(options)) : null; } return super.getFileAttributeView(obj, type, options); @@ -82,8 +82,9 @@ public DynamicFileAttributeView getFileAttributeView(Path obj, LinkOption... options) { if (name.equals("user")) { - return supportsUserDefinedFileAttributeView(obj) ? - new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)) + UnixPath file = UnixPath.toUnixPath(obj); + return supportsUserDefinedFileAttributeView(file) ? + new AixUserDefinedFileAttributeView(file, Util.followLinks(options)) : null; } return super.getFileAttributeView(obj, name, options);