fix tests; improve client registeration

Original commit: elastic/x-pack-elasticsearch@e0464a4a1f
This commit is contained in:
Areek Zillur 2014-10-23 12:07:16 -04:00
parent 6f88c44030
commit 935f98a4b8
2 changed files with 53 additions and 30 deletions

View File

@ -315,9 +315,10 @@ public class LicensesService extends AbstractLifecycleComponent<LicensesService>
public void register(String feature, TrialLicenseOptions trialLicenseOptions, Listener listener) {
registeredListeners.add(new ListenerHolder(feature, trialLicenseOptions, listener));
// DO we need to check STATE_NOT_RECOVERED_BLOCK here
LicensesMetaData currentMetaData = clusterService.state().metaData().custom(LicensesMetaData.TYPE);
registerListeners(currentMetaData);
if (!clusterService.state().blocks().hasGlobalBlock(GatewayService.STATE_NOT_RECOVERED_BLOCK)) {
LicensesMetaData currentMetaData = clusterService.state().metaData().custom(LicensesMetaData.TYPE);
registerListeners(currentMetaData);
}
}
private void registerListeners(LicensesMetaData currentMetaData) {
@ -333,8 +334,13 @@ public class LicensesService extends AbstractLifecycleComponent<LicensesService>
if (clusterService.state().nodes().localNodeMaster()) {
registerTrialLicense(request);
} else {
transportService.sendRequest(clusterService.state().nodes().masterNode(),
REGISTER_TRIAL_LICENSE_ACTION_NAME, request, EmptyTransportResponseHandler.INSTANCE_SAME);
DiscoveryNode masterNode;
if ((masterNode = clusterService.state().nodes().masterNode()) != null) {
transportService.sendRequest(masterNode,
REGISTER_TRIAL_LICENSE_ACTION_NAME, request, EmptyTransportResponseHandler.INSTANCE_SAME);
} else {
// could not sent register trial license request to master
}
}
} else {
// notify feature as clusterChangedEvent may not happen

View File

@ -11,6 +11,8 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.ProcessedClusterStateUpdateTask;
import org.elasticsearch.cluster.ack.ClusterStateUpdateResponse;
import org.elasticsearch.cluster.metadata.MetaData;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.node.DiscoveryNodes;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
@ -23,10 +25,7 @@ import org.elasticsearch.license.plugin.action.put.PutLicenseRequest;
import org.elasticsearch.license.plugin.core.*;
import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.elasticsearch.test.InternalTestCluster;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.*;
import java.io.IOException;
import java.net.URISyntaxException;
@ -36,14 +35,15 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.elasticsearch.test.ElasticsearchIntegrationTest.ClusterScope;
import static org.elasticsearch.test.ElasticsearchIntegrationTest.Scope.SUITE;
import static org.elasticsearch.test.ElasticsearchIntegrationTest.Scope.TEST;
@ClusterScope(scope = SUITE, numDataNodes = 3)
@ClusterScope(scope = TEST, numDataNodes = 10)
public class LicensesServiceTests extends ElasticsearchIntegrationTest {
private static String pubKeyPath = null;
private static String priKeyPath = null;
private static String node = null;
@Override
protected Settings nodeSettings(int nodeOrdinal) {
@ -66,8 +66,8 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
}
@After
public void afterTest() throws Exception {
@Before
public void beforeTest() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
masterClusterService().submitStateUpdateTask("delete licensing metadata", new ProcessedClusterStateUpdateTask() {
@Override
@ -89,17 +89,27 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
});
latch.await();
clear();
DiscoveryNodes discoveryNodes = LicensesServiceTests.masterClusterService().state().getNodes();
Set<String> dataNodeSet = new HashSet<>();
for(DiscoveryNode discoveryNode : discoveryNodes) {
if (discoveryNode.dataNode()) {
dataNodeSet.add(discoveryNode.getName());
}
}
String[] dataNodes = dataNodeSet.toArray(new String[dataNodeSet.size()]);
node = dataNodes[randomIntBetween(0, dataNodes.length - 1)];
}
@Test
public void testEmptySignedLicenseCheck() {
LicensesManagerService licensesManagerService = licensesManagerService();
LicensesManagerService licensesManagerService = masterLicensesManagerService();
assertTrue(LicensesStatus.VALID == licensesManagerService.checkLicenses(new HashSet<ESLicense>()));
}
@Test
public void testInvalidSignedLicenseCheck() throws Exception {
LicensesManagerService licensesManagerService = licensesManagerService();
LicensesManagerService licensesManagerService = masterLicensesManagerService();
Map<String, TestUtils.FeatureAttributes> map = new HashMap<>();
TestUtils.FeatureAttributes featureAttributes =
@ -133,7 +143,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
String licenseOutput = TestUtils.runLicenseGenerationTool(licenseString, pubKeyPath, priKeyPath);
Set<ESLicense> licenses = ESLicenses.fromSource(licenseOutput);
LicensesManagerService licensesManagerService = licensesManagerService();
LicensesManagerService licensesManagerService = masterLicensesManagerService();
ESLicenseManager esLicenseManager = ((LicensesService) licensesManagerService).getEsLicenseManager();
final CountDownLatch latch1 = new CountDownLatch(1);
licensesManagerService.registerLicenses(new LicensesService.PutLicenseRequestHolder(new PutLicenseRequest().licenses(licenses), "test"), new ActionListener<ClusterStateUpdateResponse>() {
@ -183,7 +193,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
TestUtils.isSame(licenses2, metaDataLicense);
}
@Test @Ignore
@Test
public void testTrialLicenseGeneration() throws Exception {
LicensesClientService clientService = licensesClientService();
final CountDownLatch latch = new CountDownLatch(1);
@ -225,6 +235,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
@Override
public void onEnabled() {
if (this.shouldBeEnabled.get()) {
logger.info("onEnabled called from LicensesClientService");
processed.set(true);
} else {
fail("onEnabled should not have been called");
@ -235,6 +246,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
@Override
public void onDisabled() {
if (!this.shouldBeEnabled.get()) {
logger.info("onEnabled called from LicensesClientService");
processed.set(true);
} else {
fail("onDisabled should not have been called");
@ -242,7 +254,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
}
}
@Test @Ignore
@Test
public void testClientValidation() throws Exception {
// start with no trial license
// feature should be onDisabled
@ -251,6 +263,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
LicensesClientService clientService = licensesClientService();
LicensesManagerService managerService = licensesManagerService();
LicensesManagerService masterLicensesManagerService = masterLicensesManagerService();
final TestLicenseClientListener testLicenseClientListener = new TestLicenseClientListener(false);
clientService.register("shield", null, testLicenseClientListener);
@ -260,8 +273,8 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
logger.info("pass initial check");
assertFalse(testLicenseClientListener.processed.get());
testLicenseClientListener.shouldBeEnabled.set(true);
testLicenseClientListener.shouldBeEnabled.set(true);
Map<String, TestUtils.FeatureAttributes> map = new HashMap<>();
TestUtils.FeatureAttributes featureAttributes1 =
new TestUtils.FeatureAttributes("shield", "subscription", "platinum", "foo bar Inc.", "elasticsearch", 2, "2014-12-13", "2015-12-13");
@ -270,9 +283,8 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
String licenseOutput = TestUtils.runLicenseGenerationTool(licenseString, pubKeyPath, priKeyPath);
Set<ESLicense> licenses = ESLicenses.fromSource(licenseOutput);
LicensesManagerService licensesManagerService = licensesManagerService();
final CountDownLatch latch1 = new CountDownLatch(1);
licensesManagerService.registerLicenses(new LicensesService.PutLicenseRequestHolder(new PutLicenseRequest().licenses(licenses), "test"), new ActionListener<ClusterStateUpdateResponse>() {
masterLicensesManagerService.registerLicenses(new LicensesService.PutLicenseRequestHolder(new PutLicenseRequest().licenses(licenses), "test"), new ActionListener<ClusterStateUpdateResponse>() {
@Override
public void onResponse(ClusterStateUpdateResponse clusterStateUpdateResponse) {
if (clusterStateUpdateResponse.isAcknowledged()) {
@ -292,8 +304,7 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
while (!testLicenseClientListener.processed.get()) {
}
Set<String> enabledFeatures = licensesManagerService.enabledFeatures();
assertTrue(enabledFeatures.contains("shield"));
assertTrue(managerService.enabledFeatures().contains("shield"));
}
@ -316,20 +327,22 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
}
@Test
@Ignore
public void testLicenseExpiry() throws Exception {
//TODO, first figure out how to generate a license with a quick expiry in matter of seconds
}
private LicensesManagerService licensesManagerService() {
private LicensesManagerService masterLicensesManagerService() {
final InternalTestCluster clients = internalCluster();
return clients.getInstance(LicensesManagerService.class, clients.getMasterName());
}
private LicensesManagerService licensesManagerService() {
return internalCluster().getInstance(LicensesManagerService.class, node);
}
private LicensesClientService licensesClientService() {
final InternalTestCluster clients = internalCluster();
return clients.getInstance(LicensesClientService.class);
return internalCluster().getInstance(LicensesClientService.class, node);
}
private LicensesService licensesService() {
@ -337,15 +350,19 @@ public class LicensesServiceTests extends ElasticsearchIntegrationTest {
return clients.getInstance(LicensesService.class, clients.getMasterName());
}
private ClusterService masterClusterService() {
private static ClusterService masterClusterService() {
final InternalTestCluster clients = internalCluster();
return clients.getInstance(ClusterService.class, clients.getMasterName());
}
private void clear() {
final InternalTestCluster clients = internalCluster();
LicensesService service = clients.getInstance(LicensesService.class, clients.getMasterName());
service.clear();
LicensesService masterService = clients.getInstance(LicensesService.class, clients.getMasterName());
masterService.clear();
if (node != null) {
LicensesService nodeService = clients.getInstance(LicensesService.class, node);
nodeService.clear();
}
}