diff options
author | niamhcore <niamh.core@est.tech> | 2020-11-30 14:39:28 +0000 |
---|---|---|
committer | Niamh Core <niamh.core@est.tech> | 2020-12-07 14:15:55 +0000 |
commit | 0cd5910ca2c949bab95ec73591729c4b7230fdd1 (patch) | |
tree | 6880654548e97e0e1632d38cd65a008af99142f9 /cps-service/src/test | |
parent | 4e807e562c7fee9cd07f7dbd27263100c87c07ec (diff) |
Create Common Model objects in SPI
Issue-ID: CPS-100
Signed-off-by: niamhcore <niamh.core@est.tech>
Change-Id: I8ba54cc5d881d9d5f18b77a54ae28d3dda8412c1
Diffstat (limited to 'cps-service/src/test')
3 files changed, 163 insertions, 96 deletions
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy index 2a3d5cbc5f..873aba78ab 100755 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy @@ -20,24 +20,17 @@ package org.onap.cps.api.impl -import org.onap.cps.TestUtils -import org.onap.cps.api.model.AnchorDetails -import org.onap.cps.exceptions.CpsValidationException + import org.onap.cps.spi.DataPersistenceService -import org.onap.cps.spi.FragmentPersistenceService -import org.opendaylight.yangtools.yang.common.Revision -import org.opendaylight.yangtools.yang.model.api.SchemaContext import spock.lang.Specification class CpServiceImplSpec extends Specification { def mockDataPersistenceService = Mock(DataPersistenceService) - def mockFragmentPersistenceService = Mock(FragmentPersistenceService) def objectUnderTest = new CpServiceImpl() def setup() { objectUnderTest.dataPersistenceService = mockDataPersistenceService - objectUnderTest.fragmentPersistenceService = mockFragmentPersistenceService } def 'Cps Service provides to its client the id assigned by the system when storing a data structure'() { @@ -47,44 +40,6 @@ class CpServiceImplSpec extends Specification { objectUnderTest.storeJsonStructure('') == 123 } - def 'Parse and Validate a Yang Model with a Valid Yang Model'() { - given: 'a yang model (file)' - def yangModel = TestUtils.getResourceFileContent('bookstore.yang') - when: 'a valid model is parsed and validated' - def result = objectUnderTest.parseAndValidateModel(yangModel) - then: 'Verify a schema context for that model is created with the correct identity' - assertModule(result) - } - - def 'Parse and Validate a Yang Model Using a File'() { - given: 'a yang file that contains a yang model' - File file = new File(ClassLoader.getSystemClassLoader().getResource('bookstore.yang').getFile()) - when: 'a model is parsed and validated' - def result = objectUnderTest.parseAndValidateModel(file) - then: 'Verify a schema context for that model is created with the correct identity' - assertModule(result) - - } - - def assertModule(SchemaContext schemaContext){ - def optionalModule = schemaContext.findModule('stores', Revision.of('2020-09-15')) - return schemaContext.modules.size() == 1 && optionalModule.isPresent() - } - - def 'Parse and Validate an Invalid Model'() { - given: 'a yang file that contains a invalid yang model' - File file = new File(ClassLoader.getSystemClassLoader().getResource('invalid.yang').getFile()) - when: 'the model is parsed and validated' - objectUnderTest.parseAndValidateModel(file) - then: 'a CpsValidationException is thrown' - thrown(CpsValidationException) - } - - def 'Store a SchemaContext'() { - expect: 'No exception to be thrown when a valid model (schema) is stored' - objectUnderTest.storeSchemaContext(Stub(SchemaContext.class), "sampleDataspace") - } - def 'Read a JSON object with a valid identifier'(){ given: 'that the data persistence service returns a JSON structure for identifier 1' mockDataPersistenceService.getJsonById(1) >> '{name : hello}' @@ -117,54 +72,4 @@ class CpServiceImplSpec extends Specification { then: 'the same exception is thrown by CPS' thrown(IllegalStateException) } - - def 'Create an anchor with a non-existant dataspace'(){ - given: 'that the dataspace does not exist service throws an exception' - AnchorDetails anchorDetails = new AnchorDetails() - anchorDetails.setDataspace('dummyDataspace') - mockFragmentPersistenceService.createAnchor(anchorDetails) >> {throw new CpsValidationException(_ as String, _ as String)} - when: 'we try to create a anchor with a non-existant dataspace' - objectUnderTest.createAnchor(anchorDetails) - then: 'the same exception is thrown by CPS' - thrown(CpsValidationException) - } - - def 'Create an anchor with invalid dataspace, namespace and revision'(){ - given: 'that the dataspace, namespace and revison combination does not exist service throws an exception' - AnchorDetails anchorDetails = new AnchorDetails() - anchorDetails.setDataspace('dummyDataspace') - anchorDetails.setNamespace('dummyNamespace') - anchorDetails.setRevision('dummyRevision') - mockFragmentPersistenceService.createAnchor(anchorDetails) >> {throw new CpsValidationException(_ as String, _ as String)} - when: 'we try to create a anchor with a non-existant dataspace, namespace and revison combination' - objectUnderTest.createAnchor(anchorDetails) - then: 'the same exception is thrown by CPS' - thrown(CpsValidationException) - } - - def 'Create a duplicate anchor'(){ - given: 'that the anchor already exist service throws an exception' - AnchorDetails anchorDetails = new AnchorDetails() - anchorDetails.setDataspace('dummyDataspace') - anchorDetails.setNamespace('dummyNamespace') - anchorDetails.setRevision('dummyRevision') - anchorDetails.setRevision('dummyAnchorName') - mockFragmentPersistenceService.createAnchor(anchorDetails) >> {throw new CpsValidationException(_ as String, _ as String)} - when: 'we try to create a duplicate anchor' - objectUnderTest.createAnchor(anchorDetails) - then: 'the same exception is thrown by CPS' - thrown(CpsValidationException) - } - - def 'Create an anchor with supplied anchor name, dataspace, namespace and revision'(){ - given: 'that the anchor does not pre-exist service creates an anchor' - AnchorDetails anchorDetails = new AnchorDetails() - anchorDetails.setDataspace('dummyDataspace') - anchorDetails.setNamespace('dummyNamespace') - anchorDetails.setRevision('dummyRevision') - anchorDetails.setRevision('dummyAnchorName') - mockFragmentPersistenceService.createAnchor(anchorDetails) >> 'dummyAnchorName' - expect: 'anchor name is returned by service' - objectUnderTest.createAnchor(anchorDetails) == 'dummyAnchorName' - } } diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminPersistenceServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminPersistenceServiceImplSpec.groovy new file mode 100644 index 0000000000..465badd0c2 --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminPersistenceServiceImplSpec.groovy @@ -0,0 +1,86 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.api.impl + +import org.onap.cps.exceptions.CpsValidationException +import org.onap.cps.spi.CpsAdminPersistenceService +import org.onap.cps.spi.model.Anchor +import spock.lang.Specification + +class CpsAdminPersistenceServiceImplSpec extends Specification { + def mockCpsAdminService = Mock(CpsAdminPersistenceService) + def objectUnderTest = new CpsAdminServiceImpl() + + def setup() { + objectUnderTest.cpsAdminPersistenceService = mockCpsAdminService + } + + def 'Create an anchor with a non-existant dataspace'() { + given: 'that the dataspace does not exist service throws an exception' + Anchor anchor = new Anchor() + anchor.setDataspaceName('dummyDataspace') + mockCpsAdminService.createAnchor(anchor) >> { throw new CpsValidationException(_ as String, _ as String) } + when: 'we try to create a anchor with a non-existant dataspace' + objectUnderTest.createAnchor(anchor) + then: 'the same exception is thrown by CPS' + thrown(CpsValidationException) + } + + def 'Create an anchor with invalid dataspace, namespace and revision'() { + given: 'that the dataspace, namespace and revison combination does not exist service throws an exception' + Anchor anchor = new Anchor() + anchor.setDataspaceName('dummyDataspace') + anchor.setNamespace('dummyNamespace') + anchor.setRevision('dummyRevision') + mockCpsAdminService.createAnchor(anchor) >> { throw new CpsValidationException(_ as String, _ as String) } + when: 'we try to create a anchor with a non-existant dataspace, namespace and revison combination' + objectUnderTest.createAnchor(anchor) + then: 'the same exception is thrown by CPS' + thrown(CpsValidationException) + } + + def 'Create a duplicate anchor'() { + given: 'that the anchor already exist service throws an exception' + Anchor anchor = new Anchor() + anchor.setDataspaceName('dummyDataspace') + anchor.setNamespace('dummyNamespace') + anchor.setRevision('dummyRevision') + anchor.setRevision('dummyAnchorName') + mockCpsAdminService.createAnchor(anchor) >> { throw new CpsValidationException(_ as String, _ as String) } + when: 'we try to create a duplicate anchor' + objectUnderTest.createAnchor(anchor) + then: 'the same exception is thrown by CPS' + thrown(CpsValidationException) + } + + def 'Create an anchor with supplied anchor name, dataspace, namespace and revision'() { + given: 'that the anchor does not pre-exist service creates an anchor' + Anchor anchor = new Anchor() + anchor.setDataspaceName('dummyDataspace') + anchor.setNamespace('dummyNamespace') + anchor.setRevision('dummyRevision') + anchor.setRevision('dummyAnchorName') + mockCpsAdminService.createAnchor(anchor) >> 'dummyAnchorName' + expect: 'anchor name is returned by service' + objectUnderTest.createAnchor(anchor) == 'dummyAnchorName' + } + +} diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy new file mode 100644 index 0000000000..79b981b2a2 --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy @@ -0,0 +1,76 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.api.impl + +import org.onap.cps.TestUtils +import org.onap.cps.exceptions.CpsValidationException +import org.onap.cps.spi.CpsModulePersistenceService +import org.opendaylight.yangtools.yang.common.Revision +import org.opendaylight.yangtools.yang.model.api.SchemaContext +import spock.lang.Specification + +class CpsModulePersistenceServiceImplSpec extends Specification { + def mockModuleStoreService = Mock(CpsModulePersistenceService) + def objectUnderTest = new CpsModuleServiceImpl() + + def setup() { + objectUnderTest.cpsModulePersistenceService = mockModuleStoreService + } + + def 'Parse and Validate a Yang Model with a Valid Yang Model'() { + given: 'a yang model (file)' + def yangModel = TestUtils.getResourceFileContent('bookstore.yang') + when: 'a valid model is parsed and validated' + def result = objectUnderTest.parseAndValidateModel(yangModel) + then: 'Verify a schema context for that model is created with the correct identity' + assertModule(result) + } + + def 'Parse and Validate a Yang Model Using a File'() { + given: 'a yang file that contains a yang model' + File file = new File(ClassLoader.getSystemClassLoader().getResource('bookstore.yang').getFile()) + when: 'a model is parsed and validated' + def result = objectUnderTest.parseAndValidateModel(file) + then: 'Verify a schema context for that model is created with the correct identity' + assertModule(result) + + } + + def assertModule(SchemaContext schemaContext) { + def optionalModule = schemaContext.findModule('stores', Revision.of('2020-09-15')) + return schemaContext.modules.size() == 1 && optionalModule.isPresent() + } + + def 'Parse and Validate an Invalid Model'() { + given: 'a yang file that contains a invalid yang model' + File file = new File(ClassLoader.getSystemClassLoader().getResource('invalid.yang').getFile()) + when: 'the model is parsed and validated' + objectUnderTest.parseAndValidateModel(file) + then: 'a CpsValidationException is thrown' + thrown(CpsValidationException) + } + + def 'Store a SchemaContext'() { + expect: 'No exception to be thrown when a valid model (schema) is stored' + objectUnderTest.storeSchemaContext(Stub(SchemaContext.class), "sampleDataspace") + } + +} |