< prev index next >

test/jdk/internal/jimage/ExecutableTest.java

Print this page
rev 12468 : 8132704: [TESTBUG] jdk/internal/jimage/ExecutableTest.java incorrectly asserts all files to be executable

@@ -28,36 +28,51 @@
 import java.nio.file.attribute.PosixFilePermission;
 import static java.nio.file.attribute.PosixFilePermission.*;
 import java.util.EnumSet;
 import java.util.Set;
 
+import jdk.testlibrary.Platform;
+
 /*
  * @test
  * @bug 8132475
  * @summary Check that the executables in the current JDK image
  *          are executable by all users.
+ * @library /lib/testlibrary
  * @run main ExecutableTest
  * @author Volker Simonis
  */
 
 public class ExecutableTest {
 
+    // We use a fixed list of binaries because not all the files in the
+    // bin/ directory are necessarily exectuables (see 8132704)
+    private static final String[] executables = {
+         "appletviewer", "idlj", "jar", "jarsigner", "java", "java-rmi.cgi", "javac",
+         "javadoc", "javah", "javap", "jcmd", "jconsole", "jdb", "jdeps", "jimage",
+         "jinfo", "jjs", "jmap", "jps", "jrunscript", "jsadebugd", "jstack", "jstat",
+         "jstatd", "keytool", "orbd", "pack200", "policytool", "rmic", "rmid",
+         "rmiregistry", "schemagen", "serialver", "servertool", "tnameserv",
+         "unpack200", "wsgen", "wsimport", "xjc" };
+
     public static void main(String args[]) throws Throwable {
         String JAVA_HOME = System.getProperty("java.home");
-        Path binPath = Paths.get(JAVA_HOME, "bin");
-        DirectoryStream<Path> stream = Files.newDirectoryStream(binPath);
+        String exeSuffix = Platform.isWindows() ? ".exe" : "";
+
         EnumSet<PosixFilePermission> execPerms =
             EnumSet.of(GROUP_EXECUTE, OTHERS_EXECUTE, OWNER_EXECUTE);
-        for (Path entry : stream) {
-            if (Files.isRegularFile(entry)) {
-                if (!Files.isExecutable(entry)) {
-                    throw new Error(entry + " is not executable!");
+
+        for (String exe : executables) {
+            Path path = Paths.get(JAVA_HOME, "bin", exe + exeSuffix);
+            if (Files.isRegularFile(path)) {
+                if (!Files.isExecutable(path)) {
+                    throw new Error(path + " is not executable!");
                 }
                 try {
-                    Set<PosixFilePermission> perm = Files.getPosixFilePermissions(entry);
+                    Set<PosixFilePermission> perm = Files.getPosixFilePermissions(path);
                     if (!perm.containsAll(execPerms)) {
-                        throw new Error(entry + " has not all executable permissions!\n" +
+                        throw new Error(path + " has not all executable permissions!\n" +
                                         "Should have: " + execPerms + "\nbut has: " + perm);
                     }
                 } catch (UnsupportedOperationException e) {}
             }
         }
< prev index next >