diff --git a/slices/openjdk-11-jdk-headless.yaml b/slices/openjdk-11-jdk-headless.yaml new file mode 100644 index 00000000..a2436fab --- /dev/null +++ b/slices/openjdk-11-jdk-headless.yaml @@ -0,0 +1,162 @@ +package: openjdk-11-jdk-headless + +essential: + - openjdk-11-jdk-headless_copyright + +slices: + + # OpenJDK binaries slice + core: + essential: + - libc6_libs + - openjdk-11-jre-headless_core + - openjdk-11-jre-headless_javac + - zlib1g_libs + contents: + /usr/lib/jvm/java-11-openjdk-*/bin/javac: + /usr/lib/jvm/java-11-openjdk-*/bin/javadoc: + /usr/lib/jvm/java-11-openjdk-*/bin/javap: + /usr/lib/jvm/java-11-openjdk-*/bin/jdeprscan: + /usr/lib/jvm/java-11-openjdk-*/bin/jdeps: + /usr/lib/jvm/java-11-openjdk-*/bin/jimage: + /usr/lib/jvm/java-11-openjdk-*/bin/serialver: + + # excludes jaotc - this requires binutils + standard: + essential: + - openjdk-11-jdk-headless_core + - openjdk-11-jre-headless_standard + contents: + /usr/lib/jvm/java-11-openjdk-*/bin/jar: + /usr/lib/jvm/java-11-openjdk-*/bin/jarsigner: + /usr/lib/jvm/java-11-openjdk-*/bin/jcmd: + /usr/lib/jvm/java-11-openjdk-*/bin/jdb: + /usr/lib/jvm/java-11-openjdk-*/bin/jfr: + /usr/lib/jvm/java-11-openjdk-*/bin/jhsdb: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-11-openjdk-*/bin/jinfo: + /usr/lib/jvm/java-11-openjdk-*/bin/jmap: + /usr/lib/jvm/java-11-openjdk-*/bin/jps: + /usr/lib/jvm/java-11-openjdk-*/bin/jrunscript: + /usr/lib/jvm/java-11-openjdk-*/bin/jshell: + /usr/lib/jvm/java-11-openjdk-*/bin/jstack: + /usr/lib/jvm/java-11-openjdk-*/bin/jstat: + /usr/lib/jvm/java-11-openjdk-*/bin/jstatd: + /usr/lib/jvm/java-11-openjdk-*/bin/rmic: + + # OpenJDK modules required to build the runtime image + modules: + essential: + - openjdk-11-jdk-headless_core + contents: + /usr/lib/jvm/java-11-openjdk-*/bin/jlink: + /usr/lib/jvm/java-11-openjdk-*/bin/jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.base.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.compiler.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.datatransfer.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.desktop.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.instrument.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.logging.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.management.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.management.rmi.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.naming.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.net.http.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.prefs.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.rmi.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.scripting.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.se.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.security.jgss.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.security.sasl.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.smartcardio.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.sql.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.sql.rowset.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.transaction.xa.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.xml.crypto.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/java.xml.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.accessibility.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.aot.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.attach.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.charsets.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.compiler.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.crypto.cryptoki.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.crypto.ec.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.dynalink.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.editpad.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.hotspot.agent.jmod: + arch: + - amd64 + - arm64 + - ppc64el + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.httpserver.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.ed.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.jvmstat.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.le.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.opt.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.vm.ci.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.vm.compiler.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.internal.vm.compiler.management.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jartool.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.javadoc.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jcmd.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jconsole.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jdeps.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jdi.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jdwp.agent.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jfr.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jlink.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jshell.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jsobject.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.jstatd.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.localedata.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.management.agent.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.management.jfr.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.management.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.naming.dns.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.naming.ldap.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.naming.rmi.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.net.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.pack.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.rmic.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.scripting.nashorn.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.scripting.nashorn.shell.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.sctp.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.security.auth.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.security.jgss.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.unsupported.desktop.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.unsupported.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.xml.dom.jmod: + /usr/lib/jvm/java-11-openjdk-*/jmods/jdk.zipfs.jmod: + + # OpenJDK headers for JNI + headers: + contents: + /usr/lib/jvm/java-11-openjdk-*/include/classfile_constants.h: + /usr/lib/jvm/java-11-openjdk-*/include/jni.h: + /usr/lib/jvm/java-11-openjdk-*/include/jvmti.h: + /usr/lib/jvm/java-11-openjdk-*/include/jvmticmlr.h: + /usr/lib/jvm/java-11-openjdk-*/include/linux/jni_md.h: + + # OpenJDK headers for the debug agent development + debug-headers: + contents: + /usr/lib/jvm/java-11-openjdk-*/include/jdwpTransport.h: + + copyright: + essential: + - openjdk-11-jre-headless_copyright + contents: + /usr/share/doc/openjdk-11-jdk-headless: diff --git a/slices/openjdk-11-jre-headless.yaml b/slices/openjdk-11-jre-headless.yaml new file mode 100644 index 00000000..df926177 --- /dev/null +++ b/slices/openjdk-11-jre-headless.yaml @@ -0,0 +1,193 @@ +package: openjdk-11-jre-headless + +essential: + - openjdk-11-jre-headless_copyright + +slices: + + # A minimal set of files to run a Java application + # excluded dependencies: + # - ca-certificates-java_essential - needs chisel support to run + # maintainer scripts. + # - java-common - provides update-alternatives, + # not relevant. + # - util-linux - needed for bash completion + # not relevant. + # - libjpeg8 - used in awt, not relevant + # - liblcms2-2 - used in awt, not relevant + standard: + essential: + - openjdk-11-jre-headless_class-data-sharing + - openjdk-11-jre-headless_core + - openjdk-11-jre-headless_debug + - openjdk-11-jre-headless_jfr + - openjdk-11-jre-headless_management + - openjdk-11-jre-headless_prefs + - openjdk-11-jre-headless_rmi + - openjdk-11-jre-headless_security + - openjdk-11-jre-headless_tools + + # List of classes required to create the Class Data Sharing archive + class-data-sharing: + essential: + - openjdk-11-jre-headless_core + contents: + /usr/lib/jvm/java-11-openjdk-*/lib/classlist: + arch: + - amd64 + - arm64 + - armhf + - i386 + - ppc64el + - s390x + + # A minimal set of files to run a Java application + core: + essential: + - libc6_libs + - libgcc-s1_libs + - libstdc++6_libs + - zlib1g_libs + contents: + /etc/java-11-openjdk/jvm-*.cfg: + /etc/java-11-openjdk/logging.properties: + /etc/java-11-openjdk/management/jmxremote.access: + /etc/java-11-openjdk/management/management.properties: + /etc/java-11-openjdk/net.properties: + /etc/java-11-openjdk/security/java.policy: + /etc/java-11-openjdk/security/java.security: + /usr/lib/jvm/java-11-openjdk-*/bin/java: + /usr/lib/jvm/java-11-openjdk-*/conf/logging.properties: + /usr/lib/jvm/java-11-openjdk-*/conf/management/jmxremote.access: + /usr/lib/jvm/java-11-openjdk-*/conf/management/management.properties: + /usr/lib/jvm/java-11-openjdk-*/conf/net.properties: + /usr/lib/jvm/java-11-openjdk-*/conf/security/java.policy: + /usr/lib/jvm/java-11-openjdk-*/conf/security/java.security: + /usr/lib/jvm/java-11-openjdk-*/lib/jexec: + /usr/lib/jvm/java-11-openjdk-*/lib/jli/libjli.so: + /usr/lib/jvm/java-11-openjdk-*/lib/jspawnhelper: + /usr/lib/jvm/java-11-openjdk-*/lib/jvm.cfg: + /usr/lib/jvm/java-11-openjdk-*/lib/jvm.cfg-default: + /usr/lib/jvm/java-11-openjdk-*/lib/libextnet.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libjava.so: + # lib/modules support + /usr/lib/jvm/java-11-openjdk-*/lib/libjimage.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libjsig.so: + # required for IO. + /usr/lib/jvm/java-11-openjdk-*/lib/libnet.so: + # required for IO. + /usr/lib/jvm/java-11-openjdk-*/lib/libnio.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libverify.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libzip.so: + /usr/lib/jvm/java-11-openjdk-*/lib/modules: + /usr/lib/jvm/java-11-openjdk-*/lib/server/libjsig.so: + /usr/lib/jvm/java-11-openjdk-*/lib/server/libjvm.so: + /usr/lib/jvm/java-11-openjdk-*/lib/tzdb.dat: + + # Native part of jdk.prefs modules + prefs: + essential: + - openjdk-11-jre-headless_core + contents: + /usr/lib/jvm/java-11-openjdk-*/lib/libprefs.so: + + # Native part of java.rmi + rmi: + essential: + - openjdk-11-jre-headless_security + contents: + /usr/lib/jvm/java-11-openjdk-*/bin/rmid: + /usr/lib/jvm/java-11-openjdk-*/bin/rmiregistry: + /usr/lib/jvm/java-11-openjdk-*/lib/librmi.so: + + # Debug support + debug: + essential: + - openjdk-11-jre-headless_core + contents: + /usr/lib/jvm/java-11-openjdk-*/lib/libattach.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libdt_socket.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libinstrument.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libjdwp.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libsaproc.so: + arch: + - amd64 + - arm64 + - armhf + - ppc64el + + # Configuration and native part of Java Management Extensions + management: + essential: + - openjdk-11-jre-headless_rmi + contents: + /etc/java-11-openjdk/management/jmxremote.access: + /etc/java-11-openjdk/management/management.properties: + /usr/lib/jvm/java-11-openjdk-*/conf/management/jmxremote.access: + /usr/lib/jvm/java-11-openjdk-*/conf/management/management.properties: + /usr/lib/jvm/java-11-openjdk-*/lib/libmanagement.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libmanagement_agent.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libmanagement_ext.so: + + # Security configuration files and native libraries + security: + essential: + - libnss3_libs + - libpcsclite1_libs + - openjdk-11-jre-headless_core + contents: + /etc/java-11-openjdk/security/blocked.certs: + /etc/java-11-openjdk/security/default.policy: + /etc/java-11-openjdk/security/nss.cfg: + /etc/java-11-openjdk/security/policy/limited/default_US_export.policy: + /etc/java-11-openjdk/security/policy/limited/default_local.policy: + /etc/java-11-openjdk/security/policy/limited/exempt_local.policy: + /etc/java-11-openjdk/security/policy/unlimited/default_US_export.policy: + /etc/java-11-openjdk/security/policy/unlimited/default_local.policy: + /etc/java-11-openjdk/security/public_suffix_list.dat: + /usr/lib/jvm/java-11-openjdk-*/conf/security/nss.cfg: + /usr/lib/jvm/java-11-openjdk-*/conf/security/policy/limited/default_US_export.policy: + /usr/lib/jvm/java-11-openjdk-*/conf/security/policy/limited/default_local.policy: + /usr/lib/jvm/java-11-openjdk-*/conf/security/policy/limited/exempt_local.policy: + /usr/lib/jvm/java-11-openjdk-*/conf/security/policy/unlimited/default_US_export.policy: + /usr/lib/jvm/java-11-openjdk-*/conf/security/policy/unlimited/default_local.policy: + /usr/lib/jvm/java-11-openjdk-*/lib/libj2gss.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libj2pcsc.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libj2pkcs11.so: + /usr/lib/jvm/java-11-openjdk-*/lib/libjaas.so: + /usr/lib/jvm/java-11-openjdk-*/lib/security/blocked.certs: + /usr/lib/jvm/java-11-openjdk-*/lib/security/cacerts: + /usr/lib/jvm/java-11-openjdk-*/lib/security/default.policy: + /usr/lib/jvm/java-11-openjdk-*/lib/security/public_suffix_list.dat: + + # OpenJDK tools + tools: + essential: + - openjdk-11-jre-headless_security + contents: + /usr/lib/jvm/java-11-openjdk-*/bin/jjs: + /usr/lib/jvm/java-11-openjdk-*/bin/keytool: + /usr/lib/jvm/java-11-openjdk-*/bin/pack200: + /usr/lib/jvm/java-11-openjdk-*/bin/unpack200: + + # Java Flight Recorder configuration and jar file + jfr: + essential: + - openjdk-11-jre-headless_core + contents: + /etc/java-11-openjdk/jfr/default.jfc: + /etc/java-11-openjdk/jfr/profile.jfc: + /usr/lib/jvm/java-11-openjdk-*/lib/jfr/default.jfc: + /usr/lib/jvm/java-11-openjdk-*/lib/jfr/profile.jfc: + /usr/lib/jvm/java-11-openjdk-*/lib/jrt-fs.jar: + + # Javac JDK API signatures for the backwards compatibility + javac: + essential: + - openjdk-11-jre-headless_core + contents: + /usr/lib/jvm/java-11-openjdk-*/lib/ct.sym: + + copyright: + contents: + /usr/share/doc/openjdk-11-jre-headless/copyright: diff --git a/tests/spread/integration/openjdk-11-jdk-headless/Main.java b/tests/spread/integration/openjdk-11-jdk-headless/Main.java new file mode 100644 index 00000000..40b5eeef --- /dev/null +++ b/tests/spread/integration/openjdk-11-jdk-headless/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args){ + System.out.println("Hello world"); + } +} diff --git a/tests/spread/integration/openjdk-11-jdk-headless/MonitoringTest.java b/tests/spread/integration/openjdk-11-jdk-headless/MonitoringTest.java new file mode 100644 index 00000000..aa09573f --- /dev/null +++ b/tests/spread/integration/openjdk-11-jdk-headless/MonitoringTest.java @@ -0,0 +1,7 @@ +public class MonitoringTest { + public static void main(String[] args) throws InterruptedException { + while (true) { + Thread.sleep(1000); + } + } +} diff --git a/tests/spread/integration/openjdk-11-jdk-headless/RemoteInterface.java b/tests/spread/integration/openjdk-11-jdk-headless/RemoteInterface.java new file mode 100644 index 00000000..d1940363 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jdk-headless/RemoteInterface.java @@ -0,0 +1,4 @@ +import java.rmi.Remote; + +public class RemoteInterface implements Remote { +} diff --git a/tests/spread/integration/openjdk-11-jdk-headless/SerializableObject.java b/tests/spread/integration/openjdk-11-jdk-headless/SerializableObject.java new file mode 100644 index 00000000..b4605642 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jdk-headless/SerializableObject.java @@ -0,0 +1,4 @@ +import java.io.Serializable; + +public class SerializableObject implements Serializable { +} diff --git a/tests/spread/integration/openjdk-11-jdk-headless/all.policy b/tests/spread/integration/openjdk-11-jdk-headless/all.policy new file mode 100644 index 00000000..1d0ce886 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jdk-headless/all.policy @@ -0,0 +1,3 @@ +grant { + permission java.security.AllPermission; +}; diff --git a/tests/spread/integration/openjdk-11-jdk-headless/task.yaml b/tests/spread/integration/openjdk-11-jdk-headless/task.yaml new file mode 100644 index 00000000..b5afd1f0 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jdk-headless/task.yaml @@ -0,0 +1,114 @@ +summary: Integration tests for openjdk-11-jdk-headless + +environment: + SLICE/core: "core" + SLICE/standard: "standard" + SLICE/modules: "modules" + +execute: | + pids=() + cleanup() { + for pid in "${pids[@]}"; do + kill "$pid" || true + done + } + for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done + trap cleanup EXIT + + apt install --update -y openjdk-11-jdk-headless + + # Test different slice installations + echo "SLICE=${SLICE}" + rootfs="$(install-slices openjdk-11-jdk-headless_${SLICE} dash_bins)" + cp *.java ${rootfs}/ + cp all.policy ${rootfs}/ + javac *.java + + nohup java -cp . MonitoringTest & + pid=$! + pids+=("$pid") + + cp *.class ${rootfs}/ + cd ${rootfs} + mkdir -p proc sys tmp + mount --bind /proc proc + mount --bind /sys sys + mount --bind /tmp tmp + case ${SLICE} in + core) + for java in `find usr/lib/jvm -name java`; do + home=$(dirname ${java}) + # /usr/lib/jvm/java-11-openjdk-*/bin/javac: + chroot . ${home}/javac /Main.java -d / + # /usr/lib/jvm/java-11-openjdk-*/bin/javadoc: + chroot . ${home}/javadoc /Main.java + # /usr/lib/jvm/java-11-openjdk-*/bin/javap: + chroot . ${home}/javap -l /Main.class + # /usr/lib/jvm/java-11-openjdk-*/bin/jdeprscan: + chroot . ${home}/jdeprscan --class-path . Main + # /usr/lib/jvm/java-11-openjdk-*/bin/jdeps: + chroot . ${home}/jdeps -m java.base + # /usr/lib/jvm/java-11-openjdk-*/bin/jimage: + chroot . ${home}/jimage info ${home}/../lib/modules + # /usr/lib/jvm/java-11-openjdk-*/bin/serialver: + chroot . ${home}/serialver -classpath / SerializableObject + done + ;; + standard) + for java in `find usr/lib/jvm -name java`; do + home=$(dirname ${java}) + # /usr/lib/jvm/java-11-openjdk-*/bin/jar: + # /usr/lib/jvm/java-11-openjdk-*/bin/jarsigner: + chroot . ${home}/jar cvf test.jar *.java + DNAME="CN=Sample Cert, OU=R&D, O=Company Ltd., L=Dublin 4, S=Dublin, C=IE" + chroot . ${home}/keytool -genkeypair -keystore foo -storepass barbar -keyalg RSA -dname "$DNAME" -alias foo + chroot . ${home}/jarsigner -keystore foo -storepass barbar test.jar foo + # /usr/lib/jvm/java-11-openjdk-*/bin/jdb: + chroot . /usr/bin/sh -c "echo run | ${home}/jdb Main.java" + # /usr/lib/jvm/java-11-openjdk-*/bin/jcmd: + chroot . ${home}/jcmd MonitoringTest VM.version + # /usr/lib/jvm/java-11-openjdk-*/bin/jhsdb: + if [ -f ${home}/jhsdb ]; then + chroot . ${home}/jhsdb jstack --pid ${pid} + fi + # /usr/lib/jvm/java-11-openjdk-*/bin/jfr: + chroot . ${home}/jcmd ${pid} JFR.start name=recording maxsize=1MB + chroot . ${home}/jcmd ${pid} JFR.dump name=recording filename=/tmp/recording.jfr + chroot . ${home}/jfr print /tmp/recording.jfr > /dev/null + # /usr/lib/jvm/java-11-openjdk-*/bin/jinfo: + chroot . ${home}/jinfo ${pid} + # /usr/lib/jvm/java-11-openjdk-*/bin/jrunscript: + chroot . /usr/bin/sh -c "echo 'exit()' | ${home}/jrunscript" + # /usr/lib/jvm/java-11-openjdk-*/bin/jshell: + chroot . /usr/bin/sh -c "echo 'System.out.println(\"hello world\")' | ${home}/jshell" + # /usr/lib/jvm/java-11-openjdk-*/bin/jstack: + chroot . ${home}/jstack ${pid} + # /usr/lib/jvm/java-11-openjdk-*/bin/jstat: + chroot . ${home}/jstat -gc ${pid} + # /usr/lib/jvm/java-11-openjdk-*/bin/jstatd: + nohup chroot . ${home}/jstatd -J-Djava.security.policy=all.policy > ./jstatd.log & + pids+=($!) + for retry in 0 1 2 3 4 5; do + if [ ${retry} -eq 5 ]; then + exit 1 + fi + grep -q "bound to /JStatRemoteHost" "jstatd.log" && break + sleep 10 + done + # /usr/lib/jvm/java-11-openjdk-*/bin/rmic + chroot . ${home}/rmic -classpath . RemoteInterface + done + ;; + modules) + cd ${rootfs} + for jlink in `find usr/lib/jvm -name jlink`; do + output=$(basename $(mktemp -u)) + chroot . ${jlink} --add-modules java.base --output ${output} + rm -rf ${rootfs}/${output} + done + for jmod in `find usr/lib/jvm -name jmod`; do + home=$(dirname ${jmod}) + chroot . ${jmod} list ${home}/../jmods/java.rmi.jmod + done + ;; + esac diff --git a/tests/spread/integration/openjdk-11-jre-headless/Main.java b/tests/spread/integration/openjdk-11-jre-headless/Main.java new file mode 100644 index 00000000..47e5d0af --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Hello world"); + } +} diff --git a/tests/spread/integration/openjdk-11-jre-headless/PrefsTest.java b/tests/spread/integration/openjdk-11-jre-headless/PrefsTest.java new file mode 100644 index 00000000..73c4ee63 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/PrefsTest.java @@ -0,0 +1,13 @@ +import java.util.prefs.*; + +public class PrefsTest { + public static void main(String[] args) { + if ("put".equals(args[0])) { + Preferences.userRoot().put("a", "b"); + } else if ("get".equals(args[0])) { + if (!"b".equals(Preferences.userRoot().get("a", null))) { + throw new RuntimeException("Unable to read the preference"); + } + } + } +} diff --git a/tests/spread/integration/openjdk-11-jre-headless/ReadCertificate.java b/tests/spread/integration/openjdk-11-jre-headless/ReadCertificate.java new file mode 100644 index 00000000..ef92fd99 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/ReadCertificate.java @@ -0,0 +1,14 @@ +import java.security.cert.*; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; + +public class ReadCertificate { + + public static void main(String[] args) throws Throwable { + byte[] pem = Files.readAllBytes(Path.of("certificate.pem")); + java.security.cert.Certificate cert = CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(pem)); + if (cert == null) + throw new RuntimeException("It should be possible to decode a certificate"); + } +} diff --git a/tests/spread/integration/openjdk-11-jre-headless/TestJMX.java b/tests/spread/integration/openjdk-11-jre-headless/TestJMX.java new file mode 100644 index 00000000..e27d058d --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/TestJMX.java @@ -0,0 +1,39 @@ +import java.lang.management.ManagementFactory; +import javax.management.Attribute; +import javax.management.AttributeList; +import javax.management.AttributeNotFoundException; +import javax.management.DynamicMBean; +import javax.management.InstanceAlreadyExistsException; +import javax.management.InvalidAttributeValueException; +import javax.management.MBeanException; +import javax.management.MBeanInfo; +import javax.management.MBeanRegistrationException; +import javax.management.MBeanServer; +import javax.management.MBeanServerConnection; +import javax.management.MalformedObjectNameException; +import javax.management.NotCompliantMBeanException; +import javax.management.ObjectName; +import javax.management.ReflectionException; +import javax.management.remote.*; +import com.sun.tools.attach.*; + +public class TestJMX implements TestJMXMBean { + + static final String CONNECTOR_ADDRESS = + "com.sun.management.jmxremote.localConnectorAddress"; + + @Override + public void test() { + } + + public static void main(String[] args) throws Throwable { + ObjectName objectName = new ObjectName("test:type=basic,name=mbeantest"); + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + server.registerMBean(new TestJMX(), objectName); + JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:5000/jmxrmi"); + int count = JMXConnectorFactory.connect(url) + .getMBeanServerConnection() + .getMBeanCount(); + System.out.println(count); + } +} diff --git a/tests/spread/integration/openjdk-11-jre-headless/TestJMXMBean.java b/tests/spread/integration/openjdk-11-jre-headless/TestJMXMBean.java new file mode 100644 index 00000000..c75f6c57 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/TestJMXMBean.java @@ -0,0 +1,3 @@ +public interface TestJMXMBean { + void test(); +} diff --git a/tests/spread/integration/openjdk-11-jre-headless/certificate.pem b/tests/spread/integration/openjdk-11-jre-headless/certificate.pem new file mode 100644 index 00000000..645e9f80 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/certificate.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIULvuqN3MiptnZSYS9y1qJAZYKFA4wDQYJKoZIhvcNAQEL +BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA4MTUwMjQzNDhaFw0yNTA4 +MTUwMjQzNDhaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw +HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDm3990peBuPYaz0UEEc75Q7i79P4RzrD84MxhDpoPs +MSdnmO3rTkIG84Wp72+8T7TGjGjBhX++8UmZLrXy2AfcejZi3JcddMWH4V5XEnAj +hTBe1HLkiotayZst/cxuTP6KmuahjsROAqriCv/A4BBA8KjYx1e4E9k9+81FreZy +PJ8p3m7R8qZ/DtjuW1aMQ3oDRKA/iqQhLHVpJy/iYiyjwTdJm6/lA3ywGCr6ZMWm +9tWUT+4TvhyRM67Y0gcCtH51cwxPqUFGEKAkLWIu2fS6DaoXtHylxgGeKKPes3JX +uSn9QezEEqvrgLFQRqIUS8tNZFEhoJQ7dmxMP/XKAD51AgMBAAGjUzBRMB0GA1Ud +DgQWBBSb70j+xaI3eTxp4H7MDm1MLVRGNTAfBgNVHSMEGDAWgBSb70j+xaI3eTxp +4H7MDm1MLVRGNTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAp +0GIjKtwvD7BkQy+cf3dsdwYodxoIYl4E8UvHfBSPQQfFNh+chHPmrNYRuFM3Q6sT +ogNhHKLecQMK4tNUDa/vVRGnqmZVWjxqLnyH/qFKtakqPB6h6x4h50huzA+twhNm +SDjg3QqqpOuUzrs77JqYkxSjqd0QgmwmgxOdbcF0SY+ebQhAd0UXY7wIs6ByDEHO +kElgJmnGKhOpf1SFpQh2qpKGq/MvcdHWN4oKri440wCf+czkrOTyGVc275oTbRnM +Z76Ro4JDuomyWeR9iQ5pP5ug4ciflLa7hlYcH0xJbF3b2M3BlnUYKMqih/TjqKdr +NBs121h64SPY0gh7kIvF +-----END CERTIFICATE----- diff --git a/tests/spread/integration/openjdk-11-jre-headless/task.yaml b/tests/spread/integration/openjdk-11-jre-headless/task.yaml new file mode 100644 index 00000000..114d3387 --- /dev/null +++ b/tests/spread/integration/openjdk-11-jre-headless/task.yaml @@ -0,0 +1,63 @@ +summary: Integration tests for openjdk-11-jre-headless + +environment: + SLICE/classdatasharing: "class-data-sharing" + SLICE/core: "core" + SLICE/prefs: "prefs" +# SLICE/rmi: "rmi" # Tested in management slice + SLICE/debug: "debug" + SLICE/management: "management" + SLICE/jfr: "jfr" + SLICE/security: "security" + SLICE/tools: "tools" + +execute: | + # Test different slice installations + echo "SLICE=${SLICE}" + rootfs="$(install-slices openjdk-11-jre-headless_${SLICE} dash_bins)" + apt install --update -y openjdk-11-jdk-headless + javac *.java + jar cvf test.jar *.java + cp *.jar ${rootfs}/ + cp *.java ${rootfs}/ + cp *.class ${rootfs}/ + cp certificate.pem ${rootfs}/ + cd ${rootfs} + mkdir -p proc/self + for java in `find usr/lib/jvm -name java`; do + ln -sf /${java} proc/self/exe + chroot . ${java} --version + case ${SLICE} in + class-data-sharing) + chroot . ${java} -Xshare:dump + ;; + core) + chroot . ${java} -cp . Main + ;; + prefs) + chroot . ${java} -cp . PrefsTest put + chroot . ${java} -cp . PrefsTest get + ;; + debug) + chroot . ${java} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -cp . Main + ;; + management) + chroot . ${java} -Dcom.sun.management.jmxremote.port=5000 \ + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote=true \ + -Dcom.sun.management.jmxremote.ssl=false -cp . TestJMX + ;; + jfr) + chroot . ${java} -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=dump.jfr -cp . Main + ;; + security) + chroot . ${java} -cp . ReadCertificate + ;; + tools) + DNAME="CN=Sample Cert, OU=R&D, O=Company Ltd., L=Dublin 4, S=Dublin, C=IE" + chroot . $(dirname ${java})/keytool -genkeypair -keystore foo -storepass barbar -keyalg RSA -dname "$DNAME" + chroot . $(dirname ${java})/pack200 foo.pack.gz test.jar + chroot . $(dirname ${java})/unpack200 foo.pack.gz test1.jar + ;; + esac + done