The scope is get from scope provider if available

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@117357 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2015-07-20 15:02:43 +00:00
parent 7283ad5e24
commit 98db31d173
9 changed files with 118 additions and 47 deletions

View File

@ -193,17 +193,17 @@ public abstract class BasicUsageRecord implements UsageRecord, Serializable {
this.requiredFields = new HashSet<String>();
this.aggregatedFields = new HashSet<String>();
this.computedFields = new HashSet<String>();
this.resourceProperties = new HashMap<String, Serializable>();
initializeValidation();
try {
this.setScope(ScopeProvider.instance.get().toString());
} catch (InvalidValueException e) {
this.setScope(ScopeProvider.instance.get());
} catch(Exception e) {
logger.warn("Unable to automaticcally set the scope using scope provider. The record will not be valid if the scope will not be explicitly set.");
}
}
public BasicUsageRecord(){
init();
this.resourceProperties = new HashMap<String, Serializable>();
this.resourceProperties.put(ID, UUID.randomUUID().toString());
this.resourceProperties.put(USAGE_RECORD_TYPE, this.getClass().getSimpleName());
Calendar calendar = Calendar.getInstance();

View File

@ -50,12 +50,28 @@ public class TestUsageRecord {
/**
* Create a valid #ServiceUsageRecord
* @return the created #ServiceUsageRecord
* @throws InvalidValueException
*/
public static ServiceUsageRecord createTestServiceUsageRecord() {
public static ServiceUsageRecord createTestServiceUsageRecordExplicitScope() throws InvalidValueException {
ServiceUsageRecord usageRecord = createTestServiceUsageRecordAutomaticScope();
try {
usageRecord.setScope(TEST_SCOPE);
} catch (InvalidValueException e) {
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Setting the Scope", e.getCause());
throw e;
}
return usageRecord;
}
/**
* Create a valid #ServiceUsageRecord with scope set automatically.
* @return the created #ServiceUsageRecord
*/
public static ServiceUsageRecord createTestServiceUsageRecordAutomaticScope() {
ServiceUsageRecord usageRecord = new ServiceUsageRecord();
try {
usageRecord.setConsumerId(TEST_CONSUMER_ID);
usageRecord.setScope(TEST_SCOPE);
usageRecord.setOperationResult(OperationResult.SUCCESS);
usageRecord.setCallerHost(TEST_CALLER_HOST);
@ -71,11 +87,11 @@ public class TestUsageRecord {
} catch (InvalidValueException e) {
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Creating a test Usage Record", e.getCause());
throw new RuntimeException(e.getCause());
}
return usageRecord;
}
public final static String TEST_RESOUCE_OWNER = "resource.owner";
public final static String TEST_RESOUCE_SCOPE = TEST_SCOPE;
@ -88,11 +104,26 @@ public class TestUsageRecord {
* Create a valid #StorageUsageRecord
* @return the created #StorageUsageRecord
*/
public static StorageUsageRecord createTestStorageUsageRecord() {
public static StorageUsageRecord createTestStorageUsageRecordExplicitScope() {
StorageUsageRecord usageRecord = createTestStorageUsageRecordAutomaticScope();
try {
usageRecord.setScope(TEST_SCOPE);
} catch (InvalidValueException e) {
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Setting the Scope", e.getCause());
throw new RuntimeException(e.getCause());
}
return usageRecord;
}
/**
* Create a valid #StorageUsageRecord with scope set automatically.
* @return the created #StorageUsageRecord
*/
public static StorageUsageRecord createTestStorageUsageRecordAutomaticScope() {
StorageUsageRecord usageRecord = new StorageUsageRecord();
try {
usageRecord.setConsumerId(TEST_CONSUMER_ID);
usageRecord.setScope(TEST_SCOPE);
usageRecord.setOperationResult(OperationResult.SUCCESS);
usageRecord.setResourceOwner(TEST_RESOUCE_OWNER);
@ -111,20 +142,35 @@ public class TestUsageRecord {
} catch (InvalidValueException | URISyntaxException e) {
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Creating a test Usage Record", e.getCause());
throw new RuntimeException(e.getCause());
}
return usageRecord;
}
/**
* @return
*/
public static JobUsageRecord createTestJobUsageRecord() {
public static JobUsageRecord createTestJobUsageRecordExplicitScope() {
JobUsageRecord usageRecord = createTestJobUsageRecordAutomaticScope();
try {
usageRecord.setScope(TEST_SCOPE);
} catch (InvalidValueException e) {
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Setting the Scope", e.getCause());
throw new RuntimeException(e.getCause());
}
return usageRecord;
}
/**
* @return
*/
public static JobUsageRecord createTestJobUsageRecordAutomaticScope() {
JobUsageRecord usageRecord = new JobUsageRecord();
try {
usageRecord.setConsumerId(TEST_CONSUMER_ID);
usageRecord.setScope(TEST_SCOPE);
usageRecord.setOperationResult(OperationResult.SUCCESS);

View File

@ -22,7 +22,7 @@ public class ServiceUsageRecordTest {
@Test
public void testRequiredFields() throws InvalidValueException {
org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecord();
org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
ServiceUsageRecord aggregatedServiceUsageRecord = new ServiceUsageRecord(serviceUsageRecord);

View File

@ -43,7 +43,7 @@ public class AggregationSchedulerTest {
StressTestUtility.stressTest(new TestOperation() {
@Override
public void operate(int i) throws Exception {
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
aggregationScheduler.aggregate(usageRecord, persistenceExecutor);
}
});
@ -58,7 +58,7 @@ public class AggregationSchedulerTest {
StressTestUtility.stressTest(new TestOperation() {
@Override
public void operate(int i) throws Exception {
ServiceUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
ServiceUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
if(i%2==0){
usageRecord.setServiceClass(ALTERNATIVE_SERVICE_CLASS);
}
@ -76,9 +76,9 @@ public class AggregationSchedulerTest {
public void operate(int i) throws Exception {
SingleUsageRecord usageRecord;
if(i%2==0){
usageRecord = TestUsageRecord.createTestServiceUsageRecord();
usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
}else{
usageRecord = TestUsageRecord.createTestStorageUsageRecord();
usageRecord = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
}
aggregationScheduler.aggregate(usageRecord, persistenceExecutor);
}
@ -95,16 +95,16 @@ public class AggregationSchedulerTest {
SingleUsageRecord usageRecord;
switch (i%3) {
case 0:
usageRecord = TestUsageRecord.createTestServiceUsageRecord();
usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
break;
case 1:
usageRecord = TestUsageRecord.createTestStorageUsageRecord();
usageRecord = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
break;
case 2:
usageRecord = TestUsageRecord.createTestJobUsageRecord();
usageRecord = TestUsageRecord.createTestJobUsageRecordAutomaticScope();
break;
default:
usageRecord = TestUsageRecord.createTestJobUsageRecord();
usageRecord = TestUsageRecord.createTestJobUsageRecordAutomaticScope();
}
aggregationScheduler.aggregate(usageRecord, persistenceExecutor);

View File

@ -8,6 +8,7 @@ import org.gcube.accounting.datamodel.basetypes.TestUsageRecord;
import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord;
import org.gcube.accounting.exception.InvalidValueException;
import org.gcube.accounting.exception.NotAggregatableRecordsExceptions;
import org.gcube.common.scope.api.ScopeProvider;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
@ -24,8 +25,8 @@ public class ServiceUsageRecordAggregationStrategyTest {
@Test
public void secondAsNotAggregated() throws InvalidValueException, NotAggregatableRecordsExceptions {
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecord();
ScopeProvider.instance.set(TestUsageRecord.TEST_SCOPE);
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
serviceUsageRecord.validate();
logger.debug("ServiceUsageRecord : {}", serviceUsageRecord);
@ -35,7 +36,7 @@ public class ServiceUsageRecordAggregationStrategyTest {
logger.debug("ServiceUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
ServiceUsageRecord serviceUsageRecord2 = TestUsageRecord.createTestServiceUsageRecord();
ServiceUsageRecord serviceUsageRecord2 = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord2.validate();
logger.debug("ServiceUsageRecord 2 : {}", serviceUsageRecord2);
ServiceUsageRecordAggregationStrategy suras = new ServiceUsageRecordAggregationStrategy(aggregated);
@ -65,8 +66,8 @@ public class ServiceUsageRecordAggregationStrategyTest {
@Test
public void secondAsAggregated() throws InvalidValueException, NotAggregatableRecordsExceptions {
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecord();
ScopeProvider.instance.set(TestUsageRecord.TEST_SCOPE);
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord.validate();
logger.debug("ServiceUsageRecord : {}", serviceUsageRecord);
@ -75,7 +76,7 @@ public class ServiceUsageRecordAggregationStrategyTest {
logger.debug("ServiceUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
ServiceUsageRecord serviceUsageRecord2 = TestUsageRecord.createTestServiceUsageRecord();
ServiceUsageRecord serviceUsageRecord2 = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord2.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
serviceUsageRecord2.validate();
logger.debug("ServiceUsageRecord 2 : {}", serviceUsageRecord2);
@ -112,8 +113,8 @@ public class ServiceUsageRecordAggregationStrategyTest {
@Test
public void aggregationStressTest() throws InvalidValueException, NotAggregatableRecordsExceptions {
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecord();
ScopeProvider.instance.set(TestUsageRecord.TEST_SCOPE);
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
serviceUsageRecord.validate();
logger.debug("ServiceUsageRecord : {}", serviceUsageRecord);
@ -127,7 +128,7 @@ public class ServiceUsageRecordAggregationStrategyTest {
for(int i=2; i<1002; i++){
ServiceUsageRecord sur = TestUsageRecord.createTestServiceUsageRecord();
ServiceUsageRecord sur = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
sur.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
sur.validate();
logger.debug("Cycle ServiceUsageRecord {}: {}", i, sur);

View File

@ -25,7 +25,7 @@ public class StorageUsageRecordAggregationStrategyTest {
@Test
public void secondAsNotAggregated() throws InvalidValueException, NotAggregatableRecordsExceptions {
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecord();
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
storageUsageRecord.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
storageUsageRecord.validate();
logger.debug("StorageUsageRecord : {}", storageUsageRecord);
@ -35,7 +35,7 @@ public class StorageUsageRecordAggregationStrategyTest {
logger.debug("StorageUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
StorageUsageRecord storageUsageRecord2 = TestUsageRecord.createTestStorageUsageRecord();
StorageUsageRecord storageUsageRecord2 = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
storageUsageRecord2.validate();
logger.debug("StorageUsageRecord 2 : {}", storageUsageRecord2);
StorageUsageRecordAggregationStrategy suras = new StorageUsageRecordAggregationStrategy(aggregated);
@ -56,7 +56,7 @@ public class StorageUsageRecordAggregationStrategyTest {
@Test
public void secondAsAggregated() throws InvalidValueException, NotAggregatableRecordsExceptions {
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecord();
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
storageUsageRecord.validate();
logger.debug("StorageUsageRecord : {}", storageUsageRecord);
@ -65,7 +65,7 @@ public class StorageUsageRecordAggregationStrategyTest {
logger.debug("StorageUsageRecord Converted to Aggregated: {}", aggregated);
aggregated.validate();
StorageUsageRecord storageUsageRecord2 = TestUsageRecord.createTestStorageUsageRecord();
StorageUsageRecord storageUsageRecord2 = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
storageUsageRecord2.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
storageUsageRecord2.validate();
logger.debug("StorageUsageRecord 2 : {}", storageUsageRecord2);
@ -92,7 +92,7 @@ public class StorageUsageRecordAggregationStrategyTest {
@Test
public void aggregationStressTest() throws InvalidValueException, NotAggregatableRecordsExceptions {
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecord();
StorageUsageRecord storageUsageRecord = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
storageUsageRecord.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
storageUsageRecord.validate();
logger.debug("StorageUsageRecord : {}", storageUsageRecord);
@ -106,7 +106,7 @@ public class StorageUsageRecordAggregationStrategyTest {
for(int i=2; i<1002; i++){
StorageUsageRecord sur = TestUsageRecord.createTestStorageUsageRecord();
StorageUsageRecord sur = TestUsageRecord.createTestStorageUsageRecordAutomaticScope();
sur.setResourceProperty(TestUsageRecord.TEST_PROPERTY_NAME, TestUsageRecord.TEST_PROPERTY_VALUE);
sur.validate();
logger.debug("Cycle StorageUsageRecord {}: {}", i, sur);

View File

@ -16,7 +16,7 @@ public class UsageRecordTest {
@Test
public void testCompareToSameObject() throws InvalidValueException {
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
UsageRecord ur = usageRecord;
Assert.assertEquals(0, usageRecord.compareTo(ur));
Assert.assertEquals(0, ur.compareTo(usageRecord));
@ -24,7 +24,7 @@ public class UsageRecordTest {
@Test
public void testCompareToEqualsObject() throws Exception {
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
UsageRecord ur = BasicUsageRecord.getUsageRecord(usageRecord.getResourceProperties());
Assert.assertEquals(0, usageRecord.compareTo(ur));
Assert.assertEquals(0, ur.compareTo(usageRecord));
@ -32,7 +32,7 @@ public class UsageRecordTest {
@Test
public void testCompareToComparedAddedProperty() throws Exception {
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
UsageRecord ur = BasicUsageRecord.getUsageRecord(usageRecord.getResourceProperties());
for(int i=1; i<31; i++){
ur.setResourceProperty(Integer.toString(i), i);
@ -43,7 +43,7 @@ public class UsageRecordTest {
@Test
public void testCompareToDifferentForAddedProperties() throws Exception {
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
UsageRecord ur = BasicUsageRecord.getUsageRecord(usageRecord.getResourceProperties());
usageRecord.setResourceProperty(Integer.toString(1), 2);
ur.setResourceProperty(Integer.toString(2), 2);
@ -53,8 +53,8 @@ public class UsageRecordTest {
@Test
public void testCompareToDifferentFromCreation() throws Exception {
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
UsageRecord ur = TestUsageRecord.createTestServiceUsageRecord();
UsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
UsageRecord ur = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
Assert.assertEquals(1, usageRecord.compareTo(ur));
Assert.assertEquals(1, ur.compareTo(usageRecord));
}

View File

@ -9,6 +9,8 @@ import java.util.Set;
import org.gcube.accounting.datamodel.BasicUsageRecord;
import org.gcube.accounting.datamodel.BasicUsageRecordUtility;
import org.gcube.accounting.datamodel.basetypes.TestUsageRecord;
import org.gcube.accounting.exception.InvalidValueException;
import org.gcube.common.scope.api.ScopeProvider;
import org.junit.Assert;
import org.junit.Test;
@ -35,15 +37,37 @@ public class ServiceUsageRecordTest {
return expectedRequiredFields;
}
@Test(expected=InvalidValueException.class)
public void scopeNotSetValidationError() throws InvalidValueException {
ScopeProvider.instance.reset();
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord.validate();
}
@Test
public void testRequiredFields(){
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecord();
public void testRequiredFields() throws InvalidValueException{
ScopeProvider.instance.set(TestUsageRecord.TEST_SCOPE);
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
Set<String> expectedRequiredFields = getExpectedRequiredFields();
Set<String> gotRequiredFields = serviceUsageRecord.getRequiredFields();
Assert.assertTrue(expectedRequiredFields.containsAll(gotRequiredFields));
Assert.assertTrue(gotRequiredFields.containsAll(expectedRequiredFields));
serviceUsageRecord.validate();
}
@Test
public void testRequiredFieldsWithScopeSetExplicitely() throws InvalidValueException{
ServiceUsageRecord serviceUsageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
serviceUsageRecord.setScope(TestUsageRecord.TEST_SCOPE);
Set<String> expectedRequiredFields = getExpectedRequiredFields();
Set<String> gotRequiredFields = serviceUsageRecord.getRequiredFields();
Assert.assertTrue(expectedRequiredFields.containsAll(gotRequiredFields));
Assert.assertTrue(gotRequiredFields.containsAll(expectedRequiredFields));
serviceUsageRecord.validate();
}
}

View File

@ -40,7 +40,7 @@ public class AccountingPersistenceTest {
StressTestUtility.stressTest(new TestOperation() {
@Override
public void operate(int i) {
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
persistence.validateAccountAggregate(usageRecord, true, false);
}
}, 1);
@ -54,7 +54,7 @@ public class AccountingPersistenceTest {
StressTestUtility.stressTest(new TestOperation() {
@Override
public void operate(int i) {
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
persistence.validateAccountAggregate(usageRecord, true, false);
}
}, 1);
@ -68,7 +68,7 @@ public class AccountingPersistenceTest {
StressTestUtility.stressTest(new TestOperation() {
@Override
public void operate(int i) {
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
persistence.validateAccountAggregate(usageRecord, true, false);
}
});
@ -81,7 +81,7 @@ public class AccountingPersistenceTest {
StressTestUtility.stressTest(new TestOperation() {
@Override
public void operate(int i) throws Exception {
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecord();
SingleUsageRecord usageRecord = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
persistence.account(usageRecord);
}
});