X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=integration-test%2Fsrc%2Ftest%2Fgroovy%2Forg%2Fonap%2Fcps%2Fintegration%2Fperformance%2Fbase%2FCpsPerfTestBase.groovy;h=68dfb4a790813d5e14d66c5917425c1ee6ae72fa;hb=a3096b9d22b7a3517c7933dfeb10984f6bedf063;hp=d339f6ddcf603385d46fcd44bc10a285f5d9a922;hpb=13237bbca932741b8ff3061bc79a9c45d38d80d5;p=cps.git diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/CpsPerfTestBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/CpsPerfTestBase.groovy index d339f6ddc..68dfb4a79 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/CpsPerfTestBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/CpsPerfTestBase.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,16 +20,22 @@ package org.onap.cps.integration.performance.base +import org.onap.cps.integration.ResourceMeter import org.onap.cps.rest.utils.MultipartFileUtil import org.onap.cps.spi.FetchDescendantsOption import org.springframework.web.multipart.MultipartFile class CpsPerfTestBase extends PerfTestBase { - static def CPS_PERFORMANCE_TEST_DATASPACE = 'cpsPerformanceDataspace' + static final def CPS_PERFORMANCE_TEST_DATASPACE = 'cpsPerformanceDataspace' + static final def OPENROADM_ANCHORS = 3 + static final def OPENROADM_DEVICES_PER_ANCHOR = 1000 + static final def OPENROADM_DATANODES_PER_DEVICE = 86 + + ResourceMeter resourceMeter = new ResourceMeter() def printTitle() { - println('## C P S P E R F O R M A N C E T E S T R E S U L T S ##') + println('## C P S P E R F O R M A N C E T E S T R E S U L T S ##') } def isInitialised() { @@ -37,36 +43,15 @@ class CpsPerfTestBase extends PerfTestBase { } def setupPerformanceInfraStructure() { - cpsAdminService.createDataspace(CPS_PERFORMANCE_TEST_DATASPACE) - def modelAsString = readResourceDataFile('bookstore/bookstore.yang') - cpsModuleService.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, [bookstore: modelAsString]) + cpsDataspaceService.createDataspace(CPS_PERFORMANCE_TEST_DATASPACE) + createStandardBookStoreSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE) } def createInitialData() { - createWarmupData() - createLargeBookstoresData() addOpenRoadModel() addOpenRoadData() } - def createWarmupData() { - def data = "{\"bookstore\":{}}" - stopWatch.start() - addAnchorsWithData(1, CPS_PERFORMANCE_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, 'warmup', data) - stopWatch.stop() - def durationInMillis = stopWatch.getTotalTimeMillis() - recordAndAssertPerformance('Creating warmup anchor with tiny data tree', 500, durationInMillis) - } - - def createLargeBookstoresData() { - def data = readResourceDataFile('bookstore/largeModelData.json') - stopWatch.start() - addAnchorsWithData(5, CPS_PERFORMANCE_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, 'bookstore', data) - stopWatch.stop() - def durationInMillis = stopWatch.getTotalTimeMillis() - recordAndAssertPerformance('Creating bookstore anchors with large data tree', 3_000, durationInMillis) - } - def addOpenRoadModel() { def file = new File('src/test/resources/data/openroadm/correctedModel.zip') def multipartFile = Mock(MultipartFile) @@ -76,12 +61,12 @@ class CpsPerfTestBase extends PerfTestBase { } def addOpenRoadData() { - def data = generateOpenRoadData(50) - stopWatch.start() - addAnchorsWithData(5, CPS_PERFORMANCE_TEST_DATASPACE, LARGE_SCHEMA_SET, 'openroadm', data) - stopWatch.stop() - def durationInMillis = stopWatch.getTotalTimeMillis() - recordAndAssertPerformance('Creating openroadm anchors with large data tree', 25_000, durationInMillis) + def data = generateOpenRoadData(OPENROADM_DEVICES_PER_ANCHOR) + resourceMeter.start() + addAnchorsWithData(OPENROADM_ANCHORS, CPS_PERFORMANCE_TEST_DATASPACE, LARGE_SCHEMA_SET, 'openroadm', data) + resourceMeter.stop() + def durationInSeconds = resourceMeter.getTotalTimeInSeconds() + recordAndAssertResourceUsage('Creating openroadm anchors with large data tree', 100, durationInSeconds, 600, resourceMeter.getTotalMemoryUsageInMB()) } def generateOpenRoadData(numberOfNodes) { @@ -92,14 +77,16 @@ class CpsPerfTestBase extends PerfTestBase { } def 'Warm the database'() { - when: 'get data nodes for warmup anchor' - stopWatch.start() - def result = cpsDataService.getDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'warmup1', '/', FetchDescendantsOption.OMIT_DESCENDANTS) + 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(CPS_PERFORMANCE_TEST_DATASPACE, 'openroadm1', '/', FetchDescendantsOption.OMIT_DESCENDANTS) assert countDataNodesInTree(result) == 1 - stopWatch.stop() - def durationInMillis = stopWatch.getTotalTimeMillis() - then: 'all data is read within 25 seconds (warm up not critical)' - recordAndAssertPerformance("Warming database", 25_000, durationInMillis) + resourceMeter.stop() + def durationInSeconds = resourceMeter.getTotalTimeInSeconds() + then: 'memory used is within #peakMemoryUsage' + assert resourceMeter.getTotalMemoryUsageInMB() <= 30 + and: 'all data is read within expected time' + recordAndAssertResourceUsage("Warming database", 100, durationInSeconds, 600, resourceMeter.getTotalMemoryUsageInMB()) } }