Skip to content

Commit ac04ba4

Browse files
[test] package pre-install java check (#32259)
This recreates a test that was added to the bats packaging tests in #31343 but didn't make it over to the java project during when the linux package tests were ported in #31943 When packages are installed but can not locate the java executable, they should fail with a descriptive message
1 parent 1091ec1 commit ac04ba4

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

qa/vagrant/src/main/java/org/elasticsearch/packaging/test/ArchiveTestCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public void test30AbortWhenJavaMissing() {
129129
});
130130

131131
Platforms.onLinux(() -> {
132-
final String javaPath = sh.run("which java").stdout.trim();
132+
final String javaPath = sh.run("command -v java").stdout.trim();
133133

134134
try {
135135
sh.run("chmod -x '" + javaPath + "'");

qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackageTestCase.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,20 @@
3030

3131
import java.io.IOException;
3232
import java.nio.file.Files;
33+
import java.nio.file.Path;
34+
import java.nio.file.Paths;
3335
import java.util.regex.Matcher;
3436
import java.util.regex.Pattern;
3537

3638
import static org.elasticsearch.packaging.util.Cleanup.cleanEverything;
3739
import static org.elasticsearch.packaging.util.FileUtils.assertPathsDontExist;
40+
import static org.elasticsearch.packaging.util.FileUtils.mv;
3841
import static org.elasticsearch.packaging.util.Packages.SYSTEMD_SERVICE;
3942
import static org.elasticsearch.packaging.util.Packages.assertInstalled;
4043
import static org.elasticsearch.packaging.util.Packages.assertRemoved;
4144
import static org.elasticsearch.packaging.util.Packages.install;
4245
import static org.elasticsearch.packaging.util.Packages.remove;
46+
import static org.elasticsearch.packaging.util.Packages.runInstallCommand;
4347
import static org.elasticsearch.packaging.util.Packages.startElasticsearch;
4448
import static org.elasticsearch.packaging.util.Packages.verifyPackageInstallation;
4549
import static org.elasticsearch.packaging.util.Platforms.getOsRelease;
@@ -75,6 +79,21 @@ public void onlyCompatibleDistributions() {
7579
assumeTrue("only compatible distributions", distribution().packaging.compatible);
7680
}
7781

82+
public void test05InstallFailsWhenJavaMissing() {
83+
final Shell sh = new Shell();
84+
final Result java = sh.run("command -v java");
85+
86+
final Path originalJavaPath = Paths.get(java.stdout.trim());
87+
final Path relocatedJavaPath = originalJavaPath.getParent().resolve("java.relocated");
88+
try {
89+
mv(originalJavaPath, relocatedJavaPath);
90+
final Result installResult = runInstallCommand(distribution());
91+
assertThat(installResult.exitCode, is(1));
92+
} finally {
93+
mv(relocatedJavaPath, originalJavaPath);
94+
}
95+
}
96+
7897
public void test10InstallPackage() {
7998
assertRemoved(distribution());
8099
installation = install(distribution());

qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Packages.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ public static void assertRemoved(Distribution distribution) {
6767
Platforms.onDPKG(() -> {
6868
assertThat(status.exitCode, anyOf(is(0), is(1)));
6969
if (status.exitCode == 0) {
70-
assertTrue(Pattern.compile("(?m)^Status:.+deinstall ok").matcher(status.stdout).find());
70+
assertTrue("an uninstalled status should be indicated: " + status.stdout,
71+
Pattern.compile("(?m)^Status:.+deinstall ok").matcher(status.stdout).find() ||
72+
Pattern.compile("(?m)^Status:.+ok not-installed").matcher(status.stdout).find()
73+
);
7174
}
7275
});
7376
}
@@ -90,13 +93,27 @@ public static Installation install(Distribution distribution) {
9093
}
9194

9295
public static Installation install(Distribution distribution, String version) {
96+
final Result result = runInstallCommand(distribution, version);
97+
if (result.exitCode != 0) {
98+
throw new RuntimeException("Installing distribution " + distribution + " version " + version + " failed: " + result);
99+
}
100+
101+
return Installation.ofPackage(distribution.packaging);
102+
}
103+
104+
public static Result runInstallCommand(Distribution distribution) {
105+
return runInstallCommand(distribution, getCurrentVersion());
106+
}
107+
108+
public static Result runInstallCommand(Distribution distribution, String version) {
93109
final Shell sh = new Shell();
94110
final Path distributionFile = getDistributionFile(distribution, version);
95111

96-
Platforms.onRPM(() -> sh.run("rpm -i " + distributionFile));
97-
Platforms.onDPKG(() -> sh.run("dpkg -i " + distributionFile));
98-
99-
return Installation.ofPackage(distribution.packaging);
112+
if (Platforms.isRPM()) {
113+
return sh.runIgnoreExitCode("rpm -i " + distributionFile);
114+
} else {
115+
return sh.runIgnoreExitCode("dpkg -i " + distributionFile);
116+
}
100117
}
101118

102119
public static void remove(Distribution distribution) {

0 commit comments

Comments
 (0)