2016-02-10 15:15:01 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
package org.gcube.documentstore.persistence;
|
|
|
|
|
|
|
|
import java.util.Calendar;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
import org.gcube.accounting.datamodel.UsageRecord;
|
|
|
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
2016-02-17 14:17:31 +01:00
|
|
|
import org.gcube.testutility.ScopedTest;
|
|
|
|
import org.gcube.testutility.StressTestUtility;
|
|
|
|
import org.gcube.testutility.TestOperation;
|
|
|
|
import org.gcube.testutility.TestUsageRecord;
|
|
|
|
import org.gcube.testutility.TestUtility;
|
2016-02-10 15:15:01 +01:00
|
|
|
import org.junit.After;
|
|
|
|
import org.junit.Assert;
|
|
|
|
import org.junit.Before;
|
|
|
|
import org.junit.Test;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
|
|
|
|
*
|
|
|
|
*/
|
2016-02-12 17:56:12 +01:00
|
|
|
public class PersistenceBackendTest extends ScopedTest {
|
2016-02-10 15:15:01 +01:00
|
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(PersistenceBackendTest.class);
|
|
|
|
|
|
|
|
public static final long timeout = 5000;
|
|
|
|
public static final TimeUnit timeUnit = TimeUnit.MILLISECONDS;
|
|
|
|
|
|
|
|
|
|
|
|
@Before
|
|
|
|
public void before() throws Exception{
|
|
|
|
SecurityTokenProvider.instance.set(TestUtility.TOKEN);
|
|
|
|
}
|
|
|
|
|
|
|
|
@After
|
|
|
|
public void after() throws Exception{
|
|
|
|
SecurityTokenProvider.instance.reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static PersistenceBackend getPersistence(){
|
|
|
|
PersistenceBackendFactory.setFallbackLocation(null);
|
2016-02-12 17:56:12 +01:00
|
|
|
return PersistenceBackendFactory.getPersistenceBackend(TestUtility.getScope());
|
2016-02-10 15:15:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void singleTestNoScope() throws Exception {
|
|
|
|
PersistenceBackendFactory.setFallbackLocation(null);
|
|
|
|
final PersistenceBackend persistence = PersistenceBackendFactory.getPersistenceBackend(null);
|
|
|
|
Assert.assertTrue(persistence instanceof FallbackPersistenceBackend);
|
|
|
|
StressTestUtility.stressTest(new TestOperation() {
|
|
|
|
@Override
|
|
|
|
public void operate(int i) {
|
2016-02-10 16:49:09 +01:00
|
|
|
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
|
|
|
|
persistence.accountValidateAggregate(usageRecord, true, false);
|
2016-02-10 15:15:01 +01:00
|
|
|
}
|
|
|
|
}, 1);
|
|
|
|
|
|
|
|
persistence.flush(timeout, timeUnit);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void singleTest() throws Exception {
|
|
|
|
final PersistenceBackend persistence = getPersistence();
|
|
|
|
StressTestUtility.stressTest(new TestOperation() {
|
|
|
|
@Override
|
|
|
|
public void operate(int i) {
|
2016-02-10 16:49:09 +01:00
|
|
|
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
|
2016-02-10 15:15:01 +01:00
|
|
|
persistence.accountValidateAggregate(usageRecord, true, false);
|
|
|
|
}
|
|
|
|
}, 1);
|
|
|
|
|
|
|
|
persistence.flush(timeout, timeUnit);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void stressTestNoAggregation() throws Exception {
|
|
|
|
final PersistenceBackend persistence = getPersistence();
|
|
|
|
StressTestUtility.stressTest(new TestOperation() {
|
|
|
|
@Override
|
|
|
|
public void operate(int i) {
|
2016-02-10 16:49:09 +01:00
|
|
|
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
|
2016-02-10 15:15:01 +01:00
|
|
|
persistence.accountValidateAggregate(usageRecord, true, false);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void stressTestWithAggregation() throws Exception {
|
|
|
|
final PersistenceBackend persistence = getPersistence();
|
|
|
|
|
|
|
|
StressTestUtility.stressTest(new TestOperation() {
|
|
|
|
@Override
|
|
|
|
public void operate(int i) throws Exception {
|
2016-02-10 16:49:09 +01:00
|
|
|
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
|
2016-02-10 15:15:01 +01:00
|
|
|
persistence.account(usageRecord);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
persistence.flush(timeout, timeUnit);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testScopeRecheck() throws Exception {
|
|
|
|
PersistenceBackendFactory.setFallbackLocation(null);
|
|
|
|
logger.debug("Going to check First Time");
|
2016-02-12 17:56:12 +01:00
|
|
|
PersistenceBackend first = PersistenceBackendFactory.getPersistenceBackend(TestUtility.getScope());
|
2016-02-10 15:15:01 +01:00
|
|
|
logger.debug("First {} : {}", PersistenceBackend.class.getSimpleName(), first);
|
2016-02-12 17:56:12 +01:00
|
|
|
Long firstCheck = PersistenceBackendFactory.getFallbackLastCheck(TestUtility.getScope());
|
2016-02-10 15:15:01 +01:00
|
|
|
logger.debug("First Check Time {}", firstCheck);
|
|
|
|
|
|
|
|
long startTime = Calendar.getInstance().getTimeInMillis();
|
|
|
|
long endTime = startTime;
|
|
|
|
|
|
|
|
while(endTime <= (startTime + (PersistenceBackendFactory.FALLBACK_RETRY_TIME + 100))){
|
|
|
|
endTime = Calendar.getInstance().getTimeInMillis();
|
|
|
|
}
|
|
|
|
|
|
|
|
logger.debug("Going to check Second Time");
|
2016-02-12 17:56:12 +01:00
|
|
|
PersistenceBackend second = PersistenceBackendFactory.getPersistenceBackend(TestUtility.getScope());
|
2016-02-10 15:15:01 +01:00
|
|
|
logger.debug("Second {} : {}", PersistenceBackend.class.getSimpleName(), second);
|
2016-02-12 17:56:12 +01:00
|
|
|
Long secondCheck = PersistenceBackendFactory.getFallbackLastCheck(TestUtility.getScope());
|
2016-02-10 15:15:01 +01:00
|
|
|
logger.debug("Second Check Time {}", secondCheck);
|
|
|
|
|
|
|
|
Assert.assertNotEquals(firstCheck, secondCheck);
|
|
|
|
Assert.assertEquals(first, second);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|