From 196351946ff26a917fa0e5bf07ceb9be16436d22 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Fri, 10 Jul 2015 09:58:29 +0000 Subject: [PATCH] Fixed bug on calculation average duration git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@117147 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../ServiceUsageRecordAggregationStrategy.java | 10 +++++++++- ...rviceUsageRecordAggregationStrategyTest.java | 17 +++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategy.java b/src/main/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategy.java index e013d1e..6e5c882 100644 --- a/src/main/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategy.java +++ b/src/main/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategy.java @@ -23,13 +23,21 @@ public class ServiceUsageRecordAggregationStrategy extends AggregationStrategy t.getMaxInvocationTime()){ diff --git a/src/test/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategyTest.java b/src/test/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategyTest.java index 7db4f02..1cc0a63 100644 --- a/src/test/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategyTest.java +++ b/src/test/java/org/gcube/accounting/aggregation/strategy/ServiceUsageRecordAggregationStrategyTest.java @@ -106,6 +106,10 @@ public class ServiceUsageRecordAggregationStrategyTest { Assert.assertFalse(aggregated.getResourceProperties().containsKey(TestUsageRecord.TEST_PROPERTY_NAME)); } + protected long durationWeightedAverage(int numberA, long durationA, int numberB, long durationB){ + return ((numberA * durationA) + (numberB * durationB)) / (numberA + numberB); + } + @Test public void aggregationStressTest() throws InvalidValueException, NotAggregatableRecordsExceptions { @@ -131,25 +135,26 @@ public class ServiceUsageRecordAggregationStrategyTest { long minInvocationTime = aggregated.getMinInvocationTime(); long maxInvocationTime = aggregated.getMaxInvocationTime(); long oldDuration = aggregated.getDuration(); - long newDuration = sur.getDuration(); + long surDuration = sur.getDuration(); suras.aggregate(sur); logger.debug("Resulting Aggregated ServiceUsageRecord: {}", aggregated); aggregated.validate(); - Assert.assertTrue(aggregated.getDuration() == ((oldDuration + newDuration)/2)); + long avgDuration = durationWeightedAverage(i-1, oldDuration, 1, surDuration); + Assert.assertTrue(aggregated.getDuration() == (avgDuration)); Assert.assertTrue(aggregated.getOperationCount() == i); - if(minInvocationTime >= newDuration){ - Assert.assertTrue(aggregated.getMinInvocationTime() == newDuration); + if(minInvocationTime >= surDuration){ + Assert.assertTrue(aggregated.getMinInvocationTime() == surDuration); }else{ Assert.assertTrue(aggregated.getMinInvocationTime() == minInvocationTime); } - if(maxInvocationTime >= newDuration){ + if(maxInvocationTime >= surDuration){ Assert.assertTrue(aggregated.getMaxInvocationTime() == maxInvocationTime); }else{ - Assert.assertTrue(aggregated.getMaxInvocationTime() == newDuration); + Assert.assertTrue(aggregated.getMaxInvocationTime() == surDuration); } Assert.assertFalse(aggregated.getResourceProperties().containsKey(TestUsageRecord.TEST_PROPERTY_NAME));