< 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 >