DATACOUCH-328 - Fix document expiry when using expressions

When using an expiry expression with TimeUnit.DAYS larger than 30 days
the document expiry is not correctly set.

Original pull request: #150.
This commit is contained in:
Ben Benoit
2017-07-31 14:16:12 +02:00
committed by Subhashni Balakrishnan
parent b687ff8217
commit 4908749bcd
2 changed files with 32 additions and 1 deletions

View File

@@ -109,7 +109,7 @@ public class BasicCouchbasePersistentEntity<T> extends BasicPersistentEntity<T,
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
if (annotation.expiryUnit() == TimeUnit.DAYS) {
//makes sure we won't lose resolution
cal.add(Calendar.DAY_OF_MONTH, annotation.expiry());
cal.add(Calendar.DAY_OF_MONTH, expiryValue);
} else {
//use the shift in seconds since resolution should be smaller
cal.add(Calendar.SECOND, (int) secondsShift);

View File

@@ -99,6 +99,30 @@ public class BasicCouchbasePersistentEntityTests {
assertEquals(expected.get(Calendar.MINUTE), calendar.get(Calendar.MINUTE));
assertEquals(expected.get(Calendar.SECOND), calendar.get(Calendar.SECOND));
}
@Test
public void testLargeExpiryExpression31DaysIsConvertedToUnixUtcTime() {
BasicCouchbasePersistentEntity<OverLimitDaysExpiryExpression> entityOver = new BasicCouchbasePersistentEntity<OverLimitDaysExpiryExpression>(
ClassTypeInformation.from(OverLimitDaysExpiryExpression.class));
entityOver.setEnvironment(environment);
int expiryOver = entityOver.getExpiry();
Calendar expected = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
expected.add(Calendar.DAY_OF_YEAR, 31);
Date dateOver = new Date(expiryOver * 1000L);
System.out.println(entityOver + " => " + dateOver);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.clear();
calendar.add(Calendar.SECOND, expiryOver);
assertEquals(expected.get(Calendar.YEAR), calendar.get(Calendar.YEAR));
assertEquals(expected.get(Calendar.MONTH), calendar.get(Calendar.MONTH));
assertEquals(expected.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_MONTH));
assertEquals(expected.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.HOUR_OF_DAY));
assertEquals(expected.get(Calendar.MINUTE), calendar.get(Calendar.MINUTE));
assertEquals(expected.get(Calendar.SECOND), calendar.get(Calendar.SECOND));
}
@Test
public void testLargeExpiry31DaysInSecondsIsConvertedToUnixUtcTime() {
@@ -229,6 +253,13 @@ public class BasicCouchbasePersistentEntityTests {
@Document(expiry = 31, expiryUnit = TimeUnit.DAYS)
public class OverLimitDaysExpiry {
}
/**
* Simple POJO to test larger than 30 days expiry defined as an expression
*/
@Document(expiryExpression = "${document.expiry.larger.than.30days:31}", expiryUnit = TimeUnit.DAYS)
public class OverLimitDaysExpiryExpression {
}
/**
* Simple POJO to test larger than 30 days expiry, when expressed in default time unit (SECONDS).