class UpdatePerfTest extends CpsPerfTestBase {
CpsDataService objectUnderTest
+ def now = OffsetDateTime.now()
def setup() { objectUnderTest = cpsDataService }
def parentNodeXpath = "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-10']"
def jsonData = readResourceDataFile('openroadm/innerNode.json').replace('NODE_ID_HERE', '10')
when: 'the fragment entities are updated by the data nodes'
- stopWatch.start()
- objectUnderTest.updateDataNodeAndDescendants(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm1', parentNodeXpath, jsonData, OffsetDateTime.now())
- stopWatch.stop()
- def updateDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'update duration is under 1000 milliseconds'
- recordAndAssertPerformance('Update 1 data node', 1000, updateDurationInMillis)
+ resourceMeter.start()
+ objectUnderTest.updateDataNodeAndDescendants(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm1', parentNodeXpath, jsonData, now)
+ resourceMeter.stop()
+ def updateDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'update completes within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Update 1 data node', 0.6, updateDurationInSeconds, 100, resourceMeter.getTotalMemoryUsageInMB())
}
- def 'Batch update 10 data nodes with descendants'() {
+ def 'Batch update 100 data nodes with descendants'() {
given: 'a list of data nodes to update as JSON'
def innerNodeJson = readResourceDataFile('openroadm/innerNode.json')
- def nodesJsonData = (20..30).collectEntries {[
+ def nodesJsonData = (1..100).collectEntries {[
"/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']",
innerNodeJson.replace('NODE_ID_HERE', it.toString())
]}
when: 'the fragment entities are updated by the data nodes'
- stopWatch.start()
- objectUnderTest.updateDataNodesAndDescendants(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm2', nodesJsonData, OffsetDateTime.now())
- stopWatch.stop()
- def updateDurationInMillis = stopWatch.getTotalTimeMillis()
- then: 'update duration is under 5000 milliseconds'
- recordAndAssertPerformance('Update 10 data nodes', 5000, updateDurationInMillis)
+ resourceMeter.start()
+ objectUnderTest.updateDataNodesAndDescendants(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm1', nodesJsonData, now)
+ resourceMeter.stop()
+ def updateDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'update completes within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Update 100 data nodes', 40, updateDurationInSeconds, 800, resourceMeter.getTotalMemoryUsageInMB())
+ }
+
+ def 'Update leaves for 1 data node (twice)'() {
+ given: 'Updated json for openroadm data'
+ def jsonDataUpdated = "{'openroadm-device':{'device-id':'C201-7-1A-10','status':'fail','ne-state':'jeopardy'}}"
+ def jsonDataOriginal = "{'openroadm-device':{'device-id':'C201-7-1A-10','status':'success','ne-state':'inservice'}}"
+ when: 'update is performed for leaves'
+ resourceMeter.start()
+ objectUnderTest.updateNodeLeaves(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm2', "/openroadm-devices", jsonDataUpdated, now)
+ objectUnderTest.updateNodeLeaves(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm2', "/openroadm-devices", jsonDataOriginal, now)
+ resourceMeter.stop()
+ def updateDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'update completes within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Update leaves for 1 data node', 0.7, updateDurationInSeconds, 200, resourceMeter.getTotalMemoryUsageInMB())
+ }
+
+ def 'Batch update leaves for 100 data nodes (twice)'() {
+ given: 'Updated json for openroadm data'
+ def jsonDataUpdated = "{'openroadm-device':[" + (1..100).collect { "{'device-id':'C201-7-1A-" + it + "','status':'fail','ne-state':'jeopardy'}" }.join(",") + "]}"
+ def jsonDataOriginal = "{'openroadm-device':[" + (1..100).collect { "{'device-id':'C201-7-1A-" + it + "','status':'success','ne-state':'inservice'}" }.join(",") + "]}"
+ when: 'update is performed for leaves'
+ resourceMeter.start()
+ objectUnderTest.updateNodeLeaves(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm2', "/openroadm-devices", jsonDataUpdated, now)
+ objectUnderTest.updateNodeLeaves(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm2', "/openroadm-devices", jsonDataOriginal, now)
+ resourceMeter.stop()
+ def updateDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
+ then: 'update completes within expected time and memory used is within limit'
+ recordAndAssertResourceUsage('Batch update leaves for 100 data nodes', 1, updateDurationInSeconds, 200, resourceMeter.getTotalMemoryUsageInMB())
}
}