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.ExcludeFileName; 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 @ExcludeFileName("/usr/bin/ant") 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("\nJAVA_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")); } }