accounting-lib/src/test/java/org/gcube/accounting/datamodel/aggreagtion/aggregationstrategy/StorageUsageRecordAggregati...

125 lines
4.9 KiB
Java

/**
*
*/
package org.gcube.accounting.datamodel.aggreagtion.aggregationstrategy;
import org.gcube.accounting.datamodel.TestUsageRecord;
import org.gcube.accounting.datamodel.aggregation.aggregationstrategy.StorageUsageRecordAggregationStrategy;
import org.gcube.accounting.datamodel.implementations.StorageUsageRecord;
import org.gcube.accounting.exception.InvalidValueException;
import org.gcube.accounting.exception.NotAggregatableRecordsExceptions;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class StorageUsageRecordAggregationStrategyTest {
private static Logger logger = LoggerFactory.getLogger(StorageUsageRecordAggregationStrategyTest.class);
@Test
public void secondAsNotAggregated() throws InvalidValueException, NotAggregatableRecordsExceptions {
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecord();
storageUsageRecord.validate();
logger.debug("StorageUsageRecord : {}", storageUsageRecord);
org.gcube.accounting.datamodel.aggregation.StorageUsageRecord aggregated =
new org.gcube.accounting.datamodel.aggregation.StorageUsageRecord(storageUsageRecord);
logger.debug("StorageUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
StorageUsageRecord storageUsageRecord2 = TestUsageRecord.createTestStorageUsageRecord();
storageUsageRecord2.validate();
logger.debug("StorageUsageRecord 2 : {}", storageUsageRecord2);
StorageUsageRecordAggregationStrategy suras = new StorageUsageRecordAggregationStrategy(aggregated);
long firstDataVolume = storageUsageRecord.getDataVolume();
long secondDataVolume = storageUsageRecord2.getDataVolume();
suras.aggregate(storageUsageRecord2);
logger.debug("Resulting Aggregated ServiceUsageRecord: {}", aggregated);
aggregated.validate();
Assert.assertTrue(aggregated.getDataVolume() == (firstDataVolume + secondDataVolume));
Assert.assertTrue(aggregated.getOperationCount() == 2);
}
@Test
public void secondAsAggregated() throws InvalidValueException, NotAggregatableRecordsExceptions {
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecord();
storageUsageRecord.validate();
logger.debug("StorageUsageRecord : {}", storageUsageRecord);
org.gcube.accounting.datamodel.aggregation.StorageUsageRecord aggregated =
new org.gcube.accounting.datamodel.aggregation.StorageUsageRecord(storageUsageRecord);
logger.debug("StorageUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
StorageUsageRecord storageUsageRecord2 = TestUsageRecord.createTestStorageUsageRecord();
storageUsageRecord2.validate();
logger.debug("StorageUsageRecord 2 : {}", storageUsageRecord2);
org.gcube.accounting.datamodel.aggregation.StorageUsageRecord converted =
new org.gcube.accounting.datamodel.aggregation.StorageUsageRecord(storageUsageRecord2);
logger.debug("StorageUsageRecord Converted to Aggregated: {}", converted);
converted.validate();
StorageUsageRecordAggregationStrategy suras = new StorageUsageRecordAggregationStrategy(aggregated);
long firstDataVolume = aggregated.getDataVolume();
long secondDataVolume = converted.getDataVolume();
suras.aggregate(converted);
logger.debug("Resulting Aggregated StorageUsageRecord: {}", aggregated);
aggregated.validate();
Assert.assertTrue(aggregated.getDataVolume() == (firstDataVolume + secondDataVolume));
Assert.assertTrue(aggregated.getOperationCount() == 2);
}
@Test
public void aggregationStressTest() throws InvalidValueException, NotAggregatableRecordsExceptions {
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecord();
storageUsageRecord.validate();
logger.debug("StorageUsageRecord : {}", storageUsageRecord);
org.gcube.accounting.datamodel.aggregation.StorageUsageRecord aggregated =
new org.gcube.accounting.datamodel.aggregation.StorageUsageRecord(storageUsageRecord);
logger.debug("StorageUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
StorageUsageRecordAggregationStrategy suras = new StorageUsageRecordAggregationStrategy(aggregated);
for(int i=2; i<1002; i++){
StorageUsageRecord sur = TestUsageRecord.createTestStorageUsageRecord();
sur.validate();
logger.debug("Cycle StorageUsageRecord {}: {}", i, sur);
long oldDataVolume = aggregated.getDataVolume();
long newDataVolume = sur.getDataVolume();
suras.aggregate(sur);
logger.debug("Resulting Aggregated StorageUsageRecord : {}", aggregated);
aggregated.validate();
Assert.assertTrue(aggregated.getDataVolume() == (oldDataVolume + newDataVolume));
Assert.assertTrue(aggregated.getOperationCount() == i);
}
logger.debug("Resulting Aggregated StorageUsageRecord: {}", aggregated);
}
}