abstract def createInitialData()
- def recordAndAssertResourceUsage(String title, double expectedAverageTimeInSec, double recordedTimeInSec, double memoryUsageInMB, boolean referenceGraph) {
- def timeLimitFactor = DEFAULT_TIME_LIMIT_FACTOR
- if (expectedAverageTimeInSec <= VERY_FAST_TEST_THRESHOLD) {
- timeLimitFactor = DEFAULT_TIME_LIMIT_FACTOR_FOR_VERY_FAST_TEST
- }
+ def recordAndAssertResourceUsage(String title, double expectedAverageTimeInSec, double recordedTimeInSec, double memoryUsageInMB, boolean referenceGraph, double timeLimitFactor) {
def testPassed = recordedTimeInSec <= timeLimitFactor * expectedAverageTimeInSec
addRecord(title, expectedAverageTimeInSec, recordedTimeInSec, memoryUsageInMB, testPassed)
if (referenceGraph) {
return true
}
+ def recordAndAssertResourceUsage(String title, double expectedAverageTimeInSec, double recordedTimeInSec, double memoryUsageInMB, boolean referenceGraph) {
+ def timeLimitFactor = DEFAULT_TIME_LIMIT_FACTOR
+ if (expectedAverageTimeInSec <= VERY_FAST_TEST_THRESHOLD) {
+ timeLimitFactor = DEFAULT_TIME_LIMIT_FACTOR_FOR_VERY_FAST_TEST
+ }
+ recordAndAssertResourceUsage(title, expectedAverageTimeInSec, recordedTimeInSec, memoryUsageInMB, referenceGraph, timeLimitFactor)
+
+ }
+
def recordAndAssertResourceUsage(String title, double expectedAverageTimeInSec, double recordedTimeInSec, double memoryUsageInMB) {
recordAndAssertResourceUsage(title, expectedAverageTimeInSec, recordedTimeInSec, memoryUsageInMB, false)
}
def 'Delete data nodes from multiple anchors 32K (2^15) limit exceeded.'() {
given: '33,000 anchor names'
def anchorNames = (1..33_000).collect { "size-of-this-name-does-not-matter-for-limit-" + it }
- when: 'a single operation is executed to delete all datanodes in given anchors'
+ when: 'a single operation is executed to delete all data nodes in given anchors'
objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, anchorNames, OffsetDateTime.now())
then: 'a database exception is not thrown'
noExceptionThrown()
cpsAnchorService.deleteAnchor(CPS_PERFORMANCE_TEST_DATASPACE, 'limitsAnchor')
resourceMeter.stop()
def durationInSeconds = resourceMeter.getTotalTimeInSeconds()
- then: 'test data is deleted in 1 second'
- recordAndAssertResourceUsage('CPS:Deleting test data', 0.068, durationInSeconds, resourceMeter.getTotalMemoryUsageInMB())
+ then: 'test data is deleted in 1 second (margin 3x)'
+ recordAndAssertResourceUsage('CPS:Deleting test data', 0.068, durationInSeconds, resourceMeter.getTotalMemoryUsageInMB(), false, 3)
}
def countDataNodes() {
}
resourceMeter.stop()
def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
- then: 'delete duration is below accepted margin (4x) of the expected average'
- recordAndAssertResourceUsage('CPS:Delete 100 whole lists', 3.2, deleteDurationInSeconds, resourceMeter.getTotalMemoryUsageInMB(), REFERENCE_GRAPH)
+ then: 'delete duration is below accepted margin (3x) of the expected average'
+ recordAndAssertResourceUsage('CPS:Delete 100 whole lists', 3.2, deleteDurationInSeconds, resourceMeter.getTotalMemoryUsageInMB(), REFERENCE_GRAPH, 3)
}
def 'Batch delete 100 whole lists'() {
resourceMeter.stop()
def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
then: 'delete duration is below accepted margin (3x) of the expected average'
- recordAndAssertResourceUsage('CPS:Batch delete 100 whole lists', 2.4, deleteDurationInSeconds, resourceMeter.getTotalMemoryUsageInMB(), REFERENCE_GRAPH)
+ recordAndAssertResourceUsage('CPS:Batch delete 100 whole lists', 2.2, deleteDurationInSeconds, resourceMeter.getTotalMemoryUsageInMB(), REFERENCE_GRAPH, 3)
}
def 'Delete 1 large data node'() {