Tests & cleanup:
- transport & service test (remove license functionality) - nuked LicenseException class - keyPairGenerator tests - minor cleanup & restructuring Original commit: elastic/x-pack-elasticsearch@51acb2f493
This commit is contained in:
parent
bb929c7470
commit
d8d241b4bb
|
@ -53,7 +53,6 @@ public class ESLicenseSigner {
|
||||||
try {
|
try {
|
||||||
return Files.readAllBytes(privateKeyPath);
|
return Files.readAllBytes(privateKeyPath);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
|
||||||
throw new IllegalStateException(e);
|
throw new IllegalStateException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,8 @@ import static org.elasticsearch.common.cli.CliToolConfig.config;
|
||||||
|
|
||||||
public class KeyPairGeneratorTool extends CliTool {
|
public class KeyPairGeneratorTool extends CliTool {
|
||||||
|
|
||||||
private static final CliToolConfig CONFIG = config("key-pair-generator", KeyPairGeneratorTool.class)
|
public static final String NAME = "key-pair-generator";
|
||||||
|
private static final CliToolConfig CONFIG = config(NAME, KeyPairGeneratorTool.class)
|
||||||
.cmds(KeyPairGenerator.CMD)
|
.cmds(KeyPairGenerator.CMD)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -41,18 +42,18 @@ public class KeyPairGeneratorTool extends CliTool {
|
||||||
return KeyPairGenerator.parse(terminal, commandLine);
|
return KeyPairGenerator.parse(terminal, commandLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class KeyPairGenerator extends Command {
|
public static class KeyPairGenerator extends Command {
|
||||||
|
|
||||||
public static final String DEFAULT_PASS_PHRASE = "elasticsearch-license";
|
public static final String DEFAULT_PASS_PHRASE = "elasticsearch-license";
|
||||||
private static final String NAME = "key-pair-generator";
|
|
||||||
private static final CliToolConfig.Cmd CMD = cmd(NAME, KeyPairGenerator.class)
|
private static final CliToolConfig.Cmd CMD = cmd(NAME, KeyPairGenerator.class)
|
||||||
.options(
|
.options(
|
||||||
option("pub", "publicKeyPath").required(true).hasArg(true),
|
option("pub", "publicKeyPath").required(true).hasArg(true),
|
||||||
option("pri", "privateKeyPath").required(true).hasArg(true)
|
option("pri", "privateKeyPath").required(true).hasArg(true)
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
private final String publicKeyPath;
|
public final String publicKeyPath;
|
||||||
private final String privateKeyPath;
|
public final String privateKeyPath;
|
||||||
|
|
||||||
protected KeyPairGenerator(Terminal terminal, String publicKeyPath, String privateKeyPath) {
|
protected KeyPairGenerator(Terminal terminal, String publicKeyPath, String privateKeyPath) {
|
||||||
super(terminal);
|
super(terminal);
|
||||||
|
|
|
@ -50,7 +50,6 @@ public class TransportDeleteLicenseAction extends TransportMasterNodeOperationAc
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ClusterBlockException checkBlock(DeleteLicenseRequest request, ClusterState state) {
|
protected ClusterBlockException checkBlock(DeleteLicenseRequest request, ClusterState state) {
|
||||||
//TODO: do the right checkBlock
|
|
||||||
return state.blocks().indexBlockedException(ClusterBlockLevel.METADATA, "");
|
return state.blocks().indexBlockedException(ClusterBlockLevel.METADATA, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,11 @@ public class PutLicenseRequestBuilder extends AcknowledgedRequestBuilder<PutLice
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PutLicenseRequestBuilder setLicense(String licenseSource) {
|
||||||
|
request.licenses(licenseSource);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doExecute(ActionListener<PutLicenseResponse> listener) {
|
protected void doExecute(ActionListener<PutLicenseResponse> listener) {
|
||||||
client.execute(PutLicenseAction.INSTANCE, request, listener);
|
client.execute(PutLicenseAction.INSTANCE, request, listener);
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
|
||||||
*/
|
|
||||||
package org.elasticsearch.license.plugin.core;
|
|
||||||
|
|
||||||
import org.elasticsearch.rest.RestStatus;
|
|
||||||
import org.elasticsearch.transport.RemoteTransportException;
|
|
||||||
|
|
||||||
public class ElasticsearchLicenseException extends RemoteTransportException {
|
|
||||||
|
|
||||||
|
|
||||||
public ElasticsearchLicenseException(String msg) {
|
|
||||||
super(msg, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RestStatus status() {
|
|
||||||
return RestStatus.BAD_REQUEST;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,13 +5,14 @@
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.ESLicense;
|
import org.elasticsearch.license.core.ESLicense;
|
||||||
import org.elasticsearch.license.core.ESLicenses;
|
import org.elasticsearch.license.core.ESLicenses;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static org.hamcrest.core.IsEqual.equalTo;
|
import static org.hamcrest.core.IsEqual.equalTo;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
|
@ -50,4 +51,11 @@ public class TestUtils {
|
||||||
assertThat(license1.issueDate(), equalTo(license2.issueDate()));
|
assertThat(license1.issueDate(), equalTo(license2.issueDate()));
|
||||||
assertThat(license1.maxNodes(), equalTo(license2.maxNodes()));
|
assertThat(license1.maxNodes(), equalTo(license2.maxNodes()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String dumpLicense(ESLicense license) throws Exception {
|
||||||
|
XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON);
|
||||||
|
ESLicenses.toXContent(Collections.singletonList(license), builder, ToXContent.EMPTY_PARAMS);
|
||||||
|
builder.flush();
|
||||||
|
return builder.string();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
|
*/
|
||||||
|
package org.elasticsearch.license.licensor.tools;
|
||||||
|
|
||||||
|
import org.elasticsearch.common.cli.CliToolTestCase;
|
||||||
|
import org.elasticsearch.common.cli.commons.MissingOptionException;
|
||||||
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
|
import org.elasticsearch.env.Environment;
|
||||||
|
import org.elasticsearch.license.licensor.tools.KeyPairGeneratorTool.KeyPairGenerator;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
import static org.elasticsearch.common.cli.CliTool.Command;
|
||||||
|
import static org.elasticsearch.common.cli.CliTool.ExitStatus;
|
||||||
|
import static org.hamcrest.CoreMatchers.containsString;
|
||||||
|
import static org.hamcrest.CoreMatchers.instanceOf;
|
||||||
|
import static org.hamcrest.core.IsEqual.equalTo;
|
||||||
|
|
||||||
|
public class KeyPairGenerationToolTests extends CliToolTestCase {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParsingMissingPath() throws Exception {
|
||||||
|
KeyPairGeneratorTool keyPairGeneratorTool = new KeyPairGeneratorTool();
|
||||||
|
File tempFile = temporaryFolder.newFile();
|
||||||
|
try {
|
||||||
|
keyPairGeneratorTool.parse(KeyPairGeneratorTool.NAME, args(
|
||||||
|
"--privateKeyPath " + tempFile.getAbsolutePath()));
|
||||||
|
fail("no public key path provided");
|
||||||
|
} catch (MissingOptionException e) {
|
||||||
|
assertThat(e.getMessage(), containsString("pub"));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
keyPairGeneratorTool.parse(KeyPairGeneratorTool.NAME, args(
|
||||||
|
"--publicKeyPath " + tempFile.getAbsolutePath()));
|
||||||
|
fail("no private key path provided");
|
||||||
|
} catch (MissingOptionException e) {
|
||||||
|
assertThat(e.getMessage(), containsString("pri"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParsingNeverOverrideKey() throws Exception {
|
||||||
|
KeyPairGeneratorTool keyPairGeneratorTool = new KeyPairGeneratorTool();
|
||||||
|
File tempFile = temporaryFolder.newFile();
|
||||||
|
File tempFile2 = temporaryFolder.newFile();
|
||||||
|
String nonExistentFilePath = tempFile2.getAbsolutePath();
|
||||||
|
assertThat(tempFile2.delete(), equalTo(true));
|
||||||
|
|
||||||
|
Command command = keyPairGeneratorTool.parse(KeyPairGeneratorTool.NAME, args("--privateKeyPath " + tempFile.getAbsolutePath()
|
||||||
|
+ " --publicKeyPath " + nonExistentFilePath));
|
||||||
|
|
||||||
|
assertThat(command, instanceOf(Command.Exit.class));
|
||||||
|
Command.Exit exitCommand = (Command.Exit) command;
|
||||||
|
assertThat(exitCommand.status(), equalTo(ExitStatus.USAGE));
|
||||||
|
|
||||||
|
command = keyPairGeneratorTool.parse(KeyPairGeneratorTool.NAME, args("--publicKeyPath " + tempFile.getAbsolutePath()
|
||||||
|
+ " --privateKeyPath " + nonExistentFilePath));
|
||||||
|
|
||||||
|
assertThat(command, instanceOf(Command.Exit.class));
|
||||||
|
exitCommand = (Command.Exit) command;
|
||||||
|
assertThat(exitCommand.status(), equalTo(ExitStatus.USAGE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testToolSimple() throws Exception {
|
||||||
|
KeyPairGeneratorTool keyPairGeneratorTool = new KeyPairGeneratorTool();
|
||||||
|
File tempFile1 = temporaryFolder.newFile();
|
||||||
|
File tempFile2 = temporaryFolder.newFile();
|
||||||
|
String publicKeyPath = tempFile1.getAbsolutePath();
|
||||||
|
String privateKeyPath = tempFile2.getAbsolutePath();
|
||||||
|
|
||||||
|
assertThat(tempFile1.delete(), equalTo(true));
|
||||||
|
assertThat(tempFile2.delete(), equalTo(true));
|
||||||
|
|
||||||
|
Command command = keyPairGeneratorTool.parse(KeyPairGeneratorTool.NAME, args("--privateKeyPath " + privateKeyPath
|
||||||
|
+ " --publicKeyPath " + publicKeyPath));
|
||||||
|
|
||||||
|
assertThat(command, instanceOf(KeyPairGenerator.class));
|
||||||
|
KeyPairGenerator keyPairGenerator = (KeyPairGenerator) command;
|
||||||
|
assertThat(keyPairGenerator.privateKeyPath, equalTo(privateKeyPath));
|
||||||
|
assertThat(keyPairGenerator.publicKeyPath, equalTo(publicKeyPath));
|
||||||
|
|
||||||
|
assertThat(Paths.get(publicKeyPath).toFile().exists(), equalTo(false));
|
||||||
|
assertThat(Paths.get(privateKeyPath).toFile().exists(), equalTo(false));
|
||||||
|
|
||||||
|
assertThat(keyPairGenerator.execute(ImmutableSettings.EMPTY, new Environment(ImmutableSettings.EMPTY)), equalTo(ExitStatus.OK));
|
||||||
|
assertThat(Paths.get(publicKeyPath).toFile().exists(), equalTo(true));
|
||||||
|
assertThat(Paths.get(privateKeyPath).toFile().exists(), equalTo(true));
|
||||||
|
|
||||||
|
assertThat(Paths.get(publicKeyPath).toFile().delete(), equalTo(true));
|
||||||
|
assertThat(Paths.get(privateKeyPath).toFile().delete(), equalTo(true));
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.licensor;
|
package org.elasticsearch.license.licensor.tools;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.elasticsearch.common.cli.CliTool;
|
import org.elasticsearch.common.cli.CliTool;
|
||||||
|
@ -52,15 +52,23 @@ public class LicenseGenerationToolTests extends CliToolTestCase {
|
||||||
public void testParsingNonExistentKeyFile() throws Exception {
|
public void testParsingNonExistentKeyFile() throws Exception {
|
||||||
LicenseSpec inputLicenseSpec = generateRandomLicenseSpec();
|
LicenseSpec inputLicenseSpec = generateRandomLicenseSpec();
|
||||||
LicenseGeneratorTool licenseGeneratorTool = new LicenseGeneratorTool();
|
LicenseGeneratorTool licenseGeneratorTool = new LicenseGeneratorTool();
|
||||||
boolean invalidPubKeyPath = randomBoolean();
|
|
||||||
Command command = licenseGeneratorTool.parse(LicenseGeneratorTool.NAME,
|
Command command = licenseGeneratorTool.parse(LicenseGeneratorTool.NAME,
|
||||||
args("--license " + generateESLicenseSpecString(Arrays.asList(inputLicenseSpec))
|
args("--license " + generateESLicenseSpecString(Arrays.asList(inputLicenseSpec))
|
||||||
+ " --publicKeyPath " + ((invalidPubKeyPath) ? pubKeyPath.concat("invalid") : pubKeyPath)
|
+ " --publicKeyPath " + pubKeyPath.concat("invalid")
|
||||||
+ " --privateKeyPath " + ((!invalidPubKeyPath) ? priKeyPath.concat("invalid") : priKeyPath)));
|
+ " --privateKeyPath " + priKeyPath));
|
||||||
|
|
||||||
assertThat(command, instanceOf(Command.Exit.class));
|
assertThat(command, instanceOf(Command.Exit.class));
|
||||||
Command.Exit exitCommand = (Command.Exit) command;
|
Command.Exit exitCommand = (Command.Exit) command;
|
||||||
assertThat(exitCommand.status(), equalTo(ExitStatus.USAGE));
|
assertThat(exitCommand.status(), equalTo(ExitStatus.USAGE));
|
||||||
|
|
||||||
|
command = licenseGeneratorTool.parse(LicenseGeneratorTool.NAME,
|
||||||
|
args("--license " + generateESLicenseSpecString(Arrays.asList(inputLicenseSpec))
|
||||||
|
+ " --privateKeyPath " + priKeyPath.concat("invalid")
|
||||||
|
+ " --publicKeyPath " + pubKeyPath));
|
||||||
|
|
||||||
|
assertThat(command, instanceOf(Command.Exit.class));
|
||||||
|
exitCommand = (Command.Exit) command;
|
||||||
|
assertThat(exitCommand.status(), equalTo(ExitStatus.USAGE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
|
@ -3,17 +3,13 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.licensor;
|
package org.elasticsearch.license.licensor.tools;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.elasticsearch.common.cli.CliToolTestCase;
|
import org.elasticsearch.common.cli.CliToolTestCase;
|
||||||
import org.elasticsearch.common.settings.ImmutableSettings;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.license.TestUtils;
|
import org.elasticsearch.license.TestUtils;
|
||||||
import org.elasticsearch.license.core.ESLicense;
|
import org.elasticsearch.license.core.ESLicense;
|
||||||
|
@ -56,7 +52,7 @@ public class LicenseVerificationToolTests extends CliToolTestCase {
|
||||||
TimeValue.timeValueHours(1));
|
TimeValue.timeValueHours(1));
|
||||||
LicenseVerificationTool licenseVerificationTool = new LicenseVerificationTool();
|
LicenseVerificationTool licenseVerificationTool = new LicenseVerificationTool();
|
||||||
Command command = licenseVerificationTool.parse(LicenseVerificationTool.NAME,
|
Command command = licenseVerificationTool.parse(LicenseVerificationTool.NAME,
|
||||||
args("--license " + dumpLicense(inputLicense)));
|
args("--license " + TestUtils.dumpLicense(inputLicense)));
|
||||||
assertThat(command, instanceOf(LicenseVerifier.class));
|
assertThat(command, instanceOf(LicenseVerifier.class));
|
||||||
LicenseVerifier licenseVerifier = (LicenseVerifier) command;
|
LicenseVerifier licenseVerifier = (LicenseVerifier) command;
|
||||||
assertThat(licenseVerifier.licenses.size(), equalTo(1));
|
assertThat(licenseVerifier.licenses.size(), equalTo(1));
|
||||||
|
@ -93,7 +89,7 @@ public class LicenseVerificationToolTests extends CliToolTestCase {
|
||||||
StringBuilder argsBuilder = new StringBuilder();
|
StringBuilder argsBuilder = new StringBuilder();
|
||||||
for (ESLicense inputLicense : inputLicenses.values()) {
|
for (ESLicense inputLicense : inputLicenses.values()) {
|
||||||
argsBuilder.append(" --license ")
|
argsBuilder.append(" --license ")
|
||||||
.append(dumpLicense(inputLicense));
|
.append(TestUtils.dumpLicense(inputLicense));
|
||||||
}
|
}
|
||||||
LicenseVerificationTool licenseVerificationTool = new LicenseVerificationTool();
|
LicenseVerificationTool licenseVerificationTool = new LicenseVerificationTool();
|
||||||
Command command = licenseVerificationTool.parse(LicenseVerificationTool.NAME, args(argsBuilder.toString()));
|
Command command = licenseVerificationTool.parse(LicenseVerificationTool.NAME, args(argsBuilder.toString()));
|
||||||
|
@ -144,19 +140,10 @@ public class LicenseVerificationToolTests extends CliToolTestCase {
|
||||||
|
|
||||||
private String dumpLicenseAsFile(ESLicense license) throws Exception {
|
private String dumpLicenseAsFile(ESLicense license) throws Exception {
|
||||||
File tempFile = temporaryFolder.newFile();
|
File tempFile = temporaryFolder.newFile();
|
||||||
FileUtils.write(tempFile, dumpLicense(license));
|
FileUtils.write(tempFile, TestUtils.dumpLicense(license));
|
||||||
return tempFile.getAbsolutePath();
|
return tempFile.getAbsolutePath();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String dumpLicense(ESLicense license) throws Exception {
|
|
||||||
XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON);
|
|
||||||
ESLicenses.toXContent(Collections.singletonList(license), builder, ToXContent.EMPTY_PARAMS);
|
|
||||||
builder.flush();
|
|
||||||
return builder.string();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private String runLicenseVerificationTool(Set<ESLicense> licenses, ExitStatus expectedExitStatus) throws Exception {
|
private String runLicenseVerificationTool(Set<ESLicense> licenses, ExitStatus expectedExitStatus) throws Exception {
|
||||||
CaptureOutputTerminal outputTerminal = new CaptureOutputTerminal();
|
CaptureOutputTerminal outputTerminal = new CaptureOutputTerminal();
|
||||||
LicenseVerifier licenseVerifier = new LicenseVerifier(outputTerminal, licenses);
|
LicenseVerifier licenseVerifier = new LicenseVerifier(outputTerminal, licenses);
|
|
@ -11,10 +11,7 @@ import org.elasticsearch.license.core.ESLicense;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomIntBetween;
|
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomIntBetween;
|
||||||
import static org.hamcrest.core.IsEqual.equalTo;
|
import static org.hamcrest.core.IsEqual.equalTo;
|
||||||
|
|
|
@ -6,9 +6,14 @@
|
||||||
package org.elasticsearch.license.plugin;
|
package org.elasticsearch.license.plugin;
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionFuture;
|
import org.elasticsearch.action.ActionFuture;
|
||||||
|
import org.elasticsearch.common.collect.Sets;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.TestUtils;
|
import org.elasticsearch.license.TestUtils;
|
||||||
import org.elasticsearch.license.core.ESLicense;
|
import org.elasticsearch.license.core.ESLicense;
|
||||||
|
import org.elasticsearch.license.core.ESLicenses;
|
||||||
|
import org.elasticsearch.license.plugin.action.delete.DeleteLicenseRequest;
|
||||||
|
import org.elasticsearch.license.plugin.action.delete.DeleteLicenseRequestBuilder;
|
||||||
|
import org.elasticsearch.license.plugin.action.delete.DeleteLicenseResponse;
|
||||||
import org.elasticsearch.license.plugin.action.get.GetLicenseRequestBuilder;
|
import org.elasticsearch.license.plugin.action.get.GetLicenseRequestBuilder;
|
||||||
import org.elasticsearch.license.plugin.action.get.GetLicenseResponse;
|
import org.elasticsearch.license.plugin.action.get.GetLicenseResponse;
|
||||||
import org.elasticsearch.license.plugin.action.put.PutLicenseRequestBuilder;
|
import org.elasticsearch.license.plugin.action.put.PutLicenseRequestBuilder;
|
||||||
|
@ -49,16 +54,38 @@ public class LicenseTransportTests extends AbstractLicensesIntegrationTests {
|
||||||
// put license
|
// put license
|
||||||
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
.setLicense(actualLicenses);
|
.setLicense(actualLicenses);
|
||||||
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.execute().get();
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
// get license
|
// get license
|
||||||
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
assertThat(getLicenseResponse.licenses(), notNullValue());
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(1));
|
||||||
|
|
||||||
// check license
|
// check license
|
||||||
TestUtils.isSame(actualLicenses, getLicenseResponse.licenses());
|
TestUtils.isSame(signedLicense, getLicenseResponse.licenses().get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPutLicenseFromString() throws Exception {
|
||||||
|
ESLicense signedLicense = generateSignedLicense("shield", TimeValue.timeValueMinutes(2));
|
||||||
|
String licenseString = TestUtils.dumpLicense(signedLicense);
|
||||||
|
|
||||||
|
// put license source
|
||||||
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
|
.setLicense(licenseString);
|
||||||
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
|
// get license
|
||||||
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(1));
|
||||||
|
|
||||||
|
// check license
|
||||||
|
TestUtils.isSame(signedLicense, getLicenseResponse.licenses().get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -76,10 +103,9 @@ public class LicenseTransportTests extends AbstractLicensesIntegrationTests {
|
||||||
builder.setLicense(Collections.singletonList(tamperedLicense));
|
builder.setLicense(Collections.singletonList(tamperedLicense));
|
||||||
|
|
||||||
// try to put license (should be invalid)
|
// try to put license (should be invalid)
|
||||||
final PutLicenseResponse putLicenseResponse = builder.execute().get();
|
final PutLicenseResponse putLicenseResponse = builder.get();
|
||||||
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.INVALID));
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.INVALID));
|
||||||
|
|
||||||
|
|
||||||
// try to get invalid license
|
// try to get invalid license
|
||||||
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
assertThat(getLicenseResponse.licenses().size(), equalTo(0));
|
assertThat(getLicenseResponse.licenses().size(), equalTo(0));
|
||||||
|
@ -94,16 +120,17 @@ public class LicenseTransportTests extends AbstractLicensesIntegrationTests {
|
||||||
// put license
|
// put license
|
||||||
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
.setLicense(actualLicenses);
|
.setLicense(actualLicenses);
|
||||||
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.execute().get();
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
// get should return only one license (with longer expiry date)
|
// get should return only one license (with longer expiry date)
|
||||||
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
assertThat(getLicenseResponse.licenses(), notNullValue());
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(1));
|
||||||
|
|
||||||
// check license
|
// check license
|
||||||
TestUtils.isSame(Collections.singletonList(longerSignedLicense), getLicenseResponse.licenses());
|
TestUtils.isSame(longerSignedLicense, getLicenseResponse.licenses().get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -115,7 +142,7 @@ public class LicenseTransportTests extends AbstractLicensesIntegrationTests {
|
||||||
// put license
|
// put license
|
||||||
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
.setLicense(actualLicenses);
|
.setLicense(actualLicenses);
|
||||||
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.execute().get();
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
|
@ -137,16 +164,82 @@ public class LicenseTransportTests extends AbstractLicensesIntegrationTests {
|
||||||
// put license
|
// put license
|
||||||
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
.setLicense(actualLicenses);
|
.setLicense(actualLicenses);
|
||||||
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.execute().get();
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
// get should return both the licenses
|
// get should return both the licenses
|
||||||
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
assertThat(getLicenseResponse.licenses(), notNullValue());
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(2));
|
||||||
|
|
||||||
// check license (should get the longest expiry time for all unique features)
|
// check license (should get the longest expiry time for all unique features)
|
||||||
TestUtils.isSame(Arrays.asList(marvelLicense, longerSignedLicense), getLicenseResponse.licenses());
|
TestUtils.isSame(Arrays.asList(marvelLicense, longerSignedLicense), getLicenseResponse.licenses());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRemoveLicenseSimple() throws Exception {
|
||||||
|
ESLicense shieldLicense = generateSignedLicense("shield", TimeValue.timeValueMinutes(2));
|
||||||
|
ESLicense marvelLicense = generateSignedLicense("marvel", TimeValue.timeValueMinutes(5));
|
||||||
|
List<ESLicense> actualLicenses = Arrays.asList(marvelLicense, shieldLicense);
|
||||||
|
|
||||||
|
// put two licenses
|
||||||
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
|
.setLicense(actualLicenses);
|
||||||
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
|
// get and check licenses
|
||||||
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(2));
|
||||||
|
|
||||||
|
// delete all licenses
|
||||||
|
DeleteLicenseRequestBuilder deleteLicenseRequestBuilder = new DeleteLicenseRequestBuilder(client().admin().cluster())
|
||||||
|
.setFeatures(Sets.newHashSet("shield", "marvel"));
|
||||||
|
DeleteLicenseResponse deleteLicenseResponse = deleteLicenseRequestBuilder.get();
|
||||||
|
assertThat(deleteLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
|
|
||||||
|
// get licenses (expected no licenses)
|
||||||
|
getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRemoveLicenses() throws Exception {
|
||||||
|
ESLicense shieldLicense = generateSignedLicense("shield", TimeValue.timeValueMinutes(2));
|
||||||
|
ESLicense marvelLicense = generateSignedLicense("marvel", TimeValue.timeValueMinutes(5));
|
||||||
|
List<ESLicense> actualLicenses = Arrays.asList(marvelLicense, shieldLicense);
|
||||||
|
|
||||||
|
// put two licenses
|
||||||
|
PutLicenseRequestBuilder putLicenseRequestBuilder = new PutLicenseRequestBuilder(client().admin().cluster())
|
||||||
|
.setLicense(actualLicenses);
|
||||||
|
PutLicenseResponse putLicenseResponse = putLicenseRequestBuilder.get();
|
||||||
|
assertThat(putLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
|
assertThat(putLicenseResponse.status(), equalTo(LicensesStatus.VALID));
|
||||||
|
|
||||||
|
// delete one license
|
||||||
|
DeleteLicenseRequestBuilder deleteLicenseRequestBuilder = new DeleteLicenseRequestBuilder(client().admin().cluster())
|
||||||
|
.setFeatures(Sets.newHashSet("shield"));
|
||||||
|
DeleteLicenseResponse deleteLicenseResponse = deleteLicenseRequestBuilder.get();
|
||||||
|
assertThat(deleteLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
|
|
||||||
|
// check other license
|
||||||
|
GetLicenseResponse getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(1));
|
||||||
|
|
||||||
|
// delete another license
|
||||||
|
deleteLicenseRequestBuilder = new DeleteLicenseRequestBuilder(client().admin().cluster())
|
||||||
|
.setFeatures(Sets.newHashSet("marvel"));
|
||||||
|
deleteLicenseResponse = deleteLicenseRequestBuilder.get();
|
||||||
|
assertThat(deleteLicenseResponse.isAcknowledged(), equalTo(true));
|
||||||
|
|
||||||
|
// check no license
|
||||||
|
getLicenseResponse = new GetLicenseRequestBuilder(client().admin().cluster()).get();
|
||||||
|
assertThat(getLicenseResponse.licenses(), notNullValue());
|
||||||
|
assertThat(getLicenseResponse.licenses().size(), equalTo(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue