-/*\r
- * ============LICENSE_START=======================================================\r
- * Copyright (C) 2021-2024 Nordix Foundation.\r
- * Modifications Copyright (C) 2021-2022 Bell Canada.\r
- * Modifications Copyright (C) 2021 Pantheon.tech\r
- * Modifications Copyright (C) 2022-2024 TechMahindra Ltd.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- * SPDX-License-Identifier: Apache-2.0\r
- * ============LICENSE_END=========================================================\r
- */\r
-\r
-package org.onap.cps.api.impl\r
-\r
-import com.fasterxml.jackson.databind.ObjectMapper\r
-import org.onap.cps.TestUtils\r
-import org.onap.cps.api.CpsAnchorService\r
-import org.onap.cps.api.CpsDeltaService\r
-import org.onap.cps.events.CpsDataUpdateEventsService\r
-import org.onap.cps.impl.utils.CpsValidator\r
-import org.onap.cps.spi.CpsDataPersistenceService\r
-import org.onap.cps.spi.CpsModulePersistenceService\r
-import org.onap.cps.api.model.Anchor\r
-import org.onap.cps.utils.ContentType\r
-import org.onap.cps.utils.JsonObjectMapper\r
-import org.onap.cps.utils.PrefixResolver\r
-import org.onap.cps.utils.YangParser\r
-import org.onap.cps.utils.YangParserHelper\r
-import org.onap.cps.yang.TimedYangTextSchemaSourceSetBuilder\r
-import org.onap.cps.yang.YangTextSchemaSourceSetBuilder\r
-import spock.lang.Specification\r
-\r
-class E2ENetworkSliceSpec extends Specification {\r
- def mockModuleStoreService = Mock(CpsModulePersistenceService)\r
- def mockDataStoreService = Mock(CpsDataPersistenceService)\r
- def mockCpsAnchorService = Mock(CpsAnchorService)\r
- def mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache)\r
- def mockCpsValidator = Mock(CpsValidator)\r
- def timedYangTextSchemaSourceSetBuilder = new TimedYangTextSchemaSourceSetBuilder()\r
- def yangParser = new YangParser(new YangParserHelper(), mockYangTextSchemaSourceSetCache, timedYangTextSchemaSourceSetBuilder)\r
- def mockCpsDeltaService = Mock(CpsDeltaService)\r
- def jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())\r
- def mockPrefixResolver = Mock(PrefixResolver)\r
-\r
- def cpsModuleServiceImpl = new CpsModuleServiceImpl(mockModuleStoreService,\r
- mockYangTextSchemaSourceSetCache, mockCpsAnchorService, mockCpsValidator,timedYangTextSchemaSourceSetBuilder)\r
-\r
- def mockDataUpdateEventsService = Mock(CpsDataUpdateEventsService)\r
- def cpsDataServiceImpl = new CpsDataServiceImpl(mockDataStoreService, mockDataUpdateEventsService, mockCpsAnchorService, mockCpsValidator,\r
- yangParser, mockCpsDeltaService, jsonObjectMapper, mockPrefixResolver)\r
- def dataspaceName = 'someDataspace'\r
- def anchorName = 'someAnchor'\r
- def schemaSetName = 'someSchemaSet'\r
- def noTimestamp = null\r
-\r
- def 'E2E model can be parsed by CPS.'() {\r
- given: 'Valid yang resource as name-to-content map'\r
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
- 'ietf/ietf-inet-types@2013-07-15.yang',\r
- 'ietf/ietf-yang-types@2013-07-15.yang',\r
- 'e2e/basic/ran-network2020-08-06.yang'\r
- )\r
- when: 'Create schema set method is invoked'\r
- cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
- then: 'Parameters are validated and processing is delegated to persistence service'\r
- 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
- }\r
-\r
- def 'E2E Coverage Area-Tracking Area & TA-Cell mapping model can be parsed by CPS.'() {\r
- given: 'Valid yang resource as name-to-content map'\r
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
- 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')\r
- when: 'Create schema set method is invoked'\r
- cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
- then: 'Parameters are validated and processing is delegated to persistence service'\r
- 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
- }\r
-\r
- def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed by CPS.'() {\r
- given: 'Valid yang resource as name-to-content map'\r
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
- 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')\r
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()\r
- def dataNodeStored\r
- and : 'a valid json is provided for the model'\r
- def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')\r
- and : 'all the further dependencies are mocked '\r
- mockCpsAnchorService.getAnchor(dataspaceName, anchorName) >>\r
- new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).dataspaceName(dataspaceName).build()\r
- mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >>\r
- YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)\r
- mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext\r
- when: 'saveData method is invoked'\r
- cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp)\r
- then: 'Parameters are validated and processing is delegated to persistence service'\r
- 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >>\r
- { args -> dataNodeStored = args[2]}\r
- def child = dataNodeStored[0].childDataNodes[0]\r
- assert child.childDataNodes.size() == 1\r
- and: 'list of Tracking Area for a Coverage Area are stored with correct xpath and child nodes '\r
- def listOfTAForCoverageArea = child.childDataNodes[0]\r
- listOfTAForCoverageArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +\r
- 'coverage-area[@coverageArea=\'Washington\']'\r
- listOfTAForCoverageArea.childDataNodes[0].leaves.get('nRTAC') == 234\r
- and: 'list of cells in a tracking area are stored with correct xpath and child nodes '\r
- def listOfCellsInTrackingArea = listOfTAForCoverageArea.childDataNodes[0]\r
- listOfCellsInTrackingArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +\r
- 'coverage-area[@coverageArea=\'Washington\']/coverageAreaTAList[@nRTAC=\'234\']'\r
- listOfCellsInTrackingArea.childDataNodes[0].leaves.get('cellLocalId') == 15709\r
- }\r
-\r
- def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() {\r
- def dataNodeStored\r
- given: 'valid yang resource as name-to-content map'\r
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
- 'e2e/basic/cps-ran-inventory@2021-01-28.yang')\r
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()\r
- and : 'a valid json is provided for the model'\r
- def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json')\r
- and : 'all the further dependencies are mocked '\r
- mockCpsAnchorService.getAnchor('someDataspace', 'someAnchor') >>\r
- new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').dataspaceName(dataspaceName).build()\r
- mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)\r
- mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext\r
- when: 'saveData method is invoked'\r
- cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp)\r
- then: 'parameters are validated and processing is delegated to persistence service'\r
- 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >>\r
- { args -> dataNodeStored = args[2]}\r
- and: 'the size of the tree is correct'\r
- def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored[0])\r
- assert cpsRanInventory.size() == 4\r
- and: 'ran-inventory contains the correct child node'\r
- def ranInventory = cpsRanInventory.get('/ran-inventory')\r
- def ranSlices = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']')\r
- def sliceProfilesList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']')\r
- def pLMNIdList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']')\r
- ranInventory.getChildDataNodes().size() == 1\r
- ranInventory.getChildDataNodes().find( {it.xpath == ranSlices.xpath})\r
- and: 'ranSlices contains the correct child node'\r
- ranSlices.getChildDataNodes().size() == 1\r
- ranSlices.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath})\r
- and: 'sliceProfilesList contains the correct child node'\r
- sliceProfilesList.getChildDataNodes().size() == 1\r
- sliceProfilesList.getChildDataNodes().find( {it.xpath == pLMNIdList.xpath})\r
- and: 'pLMNIdList contains no children'\r
- pLMNIdList.getChildDataNodes().size() == 0\r
-\r
- }\r
-\r
- def 'E2E RAN Schema Model.'(){\r
- given: 'yang resources'\r
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
- 'ietf/ietf-inet-types@2013-07-15.yang',\r
- 'ietf/ietf-yang-types@2013-07-15.yang',\r
- 'e2e/basic/cps-ran-schema-model@2021-05-19.yang'\r
- )\r
- and : 'json data'\r
- def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json')\r
- expect: 'schema context is built with no exception indicating the schema set being valid '\r
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()\r
- and: 'data is parsed with no exception indicating the model match'\r
- new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null\r
- }\r
-}\r
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021-2024 Nordix Foundation.
+ * Modifications Copyright (C) 2021-2022 Bell Canada.
+ * Modifications Copyright (C) 2021 Pantheon.tech
+ * Modifications Copyright (C) 2022-2024 TechMahindra Ltd.
+ * ================================================================================
+ * 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.impl
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.onap.cps.TestUtils
+import org.onap.cps.api.CpsAnchorService
+import org.onap.cps.api.CpsDeltaService
+import org.onap.cps.events.CpsDataUpdateEventsService
+import org.onap.cps.impl.utils.CpsValidator
+import org.onap.cps.spi.CpsDataPersistenceService
+import org.onap.cps.spi.CpsModulePersistenceService
+import org.onap.cps.api.model.Anchor
+import org.onap.cps.utils.ContentType
+import org.onap.cps.utils.JsonObjectMapper
+import org.onap.cps.utils.PrefixResolver
+import org.onap.cps.utils.YangParser
+import org.onap.cps.utils.YangParserHelper
+import org.onap.cps.yang.TimedYangTextSchemaSourceSetBuilder
+import org.onap.cps.yang.YangTextSchemaSourceSetBuilder
+import spock.lang.Specification
+
+class E2ENetworkSliceSpec extends Specification {
+ def mockModuleStoreService = Mock(CpsModulePersistenceService)
+ def mockDataStoreService = Mock(CpsDataPersistenceService)
+ def mockCpsAnchorService = Mock(CpsAnchorService)
+ def mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache)
+ def mockCpsValidator = Mock(CpsValidator)
+ def timedYangTextSchemaSourceSetBuilder = new TimedYangTextSchemaSourceSetBuilder()
+ def yangParser = new YangParser(new YangParserHelper(), mockYangTextSchemaSourceSetCache, timedYangTextSchemaSourceSetBuilder)
+ def mockCpsDeltaService = Mock(CpsDeltaService)
+ def jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())
+ def mockPrefixResolver = Mock(PrefixResolver)
+
+ def cpsModuleServiceImpl = new CpsModuleServiceImpl(mockModuleStoreService,
+ mockYangTextSchemaSourceSetCache, mockCpsAnchorService, mockCpsValidator,timedYangTextSchemaSourceSetBuilder)
+
+ def mockDataUpdateEventsService = Mock(CpsDataUpdateEventsService)
+ def cpsDataServiceImpl = new CpsDataServiceImpl(mockDataStoreService, mockDataUpdateEventsService, mockCpsAnchorService, mockCpsValidator,
+ yangParser, mockCpsDeltaService, jsonObjectMapper, mockPrefixResolver)
+ def dataspaceName = 'someDataspace'
+ def anchorName = 'someAnchor'
+ def schemaSetName = 'someSchemaSet'
+ def noTimestamp = null
+
+ def 'E2E model can be parsed by CPS.'() {
+ given: 'Valid yang resource as name-to-content map'
+ def yangResourcesNameToContentMap = 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)
+ then: 'Parameters are validated and processing is delegated to persistence service'
+ 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ }
+
+ 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(
+ 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
+ when: 'Create schema set method is invoked'
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ then: 'Parameters are validated and processing is delegated to persistence service'
+ 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ }
+
+ 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(
+ 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def dataNodeStored
+ and : 'a valid json is provided for the model'
+ def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')
+ and : 'all the further dependencies are mocked '
+ mockCpsAnchorService.getAnchor(dataspaceName, anchorName) >>
+ new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).dataspaceName(dataspaceName).build()
+ mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >>
+ YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext
+ when: 'saveData method is invoked'
+ cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp)
+ then: 'Parameters are validated and processing is delegated to persistence service'
+ 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >>
+ { args -> dataNodeStored = args[2]}
+ def child = dataNodeStored[0].childDataNodes[0]
+ assert child.childDataNodes.size() == 1
+ and: 'list of Tracking Area for a Coverage Area are stored with correct xpath and child nodes '
+ def listOfTAForCoverageArea = child.childDataNodes[0]
+ listOfTAForCoverageArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +
+ 'coverage-area[@coverageArea=\'Washington\']'
+ listOfTAForCoverageArea.childDataNodes[0].leaves.get('nRTAC') == 234
+ and: 'list of cells in a tracking area are stored with correct xpath and child nodes '
+ def listOfCellsInTrackingArea = listOfTAForCoverageArea.childDataNodes[0]
+ listOfCellsInTrackingArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +
+ 'coverage-area[@coverageArea=\'Washington\']/coverageAreaTAList[@nRTAC=\'234\']'
+ listOfCellsInTrackingArea.childDataNodes[0].leaves.get('cellLocalId') == 15709
+ }
+
+ 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(
+ 'e2e/basic/cps-ran-inventory@2021-01-28.yang')
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).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)
+ mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext
+ when: 'saveData method is invoked'
+ cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp)
+ then: 'parameters are validated and processing is delegated to persistence service'
+ 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >>
+ { args -> dataNodeStored = args[2]}
+ and: 'the size of the tree is correct'
+ def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored[0])
+ assert cpsRanInventory.size() == 4
+ and: 'ran-inventory contains the correct child node'
+ def ranInventory = cpsRanInventory.get('/ran-inventory')
+ def ranSlices = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']')
+ def sliceProfilesList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']')
+ def pLMNIdList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']')
+ ranInventory.getChildDataNodes().size() == 1
+ ranInventory.getChildDataNodes().find( {it.xpath == ranSlices.xpath})
+ and: 'ranSlices contains the correct child node'
+ ranSlices.getChildDataNodes().size() == 1
+ ranSlices.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath})
+ and: 'sliceProfilesList contains the correct child node'
+ sliceProfilesList.getChildDataNodes().size() == 1
+ sliceProfilesList.getChildDataNodes().find( {it.xpath == pLMNIdList.xpath})
+ and: 'pLMNIdList contains no children'
+ pLMNIdList.getChildDataNodes().size() == 0
+
+ }
+
+ def 'E2E RAN Schema Model.'(){
+ given: 'yang resources'
+ def yangResourcesNameToContentMap = 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'
+ )
+ 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()
+ and: 'data is parsed with no exception indicating the model match'
+ new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null
+ }
+}