Improving Model
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@122582 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
9050adfdd1
commit
51cc51f546
|
@ -26,15 +26,15 @@ public abstract class AbstractTaskUsageRecord extends BasicUsageRecord {
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -2208425042550641240L;
|
private static final long serialVersionUID = -2208425042550641240L;
|
||||||
|
|
||||||
@NotEmpty
|
@RequiredField @NotEmpty
|
||||||
public static final String TASK_ID = "taskId";
|
public static final String TASK_ID = "taskId";
|
||||||
@NotEmptyIfNotNull
|
@NotEmptyIfNotNull
|
||||||
public static final String REF_JOB_ID = "refJobId";
|
public static final String REF_JOB_ID = "refJobId";
|
||||||
|
|
||||||
@RequiredField @NotEmpty
|
@NotEmptyIfNotNull
|
||||||
public static final String HOST = "host";
|
public static final String HOST = "host";
|
||||||
@NotEmptyIfNotNull
|
@NotEmptyIfNotNull
|
||||||
public static final String REF_HOSTING_NODE = "refHostingNode";
|
public static final String REF_HOSTING_NODE_ID = "refHostingNodeId";
|
||||||
|
|
||||||
@RequiredField @ValidLong @CalculateTaskWallDuration
|
@RequiredField @ValidLong @CalculateTaskWallDuration
|
||||||
public static final String TASK_START_TIME = "taskStartTime";
|
public static final String TASK_START_TIME = "taskStartTime";
|
||||||
|
@ -99,16 +99,16 @@ public abstract class AbstractTaskUsageRecord extends BasicUsageRecord {
|
||||||
return (String) this.resourceProperties.get(HOST);
|
return (String) this.resourceProperties.get(HOST);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRefHost(String host) throws InvalidValueException {
|
public void setHost(String host) throws InvalidValueException {
|
||||||
setResourceProperty(HOST, host);
|
setResourceProperty(HOST, host);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRefHostingNode() {
|
public String getRefHostingNodeId() {
|
||||||
return (String) this.resourceProperties.get(REF_HOSTING_NODE);
|
return (String) this.resourceProperties.get(REF_HOSTING_NODE_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRefHostingNode(String refHostingNode) throws InvalidValueException {
|
public void setRefHostingNodeId(String refHostingNodeId) throws InvalidValueException {
|
||||||
setResourceProperty(REF_HOSTING_NODE, refHostingNode);
|
setResourceProperty(REF_HOSTING_NODE_ID, refHostingNodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Calendar getTaskStartTime() {
|
public Calendar getTaskStartTime() {
|
||||||
|
@ -155,12 +155,12 @@ public abstract class AbstractTaskUsageRecord extends BasicUsageRecord {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Map<String, Object> getInputParameters(){
|
public Map<String, ? extends Object> getInputParameters(){
|
||||||
return (Map<String, Object>) getResourceProperty(INPUT_PARAMETERS);
|
return (Map<String, Object>) getResourceProperty(INPUT_PARAMETERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void setInputParameters(Map<String, Object> inputParameters) throws InvalidValueException{
|
public void setInputParameters(Map<String, ? extends Object> inputParameters) throws InvalidValueException{
|
||||||
setResourceProperty(INPUT_PARAMETERS, (Comparable<? extends Serializable>) inputParameters);
|
setResourceProperty(INPUT_PARAMETERS, (Comparable<? extends Serializable>) inputParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,15 +3,19 @@
|
||||||
*/
|
*/
|
||||||
package org.gcube.accounting.datamodel.basetypes;
|
package org.gcube.accounting.datamodel.basetypes;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
|
import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
|
||||||
import org.gcube.accounting.datamodel.usagerecords.JobUsageRecord;
|
import org.gcube.accounting.datamodel.usagerecords.JobUsageRecord;
|
||||||
import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord;
|
import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord;
|
||||||
import org.gcube.accounting.datamodel.usagerecords.StorageUsageRecord;
|
import org.gcube.accounting.datamodel.usagerecords.StorageUsageRecord;
|
||||||
|
import org.gcube.accounting.datamodel.usagerecords.TaskUsageRecord;
|
||||||
import org.gcube.documentstore.exception.InvalidValueException;
|
import org.gcube.documentstore.exception.InvalidValueException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -37,13 +41,17 @@ public class TestUsageRecord {
|
||||||
public final static String TEST_PROPERTY_NAME = "TestPropertyName";
|
public final static String TEST_PROPERTY_NAME = "TestPropertyName";
|
||||||
public final static String TEST_PROPERTY_VALUE = "TestPropertyValue";
|
public final static String TEST_PROPERTY_VALUE = "TestPropertyValue";
|
||||||
|
|
||||||
|
public final static String TEST_JOB_ID = UUID.randomUUID().toString();
|
||||||
public final static String TEST_JOB_NAME = "TestJobName";
|
public final static String TEST_JOB_NAME = "TestJobName";
|
||||||
public final static int TEST_VMS_USED = 2;
|
public final static int TEST_VMS_USED = 2;
|
||||||
public final static String TEST_JOB_QUALIFIER = "TestJobQualifier";
|
public final static String TEST_JOB_QUALIFIER = "TestJobQualifier";
|
||||||
public final static long HALF_DURATION = 10 * 60 * 1000; // 10 min
|
public final static long HALF_DURATION = 10 * 60 * 1000; // 10 min
|
||||||
public final static OperationResult TEST_JOB_OPERATION_RESULT = OperationResult.SUCCESS;
|
public final static OperationResult TEST_JOB_OPERATION_RESULT = OperationResult.SUCCESS;
|
||||||
|
|
||||||
|
public final static String TEST_TASK_ID = UUID.randomUUID().toString();
|
||||||
|
|
||||||
|
public final static String TEST_NESTED_MAP = "TestNestedMap";
|
||||||
|
|
||||||
private final static long MIN_DURATION = 60; // millisec
|
private final static long MIN_DURATION = 60; // millisec
|
||||||
private final static long MAX_DURATION = 1000; // millisec
|
private final static long MAX_DURATION = 1000; // millisec
|
||||||
|
|
||||||
|
@ -179,13 +187,14 @@ public class TestUsageRecord {
|
||||||
|
|
||||||
JobUsageRecord usageRecord = new JobUsageRecord();
|
JobUsageRecord usageRecord = new JobUsageRecord();
|
||||||
try {
|
try {
|
||||||
usageRecord.setJobId(UUID.randomUUID().toString());
|
|
||||||
usageRecord.setJobQualifier(TEST_JOB_QUALIFIER);
|
|
||||||
|
|
||||||
usageRecord.setConsumerId(TEST_CONSUMER_ID);
|
usageRecord.setConsumerId(TEST_CONSUMER_ID);
|
||||||
usageRecord.setOperationResult(TEST_JOB_OPERATION_RESULT);
|
usageRecord.setOperationResult(TEST_JOB_OPERATION_RESULT);
|
||||||
|
|
||||||
|
usageRecord.setJobId(TEST_JOB_ID);
|
||||||
|
|
||||||
usageRecord.setJobName(TEST_JOB_NAME);
|
usageRecord.setJobName(TEST_JOB_NAME);
|
||||||
|
usageRecord.setJobQualifier(TEST_JOB_QUALIFIER);
|
||||||
|
|
||||||
|
|
||||||
Calendar startTime = Calendar.getInstance();
|
Calendar startTime = Calendar.getInstance();
|
||||||
Calendar endTime = Calendar.getInstance();
|
Calendar endTime = Calendar.getInstance();
|
||||||
|
@ -195,7 +204,65 @@ public class TestUsageRecord {
|
||||||
usageRecord.setJobStartTime(startTime);
|
usageRecord.setJobStartTime(startTime);
|
||||||
usageRecord.setJobEndTime(endTime);
|
usageRecord.setJobEndTime(endTime);
|
||||||
|
|
||||||
usageRecord.setOperationResult(OperationResult.SUCCESS);
|
|
||||||
|
} catch (InvalidValueException e) {
|
||||||
|
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Creating a test Usage Record", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return usageRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static TaskUsageRecord createTestTaskUsageRecordExplicitScope() {
|
||||||
|
|
||||||
|
TaskUsageRecord usageRecord = createTestTaskUsageRecordAutomaticScope();
|
||||||
|
try {
|
||||||
|
usageRecord.setScope(TEST_SCOPE);
|
||||||
|
} catch (InvalidValueException e) {
|
||||||
|
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Setting the Scope", e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return usageRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static TaskUsageRecord createTestTaskUsageRecordAutomaticScope() {
|
||||||
|
|
||||||
|
TaskUsageRecord usageRecord = new TaskUsageRecord();
|
||||||
|
try {
|
||||||
|
usageRecord.setConsumerId(TEST_CONSUMER_ID);
|
||||||
|
usageRecord.setOperationResult(TEST_JOB_OPERATION_RESULT);
|
||||||
|
|
||||||
|
usageRecord.setTaskId(TEST_TASK_ID);
|
||||||
|
usageRecord.setTaskId(TEST_JOB_ID);
|
||||||
|
usageRecord.setHost(TEST_HOST);
|
||||||
|
|
||||||
|
usageRecord.setRefHostingNodeId(UUID.randomUUID().toString());
|
||||||
|
|
||||||
|
Calendar startTime = Calendar.getInstance();
|
||||||
|
Calendar endTime = Calendar.getInstance();
|
||||||
|
endTime.setTimeInMillis(startTime.getTimeInMillis() + HALF_DURATION);
|
||||||
|
startTime.setTimeInMillis(startTime.getTimeInMillis() - HALF_DURATION);
|
||||||
|
|
||||||
|
usageRecord.setTaskStartTime(startTime);
|
||||||
|
usageRecord.setTaskEndTime(endTime);
|
||||||
|
|
||||||
|
Map<String, Serializable> inputParameters = new HashMap<>();
|
||||||
|
inputParameters.put(TEST_PROPERTY_NAME, TEST_PROPERTY_VALUE);
|
||||||
|
inputParameters.put(TEST_PROPERTY_VALUE, TEST_PROPERTY_NAME);
|
||||||
|
|
||||||
|
HashMap<String, Comparable<? extends Serializable>> parameter = new HashMap<>();
|
||||||
|
parameter.put(TEST_PROPERTY_NAME, TEST_PROPERTY_VALUE);
|
||||||
|
parameter.put(TEST_PROPERTY_VALUE, TEST_PROPERTY_NAME);
|
||||||
|
|
||||||
|
inputParameters.put(TEST_NESTED_MAP, parameter);
|
||||||
|
|
||||||
|
usageRecord.setInputParameters(inputParameters);
|
||||||
|
|
||||||
} catch (InvalidValueException e) {
|
} catch (InvalidValueException e) {
|
||||||
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Creating a test Usage Record", e);
|
logger.error(" ------ You SHOULD NOT SEE THIS MESSAGE. Error Creating a test Usage Record", e);
|
||||||
|
|
|
@ -30,8 +30,6 @@ public class JobUsageRecordTest {
|
||||||
expectedRequiredFields.add(UsageRecord.SCOPE);
|
expectedRequiredFields.add(UsageRecord.SCOPE);
|
||||||
expectedRequiredFields.add(UsageRecord.OPERATION_RESULT);
|
expectedRequiredFields.add(UsageRecord.OPERATION_RESULT);
|
||||||
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_ID);
|
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_ID);
|
||||||
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_QUALIFIER);
|
|
||||||
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_NAME);
|
|
||||||
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_START_TIME);
|
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_START_TIME);
|
||||||
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_END_TIME);
|
expectedRequiredFields.add(AbstractJobUsageRecord.JOB_END_TIME);
|
||||||
return expectedRequiredFields;
|
return expectedRequiredFields;
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.accounting.datamodel.usagerecords;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.gcube.accounting.datamodel.UsageRecord;
|
||||||
|
import org.gcube.accounting.datamodel.basetypes.AbstractTaskUsageRecord;
|
||||||
|
import org.gcube.accounting.datamodel.basetypes.TestUsageRecord;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.documentstore.exception.InvalidValueException;
|
||||||
|
import org.gcube.documentstore.records.Record;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TaskUsageRecordTest {
|
||||||
|
|
||||||
|
public static Set<String> getExpectedRequiredFields(){
|
||||||
|
Set<String> expectedRequiredFields = new HashSet<String>();
|
||||||
|
expectedRequiredFields.add(Record.ID);
|
||||||
|
expectedRequiredFields.add(UsageRecord.CONSUMER_ID);
|
||||||
|
expectedRequiredFields.add(UsageRecord.CREATION_TIME);
|
||||||
|
expectedRequiredFields.add(UsageRecord.RECORD_TYPE);
|
||||||
|
expectedRequiredFields.add(UsageRecord.SCOPE);
|
||||||
|
expectedRequiredFields.add(UsageRecord.OPERATION_RESULT);
|
||||||
|
expectedRequiredFields.add(AbstractTaskUsageRecord.TASK_ID);
|
||||||
|
expectedRequiredFields.add(AbstractTaskUsageRecord.TASK_START_TIME);
|
||||||
|
expectedRequiredFields.add(AbstractTaskUsageRecord.TASK_END_TIME);
|
||||||
|
return expectedRequiredFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected=InvalidValueException.class)
|
||||||
|
public void scopeNotSetValidationError() throws InvalidValueException {
|
||||||
|
ScopeProvider.instance.reset();
|
||||||
|
TaskUsageRecord taskUsageRecord = TestUsageRecord.createTestTaskUsageRecordAutomaticScope();
|
||||||
|
taskUsageRecord.validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRequiredFields() throws InvalidValueException{
|
||||||
|
ScopeProvider.instance.set(TestUsageRecord.TEST_SCOPE);
|
||||||
|
TaskUsageRecord taskUsageRecord = TestUsageRecord.createTestTaskUsageRecordAutomaticScope();
|
||||||
|
|
||||||
|
Set<String> expectedRequiredFields = getExpectedRequiredFields();
|
||||||
|
Set<String> gotRequiredFields = taskUsageRecord.getRequiredFields();
|
||||||
|
|
||||||
|
Assert.assertTrue(expectedRequiredFields.containsAll(gotRequiredFields));
|
||||||
|
Assert.assertTrue(gotRequiredFields.containsAll(expectedRequiredFields));
|
||||||
|
|
||||||
|
taskUsageRecord.validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRequiredFieldsWithScopeSetExplicitely() throws InvalidValueException{
|
||||||
|
TaskUsageRecord taskUsageRecord = TestUsageRecord.createTestTaskUsageRecordExplicitScope();
|
||||||
|
taskUsageRecord.setScope(TestUsageRecord.TEST_SCOPE);
|
||||||
|
|
||||||
|
Set<String> expectedRequiredFields = getExpectedRequiredFields();
|
||||||
|
Set<String> gotRequiredFields = taskUsageRecord.getRequiredFields();
|
||||||
|
|
||||||
|
Assert.assertTrue(expectedRequiredFields.containsAll(gotRequiredFields));
|
||||||
|
Assert.assertTrue(gotRequiredFields.containsAll(expectedRequiredFields));
|
||||||
|
|
||||||
|
taskUsageRecord.validate();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue