diff --git a/TESTING.asciidoc b/TESTING.asciidoc index c2398de1d81..d4ec16149b8 100644 --- a/TESTING.asciidoc +++ b/TESTING.asciidoc @@ -504,8 +504,8 @@ sudo bash $PACKAGING_TESTS/run-tests.sh # run specific test cases sudo bash $PACKAGING_TESTS/run-tests.sh \ - org.elasticsearch.packaging.test.DefaultZipTests \ - org.elasticsearch.packaging.test.OssZipTests + org.elasticsearch.packaging.test.DefaultWindowsZipTests \ + org.elasticsearch.packaging.test.OssWindowsZipTests -------------------------------------------- or on Windows, from a terminal running as Administrator @@ -516,8 +516,8 @@ powershell -File $Env:PACKAGING_TESTS/run-tests.ps1 # run specific test cases powershell -File $Env:PACKAGING_TESTS/run-tests.ps1 ` - org.elasticsearch.packaging.test.DefaultZipTests ` - org.elasticsearch.packaging.test.OssZipTests + org.elasticsearch.packaging.test.DefaultWindowsZipTests ` + org.elasticsearch.packaging.test.OssWindowsZipTests -------------------------------------------- Note that on Windows boxes when running from inside the GUI, you may have to log out and diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/vagrant/VagrantTestPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/vagrant/VagrantTestPlugin.groovy index 7d8b78385a3..c43b5f62b7f 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/vagrant/VagrantTestPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/vagrant/VagrantTestPlugin.groovy @@ -60,7 +60,15 @@ class VagrantTestPlugin implements Plugin { 'packages:rpm', 'packages:oss-rpm', 'packages:deb', - 'packages:oss-deb' + 'packages:oss-deb', + 'archives:no-jdk-linux-tar', + 'archives:oss-no-jdk-linux-tar', + 'archives:no-jdk-windows-zip', + 'archives:oss-no-jdk-windows-zip', + 'packages:no-jdk-rpm', + 'packages:oss-no-jdk-rpm', + 'packages:no-jdk-deb', + 'packages:oss-no-jdk-deb' ]) /** Packages onboarded for upgrade tests **/ diff --git a/distribution/archives/build.gradle b/distribution/archives/build.gradle index cc09d741a4e..57d91567b6f 100644 --- a/distribution/archives/build.gradle +++ b/distribution/archives/build.gradle @@ -45,7 +45,7 @@ task createPluginsDir(type: EmptyDirTask) { dirMode 0755 } -CopySpec archiveFiles(CopySpec modulesFiles, String distributionType, String platform, boolean oss) { +CopySpec archiveFiles(CopySpec modulesFiles, String distributionType, String platform, boolean oss, boolean jdk) { return copySpec { into("elasticsearch-${version}") { into('lib') { @@ -59,7 +59,7 @@ CopySpec archiveFiles(CopySpec modulesFiles, String distributionType, String pla into('bin') { with binFiles(distributionType, oss) } - if (platform != null) { + if (jdk) { into('jdk') { with jdkFiles(platform) } @@ -107,19 +107,31 @@ Closure commonZipConfig = { task buildIntegTestZip(type: Zip) { configure(commonZipConfig) - with archiveFiles(transportModulesFiles, 'zip', null, true) + with archiveFiles(transportModulesFiles, 'zip', null, true, false) } task buildWindowsZip(type: Zip) { configure(commonZipConfig) archiveClassifier = 'windows-x86_64' - with archiveFiles(modulesFiles(false), 'zip', 'windows', false) + with archiveFiles(modulesFiles(false), 'zip', 'windows', false, true) } task buildOssWindowsZip(type: Zip) { configure(commonZipConfig) archiveClassifier = 'windows-x86_64' - with archiveFiles(modulesFiles(true), 'zip', 'windows', true) + with archiveFiles(modulesFiles(true), 'zip', 'windows', true, true) +} + +task buildNoJdkWindowsZip(type: Zip) { + configure(commonZipConfig) + archiveClassifier = 'no-jdk-windows-x86_64' + with archiveFiles(modulesFiles(false), 'zip', 'windows', false, false) +} + +task buildOssNoJdkWindowsZip(type: Zip) { + configure(commonZipConfig) + archiveClassifier = 'no-jdk-windows-x86_64' + with archiveFiles(modulesFiles(true), 'zip', 'windows', true, false) } Closure commonTarConfig = { @@ -132,25 +144,49 @@ Closure commonTarConfig = { task buildDarwinTar(type: Tar) { configure(commonTarConfig) archiveClassifier = 'darwin-x86_64' - with archiveFiles(modulesFiles(false), 'tar', 'darwin', false) + with archiveFiles(modulesFiles(false), 'tar', 'darwin', false, true) } task buildOssDarwinTar(type: Tar) { configure(commonTarConfig) archiveClassifier = 'darwin-x86_64' - with archiveFiles(modulesFiles(true), 'tar', 'darwin', true) + with archiveFiles(modulesFiles(true), 'tar', 'darwin', true, true) +} + +task buildNoJdkDarwinTar(type: Tar) { + configure(commonTarConfig) + archiveClassifier = 'no-jdk-darwin-x86_64' + with archiveFiles(modulesFiles(false), 'tar', 'darwin', false, false) +} + +task buildOssNoJdkDarwinTar(type: Tar) { + configure(commonTarConfig) + archiveClassifier = 'no-jdk-darwin-x86_64' + with archiveFiles(modulesFiles(true), 'tar', 'darwin', true, false) } task buildLinuxTar(type: Tar) { configure(commonTarConfig) archiveClassifier = 'linux-x86_64' - with archiveFiles(modulesFiles(false), 'tar', 'linux', false) + with archiveFiles(modulesFiles(false), 'tar', 'linux', false, true) } task buildOssLinuxTar(type: Tar) { configure(commonTarConfig) archiveClassifier = 'linux-x86_64' - with archiveFiles(modulesFiles(true), 'tar', 'linux', true) + with archiveFiles(modulesFiles(true), 'tar', 'linux', true, true) +} + +task buildNoJdkLinuxTar(type: Tar) { + configure(commonTarConfig) + archiveClassifier = 'no-jdk-linux-x86_64' + with archiveFiles(modulesFiles(false), 'tar', 'linux', false, false) +} + +task buildOssNoJdkLinuxTar(type: Tar) { + configure(commonTarConfig) + archiveClassifier = 'no-jdk-linux-x86_64' + with archiveFiles(modulesFiles(true), 'tar', 'linux', true, false) } Closure tarExists = { it -> new File('/bin/tar').exists() || new File('/usr/bin/tar').exists() || new File('/usr/local/bin/tar').exists() } diff --git a/distribution/archives/no-jdk-darwin-tar/build.gradle b/distribution/archives/no-jdk-darwin-tar/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/archives/no-jdk-darwin-tar/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/archives/no-jdk-linux-tar/build.gradle b/distribution/archives/no-jdk-linux-tar/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/archives/no-jdk-linux-tar/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/archives/no-jdk-windows-zip/build.gradle b/distribution/archives/no-jdk-windows-zip/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/archives/no-jdk-windows-zip/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/archives/oss-no-jdk-darwin-tar/build.gradle b/distribution/archives/oss-no-jdk-darwin-tar/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/archives/oss-no-jdk-darwin-tar/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/archives/oss-no-jdk-linux-tar/build.gradle b/distribution/archives/oss-no-jdk-linux-tar/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/archives/oss-no-jdk-linux-tar/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/archives/oss-no-jdk-windows-zip/build.gradle b/distribution/archives/oss-no-jdk-windows-zip/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/archives/oss-no-jdk-windows-zip/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/packages/build.gradle b/distribution/packages/build.gradle index 8d1bbbcc399..a7f178e4b82 100644 --- a/distribution/packages/build.gradle +++ b/distribution/packages/build.gradle @@ -64,7 +64,8 @@ buildscript { void addProcessFilesTask(String type, boolean oss) { String packagingFiles = "build/packaging/${ oss ? 'oss-' : ''}${type}" - task("process${oss ? 'Oss' : ''}${type.capitalize()}Files", type: Copy) { + String taskName = "process${oss ? 'Oss' : ''}${type.capitalize()}Files" + task(taskName, type: Copy) { into packagingFiles with copySpec { @@ -98,17 +99,18 @@ addProcessFilesTask('rpm', false) // Common configuration that is package dependent. This can't go in ospackage // since we have different templated files that need to be consumed, but the structure // is the same -Closure commonPackageConfig(String type, boolean oss) { +Closure commonPackageConfig(String type, boolean oss, boolean jdk) { return { dependsOn "process${oss ? 'Oss' : ''}${type.capitalize()}Files" packageName "elasticsearch${oss ? '-oss' : ''}" arch (type == 'deb' ? 'amd64' : 'X86_64') // Follow elasticsearch's file naming convention - archiveName "${packageName}-${project.version}-${archString}.${type}" + String jdkString = jdk ? "" : "no-jdk-" + archiveName "${packageName}-${project.version}-${jdkString}${archString}.${type}" - String prefix = "${oss ? 'oss-' : ''}${type}" + String prefix = "${oss ? 'oss-' : ''}${jdk ? '' : 'no-jdk-'}${type}" destinationDir = file("${prefix}/build/distributions") - String packagingFiles = "build/packaging/${prefix}" + String packagingFiles = "build/packaging/${oss ? 'oss-' : ''}${type}" String scripts = "${packagingFiles}/scripts" preInstall file("${scripts}/preinst") @@ -135,8 +137,10 @@ Closure commonPackageConfig(String type, boolean oss) { into('modules') { with modulesFiles(oss) } - into('jdk') { - with jdkFiles('linux') + if (jdk) { + into('jdk') { + with jdkFiles('linux') + } } // we need to specify every intermediate directory in these paths so the package managers know they are explicitly // intended to manage them; otherwise they may be left behind on uninstallation. duplicate calls of the same @@ -289,9 +293,9 @@ ospackage { with noticeFile } -Closure commonDebConfig(boolean oss) { +Closure commonDebConfig(boolean oss, boolean jdk) { return { - configure(commonPackageConfig('deb', oss)) + configure(commonPackageConfig('deb', oss, jdk)) // jdeb does not provide a way to set the License control attribute, and ospackage // silently ignores setting it. Instead, we set the license as "custom field" @@ -314,16 +318,24 @@ Closure commonDebConfig(boolean oss) { } task buildDeb(type: Deb) { - configure(commonDebConfig(false)) + configure(commonDebConfig(false, true)) } task buildOssDeb(type: Deb) { - configure(commonDebConfig(true)) + configure(commonDebConfig(true, true)) } -Closure commonRpmConfig(boolean oss) { +task buildNoJdkDeb(type: Deb) { + configure(commonDebConfig(false, false)) +} + +task buildOssNoJdkDeb(type: Deb) { + configure(commonDebConfig(true, false)) +} + +Closure commonRpmConfig(boolean oss, boolean jdk) { return { - configure(commonPackageConfig('rpm', oss)) + configure(commonPackageConfig('rpm', oss, jdk)) if (oss) { license 'ASL 2.0' @@ -351,11 +363,19 @@ Closure commonRpmConfig(boolean oss) { } task buildRpm(type: Rpm) { - configure(commonRpmConfig(false)) + configure(commonRpmConfig(false, true)) } task buildOssRpm(type: Rpm) { - configure(commonRpmConfig(true)) + configure(commonRpmConfig(true, true)) +} + +task buildNoJdkRpm(type: Rpm) { + configure(commonRpmConfig(false, false)) +} + +task buildOssNoJdkRpm(type: Rpm) { + configure(commonRpmConfig(true, false)) } Closure dpkgExists = { it -> new File('/bin/dpkg-deb').exists() || new File('/usr/bin/dpkg-deb').exists() || new File('/usr/local/bin/dpkg-deb').exists() } diff --git a/distribution/packages/no-jdk-deb/build.gradle b/distribution/packages/no-jdk-deb/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/packages/no-jdk-deb/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/packages/no-jdk-rpm/build.gradle b/distribution/packages/no-jdk-rpm/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/packages/no-jdk-rpm/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/packages/no-jdk-rpm/src/main/resources/logo/elastic.gif b/distribution/packages/no-jdk-rpm/src/main/resources/logo/elastic.gif new file mode 100755 index 00000000000..e3b20998d53 Binary files /dev/null and b/distribution/packages/no-jdk-rpm/src/main/resources/logo/elastic.gif differ diff --git a/distribution/packages/oss-no-jdk-deb/build.gradle b/distribution/packages/oss-no-jdk-deb/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/packages/oss-no-jdk-deb/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/distribution/packages/oss-no-jdk-rpm/build.gradle b/distribution/packages/oss-no-jdk-rpm/build.gradle new file mode 100644 index 00000000000..4a6dde5fc0c --- /dev/null +++ b/distribution/packages/oss-no-jdk-rpm/build.gradle @@ -0,0 +1,2 @@ +// This file is intentionally blank. All configuration of the +// distribution is done in the parent project. diff --git a/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java b/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java index 18289d321a5..a616b1743b7 100644 --- a/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java +++ b/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java @@ -19,11 +19,6 @@ package org.elasticsearch.example.expertscript; -import java.io.IOException; -import java.io.UncheckedIOException; -import java.util.Collection; -import java.util.Map; - import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.Term; @@ -36,6 +31,11 @@ import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; import org.elasticsearch.search.lookup.SearchLookup; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.Collection; +import java.util.Map; + /** * An example script plugin that adds a {@link ScriptEngine} implementing expert scoring. */ diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/PackagingTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/PackagingTests.java index a2b11eaff55..06c978b823a 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/PackagingTests.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/PackagingTests.java @@ -21,28 +21,36 @@ package org.elasticsearch.packaging; import org.elasticsearch.packaging.test.DefaultDebBasicTests; import org.elasticsearch.packaging.test.DefaultDebPreservationTests; +import org.elasticsearch.packaging.test.DefaultLinuxTarTests; +import org.elasticsearch.packaging.test.DefaultNoJdkDebBasicTests; +import org.elasticsearch.packaging.test.DefaultNoJdkLinuxTarTests; +import org.elasticsearch.packaging.test.DefaultNoJdkRpmBasicTests; +import org.elasticsearch.packaging.test.DefaultNoJdkWindowsZipTests; import org.elasticsearch.packaging.test.DefaultRpmBasicTests; import org.elasticsearch.packaging.test.DefaultRpmPreservationTests; -import org.elasticsearch.packaging.test.DefaultTarTests; import org.elasticsearch.packaging.test.DefaultWindowsServiceTests; -import org.elasticsearch.packaging.test.DefaultZipTests; +import org.elasticsearch.packaging.test.DefaultWindowsZipTests; import org.elasticsearch.packaging.test.OssDebBasicTests; import org.elasticsearch.packaging.test.OssDebPreservationTests; +import org.elasticsearch.packaging.test.OssLinuxTarTests; +import org.elasticsearch.packaging.test.OssNoJdkDebBasicTests; +import org.elasticsearch.packaging.test.OssNoJdkLinuxTarTests; +import org.elasticsearch.packaging.test.OssNoJdkRpmBasicTests; +import org.elasticsearch.packaging.test.OssNoJdkWindowsZipTests; import org.elasticsearch.packaging.test.OssRpmBasicTests; import org.elasticsearch.packaging.test.OssRpmPreservationTests; -import org.elasticsearch.packaging.test.OssTarTests; import org.elasticsearch.packaging.test.OssWindowsServiceTests; -import org.elasticsearch.packaging.test.OssZipTests; +import org.elasticsearch.packaging.test.OssWindowsZipTests; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ - DefaultTarTests.class, - OssTarTests.class, - DefaultZipTests.class, - OssZipTests.class, + DefaultLinuxTarTests.class, + OssLinuxTarTests.class, + DefaultWindowsZipTests.class, + OssWindowsZipTests.class, DefaultRpmBasicTests.class, OssRpmBasicTests.class, DefaultDebBasicTests.class, @@ -52,6 +60,14 @@ import org.junit.runners.Suite.SuiteClasses; DefaultRpmPreservationTests.class, OssRpmPreservationTests.class, DefaultWindowsServiceTests.class, - OssWindowsServiceTests.class + OssWindowsServiceTests.class, + DefaultNoJdkLinuxTarTests.class, + OssNoJdkLinuxTarTests.class, + DefaultNoJdkWindowsZipTests.class, + OssNoJdkWindowsZipTests.class, + DefaultNoJdkRpmBasicTests.class, + OssNoJdkRpmBasicTests.class, + DefaultNoJdkDebBasicTests.class, + OssNoJdkDebBasicTests.class }) public class PackagingTests {} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/ArchiveTestCase.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/ArchiveTestCase.java index 133237ecf7e..f6b231175e4 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/ArchiveTestCase.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/ArchiveTestCase.java @@ -71,7 +71,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assumeThat(installation, is(notNullValue())); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); final Result r = sh.run(bin.elasticsearchPlugin + " list"); assertThat(r.stdout, isEmptyString()); @@ -81,18 +81,23 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assumeThat(installation, is(notNullValue())); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); + sh.getEnv().remove("JAVA_HOME"); final Path relocatedJdk = installation.bundledJdk.getParent().resolve("jdk.relocated"); try { - mv(installation.bundledJdk, relocatedJdk); + if (distribution().hasJdk) { + mv(installation.bundledJdk, relocatedJdk); + } // ask for elasticsearch version to quickly exit if java is actually found (ie test failure) final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -v"); assertThat(runResult.exitCode, is(1)); assertThat(runResult.stderr, containsString("could not find java in JAVA_HOME or bundled")); } finally { - mv(relocatedJdk, installation.bundledJdk); + if (distribution().hasJdk) { + mv(relocatedJdk, installation.bundledJdk); + } } } @@ -100,7 +105,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assumeThat(installation, is(notNullValue())); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); Platforms.onLinux(() -> sh.run("sudo -u " + ARCHIVE_OWNER + " " + bin.elasticsearchKeystore + " create")); @@ -135,16 +140,20 @@ public abstract class ArchiveTestCase extends PackagingTestCase { // cleanup from previous test rm(installation.config("elasticsearch.keystore")); - Archives.runElasticsearch(installation); + Archives.runElasticsearch(installation, newShell()); - assertTrue("gc logs exist", Files.exists(installation.logs.resolve("gc.log"))); + final String gcLogName = Platforms.LINUX && distribution().hasJdk == false + ? "gc.log.0.current" + : "gc.log"; + + assertTrue("gc logs exist", Files.exists(installation.logs.resolve(gcLogName))); ServerUtils.runElasticsearchTests(); Archives.stopElasticsearch(installation); } public void assertRunsWithJavaHome() throws IOException { - Shell sh = new Shell(); + Shell sh = newShell(); Platforms.onLinux(() -> { String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); @@ -172,6 +181,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { public void test52BundledJdkRemoved() throws IOException { assumeThat(installation, is(notNullValue())); + assumeThat(distribution().hasJdk, is(true)); Path relocatedJdk = installation.bundledJdk.getParent().resolve("jdk.relocated"); try { @@ -188,7 +198,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assertThat(installation.config("elasticsearch.keystore"), file(File, ARCHIVE_OWNER, ARCHIVE_OWNER, p660)); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); Platforms.onLinux(() -> { final Result result = sh.run("sudo -u " + ARCHIVE_OWNER + " " + bin.elasticsearchKeystore + " list"); @@ -220,7 +230,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { "-Dlog4j2.disable.jmx=true\n"; append(tempConf.resolve("jvm.options"), jvmOptions); - final Shell sh = new Shell(); + final Shell sh = newShell(); Platforms.onLinux(() -> sh.run("chown -R elasticsearch:elasticsearch " + tempConf)); Platforms.onWindows(() -> sh.run( "$account = New-Object System.Security.Principal.NTAccount 'vagrant'; " + @@ -233,7 +243,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { "}" )); - final Shell serverShell = new Shell(); + final Shell serverShell = newShell(); serverShell.getEnv().put("ES_PATH_CONF", tempConf.toString()); serverShell.getEnv().put("ES_JAVA_OPTS", "-XX:-UseCompressedOops"); @@ -266,7 +276,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { append(tempConf.resolve("elasticsearch.yml"), "node.name: relative"); - final Shell sh = new Shell(); + final Shell sh = newShell(); Platforms.onLinux(() -> sh.run("chown -R elasticsearch:elasticsearch " + temp)); Platforms.onWindows(() -> sh.run( "$account = New-Object System.Security.Principal.NTAccount 'vagrant'; " + @@ -279,7 +289,8 @@ public abstract class ArchiveTestCase extends PackagingTestCase { "}" )); - final Shell serverShell = new Shell(temp); + final Shell serverShell = newShell(); + serverShell.setWorkingDirectory(temp); serverShell.getEnv().put("ES_PATH_CONF", "config"); Archives.runElasticsearch(installation, serverShell); @@ -297,7 +308,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assumeThat(installation, is(notNullValue())); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); if (distribution().equals(Distribution.DEFAULT_LINUX) || distribution().equals(Distribution.DEFAULT_WINDOWS)) { assertTrue(Files.exists(installation.lib.resolve("tools").resolve("security-cli"))); @@ -321,7 +332,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assumeThat(installation, is(notNullValue())); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); Platforms.PlatformAction action = () -> { final Result result = sh.run(bin.elasticsearchShard + " help"); @@ -338,7 +349,7 @@ public abstract class ArchiveTestCase extends PackagingTestCase { assumeThat(installation, is(notNullValue())); final Installation.Executables bin = installation.executables(); - final Shell sh = new Shell(); + final Shell sh = newShell(); Platforms.PlatformAction action = () -> { final Result result = sh.run(bin.elasticsearchNode + " -h"); diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DebPreservationTestCase.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DebPreservationTestCase.java index 522c038fc2b..1b2b891da45 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DebPreservationTestCase.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DebPreservationTestCase.java @@ -26,6 +26,7 @@ import org.elasticsearch.packaging.util.Shell; import org.junit.Before; import org.junit.BeforeClass; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; @@ -36,14 +37,12 @@ import static org.elasticsearch.packaging.util.Packages.SYSVINIT_SCRIPT; import static org.elasticsearch.packaging.util.Packages.assertInstalled; import static org.elasticsearch.packaging.util.Packages.assertRemoved; import static org.elasticsearch.packaging.util.Packages.install; -import static org.elasticsearch.packaging.util.Packages.remove; import static org.elasticsearch.packaging.util.Packages.packageStatus; +import static org.elasticsearch.packaging.util.Packages.remove; import static org.elasticsearch.packaging.util.Packages.verifyPackageInstallation; import static org.elasticsearch.packaging.util.Platforms.isDPKG; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeThat; import static org.junit.Assume.assumeTrue; @@ -66,11 +65,11 @@ public abstract class DebPreservationTestCase extends PackagingTestCase { assumeTrue("only compatible distributions", distribution().packaging.compatible); } - public void test10Install() { + public void test10Install() throws IOException { assertRemoved(distribution()); installation = install(distribution()); assertInstalled(distribution()); - verifyPackageInstallation(installation, distribution()); + verifyPackageInstallation(installation, distribution(), newShell()); } public void test20Remove() { diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultTarTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultLinuxTarTests.java similarity index 94% rename from qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultTarTests.java rename to qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultLinuxTarTests.java index b6c633c0e72..bcca1a7e9e0 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultTarTests.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultLinuxTarTests.java @@ -21,7 +21,7 @@ package org.elasticsearch.packaging.test; import org.elasticsearch.packaging.util.Distribution; -public class DefaultTarTests extends ArchiveTestCase { +public class DefaultLinuxTarTests extends ArchiveTestCase { @Override protected Distribution distribution() { diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkDebBasicTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkDebBasicTests.java new file mode 100644 index 00000000000..23c87b6e936 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkDebBasicTests.java @@ -0,0 +1,31 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class DefaultNoJdkDebBasicTests extends PackageTestCase { + + @Override + protected Distribution distribution() { + return Distribution.DEFAULT_NO_JDK_DEB; + } + +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkLinuxTarTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkLinuxTarTests.java new file mode 100644 index 00000000000..fce7c556718 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkLinuxTarTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class DefaultNoJdkLinuxTarTests extends ArchiveTestCase { + + @Override + protected Distribution distribution() { + return Distribution.DEFAULT_NO_JDK_LINUX; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkRpmBasicTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkRpmBasicTests.java new file mode 100644 index 00000000000..3bb5aa8eae8 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkRpmBasicTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class DefaultNoJdkRpmBasicTests extends PackageTestCase { + + @Override + protected Distribution distribution() { + return Distribution.DEFAULT_NO_JDK_RPM; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkWindowsZipTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkWindowsZipTests.java new file mode 100644 index 00000000000..d797bdaa9f3 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultNoJdkWindowsZipTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class DefaultNoJdkWindowsZipTests extends ArchiveTestCase { + + @Override + protected Distribution distribution() { + return Distribution.DEFAULT_NO_JDK_WINDOWS; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultZipTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultWindowsZipTests.java similarity index 94% rename from qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultZipTests.java rename to qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultWindowsZipTests.java index 852535188cf..a7491d5b0ac 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultZipTests.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/DefaultWindowsZipTests.java @@ -21,7 +21,7 @@ package org.elasticsearch.packaging.test; import org.elasticsearch.packaging.util.Distribution; -public class DefaultZipTests extends ArchiveTestCase { +public class DefaultWindowsZipTests extends ArchiveTestCase { @Override protected Distribution distribution() { diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssTarTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssLinuxTarTests.java similarity index 94% rename from qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssTarTests.java rename to qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssLinuxTarTests.java index 3e72f1da5cb..bf4305aab53 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssTarTests.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssLinuxTarTests.java @@ -21,7 +21,7 @@ package org.elasticsearch.packaging.test; import org.elasticsearch.packaging.util.Distribution; -public class OssTarTests extends ArchiveTestCase { +public class OssLinuxTarTests extends ArchiveTestCase { @Override protected Distribution distribution() { diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkDebBasicTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkDebBasicTests.java new file mode 100644 index 00000000000..47d2f662f4d --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkDebBasicTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class OssNoJdkDebBasicTests extends PackageTestCase { + + @Override + protected Distribution distribution() { + return Distribution.OSS_NO_JDK_DEB; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkLinuxTarTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkLinuxTarTests.java new file mode 100644 index 00000000000..dae5068f362 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkLinuxTarTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class OssNoJdkLinuxTarTests extends ArchiveTestCase { + + @Override + protected Distribution distribution() { + return Distribution.OSS_NO_JDK_LINUX; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkRpmBasicTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkRpmBasicTests.java new file mode 100644 index 00000000000..1ebf7043039 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkRpmBasicTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class OssNoJdkRpmBasicTests extends PackageTestCase { + + @Override + protected Distribution distribution() { + return Distribution.OSS_NO_JDK_RPM; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkWindowsZipTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkWindowsZipTests.java new file mode 100644 index 00000000000..639137e8879 --- /dev/null +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssNoJdkWindowsZipTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.Distribution; + +public class OssNoJdkWindowsZipTests extends ArchiveTestCase { + + @Override + protected Distribution distribution() { + return Distribution.OSS_NO_JDK_WINDOWS; + } +} diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssZipTests.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssWindowsZipTests.java similarity index 94% rename from qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssZipTests.java rename to qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssWindowsZipTests.java index 418ba6d3446..2a0df6cab96 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssZipTests.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/OssWindowsZipTests.java @@ -21,7 +21,7 @@ package org.elasticsearch.packaging.test; import org.elasticsearch.packaging.util.Distribution; -public class OssZipTests extends ArchiveTestCase { +public class OssWindowsZipTests extends ArchiveTestCase { @Override protected Distribution distribution() { diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackageTestCase.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackageTestCase.java index 2baeda19e3d..e306e7c63ce 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackageTestCase.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackageTestCase.java @@ -61,29 +61,27 @@ public abstract class PackageTestCase extends PackagingTestCase { assumeTrue("only compatible distributions", distribution().packaging.compatible); } - public void test10InstallPackage() { + public void test10InstallPackage() throws IOException { assertRemoved(distribution()); installation = install(distribution()); assertInstalled(distribution()); - verifyPackageInstallation(installation, distribution()); + verifyPackageInstallation(installation, distribution(), newShell()); } public void test20PluginsCommandWhenNoPlugins() { assumeThat(installation, is(notNullValue())); - final Shell sh = new Shell(); - assertThat(sh.run(installation.bin("elasticsearch-plugin") + " list").stdout, isEmptyString()); + assertThat(newShell().run(installation.bin("elasticsearch-plugin") + " list").stdout, isEmptyString()); } public void test30InstallDoesNotStartServer() { assumeThat(installation, is(notNullValue())); - final Shell sh = new Shell(); - assertThat(sh.run("ps aux").stdout, not(containsString("org.elasticsearch.bootstrap.Elasticsearch"))); + assertThat(newShell().run("ps aux").stdout, not(containsString("org.elasticsearch.bootstrap.Elasticsearch"))); } public void assertRunsWithJavaHome() throws IOException { - Shell sh = new Shell(); + Shell sh = newShell(); String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); byte[] originalEnvFile = Files.readAllBytes(installation.envFile); @@ -103,12 +101,15 @@ public abstract class PackageTestCase extends PackagingTestCase { public void test31JavaHomeOverride() throws IOException { assumeThat(installation, is(notNullValue())); + // we always run with java home when no bundled jdk is included, so this test would be repetitive + assumeThat(distribution().hasJdk, is(true)); assertRunsWithJavaHome(); } public void test42BundledJdkRemoved() throws IOException { assumeThat(installation, is(notNullValue())); + assumeThat(distribution().hasJdk, is(true)); Path relocatedJdk = installation.bundledJdk.getParent().resolve("jdk.relocated"); try { @@ -124,7 +125,7 @@ public abstract class PackageTestCase extends PackagingTestCase { startElasticsearch(); runElasticsearchTests(); - verifyPackageInstallation(installation, distribution()); // check startup script didn't change permissions + verifyPackageInstallation(installation, distribution(), newShell()); // check startup script didn't change permissions } public void test50Remove() { @@ -133,7 +134,7 @@ public abstract class PackageTestCase extends PackagingTestCase { remove(distribution()); // removing must stop the service - final Shell sh = new Shell(); + final Shell sh = newShell(); assertThat(sh.run("ps aux").stdout, not(containsString("org.elasticsearch.bootstrap.Elasticsearch"))); if (isSystemd()) { @@ -178,12 +179,12 @@ public abstract class PackageTestCase extends PackagingTestCase { assertFalse(Files.exists(SYSTEMD_SERVICE)); } - public void test60Reinstall() { + public void test60Reinstall() throws IOException { assumeThat(installation, is(notNullValue())); installation = install(distribution()); assertInstalled(distribution()); - verifyPackageInstallation(installation, distribution()); + verifyPackageInstallation(installation, distribution(), newShell()); remove(distribution()); assertRemoved(distribution()); diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackagingTestCase.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackagingTestCase.java index 81d4a90b2a0..7cb860e617e 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackagingTestCase.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackagingTestCase.java @@ -27,6 +27,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.elasticsearch.packaging.util.Distribution; import org.elasticsearch.packaging.util.Installation; +import org.elasticsearch.packaging.util.Platforms; +import org.elasticsearch.packaging.util.Shell; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; @@ -70,5 +72,19 @@ public abstract class PackagingTestCase extends Assert { /** The {@link Distribution} that should be tested in this case */ protected abstract Distribution distribution(); + protected Shell newShell() { + Shell sh = new Shell(); + if (distribution().hasJdk == false) { + Platforms.onLinux(() -> { + String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); + sh.getEnv().put("JAVA_HOME", systemJavaHome); + }); + Platforms.onWindows(() -> { + final String systemJavaHome = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim(); + sh.getEnv().put("JAVA_HOME", systemJavaHome); + }); + } + return sh; + } } diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/RpmPreservationTestCase.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/RpmPreservationTestCase.java index 36558ea2429..5cfc10b110a 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/RpmPreservationTestCase.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/test/RpmPreservationTestCase.java @@ -26,6 +26,7 @@ import org.elasticsearch.packaging.util.Shell; import org.junit.Before; import org.junit.BeforeClass; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; @@ -66,11 +67,11 @@ public abstract class RpmPreservationTestCase extends PackagingTestCase { assumeTrue("only compatible distributions", distribution().packaging.compatible); } - public void test10Install() { + public void test10Install() throws IOException { assertRemoved(distribution()); installation = install(distribution()); assertInstalled(distribution()); - verifyPackageInstallation(installation, distribution()); + verifyPackageInstallation(installation, distribution(), newShell()); } public void test20Remove() { @@ -88,12 +89,12 @@ public abstract class RpmPreservationTestCase extends PackagingTestCase { assertFalse(Files.exists(installation.envFile)); } - public void test30PreserveConfig() { + public void test30PreserveConfig() throws IOException { final Shell sh = new Shell(); installation = install(distribution()); assertInstalled(distribution()); - verifyPackageInstallation(installation, distribution()); + verifyPackageInstallation(installation, distribution(), newShell()); sh.run("echo foobar | " + installation.executables().elasticsearchKeystore + " add --stdin foo.bar"); Stream.of( diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Distribution.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Distribution.java index 5ed1bcb5a3d..b73438bc4c9 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Distribution.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Distribution.java @@ -23,42 +23,59 @@ import java.util.Locale; public enum Distribution { - OSS_LINUX(Packaging.TAR, Platform.LINUX, Flavor.OSS), - OSS_WINDOWS(Packaging.ZIP, Platform.WINDOWS, Flavor.OSS), - OSS_DARWIN(Packaging.TAR, Platform.DARWIN, Flavor.OSS), - OSS_DEB(Packaging.DEB, Platform.LINUX, Flavor.OSS), - OSS_RPM(Packaging.RPM, Platform.LINUX, Flavor.OSS), + OSS_LINUX(Packaging.TAR, Platform.LINUX, Flavor.OSS, true), + OSS_WINDOWS(Packaging.ZIP, Platform.WINDOWS, Flavor.OSS, true), + OSS_DARWIN(Packaging.TAR, Platform.DARWIN, Flavor.OSS, true), + OSS_DEB(Packaging.DEB, Platform.LINUX, Flavor.OSS, true), + OSS_RPM(Packaging.RPM, Platform.LINUX, Flavor.OSS, true), - DEFAULT_LINUX(Packaging.TAR, Platform.LINUX, Flavor.DEFAULT), - DEFAULT_WINDOWS(Packaging.ZIP, Platform.WINDOWS, Flavor.DEFAULT), - DEFAULT_DARWIN(Packaging.TAR, Platform.DARWIN, Flavor.DEFAULT), - DEFAULT_DEB(Packaging.DEB, Platform.LINUX, Flavor.DEFAULT), - DEFAULT_RPM(Packaging.RPM, Platform.LINUX, Flavor.DEFAULT); + DEFAULT_LINUX(Packaging.TAR, Platform.LINUX, Flavor.DEFAULT, true), + DEFAULT_WINDOWS(Packaging.ZIP, Platform.WINDOWS, Flavor.DEFAULT, true), + DEFAULT_DARWIN(Packaging.TAR, Platform.DARWIN, Flavor.DEFAULT, true), + DEFAULT_DEB(Packaging.DEB, Platform.LINUX, Flavor.DEFAULT, true), + DEFAULT_RPM(Packaging.RPM, Platform.LINUX, Flavor.DEFAULT, true), + + OSS_NO_JDK_LINUX(Packaging.TAR, Platform.LINUX, Flavor.OSS, false), + OSS_NO_JDK_WINDOWS(Packaging.ZIP, Platform.WINDOWS, Flavor.OSS, false), + OSS_NO_JDK_DARWIN(Packaging.TAR, Platform.DARWIN, Flavor.OSS, false), + OSS_NO_JDK_DEB(Packaging.DEB, Platform.LINUX, Flavor.OSS, false), + OSS_NO_JDK_RPM(Packaging.RPM, Platform.LINUX, Flavor.OSS, false), + + DEFAULT_NO_JDK_LINUX(Packaging.TAR, Platform.LINUX, Flavor.DEFAULT, false), + DEFAULT_NO_JDK_WINDOWS(Packaging.ZIP, Platform.WINDOWS, Flavor.DEFAULT, false), + DEFAULT_NO_JDK_DARWIN(Packaging.TAR, Platform.DARWIN, Flavor.DEFAULT, false), + DEFAULT_NO_JDK_DEB(Packaging.DEB, Platform.LINUX, Flavor.DEFAULT, false), + DEFAULT_NO_JDK_RPM(Packaging.RPM, Platform.LINUX, Flavor.DEFAULT, false); public final Packaging packaging; public final Platform platform; public final Flavor flavor; + public final boolean hasJdk; - Distribution(Packaging packaging, Platform platform, Flavor flavor) { + Distribution(Packaging packaging, Platform platform, Flavor flavor, boolean hasJdk) { this.packaging = packaging; this.platform = platform; this.flavor = flavor; + this.hasJdk = hasJdk; } public String filename(String version) { - String architecture = ""; + String classifier = ""; if (version.startsWith("6.") == false) { + if (hasJdk == false) { + classifier += "-no-jdk"; + } if (packaging == Packaging.DEB) { - architecture = "-amd64"; + classifier += "-amd64"; } else { if (packaging != Packaging.RPM) { - architecture = "-" + platform.toString(); + classifier += "-" + platform.toString(); } - architecture += "-x86_64"; + classifier += "-x86_64"; } } - return flavor.name + "-" + version + architecture + packaging.extension; + return flavor.name + "-" + version + classifier + packaging.extension; } public boolean isDefault() { diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Packages.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Packages.java index 5adc67df2d2..7014a627a7a 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Packages.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Packages.java @@ -22,9 +22,11 @@ package org.elasticsearch.packaging.util; import org.elasticsearch.packaging.util.Shell.Result; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.util.regex.Pattern; import java.util.stream.Stream; @@ -88,25 +90,31 @@ public class Packages { return result; } - public static Installation install(Distribution distribution) { + public static Installation install(Distribution distribution) throws IOException { return install(distribution, getCurrentVersion()); } - public static Installation install(Distribution distribution, String version) { - final Result result = runInstallCommand(distribution, version); + public static Installation install(Distribution distribution, String version) throws IOException { + Shell sh = new Shell(); + String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); + if (distribution.hasJdk == false) { + sh.getEnv().put("JAVA_HOME", systemJavaHome); + } + final Result result = runInstallCommand(distribution, version, sh); if (result.exitCode != 0) { throw new RuntimeException("Installing distribution " + distribution + " version " + version + " failed: " + result); } - return Installation.ofPackage(distribution.packaging); + Installation installation = Installation.ofPackage(distribution.packaging); + + if (distribution.hasJdk == false) { + Files.write(installation.envFile, ("JAVA_HOME=" + systemJavaHome + "\n").getBytes(StandardCharsets.UTF_8), + StandardOpenOption.APPEND); + } + return installation; } - public static Result runInstallCommand(Distribution distribution) { - return runInstallCommand(distribution, getCurrentVersion()); - } - - public static Result runInstallCommand(Distribution distribution, String version) { - final Shell sh = new Shell(); + public static Result runInstallCommand(Distribution distribution, String version, Shell sh) { final Path distributionFile = getDistributionFile(distribution, version); if (Platforms.isRPM()) { @@ -142,16 +150,15 @@ public class Packages { }); } - public static void verifyPackageInstallation(Installation installation, Distribution distribution) { - verifyOssInstallation(installation, distribution); + public static void verifyPackageInstallation(Installation installation, Distribution distribution, Shell sh) { + verifyOssInstallation(installation, distribution, sh); if (distribution.flavor == Distribution.Flavor.DEFAULT) { verifyDefaultInstallation(installation); } } - private static void verifyOssInstallation(Installation es, Distribution distribution) { - final Shell sh = new Shell(); + private static void verifyOssInstallation(Installation es, Distribution distribution, Shell sh) { sh.run("id elasticsearch"); sh.run("getent group elasticsearch"); diff --git a/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Shell.java b/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Shell.java index 3e4ac7869d4..b4374381305 100644 --- a/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Shell.java +++ b/qa/vagrant/src/main/java/org/elasticsearch/packaging/util/Shell.java @@ -31,37 +31,27 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Stream; -import static java.util.Collections.emptyMap; - /** * Wrapper to run shell commands and collect their outputs in a less verbose way */ public class Shell { final Map env; - final Path workingDirectory; + Path workingDirectory; public Shell() { - this(emptyMap(), null); - } - - public Shell(Map env) { - this(env, null); - } - - public Shell(Path workingDirectory) { - this(emptyMap(), workingDirectory); - } - - public Shell(Map env, Path workingDirectory) { - this.env = new HashMap<>(env); - this.workingDirectory = workingDirectory; + this.env = new HashMap<>(); + this.workingDirectory = null; } public Map getEnv() { return env; } + public void setWorkingDirectory(Path workingDirectory) { + this.workingDirectory = workingDirectory; + } + /** * Run the provided string as a shell script. On Linux the {@code bash -c [script]} syntax will be used, and on Windows * the {@code powershell.exe -Command [script]} syntax will be used. Throws an exception if the exit code of the script is nonzero diff --git a/settings.gradle b/settings.gradle index 18f5f63332e..a05e0bf0003 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,15 +18,25 @@ List projects = [ 'distribution:archives:integ-test-zip', 'distribution:archives:oss-windows-zip', 'distribution:archives:windows-zip', + 'distribution:archives:oss-no-jdk-windows-zip', + 'distribution:archives:no-jdk-windows-zip', 'distribution:archives:oss-darwin-tar', 'distribution:archives:darwin-tar', + 'distribution:archives:oss-no-jdk-darwin-tar', + 'distribution:archives:no-jdk-darwin-tar', 'distribution:archives:oss-linux-tar', 'distribution:archives:linux-tar', + 'distribution:archives:oss-no-jdk-linux-tar', + 'distribution:archives:no-jdk-linux-tar', 'distribution:docker', 'distribution:packages:oss-deb', 'distribution:packages:deb', + 'distribution:packages:oss-no-jdk-deb', + 'distribution:packages:no-jdk-deb', 'distribution:packages:oss-rpm', 'distribution:packages:rpm', + 'distribution:packages:oss-no-jdk-rpm', + 'distribution:packages:no-jdk-rpm', 'distribution:bwc:bugfix', 'distribution:bwc:maintenance', 'distribution:bwc:minor',