From 0bc4f677b59b616ebc5eb5e4fd9529ca2a497cf6 Mon Sep 17 00:00:00 2001 From: danielhanrahan Date: Tue, 4 Apr 2023 14:56:09 +0100 Subject: Migrate query tests to integration-test module #6 - Remove old tests and broken test data, where fragments in ANCHOR-005 have parent fragments in ANCHOR-004 - Migrate tests to new test framework using bookstore model - Add two bookstore anchors to test querying across both - Add bookstore data to another test dataspace, to verify querying across anchors should be limited to one dataspace - Lower minimum module coverage, since cps-ri tests are now in integration-test - @Ignore failing tests for now Issue-ID: CPS-1595 Signed-off-by: danielhanrahan Change-Id: I808de288961cb84a486052f9e1dc8fed5f2afe03 --- .../integration/base/CpsIntegrationSpecBase.groovy | 11 ++- .../cps/integration/base/FunctionalSpecBase.groovy | 18 +++-- .../CpsDataServiceIntegrationSpec.groovy | 8 +- .../CpsQueryServiceIntegrationSpec.groovy | 86 +++++++++++++++++++--- .../performance/base/CpsPerfTestBase.groovy | 28 +++---- .../base/NcmpRegistryPerfTestBase.groovy | 4 +- 6 files changed, 111 insertions(+), 44 deletions(-) (limited to 'integration-test/src/test/groovy/org') diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy index 866fef4f2..b942a43af 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy @@ -40,6 +40,8 @@ import org.testcontainers.spock.Testcontainers import spock.lang.Shared import spock.lang.Specification +import java.time.OffsetDateTime + @SpringBootTest(classes = [TestConfig, CpsAdminServiceImpl, CpsValidatorImpl]) @Testcontainers @EnableAutoConfiguration @@ -68,9 +70,7 @@ class CpsIntegrationSpecBase extends Specification { CpsQueryService cpsQueryService def static GENERAL_TEST_DATASPACE = 'generalTestDataspace' - def static FUNCTIONAL_TEST_DATASPACE = 'functionalTestDataspace' def static BOOKSTORE_SCHEMA_SET = 'bookstoreSchemaSet' - def static BOOKSTORE_ANCHOR = 'bookstoreAnchor' def static initialized = false @@ -107,4 +107,11 @@ class CpsIntegrationSpecBase extends Specification { } return true } + + def addAnchorsWithData(numberOfAnchors, dataspaceName, schemaSetName, anchorNamePrefix, data) { + (1..numberOfAnchors).each { + cpsAdminService.createAnchor(dataspaceName, schemaSetName, anchorNamePrefix + it) + cpsDataService.saveData(dataspaceName, anchorNamePrefix + it, data, OffsetDateTime.now()) + } + } } diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy index 5e5269114..b7a6030d8 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy @@ -20,10 +20,14 @@ package org.onap.cps.integration.base -import java.time.OffsetDateTime - class FunctionalSpecBase extends CpsIntegrationSpecBase { + def static FUNCTIONAL_TEST_DATASPACE_1 = 'functionalTestDataspace1' + def static FUNCTIONAL_TEST_DATASPACE_2 = 'functionalTestDataspace2' + def static NUMBER_OF_ANCHORS_PER_DATASPACE_WITH_BOOKSTORE_DATA = 2 + def static BOOKSTORE_ANCHOR_1 = 'bookstoreAnchor1' + def static BOOKSTORE_ANCHOR_2 = 'bookstoreAnchor2' + def static initialized = false def setup() { @@ -35,15 +39,17 @@ class FunctionalSpecBase extends CpsIntegrationSpecBase { } def setupBookstoreInfraStructure() { - cpsAdminService.createDataspace(FUNCTIONAL_TEST_DATASPACE) + cpsAdminService.createDataspace(FUNCTIONAL_TEST_DATASPACE_1) + cpsAdminService.createDataspace(FUNCTIONAL_TEST_DATASPACE_2) def bookstoreYangModelAsString = readResourceDataFile('bookstore/bookstore.yang') - cpsModuleService.createSchemaSet(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, [bookstore: bookstoreYangModelAsString]) - cpsAdminService.createAnchor(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, BOOKSTORE_ANCHOR) + cpsModuleService.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_SCHEMA_SET, [bookstore: bookstoreYangModelAsString]) + cpsModuleService.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_2, BOOKSTORE_SCHEMA_SET, [bookstore: bookstoreYangModelAsString]) } def addBookstoreData() { def bookstoreJsonData = readResourceDataFile('bookstore/bookstoreData.json') - cpsDataService.saveData(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, bookstoreJsonData, OffsetDateTime.now()) + addAnchorsWithData(NUMBER_OF_ANCHORS_PER_DATASPACE_WITH_BOOKSTORE_DATA, FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_SCHEMA_SET, 'bookstoreAnchor', bookstoreJsonData) + addAnchorsWithData(NUMBER_OF_ANCHORS_PER_DATASPACE_WITH_BOOKSTORE_DATA, FUNCTIONAL_TEST_DATASPACE_2, BOOKSTORE_SCHEMA_SET, 'bookstoreAnchor', bookstoreJsonData) } } diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsDataServiceIntegrationSpec.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsDataServiceIntegrationSpec.groovy index 25e71f18d..f609ba00e 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsDataServiceIntegrationSpec.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsDataServiceIntegrationSpec.groovy @@ -33,7 +33,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase { def 'Read bookstore top-level container(s) using #fetchDescendantsOption.'() { when: 'get data nodes for bookstore container' - def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, '/bookstore', fetchDescendantsOption) + def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore', fetchDescendantsOption) then: 'the tree consist ouf of #expectNumberOfDataNodes data nodes' assert countDataNodesInTree(result) == expectNumberOfDataNodes and: 'the top level data node has the expected attribute and value' @@ -48,11 +48,11 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase { def 'Read bookstore top-level container(s) has correct dataspace and anchor.'() { when: 'get data nodes for bookstore container' - def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, '/bookstore', FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS) + def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore', FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS) then: 'the correct dataspace was queried' - assert result.dataspace.toSet() == [FUNCTIONAL_TEST_DATASPACE].toSet() + assert result.dataspace.toSet() == [FUNCTIONAL_TEST_DATASPACE_1].toSet() and: 'the correct anchor was queried' - assert result.anchorName.toSet() == [BOOKSTORE_ANCHOR].toSet() + assert result.anchorName.toSet() == [BOOKSTORE_ANCHOR_1].toSet() } } diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsQueryServiceIntegrationSpec.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsQueryServiceIntegrationSpec.groovy index 1a31cdde3..47027e463 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsQueryServiceIntegrationSpec.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsQueryServiceIntegrationSpec.groovy @@ -24,6 +24,7 @@ import org.onap.cps.api.CpsQueryService import org.onap.cps.integration.base.FunctionalSpecBase import org.onap.cps.spi.FetchDescendantsOption import org.onap.cps.spi.exceptions.CpsPathException +import spock.lang.Ignore import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS @@ -37,7 +38,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Query bookstore using CPS path where #scenario.'() { when: 'query data nodes for bookstore container' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, INCLUDE_ALL_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, INCLUDE_ALL_DESCENDANTS) then: 'the result contains expected number of nodes' assert result.size() == expectedResultSize and: 'the result contains the expected leaf values' @@ -54,7 +55,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Cps Path query for leaf value(s) with #scenario.'() { when: 'a query is executed to get a data node by the given cps path' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, fetchDescendantsOption) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, fetchDescendantsOption) then: 'the correct number of parent nodes are returned' assert result.size() == expectedNumberOfParentNodes and: 'the correct total number of data nodes are returned' @@ -70,7 +71,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Query for attribute by cps path with cps paths that return no data because of #scenario.'() { when: 'a query is executed to get data nodes for the given cps path' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, OMIT_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, OMIT_DESCENDANTS) then: 'no data is returned' assert result.isEmpty() where: 'following cps queries are performed' @@ -82,7 +83,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Cps Path query using descendant anywhere and #type (further) descendants.'() { when: 'a query is executed to get a data node by the given cps path' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, '/bookstore/categories[@code="1"]', fetchDescendantsOption) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="1"]', fetchDescendantsOption) then: 'the data node has the correct number of children' assert result[0].childDataNodes.xpath.sort() == expectedChildNodes.sort() where: 'the following data is used' @@ -94,14 +95,14 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Cps Path query for all books.'() { when: 'a query is executed to get all books' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, '//books', OMIT_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '//books', OMIT_DESCENDANTS) then: 'the expected number of books are returned' assert result.size() == 9 } def 'Cps Path query using descendant anywhere with #scenario.'() { when: 'a query is executed to get a data node by the given cps path' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, OMIT_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, OMIT_DESCENDANTS) then: 'xpaths of the retrieved data nodes are as expected' def bookTitles = result.collect { it.getLeaves().get('title') } assert bookTitles.sort() == expectedBookTitles.sort() @@ -123,7 +124,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Cps Path query using descendant anywhere with #scenario condition for a container element.'() { when: 'a query is executed to get a data node by the given cps path' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, OMIT_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, OMIT_DESCENDANTS) then: 'book titles from the retrieved data nodes are as expected' def bookTitles = result.collect { it.getLeaves().get('title') } assert bookTitles.sort() == expectedBookTitles.sort() @@ -138,7 +139,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Cps Path query using descendant anywhere with #scenario condition(s) for a list element.'() { when: 'a query is executed to get a data node by the given cps path' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, INCLUDE_ALL_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, INCLUDE_ALL_DESCENDANTS) then: 'xpaths of the retrieved data nodes are as expected' result.xpath.toList() == ["/bookstore/premises/addresses[@house-number='2' and @street='Main Street']"] where: 'the following data is used' @@ -151,7 +152,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Query for attribute by cps path of type ancestor with #scenario.'() { when: 'the given cps path is parsed' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, cpsPath, OMIT_DESCENDANTS) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, OMIT_DESCENDANTS) then: 'the xpaths of the retrieved data nodes are as expected' assert result.xpath.sort() == expectedXPaths.sort() where: 'the following data is used' @@ -169,7 +170,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Query for attribute by cps path of type ancestor with #scenario descendants.'() { when: 'the given cps path is parsed' - def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, '//books/ancestor::bookstore', fetchDescendantsOption) + def result = objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '//books/ancestor::bookstore', fetchDescendantsOption) then: 'the xpaths of the retrieved data nodes are as expected' assert countDataNodesInTree(result) == expectedNumberOfNodes where: 'the following data is used' @@ -181,7 +182,70 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase { def 'Cps Path query with syntax error throws a CPS Path Exception.'() { when: 'trying to execute a query with a syntax (parsing) error' - objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE, BOOKSTORE_ANCHOR, 'cpsPath that cannot be parsed' , OMIT_DESCENDANTS) + objectUnderTest.queryDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, 'cpsPath that cannot be parsed' , OMIT_DESCENDANTS) + then: 'a cps path exception is thrown' + thrown(CpsPathException) + } + + @Ignore + def 'Cps Path query across anchors with #scenario.'() { + when: 'a query is executed to get a data nodes across anchors by the given CpsPath' + def result = objectUnderTest.queryDataNodesAcrossAnchors(FUNCTIONAL_TEST_DATASPACE_1, cpsPath, OMIT_DESCENDANTS) + then: 'the correct dataspace is queried' + assert result.dataspace.toSet() == [FUNCTIONAL_TEST_DATASPACE_1].toSet() + and: 'correct anchors are queried' + assert result.anchorName.toSet() == [BOOKSTORE_ANCHOR_1, BOOKSTORE_ANCHOR_2].toSet() + and: 'the correct number of nodes is returned' + assert result.size() == expectedXpathsPerAnchor.size() * NUMBER_OF_ANCHORS_PER_DATASPACE_WITH_BOOKSTORE_DATA + and: 'the queried nodes have expected xpaths' + assert result.xpath.toSet() == expectedXpathsPerAnchor.toSet() + where: 'the following data is used' + scenario | cpsPath || expectedXpathsPerAnchor + 'container node' | '/bookstore' || ["/bookstore"] + 'list node' | '/bookstore/categories' || ["/bookstore/categories[@code='1']", "/bookstore/categories[@code='2']", "/bookstore/categories[@code='3']", "/bookstore/categories[@code='4']"] + 'string leaf-condition' | '/bookstore[@bookstore-name="Easons"]' || ["/bookstore"] + 'integer leaf-condition' | '/bookstore/categories[@code="1"]/books[@price=15]' || ["/bookstore/categories[@code='1']/books[@title='The Gruffalo']"] + 'multiple list-ancestors' | '//books/ancestor::categories' || ["/bookstore/categories[@code='1']", "/bookstore/categories[@code='2']", "/bookstore/categories[@code='3']", "/bookstore/categories[@code='4']"] + 'one ancestor with list value' | '//books/ancestor::categories[@code="1"]' || ["/bookstore/categories[@code='1']"] + 'list with index value in the xpath prefix' | '//categories[@code="1"]/books/ancestor::bookstore' || ["/bookstore"] + 'ancestor with parent list' | '//books/ancestor::bookstore/categories' || ["/bookstore/categories[@code='1']", "/bookstore/categories[@code='2']", "/bookstore/categories[@code='3']", "/bookstore/categories[@code='4']"] + 'ancestor with parent list element' | '//books/ancestor::bookstore/categories[@code="2"]' || ["/bookstore/categories[@code='2']"] + 'ancestor combined with text condition' | '//books/title[text()="Matilda"]/ancestor::bookstore' || ["/bookstore"] + } + + @Ignore + def 'Cps Path query across anchors with #scenario descendants.'() { + when: 'a query is executed to get a data node by the given cps path' + def result = objectUnderTest.queryDataNodesAcrossAnchors(FUNCTIONAL_TEST_DATASPACE_1, '/bookstore', fetchDescendantsOption) + then: 'the correct dataspace was queried' + assert result.dataspace.toSet() == [FUNCTIONAL_TEST_DATASPACE_1].toSet() + and: 'correct number of datanodes are returned' + assert countDataNodesInTree(result) == expectedNumberOfNodesPerAnchor * NUMBER_OF_ANCHORS_PER_DATASPACE_WITH_BOOKSTORE_DATA + where: 'the following data is used' + scenario | fetchDescendantsOption || expectedNumberOfNodesPerAnchor + 'no' | OMIT_DESCENDANTS || 1 + 'direct' | DIRECT_CHILDREN_ONLY || 6 + 'all' | INCLUDE_ALL_DESCENDANTS || 17 + } + + @Ignore + def 'Cps Path query across anchors with ancestors and #scenario descendants.'() { + when: 'a query is executed to get a data node by the given cps path' + def result = objectUnderTest.queryDataNodesAcrossAnchors(FUNCTIONAL_TEST_DATASPACE_1, '//books/ancestor::bookstore', fetchDescendantsOption) + then: 'the correct dataspace was queried' + assert result.dataspace.toSet() == [FUNCTIONAL_TEST_DATASPACE_1].toSet() + and: 'correct number of datanodes are returned' + assert countDataNodesInTree(result) == expectedNumberOfNodesPerAnchor * NUMBER_OF_ANCHORS_PER_DATASPACE_WITH_BOOKSTORE_DATA + where: 'the following data is used' + scenario | fetchDescendantsOption || expectedNumberOfNodesPerAnchor + 'no' | OMIT_DESCENDANTS || 1 + 'direct' | DIRECT_CHILDREN_ONLY || 6 + 'all' | INCLUDE_ALL_DESCENDANTS || 17 + } + + def 'Cps Path query across anchors with syntax error throws a CPS Path Exception.'() { + when: 'trying to execute a query with a syntax (parsing) error' + objectUnderTest.queryDataNodesAcrossAnchors(FUNCTIONAL_TEST_DATASPACE_1, 'cpsPath that cannot be parsed' , OMIT_DESCENDANTS) then: 'a cps path exception is thrown' thrown(CpsPathException) } 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 3b5f69c6e..d339f6ddc 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 @@ -20,11 +20,8 @@ package org.onap.cps.integration.performance.base -import org.onap.cps.spi.FetchDescendantsOption - -import java.time.OffsetDateTime -import org.onap.cps.integration.base.CpsIntegrationSpecBase import org.onap.cps.rest.utils.MultipartFileUtil +import org.onap.cps.spi.FetchDescendantsOption import org.springframework.web.multipart.MultipartFile class CpsPerfTestBase extends PerfTestBase { @@ -41,8 +38,8 @@ class CpsPerfTestBase extends PerfTestBase { def setupPerformanceInfraStructure() { cpsAdminService.createDataspace(CPS_PERFORMANCE_TEST_DATASPACE) - def modelAsString = CpsIntegrationSpecBase.readResourceDataFile('bookstore/bookstore.yang') - cpsModuleService.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, CpsIntegrationSpecBase.BOOKSTORE_SCHEMA_SET, [bookstore: modelAsString]) + def modelAsString = readResourceDataFile('bookstore/bookstore.yang') + cpsModuleService.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, [bookstore: modelAsString]) } def createInitialData() { @@ -55,16 +52,16 @@ class CpsPerfTestBase extends PerfTestBase { def createWarmupData() { def data = "{\"bookstore\":{}}" stopWatch.start() - addAnchorsWithData(1, CpsIntegrationSpecBase.BOOKSTORE_SCHEMA_SET, 'warmup', data) + 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 = CpsIntegrationSpecBase.readResourceDataFile('bookstore/largeModelData.json') + def data = readResourceDataFile('bookstore/largeModelData.json') stopWatch.start() - addAnchorsWithData(5, CpsIntegrationSpecBase.BOOKSTORE_SCHEMA_SET, 'bookstore', data) + 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) @@ -75,32 +72,25 @@ class CpsPerfTestBase extends PerfTestBase { def multipartFile = Mock(MultipartFile) multipartFile.getOriginalFilename() >> file.getName() multipartFile.getInputStream() >> new FileInputStream(file) - cpsModuleService.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, PerfTestBase.LARGE_SCHEMA_SET, MultipartFileUtil.extractYangResourcesMap(multipartFile)) + cpsModuleService.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, LARGE_SCHEMA_SET, MultipartFileUtil.extractYangResourcesMap(multipartFile)) } def addOpenRoadData() { def data = generateOpenRoadData(50) stopWatch.start() - addAnchorsWithData(5, PerfTestBase.LARGE_SCHEMA_SET, 'openroadm', data) + 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 generateOpenRoadData(numberOfNodes) { - def innerNode = CpsIntegrationSpecBase.readResourceDataFile('openroadm/innerNode.json') + def innerNode = readResourceDataFile('openroadm/innerNode.json') return '{ "openroadm-devices": { "openroadm-device": [' + (1..numberOfNodes).collect { innerNode.replace('NODE_ID_HERE', it.toString()) }.join(',') + ']}}' } - def addAnchorsWithData(numberOfAnchors, schemaSetName, anchorNamePrefix, data) { - (1..numberOfAnchors).each { - cpsAdminService.createAnchor(CPS_PERFORMANCE_TEST_DATASPACE, schemaSetName, anchorNamePrefix + it) - cpsDataService.saveData(CPS_PERFORMANCE_TEST_DATASPACE, anchorNamePrefix + it, data, OffsetDateTime.now()) - } - } - def 'Warm the database'() { when: 'get data nodes for warmup anchor' stopWatch.start() diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpRegistryPerfTestBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpRegistryPerfTestBase.groovy index adece2ebf..d169bd757 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpRegistryPerfTestBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/performance/base/NcmpRegistryPerfTestBase.groovy @@ -40,12 +40,12 @@ class NcmpRegistryPerfTestBase extends PerfTestBase { def setupPerformanceInfraStructure() { cpsAdminService.createDataspace(NCMP_PERFORMANCE_TEST_DATASPACE) - def modelAsString = CpsIntegrationSpecBase.readResourceDataFile('ncmp-registry/dmi-registry@2022-05-10.yang') + def modelAsString = readResourceDataFile('ncmp-registry/dmi-registry@2022-05-10.yang') cpsModuleService.createSchemaSet(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_SCHEMA_SET, [registry: modelAsString]) } def createInitialData() { - def data = CpsIntegrationSpecBase.readResourceDataFile('ncmp-registry/1000-cmhandles.json') + def data = readResourceDataFile('ncmp-registry/1000-cmhandles.json') cpsAdminService.createAnchor(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_SCHEMA_SET, REGISTRY_ANCHOR) cpsDataService.saveData(NCMP_PERFORMANCE_TEST_DATASPACE, REGISTRY_ANCHOR, data, OffsetDateTime.now()) } -- cgit 1.2.3-korg