8025440: [TEST_BUG] com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java failed since jdk8b108
authorpchelko
Thu, 14 Nov 2013 11:42:46 +0400
changeset 21599 c54c2d299b42
parent 21598 b0de5e2762ed
child 21600 48d56047f54d
child 21783 a3863a1446bf
8025440: [TEST_BUG] com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java failed since jdk8b108 Reviewed-by: anthony
jdk/test/com/sun/awt/SecurityWarning/CustomSecurityManager.java
jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java
jdk/test/java/awt/regtesthelpers/CopyClassFile.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/awt/SecurityWarning/CustomSecurityManager.java	Thu Nov 14 11:42:46 2013 +0400
@@ -0,0 +1,11 @@
+import sun.security.util.SecurityConstants;
+import java.security.Permission;
+
+public class CustomSecurityManager extends SecurityManager {
+    @Override
+    public void checkPermission(Permission perm) {
+        if (perm.implies(SecurityConstants.AWT.TOPLEVEL_WINDOW_PERMISSION)) {
+            throw new SecurityException();
+        }
+    }
+}
--- a/jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java	Thu Nov 14 10:52:19 2013 +0400
+++ b/jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java	Thu Nov 14 11:42:46 2013 +0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2013, 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
@@ -27,8 +27,9 @@
   @summary The size returned by SecurityWarning.getSize() should not be zero
   @author anthony.petrov@sun.com: area=awt.toplevel
   @library ../../../../java/awt/regtesthelpers
-  @build Util
-  @run main GetSizeShouldNotReturnZero
+  @build Util CustomSecurityManager CopyClassFile
+  @run main CopyClassFile CustomSecurityManager bootcp/
+  @run main/othervm/secure=CustomSecurityManager -Xbootclasspath/a:bootcp GetSizeShouldNotReturnZero
 */
 
 /**
@@ -37,11 +38,10 @@
  * summary: The size returned by SecurityWarning.getSize() should not be zero
  */
 
+import com.sun.awt.SecurityWarning;
+import test.java.awt.regtesthelpers.Util;
+
 import java.awt.*;
-import java.awt.event.*;
-import java.security.Permission;
-import test.java.awt.regtesthelpers.Util;
-import com.sun.awt.SecurityWarning;
 
 public class GetSizeShouldNotReturnZero
 {
@@ -56,21 +56,6 @@
         Sysout.createDialog( );
         Sysout.printInstructions( instructions );
 
-
-        // Install the security manager so that all subsequently created
-        // windows display the security warning.
-        System.setSecurityManager(new SecurityManager() {
-
-            @Override
-            public void checkPermission(Permission perm) {
-            }
-
-            @Override
-            public boolean checkTopLevelWindow(Object window) {
-                return false;
-            }
-        });
-
         Frame f = new Frame();
         f.setSize(100, 100);
         f.setVisible(true);
@@ -87,7 +72,6 @@
     }//End  init()
 
 
-
     /*****************************************************
      * Standard Test Machinery Section
      * DO NOT modify anything in this section -- it's a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/regtesthelpers/CopyClassFile.java	Thu Nov 14 11:42:46 2013 +0400
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2013, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.Arrays;
+
+/**
+ * A utility to copy the class and all it's inner classes to the specified directory.
+ * <p>
+ * Usage in jtreg:
+ *
+ * @build CopyClassFile
+ * @run main CopyClassFile package.class dest_directory
+ */
+public class CopyClassFile {
+
+    private static final ClassLoader cl = CopyClassFile.class.getClassLoader();
+
+    private static String destinationDir;
+    private static String className;
+    private static String classFile;
+
+    public static void main(String[] args) throws Exception {
+        if (args.length != 2) {
+            throw new IllegalArgumentException("Illegal usage: class name and destination directory should be specified");
+        }
+
+        destinationDir = args[1];
+        className = args[0];
+        classFile = className.replaceAll("\\.", File.separator) + ".class";
+
+        URL url = cl.getResource(classFile);
+        if (url == null) {
+            throw new RuntimeException("Could not find a class: " + classFile);
+        }
+
+        File[] files = new File(url.toURI())
+                .getParentFile()
+                .listFiles((dir, name) -> name.startsWith(cutPackageName(className)) && name.endsWith(".class"));
+
+        Arrays.stream(files).forEach(CopyClassFile::copyFile);
+    }
+
+    private static String cutPackageName(String className) {
+        int dotIndex = className.lastIndexOf(".") + 1;
+        if (dotIndex <= 0) {
+            return className;
+        } else {
+            return className.substring(dotIndex);
+        }
+    }
+
+    private static void copyFile(File f) {
+        try {
+            Path classFilePath = Paths.get(classFile);
+            String packagePath = classFilePath.getParent() == null ? "" : classFilePath.getParent().toString();
+            Path p = Paths.get(destinationDir + packagePath + File.separator + f.getName());
+            Files.createDirectories(p.getParent());
+            try (InputStream is = new FileInputStream(f)) {
+                Files.copy(is, p, StandardCopyOption.REPLACE_EXISTING);
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException("Could not copy file " + f, ex);
+        }
+    }
+}