def 'Create test data (please note, subsequent tests depend on this running first).'() {
when: 'multiple anchors with a node with a large number of descendants is created'
- stopWatch.start()
- def data = generateOpenRoadData(50)
+ resourceMeter.start()
+ def data = generateOpenRoadData(300)
addAnchorsWithData(10, CPS_PERFORMANCE_TEST_DATASPACE, LARGE_SCHEMA_SET, 'delete', data)
- stopWatch.stop()
- def setupDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'setup duration is under 40 seconds'
- recordAndAssertPerformance('Delete test setup', 40_000, setupDurationInMillis)
+ resourceMeter.stop()
+ def setupDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'setup duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete test setup', 200, setupDurationInSeconds, 200, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Delete 10 container nodes'() {
+ def 'Delete 100 container nodes'() {
+ given: 'a list of xpaths to delete'
+ def xpathsToDelete = (1..100).collect {
+ "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device"
+ }
when: 'child nodes are deleted'
- stopWatch.start()
- (1..10).each {
- def childPath = "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device"
- objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete1', childPath, OffsetDateTime.now())
+ resourceMeter.start()
+ xpathsToDelete.each {
+ objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete1', it, OffsetDateTime.now())
}
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Delete 10 containers', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete 100 containers', 2, deleteDurationInSeconds, 30, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Batch delete 50 container nodes'() {
+ def 'Batch delete 100 container nodes'() {
given: 'a list of xpaths to delete'
- def xpathsToDelete = (1..50).collect {
+ def xpathsToDelete = (1..100).collect {
"/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device"
}
when: 'child nodes are deleted'
- stopWatch.start()
+ resourceMeter.start()
objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete2', xpathsToDelete, OffsetDateTime.now())
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Batch delete 50 containers', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Batch delete 100 containers', 0.5, deleteDurationInSeconds, 5, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Delete 20 list elements'() {
+ def 'Delete 100 list elements'() {
+ given: 'a list of xpaths to delete'
+ def xpathsToDelete = (1..100).collect {
+ "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']"
+ }
when: 'list elements are deleted'
- stopWatch.start()
- (1..20).each {
- def listElementXpath = "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-1']/org-openroadm-device/degree[@degree-number=" + it + "]"
- objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete3', listElementXpath, OffsetDateTime.now())
+ resourceMeter.start()
+ xpathsToDelete.each {
+ objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete3', it, OffsetDateTime.now())
}
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Delete 20 lists elements', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete 100 lists elements', 2, deleteDurationInSeconds, 20, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Batch delete 1000 list elements'() {
+ def 'Batch delete 100 list elements'() {
given: 'a list of xpaths to delete'
- def xpathsToDelete = []
- for (int childIndex = 1; childIndex <= 50; childIndex++) {
- xpathsToDelete.addAll((1..20).collect {
- "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-${childIndex}']/org-openroadm-device/degree[@degree-number=${it}]".toString()
- })
+ def xpathsToDelete = (1..100).collect {
+ "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']"
}
when: 'list elements are deleted'
- stopWatch.start()
+ resourceMeter.start()
objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete4', xpathsToDelete, OffsetDateTime.now())
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Batch delete 1000 lists elements', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Batch delete 100 lists elements', 0.5, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Delete 10 whole lists'() {
+ def 'Delete 100 whole lists'() {
+ given: 'a list of xpaths to delete'
+ def xpathsToDelete = (1..100).collect {
+ "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device/degree"
+ }
when: 'lists are deleted'
- stopWatch.start()
- (1..10).each {
- def childPath = "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device/degree"
- objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete5', childPath, OffsetDateTime.now())
+ resourceMeter.start()
+ xpathsToDelete.each {
+ objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete5', it, OffsetDateTime.now())
}
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Delete 10 whole lists', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete 100 whole lists', 5, deleteDurationInSeconds, 30, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Batch delete 30 whole lists'() {
+ def 'Batch delete 100 whole lists'() {
given: 'a list of xpaths to delete'
- def xpathsToDelete = (1..30).collect {
+ def xpathsToDelete = (1..100).collect {
"/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device/degree"
}
when: 'lists are deleted'
- stopWatch.start()
+ resourceMeter.start()
objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete6', xpathsToDelete, OffsetDateTime.now())
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Batch delete 30 whole lists', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Batch delete 100 whole lists', 4, deleteDurationInSeconds, 5, resourceMeter.getTotalMemoryUsageInMB())
}
def 'Delete 1 large data node'() {
when: 'parent node is deleted'
- stopWatch.start()
+ resourceMeter.start()
objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete7', '/openroadm-devices', OffsetDateTime.now())
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Delete one large node', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete one large node', 2, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
}
def 'Delete root node with many descendants'() {
when: 'root node is deleted'
- stopWatch.start()
+ resourceMeter.start()
objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete8', '/', OffsetDateTime.now())
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Delete root node', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete root node', 2, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
}
def 'Delete data nodes for an anchor'() {
when: 'data nodes are deleted'
- stopWatch.start()
+ resourceMeter.start()
objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete9', OffsetDateTime.now())
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Delete data nodes for anchor', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete data nodes for anchor', 2, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
}
def 'Batch delete 100 non-existing nodes'() {
given: 'a list of xpaths to delete'
def xpathsToDelete = (1..100).collect { "/path/to/non-existing/node[@id='" + it + "']" }
when: 'child nodes are deleted'
- stopWatch.start()
+ resourceMeter.start()
try {
objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete10', xpathsToDelete, OffsetDateTime.now())
} catch (DataNodeNotFoundException ignored) {}
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 300 milliseconds'
- recordAndAssertPerformance('Batch delete 100 non-existing', 300, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Batch delete 100 non-existing', 7, deleteDurationInSeconds, 5, resourceMeter.getTotalMemoryUsageInMB())
}
def 'Clean up test data'() {
given: 'a list of anchors to delete'
def anchorNames = (1..10).collect {'delete' + it}
when: 'data nodes are deleted'
- stopWatch.start()
+ resourceMeter.start()
cpsAdminService.deleteAnchors(CPS_PERFORMANCE_TEST_DATASPACE, anchorNames)
- stopWatch.stop()
- def deleteDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'delete duration is under 1000 milliseconds'
- recordAndAssertPerformance('Delete test cleanup', 1000, deleteDurationInMillis)
+ resourceMeter.stop()
+ def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'delete duration is within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Delete test cleanup', 10, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
}
}