< prev index next >

test/jdk/java/lang/invoke/lambda/LambdaAccessControlDoPrivilegedTest.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2012, 2016, 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.
--- 1,7 ---
  /*
!  * Copyright (c) 2012, 2023, 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.

*** 22,67 ***
   */
  
  /*
   * @test
   * @bug 8003881
!  * @summary tests DoPrivileged action (implemented as lambda expressions) by
-  * inserting them into the BootClassPath.
   * @modules jdk.compiler
   *          jdk.zipfs
!  * @compile -XDignore.symbol.file LambdaAccessControlDoPrivilegedTest.java LUtils.java
   * @run main/othervm -Djava.security.manager=allow LambdaAccessControlDoPrivilegedTest
   */
! import java.io.File;
  import java.util.ArrayList;
  import java.util.List;
  
! public class LambdaAccessControlDoPrivilegedTest extends LUtils {
!     public static void main(String... args) {
          final List<String> scratch = new ArrayList();
          scratch.clear();
          scratch.add("import java.security.*;");
          scratch.add("public class DoPriv {");
          scratch.add("public static void main(String... args) {");
          scratch.add("String prop = AccessController.doPrivileged((PrivilegedAction<String>) () -> {");
          scratch.add("return System.getProperty(\"user.home\");");
          scratch.add("});");
          scratch.add("}");
          scratch.add("}");
!         File doprivJava = new File("DoPriv.java");
!         File doprivClass = getClassFile(doprivJava);
!         createFile(doprivJava, scratch);
  
          scratch.clear();
          scratch.add("public class Bar {");
          scratch.add("public static void main(String... args) {");
          scratch.add("System.setSecurityManager(new SecurityManager());");
          scratch.add("DoPriv.main();");
          scratch.add("}");
          scratch.add("}");
  
!         File barJava = new File("Bar.java");
!         File barClass = getClassFile(barJava);
!         createFile(barJava, scratch);
  
!         String[] javacArgs = {barJava.getName(), doprivJava.getName()};
!         compile(javacArgs);
!         File jarFile = new File("foo.jar");
!         String[] jargs = {"cvf", jarFile.getName(), doprivClass.getName()};
-         TestResult tr = doExec(JAR_CMD.getAbsolutePath(),
-                                 "cvf", jarFile.getName(),
-                                 doprivClass.getName());
-         if (tr.exitValue != 0){
-             throw new RuntimeException(tr.toString());
          }
-         doprivJava.delete();
-         doprivClass.delete();
-         tr = doExec(JAVA_CMD.getAbsolutePath(),
-                     "-Xbootclasspath/a:foo.jar",
-                     "-cp", ".",
-                     "-Djava.security.manager=allow",
-                     "Bar");
-         tr.assertZero("testDoPrivileged fails");
-         barJava.delete();
-         barClass.delete();
-         jarFile.delete();
      }
  }
--- 22,86 ---
   */
  
  /*
   * @test
   * @bug 8003881
!  * @library /test/lib/
   * @modules jdk.compiler
   *          jdk.zipfs
!  * @compile LambdaAccessControlDoPrivilegedTest.java
   * @run main/othervm -Djava.security.manager=allow LambdaAccessControlDoPrivilegedTest
+  * @summary tests DoPrivileged action (implemented as lambda expressions) by
+  * inserting them into the BootClassPath.
   */
! import jdk.test.lib.process.OutputAnalyzer;
+ 
+ import java.io.IOException;
+ import java.nio.charset.Charset;
+ import java.nio.file.Files;
+ import java.nio.file.Path;
  import java.util.ArrayList;
  import java.util.List;
+ import java.util.spi.ToolProvider;
+ 
+ import static jdk.test.lib.process.ProcessTools.*;
  
! public class LambdaAccessControlDoPrivilegedTest {
!     public static void main(String... args) throws Exception {
          final List<String> scratch = new ArrayList();
          scratch.clear();
          scratch.add("import java.security.*;");
          scratch.add("public class DoPriv {");
          scratch.add("public static void main(String... args) {");
          scratch.add("String prop = AccessController.doPrivileged((PrivilegedAction<String>) () -> {");
          scratch.add("return System.getProperty(\"user.home\");");
          scratch.add("});");
          scratch.add("}");
          scratch.add("}");
!         Path doprivJava = Path.of("DoPriv.java");
!         Path doprivClass = Path.of("DoPriv.class");
!         Files.write(doprivJava, scratch, Charset.defaultCharset());
  
          scratch.clear();
          scratch.add("public class Bar {");
          scratch.add("public static void main(String... args) {");
          scratch.add("System.setSecurityManager(new SecurityManager());");
          scratch.add("DoPriv.main();");
          scratch.add("}");
          scratch.add("}");
  
!         Path barJava = Path.of("Bar.java");
!         Path barClass = Path.of("Bar.class");
!         Files.write(barJava, scratch, Charset.defaultCharset());
+ 
+         compile(barJava.toString(), doprivJava.toString());
+ 
+         jar("cvf", "foo.jar", doprivClass.toString());
+         Files.delete(doprivJava);
+         Files.delete(doprivClass);
+ 
+         ProcessBuilder pb = createTestJavaProcessBuilder(
+                                 "-Xbootclasspath/a:foo.jar",
+                                 "-cp", ".",
+                                 "-Djava.security.manager=allow",
+                                 "Bar");
+         executeProcess(pb).shouldHaveExitValue(0);
+ 
+         Files.delete(barJava);
+         Files.delete(barClass);
+         Files.delete(Path.of("foo.jar"));
+     }
+ 
+     static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar").orElseThrow();
+     static final ToolProvider JAVAC = ToolProvider.findFirst("javac").orElseThrow();
+     static void compile(String... args) throws IOException {
+         if (JAVAC.run(System.out, System.err, args) != 0) {
+             throw new RuntimeException("compilation fails");
+         }
+     }
  
!     static void jar(String... args) {
!         int rc = JAR_TOOL.run(System.out, System.err, args);
!         if (rc != 0){
!             throw new RuntimeException("fail to create JAR file");
          }
      }
  }
< prev index next >