< prev index next >

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/HelloDynamic.java

Print this page




  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 /*
  26  * @test
  27  * @summary Hello World test for dynamic archive
  28  * @requires vm.cds
  29  * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds /test/hotspot/jtreg/runtime/cds/appcds/test-classes
  30  * @build Hello
  31  * @run driver ClassFileInstaller -jar hello.jar Hello
  32  * @run driver HelloDynamic
  33  */
  34 




  35 public class HelloDynamic extends DynamicArchiveTestBase {
  36     public static void main(String[] args) throws Exception {
  37         runTest(HelloDynamic::testDefaultBase);
  38         runTest(HelloDynamic::testCustomBase);
  39     }
  40 
  41     // (1) Test with default base archive + top archive
  42     static void testDefaultBase() throws Exception {
  43         String topArchiveName = getNewArchiveName("top");
  44         doTest(null, topArchiveName);
  45     }
  46 
  47     // (2) Test with custom base archive + top archive
  48     static void testCustomBase() throws Exception {
  49         String topArchiveName = getNewArchiveName("top2");
  50         String baseArchiveName = getNewArchiveName("base");
  51         dumpBaseArchive(baseArchiveName);
  52         doTest(baseArchiveName, topArchiveName);
  53     }
  54 
























  55     private static void doTest(String baseArchiveName, String topArchiveName) throws Exception {
  56         String appJar = ClassFileInstaller.getJarPath("hello.jar");
  57         String mainClass = "Hello";
  58         dump2(baseArchiveName, topArchiveName,
  59              "-Xlog:cds",
  60              "-Xlog:cds+dynamic=debug",
  61              "-cp", appJar, mainClass)
  62             .assertNormalExit(output -> {
  63                     output.shouldContain("Buffer-space to target-space delta")
  64                            .shouldContain("Written dynamic archive 0x");
  65                 });
  66         run2(baseArchiveName, topArchiveName,
  67             "-Xlog:class+load",
  68             "-Xlog:cds+dynamic=debug,cds=debug",
  69             "-cp", appJar, mainClass)
  70             .assertNormalExit(output -> {
  71                     output.shouldContain("Hello source: shared objects file")
  72                           .shouldHaveExitValue(0);
  73                 });














  74     }
  75 }


  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 /*
  26  * @test
  27  * @summary Hello World test for dynamic archive
  28  * @requires vm.cds
  29  * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds /test/hotspot/jtreg/runtime/cds/appcds/test-classes
  30  * @build Hello
  31  * @run driver ClassFileInstaller -jar hello.jar Hello
  32  * @run driver HelloDynamic
  33  */
  34 
  35 import java.io.IOException;
  36 import java.net.ServerSocket;
  37 import jtreg.SkippedException;
  38 
  39 public class HelloDynamic extends DynamicArchiveTestBase {
  40     public static void main(String[] args) throws Exception {
  41         runTest(HelloDynamic::testDefaultBase);
  42         runTest(HelloDynamic::testCustomBase);
  43     }
  44 
  45     // (1) Test with default base archive + top archive
  46     static void testDefaultBase() throws Exception {
  47         String topArchiveName = getNewArchiveName("top");
  48         doTest(null, topArchiveName);
  49     }
  50 
  51     // (2) Test with custom base archive + top archive
  52     static void testCustomBase() throws Exception {
  53         String topArchiveName = getNewArchiveName("top2");
  54         String baseArchiveName = getNewArchiveName("base");
  55         dumpBaseArchive(baseArchiveName);
  56         doTest(baseArchiveName, topArchiveName);
  57     }
  58 
  59     private static int jdwpPort = -1;
  60 
  61     private static String getJdwpOptions() throws Exception {
  62         return "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=" + getJdwpPort();
  63     }
  64 
  65     public static int getJdwpPort() throws Exception {
  66         if (jdwpPort == -1) {
  67             jdwpPort = findFreePort();
  68             if (jdwpPort == -1) {
  69                 throw new SkippedException("Can not find available port for JDWP");
  70             }
  71         }
  72         return jdwpPort;
  73     }
  74 
  75     private static int findFreePort() {
  76         try (ServerSocket socket = new ServerSocket(0)) {
  77             return socket.getLocalPort();
  78         } catch (IOException e) {
  79         }
  80         return -1;
  81     }
  82 
  83     private static void doTest(String baseArchiveName, String topArchiveName) throws Exception {
  84         String appJar = ClassFileInstaller.getJarPath("hello.jar");
  85         String mainClass = "Hello";
  86         dump2(baseArchiveName, topArchiveName,
  87              "-Xlog:cds",
  88              "-Xlog:cds+dynamic=debug",
  89              "-cp", appJar, mainClass)
  90             .assertNormalExit(output -> {
  91                     output.shouldContain("Buffer-space to target-space delta")
  92                            .shouldContain("Written dynamic archive 0x");
  93                 });
  94         run2(baseArchiveName, topArchiveName,
  95             "-Xlog:class+load",
  96             "-Xlog:cds+dynamic=debug,cds=debug",
  97             "-cp", appJar, mainClass)
  98             .assertNormalExit(output -> {
  99                     output.shouldContain("Hello source: shared objects file")
 100                           .shouldHaveExitValue(0);
 101                 });
 102 
 103         // Sanity test with JDWP options.
 104         // Test with the default base archive should be sufficient.
 105         if (baseArchiveName == null) {
 106             run2(baseArchiveName, topArchiveName,
 107                 getJdwpOptions(),
 108                 "-Xlog:class+load",
 109                 "-Xlog:cds+dynamic=debug,cds=debug",
 110                 "-cp", appJar, mainClass)
 111                 .assertNormalExit(output -> {
 112                     output.shouldContain("Hello source: shared objects file")
 113                           .shouldHaveExitValue(0);
 114                     });
 115         }
 116     }
 117 }
< prev index next >