diff --git a/src/runit/JPackageScriptCheck.java b/src/runit/JPackageScriptCheck.java new file mode 100644 index 0000000..890326f --- /dev/null +++ b/src/runit/JPackageScriptCheck.java @@ -0,0 +1,35 @@ +package tests; + +import static io.kojan.runit.api.RUnit.*; +import static io.kojan.runit.api.matcher.RUnitMatchers.*; +import static org.hamcrest.Matchers.*; + +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.DisplayName; + +import io.kojan.javadeptools.rpm.RpmInfo; +import io.kojan.runit.api.ExcludeSource; +import io.kojan.runit.api.ExcludeSymlink; +import io.kojan.runit.api.FileTest; +import io.kojan.runit.api.IncludeFileName; + +@DisplayName("/jpackage_script") +public class JPackageScriptCheck { + @FileTest + @IncludeFileName("/usr/bin/.*") + @ExcludeSource + @ExcludeSymlink + public void testJPackageScript(RpmInfo rpm, byte[] bytes) { + assumeThat("The binary is a script with a shebang", bytes.length, greaterThan(1)); + assumeThat("The binary is a script with a shebang", bytes[0], is((byte)'#')); + assumeThat("The binary is a script with a shebang", bytes[1], is((byte)'!')); + String content = new String(bytes, StandardCharsets.UTF_8); + assumeThat("The script was generated with %jpackage_script", content, + containsString(". /usr/share/java-utils/java-functions\n")); + assertThat("The script explicitly sets JAVA_HOME to Java 21", content, + containsString("\nexport JAVA_HOME=\"${JAVA_HOME:-/usr/lib/jvm/jre-21-openjdk}\"\n")); + assertThat("Requires on java-21-openjdk-headless are present", rpm, requires("java-21-openjdk-headless")); + assertThat("Requires on javapackages-tools are present", rpm, requires("javapackages-tools")); + } +}