Skip to content

Commit a9f7bfc

Browse files
authored
Migrate setup passwords packaging test from bats (#49337)
This commit moves the packaging tests for elasticsearch-setup-passwords to java from bats. The change also enables future tests to enable security in Elasticsearch and automatically have waitForElasticsearch work correctly, at least to the same extent it worked in bats, by waiting on the ES port instead of health check. relates #46005
1 parent c23c4ae commit a9f7bfc

15 files changed

+365
-292
lines changed

qa/os/bats/default/20_tar_bootstrap_password.bats

Lines changed: 0 additions & 1 deletion
This file was deleted.

qa/os/bats/default/25_package_bootstrap_password.bats

Lines changed: 0 additions & 1 deletion
This file was deleted.

qa/os/bats/default/30_tar_setup_passwords.bats

Lines changed: 0 additions & 1 deletion
This file was deleted.

qa/os/bats/default/35_package_setup_passwords.bats

Lines changed: 0 additions & 1 deletion
This file was deleted.

qa/os/bats/default/bootstrap_password.bash

Lines changed: 0 additions & 170 deletions
This file was deleted.

qa/os/bats/default/setup_passwords.bash

Lines changed: 0 additions & 94 deletions
This file was deleted.

qa/os/src/test/java/org/elasticsearch/packaging/test/ArchiveTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void test10Install() throws Exception {
6969

7070
public void test20PluginsListWithNoPlugins() throws Exception {
7171
final Installation.Executables bin = installation.executables();
72-
final Result r = sh.run(bin.elasticsearchPlugin + " list");
72+
final Result r = bin.elasticsearchPlugin.run(sh, "list");
7373

7474
assertThat(r.stdout, isEmptyString());
7575
}

qa/os/src/test/java/org/elasticsearch/packaging/test/PackagingTestCase.java

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@
2626
import com.carrotsearch.randomizedtesting.annotations.Timeout;
2727
import org.apache.logging.log4j.LogManager;
2828
import org.apache.logging.log4j.Logger;
29+
import org.elasticsearch.packaging.util.Archives;
2930
import org.elasticsearch.packaging.util.Distribution;
31+
import org.elasticsearch.packaging.util.Docker;
32+
import org.elasticsearch.packaging.util.FileUtils;
3033
import org.elasticsearch.packaging.util.Installation;
34+
import org.elasticsearch.packaging.util.Packages;
3135
import org.elasticsearch.packaging.util.Platforms;
3236
import org.elasticsearch.packaging.util.Shell;
3337
import org.junit.Assert;
@@ -40,6 +44,7 @@
4044
import org.junit.runner.Description;
4145
import org.junit.runner.RunWith;
4246

47+
import java.nio.file.Files;
4348
import java.nio.file.Paths;
4449

4550
import static org.elasticsearch.packaging.util.Cleanup.cleanEverything;
@@ -119,7 +124,78 @@ protected static Distribution distribution() {
119124
return distribution;
120125
}
121126

122-
protected Shell newShell() throws Exception {
127+
protected static void install() throws Exception {
128+
switch (distribution.packaging) {
129+
case TAR:
130+
case ZIP:
131+
installation = Archives.installArchive(distribution);
132+
Archives.verifyArchiveInstallation(installation, distribution);
133+
break;
134+
case DEB:
135+
case RPM:
136+
installation = Packages.installPackage(distribution);
137+
Packages.verifyPackageInstallation(installation, distribution, newShell());
138+
break;
139+
case DOCKER:
140+
installation = Docker.runContainer(distribution);
141+
Docker.verifyContainerInstallation(installation, distribution);
142+
}
143+
}
144+
145+
/**
146+
* Starts and stops elasticsearch, and performs assertions while it is running.
147+
*/
148+
protected void assertWhileRunning(Platforms.PlatformAction assertions) throws Exception {
149+
try {
150+
switch (distribution.packaging) {
151+
case TAR:
152+
case ZIP:
153+
Archives.runElasticsearch(installation, sh);
154+
break;
155+
case DEB:
156+
case RPM:
157+
Packages.startElasticsearch(sh, installation);
158+
break;
159+
case DOCKER:
160+
// nothing, "installing" docker image is running it
161+
}
162+
163+
} catch (Exception e ){
164+
if (Files.exists(installation.home.resolve("elasticsearch.pid"))) {
165+
String pid = FileUtils.slurp(installation.home.resolve("elasticsearch.pid")).trim();
166+
logger.info("Dumping jstack of elasticsearch processb ({}) that failed to start", pid);
167+
sh.runIgnoreExitCode("jstack " + pid);
168+
}
169+
if (Files.exists(installation.logs.resolve("elasticsearch.log"))) {
170+
logger.warn("Elasticsearch log:\n" +
171+
FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"));
172+
}
173+
throw e;
174+
}
175+
176+
try {
177+
assertions.run();
178+
} catch (Exception e) {
179+
logger.warn("Elasticsearch log:\n" +
180+
FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"));
181+
throw e;
182+
}
183+
184+
switch (distribution.packaging) {
185+
case TAR:
186+
case ZIP:
187+
Archives.stopElasticsearch(installation);
188+
break;
189+
case DEB:
190+
case RPM:
191+
Packages.stopElasticsearch(sh);
192+
break;
193+
case DOCKER:
194+
// nothing, removing container is handled externally
195+
}
196+
}
197+
198+
protected static Shell newShell() throws Exception {
123199
Shell sh = new Shell();
124200
if (distribution().hasJdk == false) {
125201
Platforms.onLinux(() -> {

0 commit comments

Comments
 (0)