diff --git a/core-shaded/pom.xml b/core-shaded/pom.xml
index e8bad957691..3472a124539 100644
--- a/core-shaded/pom.xml
+++ b/core-shaded/pom.xml
@@ -5,7 +5,7 @@
elasticsearch-license
org.elasticsearch
- 1.0.0-beta1
+ 1.0.0-beta2
4.0.0
diff --git a/core/pom.xml b/core/pom.xml
index 1b260675745..443f61ef928 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,7 +5,7 @@
elasticsearch-license
org.elasticsearch
- 1.0.0-beta1
+ 1.0.0-beta2
4.0.0
@@ -17,7 +17,7 @@
org.elasticsearch
elasticsearch-license-core-shaded
- 1.0.0-beta1
+ 1.0.0-beta2
diff --git a/core/src/main/java/org/elasticsearch/license/core/License.java b/core/src/main/java/org/elasticsearch/license/core/License.java
index 4e913377e95..a1495a67c17 100644
--- a/core/src/main/java/org/elasticsearch/license/core/License.java
+++ b/core/src/main/java/org/elasticsearch/license/core/License.java
@@ -191,7 +191,14 @@ public class License implements ToXContent {
}
builder.startObject();
if (restViewMode) {
- builder.field(XFields.STATUS, ((expiryDate - System.currentTimeMillis()) > 0l) ? "active" : "expired");
+ String status = "active";
+ long now = System.currentTimeMillis();
+ if (issueDate > now) {
+ status = "invalid";
+ } else if (expiryDate < now) {
+ status = "expired";
+ }
+ builder.field(XFields.STATUS, status);
}
builder.field(XFields.UID, uid);
builder.field(XFields.TYPE, type);
diff --git a/core/src/test/java/org/elasticsearch/license/core/LicenseSerializationTests.java b/core/src/test/java/org/elasticsearch/license/core/LicenseSerializationTests.java
index ca0973ca16d..b5a65684117 100644
--- a/core/src/test/java/org/elasticsearch/license/core/LicenseSerializationTests.java
+++ b/core/src/test/java/org/elasticsearch/license/core/LicenseSerializationTests.java
@@ -77,12 +77,14 @@ public class LicenseSerializationTests extends ElasticsearchTestCase {
long now = System.currentTimeMillis();
String expiredLicenseExpiryDate = TestUtils.dateMathString("now-1d/d", now);
String validLicenseIssueDate = TestUtils.dateMathString("now-10d/d", now);
- String validLicenseExpiryDate = TestUtils.dateMathString("now+1d/d", now);
+ String invalidLicenseIssueDate = TestUtils.dateMathString("now+1d/d", now);
+ String validLicenseExpiryDate = TestUtils.dateMathString("now+2d/d", now);
Set licenses = TestUtils.generateLicenses(Arrays.asList(new TestUtils.LicenseSpec("expired_feature", validLicenseIssueDate, expiredLicenseExpiryDate)
- , new TestUtils.LicenseSpec("valid_feature", validLicenseIssueDate, validLicenseExpiryDate)));
+ , new TestUtils.LicenseSpec("valid_feature", validLicenseIssueDate, validLicenseExpiryDate),
+ new TestUtils.LicenseSpec("invalid_feature", invalidLicenseIssueDate, validLicenseExpiryDate)));
- assertThat(licenses.size(), equalTo(2));
+ assertThat(licenses.size(), equalTo(3));
for (License license : licenses) {
XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON);
license.toXContent(builder, new ToXContent.MapParams(ImmutableMap.of(Licenses.REST_VIEW_MODE, "true")));
@@ -95,8 +97,10 @@ public class LicenseSerializationTests extends ElasticsearchTestCase {
assertThat(map.get("expiry_date"), notNullValue());
if (license.feature().equals("valid_feature")) {
assertThat((String) map.get("status"), equalTo("active"));
- } else {
+ } else if (license.feature().equals("expired_feature")) {
assertThat((String) map.get("status"), equalTo("expired"));
+ } else if (license.feature().equals("invalid_feature")) {
+ assertThat((String) map.get("status"), equalTo("invalid"));
}
}
diff --git a/licensor/pom.xml b/licensor/pom.xml
index 52350f2ceab..5bfc414f8c4 100644
--- a/licensor/pom.xml
+++ b/licensor/pom.xml
@@ -5,7 +5,7 @@
elasticsearch-license
org.elasticsearch
- 1.0.0-beta1
+ 1.0.0-beta2
4.0.0
@@ -19,7 +19,7 @@
org.elasticsearch
elasticsearch-license-core
- 1.0.0-beta1
+ 1.0.0-beta2
diff --git a/plugin/pom.xml b/plugin/pom.xml
index e17e325181a..63618de5054 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -5,7 +5,7 @@
elasticsearch-license
org.elasticsearch
- 1.0.0-beta1
+ 1.0.0-beta2
4.0.0
@@ -21,13 +21,13 @@
org.elasticsearch
elasticsearch-license-licensor
- 1.0.0-beta1
+ 1.0.0-beta2
test
org.elasticsearch
elasticsearch-license-core
- 1.0.0-beta1
+ 1.0.0-beta2
compile
diff --git a/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicensesService.java b/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicensesService.java
index a7cc75f3045..0776ce5f838 100644
--- a/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicensesService.java
+++ b/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicensesService.java
@@ -458,9 +458,11 @@ public class LicensesService extends AbstractLifecycleComponent
long nextScheduleFrequency = -1l;
for (ListenerHolder listenerHolder : registeredListeners) {
long expiryDate = expiryDateForFeature(listenerHolder.feature, currentLicensesMetaData);
- long expiryDuration = expiryDate - System.currentTimeMillis();
+ long issueDate = issueDateForFeature(listenerHolder.feature, currentLicensesMetaData);
+ long now = System.currentTimeMillis();
+ long expiryDuration = expiryDate - now;
- if (expiryDuration > 0l) {
+ if (expiryDuration > 0l && (now - issueDate) >= 0l) {
listenerHolder.enableFeatureIfNeeded();
if (nextScheduleFrequency == -1l) {
nextScheduleFrequency = expiryDuration;
@@ -597,6 +599,15 @@ public class LicensesService extends AbstractLifecycleComponent
return true;
}
+ private long issueDateForFeature(String feature, final LicensesMetaData currentLicensesMetaData) {
+ final Map effectiveLicenses = getEffectiveLicenses(currentLicensesMetaData);
+ License featureLicense;
+ if ((featureLicense = effectiveLicenses.get(feature)) != null) {
+ return featureLicense.issueDate();
+ }
+ return -1l;
+ }
+
private long expiryDateForFeature(String feature, final LicensesMetaData currentLicensesMetaData) {
final Map effectiveLicenses = getEffectiveLicenses(currentLicensesMetaData);
License featureLicense;
diff --git a/plugin/src/test/java/org/elasticsearch/license/plugin/LicensesClientServiceTests.java b/plugin/src/test/java/org/elasticsearch/license/plugin/LicensesClientServiceTests.java
index f4ec906c7fd..cfc9c6b51c5 100644
--- a/plugin/src/test/java/org/elasticsearch/license/plugin/LicensesClientServiceTests.java
+++ b/plugin/src/test/java/org/elasticsearch/license/plugin/LicensesClientServiceTests.java
@@ -42,6 +42,21 @@ public class LicensesClientServiceTests extends AbstractLicensesServiceTests {
assertClientListenerNotificationCount(clientListener, actions);
}
+ @Test
+ public void testLicenseWithFutureIssueDate() throws Exception {
+ final LicensesClientService clientService = licensesClientService();
+ final TestTrackingClientListener clientListener = new TestTrackingClientListener();
+ String feature = "feature";
+ List actions = new ArrayList<>();
+ long now = System.currentTimeMillis();
+ long issueDate = dateMath("now+10d/d", now);
+
+ actions.add(registerWithTrialLicense(clientService, clientListener, feature, TimeValue.timeValueSeconds(2)));
+ actions.add(generateAndPutSignedLicenseAction(masterLicensesManagerService(), feature, issueDate, TimeValue.timeValueHours(24 * 20)));
+ actions.add(assertExpiryAction(feature, "trial", TimeValue.timeValueSeconds(2)));
+ assertClientListenerNotificationCount(clientListener, actions);
+ }
+
@Test
public void testMultipleClientSignedLicenseEnforcement() throws Exception {
// multiple client registration with null trial license and then different expiry signed license
@@ -190,19 +205,22 @@ public class LicensesClientServiceTests extends AbstractLicensesServiceTests {
}
private Action generateAndPutSignedLicenseAction(final LicensesManagerService masterLicensesManagerService, final String feature, final TimeValue expiryDuration) throws Exception {
+ return generateAndPutSignedLicenseAction(masterLicensesManagerService, feature, -1, expiryDuration);
+ }
+ private Action generateAndPutSignedLicenseAction(final LicensesManagerService masterLicensesManagerService, final String feature, final long issueDate, final TimeValue expiryDuration) throws Exception {
return new Action(new Runnable() {
@Override
public void run() {
License license;
try {
- license = generateSignedLicense(feature, expiryDuration);
+ license = generateSignedLicense(feature, issueDate, expiryDuration);
} catch (Exception e) {
fail(e.getMessage());
return;
}
registerAndAckSignedLicenses(masterLicensesManagerService, Arrays.asList(license), LicensesStatus.VALID);
}
- }, 0, 1, "should trigger onEnable for " + feature + " once [signed license]");
+ }, 0, (issueDate <= System.currentTimeMillis()) ? 1 : 0, "should trigger onEnable for " + feature + " once [signed license]");
}
private Action registerWithoutTrialLicense(final LicensesClientService clientService, final LicensesClientService.Listener clientListener, final String feature) {
diff --git a/pom.xml b/pom.xml
index 707aeba044d..a2ce9f3f8e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
org.elasticsearch
elasticsearch-license
pom
- 1.0.0-beta1
+ 1.0.0-beta2
core-shaded
core