1 /*
2 * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
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 Sanity test lambda proxy classes in static CDS archive.
28 * @requires vm.cds
29 * @library /test/lib
30 * @compile dynamicArchive/test-classes/LambHello.java
31 * @run driver StaticArchiveWithLambda
32 */
33
34 import jdk.test.lib.cds.CDSOptions;
35 import jdk.test.lib.cds.CDSTestUtils;
36 import jdk.test.lib.process.OutputAnalyzer;
37
38 public class StaticArchiveWithLambda {
39 public static void main(String[] args) throws Exception {
40 String appClass = "LambHello";
41 JarBuilder.build("lambhello", appClass);
42 String appJar = TestCommon.getTestJar("lambhello.jar");
43 String classList = "lambhello.list";
44 String archiveName = "StaticArchiveWithLambda.jsa";
45
46 // dump class list
47 CDSTestUtils.dumpClassList(classList, "-cp", appJar, appClass);
48
49 // create archive with the class list
50 CDSOptions opts = (new CDSOptions())
51 .addPrefix("-XX:ExtraSharedClassListFile=" + classList,
52 "-cp", appJar,
53 "-Xlog:class+load,cds")
54 .setArchiveName(archiveName);
55 CDSTestUtils.createArchiveAndCheck(opts)
56 .shouldContain("Skipping java/lang/invoke/BoundMethodHandle$Species_LLLL because it is dynamically generated");
57
58 // run with archive
59 CDSOptions runOpts = (new CDSOptions())
60 .addPrefix("-cp", appJar, "-Xlog:class+load,cds=debug")
61 .setArchiveName(archiveName)
62 .setUseVersion(false)
63 .addSuffix(appClass);
64 OutputAnalyzer output = CDSTestUtils.runWithArchive(runOpts);
65 output.shouldContain("LambHello source: shared objects file")
66 .shouldMatch("class.load.*LambHello[$][$]Lambda.*0x.*source:.shared.objects.file")
67 .shouldHaveExitValue(0);
68 }
69 }
--- EOF ---