/** * */ package org.gcube.documentstore.persistence; import java.util.Calendar; import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.persistence.AccountingPersistenceFactory; import org.gcube.testutility.ScopedTest; import org.gcube.testutility.StressTestUtility; import org.gcube.testutility.TestOperation; import org.gcube.testutility.TestUsageRecord; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) * */ public class PersistenceBackendTest extends ScopedTest { private static Logger logger = LoggerFactory.getLogger(PersistenceBackendTest.class); public static PersistenceBackend getPersistence() throws Exception{ AccountingPersistenceFactory.initAccountingPackages(); PersistenceBackendFactory.setFallbackLocation(null); return PersistenceBackendFactory.getPersistenceBackend(ScopedTest.getCurrentContext()); } @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) { UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord(); persistence.accountValidateAggregate(usageRecord, true, false); } }, 1); persistence.flush(); } @Test public void singleTest() throws Exception { final PersistenceBackend persistence = getPersistence(); StressTestUtility.stressTest(new TestOperation() { @Override public void operate(int i) { UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord(); persistence.accountValidateAggregate(usageRecord, true, false); } }, 1); persistence.flush(); } @Test public void stressTestNoAggregation() throws Exception { final PersistenceBackend persistence = getPersistence(); StressTestUtility.stressTest(new TestOperation() { @Override public void operate(int i) { UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord(); 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 { UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord(); persistence.account(usageRecord); } }); persistence.flush(); } @Test public void testScopeRecheck() throws Exception { logger.debug("Going to check First Time"); PersistenceBackend first = getPersistence(); logger.debug("First {} : {}", PersistenceBackend.class.getSimpleName(), first); long startTime = Calendar.getInstance().getTimeInMillis(); long endTime = startTime; while(endTime <= (startTime + (PersistenceBackendFactory.FALLBACK_RETRY_TIME + 2100))){ endTime = Calendar.getInstance().getTimeInMillis(); } logger.debug("Going to check Second Time"); PersistenceBackend second = getPersistence(); logger.debug("Second {} : {}", PersistenceBackend.class.getSimpleName(), second); } }