Add no-jdk distributions (#39882)
This commit adds a variant for every official distribution that omits the bundled jdk. The "no-jdk" naming is conveyed through the package classifier, alongside the platform. Package tests are also added for each new distribution.
This commit is contained in:
parent
a323132503
commit
8f09c77777
|
@ -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
|
||||
|
|
|
@ -60,7 +60,15 @@ class VagrantTestPlugin implements Plugin<Project> {
|
|||
'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 **/
|
||||
|
|
|
@ -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() }
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -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() }
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -0,0 +1,2 @@
|
|||
// This file is intentionally blank. All configuration of the
|
||||
// distribution is done in the parent project.
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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() {
|
|
@ -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() {
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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() {
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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<String, String> env;
|
||||
final Path workingDirectory;
|
||||
Path workingDirectory;
|
||||
|
||||
public Shell() {
|
||||
this(emptyMap(), null);
|
||||
}
|
||||
|
||||
public Shell(Map<String, String> env) {
|
||||
this(env, null);
|
||||
}
|
||||
|
||||
public Shell(Path workingDirectory) {
|
||||
this(emptyMap(), workingDirectory);
|
||||
}
|
||||
|
||||
public Shell(Map<String, String> env, Path workingDirectory) {
|
||||
this.env = new HashMap<>(env);
|
||||
this.workingDirectory = workingDirectory;
|
||||
this.env = new HashMap<>();
|
||||
this.workingDirectory = null;
|
||||
}
|
||||
|
||||
public Map<String, String> 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
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue