aboutsummaryrefslogtreecommitdiffstats
path: root/cps-service/src/test
diff options
context:
space:
mode:
authorToineSiebelink <toine.siebelink@est.tech>2025-02-04 18:30:20 +0000
committerToineSiebelink <toine.siebelink@est.tech>2025-02-06 16:04:02 +0000
commit4ec2a5d944b4c2bad799e6610f03912f5c955b50 (patch)
treeb5802aece8a2d459c918a33a253d094743ab9fd5 /cps-service/src/test
parent59f1cc4c5994da34f2c48a2347499f9cfb7bd836 (diff)
Fix duplicated yang resource references V2
- Store Yang module references using SchemaSetEntity instead of SQL - Added integration test to check number of references - Update dispatcher for integration test to only return yang resources requested modules - refactor schema set create & upgrade methods for better re-uses and readability - consistent naming in related methods like(new)yangResourceContentPerName (the name can be filename, module name or schema set name) depending on the context - replaced 'var' with actual class names in affected classes Issue-ID: CPS-2605 Change-Id: I8870c70832ac533bd17ce8af409a071f659e4acf Signed-off-by: ToineSiebelink <toine.siebelink@est.tech>
Diffstat (limited to 'cps-service/src/test')
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy18
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy14
-rwxr-xr-xcps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy30
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy18
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy6
5 files changed, 43 insertions, 43 deletions
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy
index 34d2b7564a..abcda6c696 100644
--- a/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy
@@ -248,10 +248,10 @@ class CpsDataServiceImplSpec extends Specification {
def 'Get delta between anchor and payload with user provided schema #scenario'() {
given: 'user provided schema set '
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- setupSchemaSetMocksForDelta(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ setupSchemaSetMocksForDelta(yangResourceContentPerName)
when: 'attempt to get delta between an anchor and a JSON payload'
- objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourcesNameToContentMap, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
+ objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourceContentPerName, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
then: 'dataspacename and anchor names are validated'
1 * mockCpsValidator.validateNameCharacters(['some-dataspace', 'some-anchor'])
and: 'source data nodes are fetched using appropriate persistence layer method'
@@ -285,10 +285,10 @@ class CpsDataServiceImplSpec extends Specification {
def 'Delta between anchor and payload error scenario #scenario'() {
given: 'schema set for given anchor and dataspace references bookstore model'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- setupSchemaSetMocksForDelta(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ setupSchemaSetMocksForDelta(yangResourceContentPerName)
when: 'attempt to get delta between anchor and payload'
- objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourcesNameToContentMap, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
+ objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourceContentPerName, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
then: 'expected exception is thrown'
thrown(DataValidationException)
where: 'following parameters were used'
@@ -654,11 +654,11 @@ class CpsDataServiceImplSpec extends Specification {
mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
}
- def setupSchemaSetMocksForDelta(Map<String, String> yangResourcesNameToContentMap) {
+ def setupSchemaSetMocksForDelta(Map<String, String> yangResourceContentPerName) {
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
- mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap) >> mockYangTextSchemaSourceSet
+ mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName) >> mockYangTextSchemaSourceSet
mockYangTextSchemaSourceSetCache.get(_, _) >> mockYangTextSchemaSourceSet
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy
index 041ce605c4..48db53c882 100644
--- a/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy
@@ -56,7 +56,7 @@ class CpsModuleServiceImplSpec extends Specification {
when: 'Create schema set method is invoked'
objectUnderTest.createSchemaSet('someDataspace', 'schemaSetName@with Special!Characters', [:])
then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockCpsModulePersistenceService.storeSchemaSet('someDataspace', 'schemaSetName@with Special!Characters', [:])
+ 1 * mockCpsModulePersistenceService.createSchemaSet('someDataspace', 'schemaSetName@with Special!Characters', [:])
and: 'the CpsValidator is called on the dataspaceName'
1 * mockCpsValidator.validateNameCharacters('someDataspace')
}
@@ -68,16 +68,16 @@ class CpsModuleServiceImplSpec extends Specification {
when: 'create schema set from modules method is invoked'
objectUnderTest.createSchemaSetFromModules('someDataspaceName', 'someSchemaSetName', [newModule: 'newContent'], listOfExistingModulesModuleReference)
then: 'processing is delegated to persistence service'
- 1 * mockCpsModulePersistenceService.storeSchemaSetFromModules('someDataspaceName', 'someSchemaSetName', [newModule: 'newContent'], listOfExistingModulesModuleReference)
+ 1 * mockCpsModulePersistenceService.createSchemaSetFromNewAndExistingModules('someDataspaceName', 'someSchemaSetName', [newModule: 'newContent'], listOfExistingModulesModuleReference)
and: 'the CpsValidator is called on the dataspaceName'
1 * mockCpsValidator.validateNameCharacters('someDataspaceName')
}
def 'Create schema set from invalid resources'() {
given: 'Invalid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('invalid.yang')
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('invalid.yang')
when: 'Create schema set method is invoked'
- objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', yangResourcesNameToContentMap)
+ objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', yangResourceContentPerName)
then: 'Model validation exception is thrown'
thrown(ModelValidationException)
}
@@ -85,7 +85,7 @@ class CpsModuleServiceImplSpec extends Specification {
def 'Create schema set with duplicate yang resource exception in persistence layer.'() {
given: 'the persistence layer throws an duplicated yang resource exception'
def originalException = new DuplicatedYangResourceException('name', '123', null)
- mockCpsModulePersistenceService.storeSchemaSet(*_) >> { throw originalException }
+ mockCpsModulePersistenceService.createSchemaSet(*_) >> { throw originalException }
when: 'attempt to create schema set'
objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', [:])
then: 'the same duplicated yang resource exception is thrown (up)'
@@ -98,9 +98,9 @@ class CpsModuleServiceImplSpec extends Specification {
def 'Get schema set by name and dataspace.'() {
given: 'an already present schema set'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
and: 'yang resource cache returns the expected schema set'
- mockYangTextSchemaSourceSetCache.get('someDataspace', 'schemaSetName@with Special!Characters') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ mockYangTextSchemaSourceSetCache.get('someDataspace', 'schemaSetName@with Special!Characters') >> YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
when: 'get schema set method is invoked'
def result = objectUnderTest.getSchemaSet('someDataspace', 'schemaSetName@with Special!Characters')
then: 'the correct schema set is returned'
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy
index 8171209947..db5b4f104e 100755
--- a/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2021-2024 Nordix Foundation.
+ * Copyright (C) 2021-2025 Nordix Foundation.
* Modifications Copyright (C) 2021-2022 Bell Canada.
* Modifications Copyright (C) 2021 Pantheon.tech
* Modifications Copyright (C) 2022-2024 TechMahindra Ltd.
@@ -66,32 +66,32 @@ class E2ENetworkSliceSpec extends Specification {
def 'E2E model can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'ietf/ietf-inet-types@2013-07-15.yang',
'ietf/ietf-yang-types@2013-07-15.yang',
'e2e/basic/ran-network2020-08-06.yang'
)
when: 'Create schema set method is invoked'
- cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ 1 * mockModuleStoreService.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
}
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping model can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
when: 'Create schema set method is invoked'
- cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ 1 * mockModuleStoreService.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
}
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
def dataNodeStored
and : 'a valid json is provided for the model'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')
@@ -99,7 +99,7 @@ class E2ENetworkSliceSpec extends Specification {
mockCpsAnchorService.getAnchor(dataspaceName, anchorName) >>
new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).dataspaceName(dataspaceName).build()
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >>
- YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext
when: 'saveData method is invoked'
cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp)
@@ -123,15 +123,15 @@ class E2ENetworkSliceSpec extends Specification {
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() {
def dataNodeStored
given: 'valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-ran-inventory@2021-01-28.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
and : 'a valid json is provided for the model'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json')
and : 'all the further dependencies are mocked '
mockCpsAnchorService.getAnchor('someDataspace', 'someAnchor') >>
new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').dataspaceName(dataspaceName).build()
- mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext
when: 'saveData method is invoked'
cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp)
@@ -161,7 +161,7 @@ class E2ENetworkSliceSpec extends Specification {
def 'E2E RAN Schema Model.'(){
given: 'yang resources'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'ietf/ietf-inet-types@2013-07-15.yang',
'ietf/ietf-yang-types@2013-07-15.yang',
'e2e/basic/cps-ran-schema-model@2021-05-19.yang'
@@ -169,7 +169,7 @@ class E2ENetworkSliceSpec extends Specification {
and : 'json data'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json')
expect: 'schema context is built with no exception indicating the schema set being valid '
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
and: 'data is parsed with no exception indicating the model match'
new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy
index 6694e7712f..e71782ce4f 100644
--- a/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy
@@ -65,13 +65,13 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
given: 'cache is empty'
yangResourceCacheImpl.clear()
and: 'a schema set exists'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
when: 'schema-set information is asked'
def result = objectUnderTest.get('my-dataspace', 'my-schemaset')
then: 'information fetched from cps module persistence'
1 * mockModuleStoreService.getYangSchemaResources('my-dataspace', 'my-schemaset')
- >> yangResourcesNameToContentMap
+ >> yangResourceContentPerName
and: 'stored in the cache'
def cachedValue = getCachedValue('my-dataspace', 'my-schemaset')
assert cachedValue.getModuleReferences() == expectedYangTextSchemaSourceSet.getModuleReferences()
@@ -83,8 +83,8 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
def 'Cache Hit: Respond from cache'() {
given: 'a schema set exists'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
and: 'stored in cache'
yangResourceCacheImpl.put(getCacheKey('my-dataspace', 'my-schemaset'), expectedYangTextSchemaSourceSet)
when: 'schema-set information is asked'
@@ -97,8 +97,8 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
def 'Cache Update: when no data exist in the cache'() {
given: 'a schema set exists'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
when: 'cache is updated'
objectUnderTest.updateCache('my-dataspace', 'my-schemaset', yangTextSchemaSourceSet)
then: 'cached value is same as expected'
@@ -110,8 +110,8 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
def 'Cache Evict:with invalid #scenario'() {
given: 'a schema set exists in cache'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
yangResourceCacheImpl.put(getCacheKey('my-dataspace', 'my-schemaset'), yangTextSchemaSourceSet)
def cachedValue = getCachedValue('my-dataspace', 'my-schemaset')
assert cachedValue.getModuleReferences() == yangTextSchemaSourceSet.getModuleReferences()
diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy
index a2fadb7e9f..cb7a16cb84 100644
--- a/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy
@@ -40,7 +40,7 @@ class YangParserSpec extends Specification {
def objectUnderTest = new YangParser(mockYangParserHelper, mockYangTextSchemaSourceSetCache, mockTimedYangTextSchemaSourceSetBuilder)
def anchor = new Anchor(dataspaceName: 'my dataspace', schemaSetName: 'my schema')
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
def mockSchemaContext = Mock(SchemaContext)
def containerNodeFromYangUtils = Mock(ContainerNode)
@@ -91,9 +91,9 @@ class YangParserSpec extends Specification {
def 'Parsing data with yang resource to context map.'() {
given: 'the schema source set for the yang resource map is returned'
- mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap) >> mockYangTextSchemaSourceSet
+ mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName) >> mockYangTextSchemaSourceSet
when: 'parsing some json data'
- def result = objectUnderTest.parseData(ContentType.JSON, 'some json', yangResourcesNameToContentMap, noParent)
+ def result = objectUnderTest.parseData(ContentType.JSON, 'some json', yangResourceContentPerName, noParent)
then: 'the yang parser helper always returns a container node'
1 * mockYangParserHelper.parseData(ContentType.JSON, 'some json', mockSchemaContext, noParent, validateAndParse) >> containerNodeFromYangUtils
and: 'the result is the same container node as return from yang utils'