< prev index next >

test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java

Print this page

        

*** 23,40 **** package jdk.jpackage.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; ! import java.util.Arrays; ! import java.util.HashMap; ! import java.util.List; ! import java.util.Map; ! import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; public class LinuxHelper { private static String getRelease(JPackageCommand cmd) { return cmd.getArgumentValue("--linux-app-release", () -> "1"); } --- 23,37 ---- package jdk.jpackage.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; ! import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; + import jdk.jpackage.test.PackageTest.PackageHandlers; public class LinuxHelper { private static String getRelease(JPackageCommand cmd) { return cmd.getArgumentValue("--linux-app-release", () -> "1"); }
*** 43,52 **** --- 40,62 ---- cmd.verifyIsOfType(PackageType.LINUX); return cmd.getArgumentValue("--linux-package-name", () -> cmd.name().toLowerCase()); } + public static Path getDesktopFile(JPackageCommand cmd) { + return getDesktopFile(cmd, null); + } + + public static Path getDesktopFile(JPackageCommand cmd, String launcherName) { + cmd.verifyIsOfType(PackageType.LINUX); + String desktopFileName = String.format("%s-%s.desktop", getPackageName( + cmd), Optional.ofNullable(launcherName).orElseGet( + () -> cmd.name())); + return cmd.appLayout().destktopIntegrationDirectory().resolve( + desktopFileName); + } + static String getBundleName(JPackageCommand cmd) { cmd.verifyIsOfType(PackageType.LINUX); final PackageType packageType = cmd.packageType(); String format = null;
*** 71,92 **** cmd.verifyIsOfType(PackageType.LINUX); final PackageType packageType = cmd.packageType(); final Path packageFile = cmd.outputBundle(); ! Executor exec = new Executor(); switch (packageType) { case LINUX_DEB: ! exec.setExecutable("dpkg") ! .addArgument("--contents") ! .addArgument(packageFile); break; case LINUX_RPM: ! exec.setExecutable("rpm") ! .addArgument("-qpl") ! .addArgument(packageFile); break; } Stream<String> lines = exec.executeAndGetOutput().stream(); if (packageType == PackageType.LINUX_DEB) { --- 81,98 ---- cmd.verifyIsOfType(PackageType.LINUX); final PackageType packageType = cmd.packageType(); final Path packageFile = cmd.outputBundle(); ! Executor exec = null; switch (packageType) { case LINUX_DEB: ! exec = Executor.of("dpkg", "--contents").addArgument(packageFile); break; case LINUX_RPM: ! exec = Executor.of("rpm", "-qpl").addArgument(packageFile); break; } Stream<String> lines = exec.executeAndGetOutput().stream(); if (packageType == PackageType.LINUX_DEB) {
*** 107,118 **** return Stream.of(getDebBundleProperty(cmd.outputBundle(), "Depends").split(",")).map(String::strip).collect( Collectors.toList()); case LINUX_RPM: ! return new Executor().setExecutable("rpm") ! .addArguments("-qp", "-R", cmd.outputBundle().toString()) .executeAndGetOutput(); } // Unreachable return null; } --- 113,124 ---- return Stream.of(getDebBundleProperty(cmd.outputBundle(), "Depends").split(",")).map(String::strip).collect( Collectors.toList()); case LINUX_RPM: ! return Executor.of("rpm", "-qp", "-R") ! .addArgument(cmd.outputBundle()) .executeAndGetOutput(); } // Unreachable return null; }
*** 139,148 **** --- 145,205 ---- } // Unrechable return null; } + static PackageHandlers createDebPackageHandlers() { + PackageHandlers deb = new PackageHandlers(); + deb.installHandler = cmd -> { + cmd.verifyIsOfType(PackageType.LINUX_DEB); + Executor.of("sudo", "dpkg", "-i") + .addArgument(cmd.outputBundle()) + .execute(); + }; + deb.uninstallHandler = cmd -> { + cmd.verifyIsOfType(PackageType.LINUX_DEB); + Executor.of("sudo", "dpkg", "-r", getPackageName(cmd)).execute(); + }; + deb.unpackHandler = (cmd, destinationDir) -> { + cmd.verifyIsOfType(PackageType.LINUX_DEB); + Executor.of("dpkg", "-x") + .addArgument(cmd.outputBundle()) + .addArgument(destinationDir) + .execute(); + return destinationDir.resolve(String.format(".%s", + cmd.appInstallationDirectory())).normalize(); + }; + return deb; + } + + static PackageHandlers createRpmPackageHandlers() { + PackageHandlers rpm = new PackageHandlers(); + rpm.installHandler = cmd -> { + cmd.verifyIsOfType(PackageType.LINUX_RPM); + Executor.of("sudo", "rpm", "-i") + .addArgument(cmd.outputBundle()) + .execute(); + }; + rpm.uninstallHandler = cmd -> { + cmd.verifyIsOfType(PackageType.LINUX_RPM); + Executor.of("sudo", "rpm", "-e", getPackageName(cmd)).execute(); + }; + rpm.unpackHandler = (cmd, destinationDir) -> { + cmd.verifyIsOfType(PackageType.LINUX_RPM); + Executor.of("sh", "-c", String.format( + "rpm2cpio '%s' | cpio -idm --quiet", + JPackageCommand.escapeAndJoin( + cmd.outputBundle().toAbsolutePath().toString()))) + .setDirectory(destinationDir) + .execute(); + return destinationDir.resolve(String.format(".%s", + cmd.appInstallationDirectory())).normalize(); + }; + + return rpm; + } + static Path getLauncherPath(JPackageCommand cmd) { cmd.verifyIsOfType(PackageType.LINUX); final String launcherName = cmd.name(); final String launcherRelativePath = Path.of("/bin", launcherName).toString();
*** 171,194 **** return 0; } static String getDebBundleProperty(Path bundle, String fieldName) { ! return new Executor() ! .setExecutable("dpkg-deb") ! .addArguments("-f", bundle.toString(), fieldName) .executeAndGetFirstLineOfOutput(); } static String getRpmBundleProperty(Path bundle, String fieldName) { ! return new Executor() ! .setExecutable("rpm") ! .addArguments( ! "-qp", ! "--queryformat", ! String.format("%%{%s}", fieldName), ! bundle.toString()) .executeAndGetFirstLineOfOutput(); } static void verifyPackageBundleEssential(JPackageCommand cmd) { String packageName = LinuxHelper.getPackageName(cmd); --- 228,246 ---- return 0; } static String getDebBundleProperty(Path bundle, String fieldName) { ! return Executor.of("dpkg-deb", "-f") ! .addArgument(bundle) ! .addArgument(fieldName) .executeAndGetFirstLineOfOutput(); } static String getRpmBundleProperty(Path bundle, String fieldName) { ! return Executor.of("rpm", "-qp", "--queryformat", String.format("%%{%s}", fieldName)) ! .addArgument(bundle) .executeAndGetFirstLineOfOutput(); } static void verifyPackageBundleEssential(JPackageCommand cmd) { String packageName = LinuxHelper.getPackageName(cmd);
*** 262,278 **** }; test.addBundleVerifier(cmd -> { TKit.withTempDirectory("dpkg-control-files", tempDir -> { // Extract control Debian package files into temporary directory ! new Executor() ! .setExecutable("dpkg") ! .addArguments( ! "-e", ! cmd.outputBundle().toString(), ! tempDir.toString() ! ).execute().assertExitCodeIsZero(); Path controlFile = Path.of("postinst"); // Lookup for xdg commands in postinstall script String lineWithXsdCommand = verifier.apply( --- 314,327 ---- }; test.addBundleVerifier(cmd -> { TKit.withTempDirectory("dpkg-control-files", tempDir -> { // Extract control Debian package files into temporary directory ! Executor.of("dpkg", "-e") ! .addArgument(cmd.outputBundle()) ! .addArgument(tempDir) ! .execute(); Path controlFile = Path.of("postinst"); // Lookup for xdg commands in postinstall script String lineWithXsdCommand = verifier.apply(
*** 316,325 **** --- 365,378 ---- "Failed to locate system .desktop files folder")); } static void addFileAssociationsVerifier(PackageTest test, FileAssociations fa) { test.addInstallVerifier(cmd -> { + if (cmd.isPackageUnpacked("Not running file associations checks")) { + return; + } + PackageTest.withTestFileAssociationsFile(fa, testFile -> { String mimeType = queryFileMimeType(testFile); TKit.assertEquals(fa.getMime(), mimeType, String.format( "Check mime type of [%s] file", testFile));
*** 361,400 **** }); }); } private static String queryFileMimeType(Path file) { ! return new Executor() ! .setExecutable("xdg-mime") ! .addArguments("query", "filetype", file.toString()) .executeAndGetFirstLineOfOutput(); } private static String queryMimeTypeDefaultHandler(String mimeType) { ! return new Executor() ! .setExecutable("xdg-mime") ! .addArguments("query", "default", mimeType) .executeAndGetFirstLineOfOutput(); } public static String getDefaultPackageArch(PackageType type) { if (archs == null) { archs = new HashMap<>(); } String arch = archs.get(type); if (arch == null) { ! Executor exec = new Executor(); switch (type) { case LINUX_DEB: ! exec.setExecutable("dpkg").addArgument( ! "--print-architecture"); break; case LINUX_RPM: ! exec.setExecutable("rpmbuild").addArgument( ! "--eval=%{_target_cpu}"); break; } arch = exec.executeAndGetFirstLineOfOutput(); archs.put(type, arch); } --- 414,447 ---- }); }); } private static String queryFileMimeType(Path file) { ! return Executor.of("xdg-mime", "query", "filetype").addArgument(file) .executeAndGetFirstLineOfOutput(); } private static String queryMimeTypeDefaultHandler(String mimeType) { ! return Executor.of("xdg-mime", "query", "default", mimeType) .executeAndGetFirstLineOfOutput(); } public static String getDefaultPackageArch(PackageType type) { if (archs == null) { archs = new HashMap<>(); } String arch = archs.get(type); if (arch == null) { ! Executor exec = null; switch (type) { case LINUX_DEB: ! exec = Executor.of("dpkg", "--print-architecture"); break; case LINUX_RPM: ! exec = Executor.of("rpmbuild", "--eval=%{_target_cpu}"); break; } arch = exec.executeAndGetFirstLineOfOutput(); archs.put(type, arch); }
< prev index next >