+ assert countDataNodesInTree(result) == 5 * TOTAL_CM_HANDLES
+ }
+
+ def 'CM-handle is looked up by id.'() {
+ when: 'CM-handles are looked up by cm-handle-id 100 times'
+ int count = 0
+ resourceMeter.start()
+ (1..100).each {
+ count += cpsDataService.getDataNodes(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR,
+ '/dmi-registry/cm-handles[@id="cm-' + it + '"]', OMIT_DESCENDANTS).size()
+ }
+ resourceMeter.stop()
+ then:
+ assert count == 100
+ and: 'average performance is as expected'
+ def averageResponseTime = resourceMeter.totalTimeInSeconds / 100
+ recordAndAssertResourceUsage('Look up CM-handle by id',
+ expectedAverageResponseTime, averageResponseTime,
+ 15, resourceMeter.totalMemoryUsageInMB)
+ where:
+ expectedAverageResponseTime = 8 * MILLISECONDS
+ }
+
+ def 'CM-handle is looked up by alternate-id.'() {
+ when: 'CM-handles are looked up by alternate-id 100 times'
+ int count = 0
+ resourceMeter.start()
+ (1..100).each {
+ count += cpsQueryService.queryDataNodes(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR,
+ '/dmi-registry/cm-handles[@alternate-id="alt-' + it + '"]', OMIT_DESCENDANTS).size()
+ }
+ resourceMeter.stop()
+ then:
+ assert count == 100
+ and: 'average performance is as expected'
+ def averageResponseTime = resourceMeter.totalTimeInSeconds / 100
+ recordAndAssertResourceUsage('Look up CM-handle by alternate-id',
+ expectedAverageResponseTime, averageResponseTime,
+ 15, resourceMeter.totalMemoryUsageInMB)
+ where:
+ expectedAverageResponseTime = 20 * MILLISECONDS
+ }
+
+ def 'A batch of CM-handles is looked up by alternate-id.'() {
+ given: 'a CPS Path Query to look up 100 alternate-ids in a single operation'
+ def cpsPathQuery = '/dmi-registry/cm-handles[' + (1..100).collect { "@alternate-id='alt-${it}'" }.join(' or ') + ']'
+ when: 'CM-handles are looked up by alternate-ids in a single query'
+ resourceMeter.start()
+ def count = cpsQueryService.queryDataNodes(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, cpsPathQuery, OMIT_DESCENDANTS).size()
+ resourceMeter.stop()
+ then: 'expected amount of data was returned'
+ assert count == 100
+ then: 'average performance is as expected'
+ def averageResponseTime = resourceMeter.totalTimeInSeconds / 100
+ recordAndAssertResourceUsage('Batch look up CM-handle by alternate-id',
+ expectedAverageResponseTime, averageResponseTime,
+ 15, resourceMeter.totalMemoryUsageInMB)
+ where:
+ expectedAverageResponseTime = 4 * MILLISECONDS
+ }
+
+ def 'Find any CM-handle given moduleSetTag when there are 20K READY handles with same moduleSetTag.'() {
+ given:
+ def cpsPathQuery = "/dmi-registry/cm-handles[@module-set-tag='my-module-set-tag']"
+ when: 'CM-handles are looked up by module-set-tag 100 times'
+ int count = 0
+ resourceMeter.start()
+ (1..100).each {
+ count += cpsQueryService.queryDataNodes(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, cpsPathQuery, OMIT_DESCENDANTS).size()
+ }
+ resourceMeter.stop()
+ then:
+ assert count == TOTAL_CM_HANDLES * 100
+ then: 'average performance is as expected'
+ def averageResponseTime = resourceMeter.totalTimeInSeconds / 100
+ recordAndAssertResourceUsage('Look up CM-handles by module-set-tag',
+ expectedAverageResponseTime, averageResponseTime,
+ 500, resourceMeter.totalMemoryUsageInMB)
+ where:
+ expectedAverageResponseTime = 438 * MILLISECONDS