X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=integration-test%2Fsrc%2Ftest%2Fgroovy%2Forg%2Fonap%2Fcps%2Fintegration%2Fperformance%2Fbase%2FNcmpPerfTestBase.groovy;h=4b39e5327377e749e4d1756cc99ad86204cf2f35;hb=d3e072ae96603d9ea73b4b8387b4b48827642c98;hp=12b04be2e03b51237106584f6a47989ae37864c5;hpb=597d4ef72e5388092cc80ae662af6711f735369f;p=cps.git diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpPerfTestBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpPerfTestBase.groovy index 12b04be2e..4b39e5327 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpPerfTestBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpPerfTestBase.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2023 Nordix Foundation + * Copyright (C) 2023-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. @@ -20,14 +20,15 @@ package org.onap.cps.integration.performance.base -import java.time.OffsetDateTime import org.onap.cps.integration.ResourceMeter +import org.onap.cps.spi.FetchDescendantsOption class NcmpPerfTestBase extends PerfTestBase { def static NCMP_PERFORMANCE_TEST_DATASPACE = 'ncmpPerformance' def static REGISTRY_ANCHOR = 'ncmp-registry' def static REGISTRY_SCHEMA_SET = 'registrySchemaSet' + def static TOTAL_CM_HANDLES = 20_000 def static CM_DATA_SUBSCRIPTIONS_ANCHOR = 'cm-data-subscriptions' def static CM_DATA_SUBSCRIPTIONS_SCHEMA_SET = 'cmDataSubscriptionsSchemaSet' @@ -39,13 +40,6 @@ class NcmpPerfTestBase extends PerfTestBase { ResourceMeter resourceMeter = new ResourceMeter() -// SHORT versions for easier debugging -// def subscriberIdPrefix = 'sub' -// def xpathPrefix = 'f' -// def cmHandlePrefix = 'ch' - - -// LONG versions for performance testing def subscriberIdPrefix = 'some really long subscriber id to see if this makes any difference to the performance' def xpathPrefix = 'some really long xpath/with/loads/of/children/grandchildren/and/whatever/else/I/can/think/of to see if this makes any difference to the performance' def cmHandlePrefix = 'some really long cm handle id to see if this makes any difference to the performance' @@ -59,34 +53,57 @@ class NcmpPerfTestBase extends PerfTestBase { } def setupPerformanceInfraStructure() { - cpsAdminService.createDataspace(NCMP_PERFORMANCE_TEST_DATASPACE) + cpsDataspaceService.createDataspace(NCMP_PERFORMANCE_TEST_DATASPACE) createRegistrySchemaSet() createCmDataSubscriptionsSchemaSet() - addCmSubscriptionData() } def createInitialData() { - cpsAdminService.createAnchor(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_SCHEMA_SET, REGISTRY_ANCHOR) - def data = readResourceDataFile('ncmp-registry/1000-cmhandles.json') - cpsDataService.saveData(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, data, OffsetDateTime.now()) + addRegistryData() + addCmSubscriptionData() } def createRegistrySchemaSet() { - def modelAsString = readResourceDataFile('ncmp-registry/dmi-registry@2023-11-27.yang') + def modelAsString = readResourceDataFile('ncmp-registry/dmi-registry@2024-02-23.yang') cpsModuleService.createSchemaSet(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_SCHEMA_SET, [registry: modelAsString]) } + def addRegistryData() { + cpsAnchorService.createAnchor(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_SCHEMA_SET, REGISTRY_ANCHOR) + cpsDataService.saveData(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, '{"dmi-registry": []}', now) + def innerNodeJsonTemplate = readResourceDataFile('ncmp-registry/innerNode.json') + def batchSize = 100 + for (def i = 0; i < TOTAL_CM_HANDLES; i += batchSize) { + def data = '{ "cm-handles": [' + (1..batchSize).collect { innerNodeJsonTemplate.replace('CMHANDLE_ID_HERE', (it + i).toString()) }.join(',') + ']}' + cpsDataService.saveListElements(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, '/dmi-registry', data, now) + } + } + def createCmDataSubscriptionsSchemaSet() { def modelAsString = readResourceDataFile('cm-data-subscriptions/cm-data-subscriptions@2023-09-21.yang') cpsModuleService.createSchemaSet(NCMP_PERFORMANCE_TEST_DATASPACE, CM_DATA_SUBSCRIPTIONS_SCHEMA_SET, [registry: modelAsString]) } def addCmSubscriptionData() { - cpsAdminService.createAnchor(NCMP_PERFORMANCE_TEST_DATASPACE, CM_DATA_SUBSCRIPTIONS_SCHEMA_SET, CM_DATA_SUBSCRIPTIONS_ANCHOR) + cpsAnchorService.createAnchor(NCMP_PERFORMANCE_TEST_DATASPACE, CM_DATA_SUBSCRIPTIONS_SCHEMA_SET, CM_DATA_SUBSCRIPTIONS_ANCHOR) cpsDataService.saveData(NCMP_PERFORMANCE_TEST_DATASPACE, CM_DATA_SUBSCRIPTIONS_ANCHOR, datastore1cmHandlePlaceHolder, now) def subscribers = createLeafList('subscribers',numberOfCmDataSubscribers, subscriberIdPrefix) def filters = '"filters":' + createJsonArray('filter',numberOfFiltersPerCmHandle,'xpath',xpathPrefix,subscribers) def cmHandles = createJsonArray('cm-handle',numberOfCmHandlesPerCmDataSubscription,'id',cmHandlePrefix, filters) cpsDataService.saveData(NCMP_PERFORMANCE_TEST_DATASPACE, CM_DATA_SUBSCRIPTIONS_ANCHOR, xPathForDataStore1CmHandles, cmHandles, now) } + + def 'NCMP pre-load test data'() { + when: 'dummy get data nodes runs so that populating the DB does not get included in other test timings' + resourceMeter.start() + def result = cpsDataService.getDataNodes(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, '/', FetchDescendantsOption.OMIT_DESCENDANTS) + resourceMeter.stop() + then: 'expected data exists' + assert result.xpath == ['/dmi-registry'] + and: 'operation completes within expected time' + recordAndAssertResourceUsage('NCMP pre-load test data', + 15, resourceMeter.totalTimeInSeconds, + 600, resourceMeter.totalMemoryUsageInMB) + } + }