Add 'direct' keyword to descendants option to query direct children (ep1) 25/135525/5
authorRudrangi Anupriya <ra00745022@techmahindra.com>
Fri, 28 Jul 2023 08:58:54 +0000 (14:28 +0530)
committerRudrangi Anupriya <ra00745022@techmahindra.com>
Fri, 28 Jul 2023 08:59:10 +0000 (14:29 +0530)
-added 'direct' keyword also to Fetch Descendants Option along with 'all' and 'none' to Query direct child.
-added unit tests to test direct keyword

Issue-ID:CPS-1784
Change-Id: Iab7f59fbeebb03703626132c6d5c2afde0e5ab4d
Signed-off-by: Rudrangi Anupriya <ra00745022@techmahindra.com>
13 files changed:
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyCmHandleQueryServiceImpl.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyCmHandleQueryServiceSpec.groovy
cps-rest/docs/openapi/components.yml
cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy
cps-service/src/main/java/org/onap/cps/spi/FetchDescendantsOption.java
cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy
cps-service/src/test/groovy/org/onap/cps/spi/FetchDescendantsOptionSpec.groovy
docs/api/swagger/cps/openapi.yaml
integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsDataServiceIntegrationSpec.groovy
integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsQueryServiceIntegrationSpec.groovy
integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/CpsDataServiceLimitsPerfTest.groovy
integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/GetPerfTest.groovy
integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/QueryPerfTest.groovy

index 54d89ba..b791063 100644 (file)
@@ -27,7 +27,7 @@ import static org.onap.cps.ncmp.api.impl.utils.CmHandleQueryConditions.WITH_CPS_
 import static org.onap.cps.ncmp.api.impl.utils.RestQueryParametersValidator.validateCpsPathConditionProperties;
 import static org.onap.cps.ncmp.api.impl.utils.RestQueryParametersValidator.validateModuleNameConditionProperties;
 import static org.onap.cps.ncmp.api.impl.utils.YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle;
-import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY;
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY;
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS;
 
 import java.util.ArrayList;
@@ -204,7 +204,7 @@ public class NetworkCmProxyCmHandleQueryServiceImpl implements NetworkCmProxyCmH
     }
 
     private Collection<String> getAllCmHandleIds() {
-        final DataNode dataNode = inventoryPersistence.getDataNode("/dmi-registry", DIRECT_CHILDREN_ONLY)
+        final DataNode dataNode = inventoryPersistence.getDataNode("/dmi-registry", DIRECT_CHILD_ONLY)
                 .iterator().next();
         return collectCmHandleIdsFromDataNodes(dataNode.getChildDataNodes());
     }
index bff8222..fc0ed5f 100644 (file)
@@ -127,7 +127,7 @@ class NetworkCmProxyCmHandleQueryServiceSpec extends Specification {
         given: 'We use an empty query'
             def cmHandleQueryParameters = new CmHandleQueryServiceParameters()
         and: 'the inventory persistence returns the dmi registry datanode with just ids'
-            mockInventoryPersistence.getDataNode("/dmi-registry", FetchDescendantsOption.DIRECT_CHILDREN_ONLY) >> [dmiRegistry]
+            mockInventoryPersistence.getDataNode("/dmi-registry", FetchDescendantsOption.DIRECT_CHILD_ONLY) >> [dmiRegistry]
         when: 'the query is executed for both cm handle ids'
             def result = objectUnderTest.queryCmHandleIds(cmHandleQueryParameters)
         then: 'the correct expected cm handles are returned'
index a7c1300..a721305 100644 (file)
@@ -263,7 +263,7 @@ components:
     descendantsInQuery:
       name: descendants
       in: query
-      description: Number of descendants to query. Allowed values are 'none', 'all', -1 (for all), 0 (for none) and any positive number.
+      description: Number of descendants to query. Allowed values are 'none', 'all', 'direct', 1 (for direct), -1 (for all), 0 (for none) and any positive number.
       required: false
       schema:
         type: string
index c4bb23c..09e9ff5 100644 (file)
@@ -25,6 +25,7 @@ package org.onap.cps.rest.controller
 
 import org.onap.cps.utils.PrefixResolver
 
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY
 import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
@@ -97,17 +98,21 @@ class QueryRestControllerSpec extends Specification {
             def dataNode1 = new DataNodeBuilder().withXpath('/xpath')
                 .withLeaves([leaf: 'value', leafList: ['leaveListElement1', 'leaveListElement2']]).build()
             mockCpsQueryService.queryDataNodes(dataspaceName, anchorName, cpsPath, { descendantsOption -> {
-                    assert descendantsOption.depth == 2}}) >> [dataNode1, dataNode1]
+                assert descendantsOption.depth == expectedDepth}}) >> [dataNode1, dataNode1]
         when: 'query data nodes API is invoked'
             def response =
                 mvc.perform(
                         get(dataNodeEndpointV2)
                                 .param('cps-path', cpsPath)
-                                .param('descendants', '2'))
+                                .param('descendants', includeDescendantsOptionString))
                         .andReturn().response
         then: 'the response contains the the datanode in json format'
             assert response.status == HttpStatus.OK.value()
             assert response.getContentAsString().contains('{"xpath":{"leaf":"value","leafList":["leaveListElement1","leaveListElement2"]}}')
+       where: 'the following options for include descendants are provided in the request'
+           scenario          | includeDescendantsOptionString || expectedDepth
+           'direct children' | 'direct'                       || 1
+           'descendants'     | '2'                            || 2
     }
 
     def 'Query data node by cps path for the given dataspace across all anchors with #scenario.'() {
@@ -139,5 +144,6 @@ class QueryRestControllerSpec extends Specification {
             'no descendants by default' | ''                             || OMIT_DESCENDANTS
             'no descendant explicitly'  | 'none'                         || OMIT_DESCENDANTS
             'descendants'               | 'all'                          || INCLUDE_ALL_DESCENDANTS
+            'direct children'           | 'direct'                       || DIRECT_CHILD_ONLY
     }
 }
index 0257499..76d9bba 100644 (file)
@@ -30,8 +30,8 @@ import org.onap.cps.spi.exceptions.DataValidationException;
 @RequiredArgsConstructor
 public class FetchDescendantsOption {
 
-    public static final FetchDescendantsOption DIRECT_CHILDREN_ONLY
-        = new FetchDescendantsOption(1, "DirectChildrenOnly");
+    public static final FetchDescendantsOption DIRECT_CHILD_ONLY
+        = new FetchDescendantsOption(1, "DirectChildOnly");
     public static final FetchDescendantsOption OMIT_DESCENDANTS
         = new FetchDescendantsOption(0, "OmitDescendants");
     public static final FetchDescendantsOption INCLUDE_ALL_DESCENDANTS
@@ -42,7 +42,7 @@ public class FetchDescendantsOption {
     }
 
     private static final Pattern FETCH_DESCENDANTS_OPTION_PATTERN =
-        Pattern.compile("^$|^all$|^none$|^[0-9]+$|^-1$");
+        Pattern.compile("^$|^all$|^none$|^direct$|^[0-9]+$|^-1$|^1$");
 
     private final int depth;
 
@@ -96,6 +96,8 @@ public class FetchDescendantsOption {
             return FetchDescendantsOption.OMIT_DESCENDANTS;
         } else if ("-1".equals(fetchDescendantsOptionAsString) || "all".equals(fetchDescendantsOptionAsString)) {
             return FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS;
+        } else if ("1".equals(fetchDescendantsOptionAsString) || "direct".equals(fetchDescendantsOptionAsString)) {
+            return FetchDescendantsOption.DIRECT_CHILD_ONLY;
         } else {
             final Integer depth = Integer.valueOf(fetchDescendantsOptionAsString);
             return new FetchDescendantsOption(depth);
index 553027a..4e3d279 100644 (file)
@@ -45,7 +45,7 @@ class CpsQueryServiceImplSpec extends Specification {
             1 * mockCpsValidator.validateNameCharacters(dataspaceName, anchorName)
         where: 'all fetch descendants options are supported'
             fetchDescendantsOption << [FetchDescendantsOption.OMIT_DESCENDANTS, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS,
-                                       FetchDescendantsOption.DIRECT_CHILDREN_ONLY, new FetchDescendantsOption(10)]
+                                       FetchDescendantsOption.DIRECT_CHILD_ONLY, new FetchDescendantsOption(10)]
     }
 
     def 'Query data nodes across all anchors by cps path with #fetchDescendantsOption.'() {
index 24f3487..b095bfd 100644 (file)
@@ -85,6 +85,8 @@ class FetchDescendantsOptionSpec extends Specification {
             'all descendants using all'         | 'all'                          || -1
             'No descendants by default'         | ''                             || 0
             'No descendants using none'         | 'none'                         || 0
+            'direct child using number'         | '1'                            || 1
+            'direct child using direct'         | 'direct'                       || 1
             'til 10th descendants using number' | '10'                           || 10
     }
 
@@ -94,7 +96,7 @@ class FetchDescendantsOptionSpec extends Specification {
         where: 'the following option is used'
             fetchDescendantsOption                         || expectedStringValue
             FetchDescendantsOption.OMIT_DESCENDANTS        || 'OmitDescendants'
-            FetchDescendantsOption.DIRECT_CHILDREN_ONLY    || 'DirectChildrenOnly'
+            FetchDescendantsOption.DIRECT_CHILD_ONLY       || 'DirectChildOnly'
             FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS || 'IncludeAllDescendants'
             new FetchDescendantsOption(2)                  || 'Depth=2'
     }
index ace45f8..eb6c424 100644 (file)
@@ -1316,8 +1316,8 @@ paths:
           schema:
             default: /
             type: string
-        - description: "Number of descendants to query. Allowed values are 'none', 'all',\
-          \ -1 (for all), 0 (for none) and any positive number."
+        - description: "Number of descendants to query. Allowed values are 'none', 'all', 'direct',\
+          \ 1 (for direct), -1 (for all), 0 (for none) and any positive number."
           in: query
           name: descendants
           required: false
@@ -2261,8 +2261,8 @@ paths:
           schema:
             default: /
             type: string
-        - description: "Number of descendants to query. Allowed values are 'none', 'all',\
-          \ -1 (for all), 0 (for none) and any positive number."
+        - description: "Number of descendants to query. Allowed values are 'none', 'all', 'direct',\
+          \ 1 (for direct), -1 (for all), 0 (for none) and any positive number."
           in: query
           name: descendants
           required: false
@@ -2350,8 +2350,8 @@ paths:
           schema:
             default: /
             type: string
-        - description: "Number of descendants to query. Allowed values are 'none', 'all',\
-          \ -1 (for all), 0 (for none) and any positive number."
+        - description: "Number of descendants to query. Allowed values are 'none', 'all', 'direct',\
+          \ 1 (for direct), -1 (for all), 0 (for none) and any positive number."
           in: query
           name: descendants
           required: false
@@ -2532,8 +2532,8 @@ components:
         example: false
         type: boolean
     descendantsInQuery:
-      description: "Number of descendants to query. Allowed values are 'none', 'all',\
-        \ -1 (for all), 0 (for none) and any positive number."
+      description: "Number of descendants to query. Allowed values are 'none', 'all', 'direct',\
+          \ 1 (for direct), -1 (for all), 0 (for none) and any positive number."
       in: query
       name: descendants
       required: false
index 6b556d3..a942721 100644 (file)
@@ -35,7 +35,7 @@ import org.onap.cps.spi.exceptions.DataspaceNotFoundException
 
 import java.time.OffsetDateTime
 
-import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY
 import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
 
@@ -66,7 +66,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
         where: 'the following option is used'
             fetchDescendantsOption        || expectNumberOfDataNodes
             OMIT_DESCENDANTS              || 1
-            DIRECT_CHILDREN_ONLY          || 7
+            DIRECT_CHILD_ONLY             || 7
             INCLUDE_ALL_DESCENDANTS       || 28
             new FetchDescendantsOption(2) || 28
     }
@@ -84,7 +84,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
 
     def 'Read data nodes with error: #cpsPath'() {
         when: 'attempt to get data nodes using invalid path'
-            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, DIRECT_CHILDREN_ONLY)
+            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, cpsPath, DIRECT_CHILD_ONLY)
         then: 'a #expectedException is thrown'
             thrown(expectedException)
         where:
@@ -95,7 +95,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
 
     def 'Read (multiple) data nodes (batch) with #cpsPath'() {
         when: 'attempt to get data nodes using invalid path'
-            objectUnderTest.getDataNodesForMultipleXpaths(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, [ cpsPath ], DIRECT_CHILDREN_ONLY)
+            objectUnderTest.getDataNodesForMultipleXpaths(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, [ cpsPath ], DIRECT_CHILD_ONLY)
         then: 'no exception is thrown'
             noExceptionThrown()
         where:
@@ -106,7 +106,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
         when: 'the "root" is deleted'
             objectUnderTest.deleteDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, [ '/' ], now)
         and: 'attempt to get the top level data node'
-            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore', DIRECT_CHILDREN_ONLY)
+            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore', DIRECT_CHILD_ONLY)
         then: 'an datanode not found exception is thrown'
             thrown(DataNodeNotFoundException)
         cleanup:
@@ -143,7 +143,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
             when: 'the new datanode is saved'
                 objectUnderTest.saveData(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1 , parentXpath, json, now)
             then: 'it can be retrieved by its normalized xpath'
-                def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, normalizedXpathToNode, DIRECT_CHILDREN_ONLY)
+                def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, normalizedXpathToNode, DIRECT_CHILD_ONLY)
                 assert result.size() == 1
                 assert result[0].xpath == normalizedXpathToNode
             and: 'there is now one extra datanode'
@@ -228,8 +228,8 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
         when: 'the new list elements are saved'
             objectUnderTest.saveListElements(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1 , '/bookstore', json, now)
         then: 'they can be retrieved by their xpaths'
-            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new1"]', DIRECT_CHILDREN_ONLY).size() == 1
-            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new2"]', DIRECT_CHILDREN_ONLY).size() == 1
+            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new1"]', DIRECT_CHILD_ONLY).size() == 1
+            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new2"]', DIRECT_CHILD_ONLY).size() == 1
         and: 'there are now two extra data nodes'
             assert originalCountBookstoreChildNodes + 2 == countDataNodesInBookstore()
         when: 'the new elements are deleted'
@@ -271,8 +271,8 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
         when: 'the batches of new list element(s) are saved'
             objectUnderTest.saveListElementsBatch(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1 , '/bookstore', [json1, json2], now)
         then: 'they can be retrieved by their xpaths'
-            assert objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new1"]', DIRECT_CHILDREN_ONLY).size() == 1
-            assert objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new2"]', DIRECT_CHILDREN_ONLY).size() == 1
+            assert objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new1"]', DIRECT_CHILD_ONLY).size() == 1
+            assert objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new2"]', DIRECT_CHILD_ONLY).size() == 1
         and: 'there are now two extra data nodes'
             assert originalCountBookstoreChildNodes + 2 == countDataNodesInBookstore()
         when: 'the new elements are deleted'
@@ -324,20 +324,20 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
             def thrown  = thrown(AlreadyDefinedException)
             assert thrown.alreadyDefinedObjectNames == [ "/bookstore/categories[@code='1']" ] as Set
         and: 'the new data node has been added i.e. can be retrieved'
-            assert objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new"]', DIRECT_CHILDREN_ONLY).size() == 1
+            assert objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="new"]', DIRECT_CHILD_ONLY).size() == 1
     }
 
     def 'Replace list content #scenario.'() {
         given: 'the bookstore categories 1 and 2 exist and have at least 1 child each '
-            assert countDataNodesInTree(objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="1"]', DIRECT_CHILDREN_ONLY)) > 1
-            assert countDataNodesInTree(objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="2"]', DIRECT_CHILDREN_ONLY)) > 1
+            assert countDataNodesInTree(objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="1"]', DIRECT_CHILD_ONLY)) > 1
+            assert countDataNodesInTree(objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="2"]', DIRECT_CHILD_ONLY)) > 1
         when: 'the categories list is replaced with just category "1" and without child nodes (books)'
             def json = '{"categories": [ {"code":"' +categoryCode + '"' + childJson + '} ] }'
             objectUnderTest.replaceListContent(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore', json, now)
         then: 'the new replaced category can be retrieved but has no children anymore'
-            assert expectedNumberOfDataNodes == countDataNodesInTree(objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="' +categoryCode + '"]', DIRECT_CHILDREN_ONLY))
+            assert expectedNumberOfDataNodes == countDataNodesInTree(objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="' +categoryCode + '"]', DIRECT_CHILD_ONLY))
         when: 'attempt to retrieve a category (code) not in the new list'
-            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="2"]', DIRECT_CHILDREN_ONLY)
+            objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/categories[@code="2"]', DIRECT_CHILD_ONLY)
         then: 'a datanode not found exception occurs'
             thrown(DataNodeNotFoundException)
         cleanup:
@@ -401,7 +401,7 @@ class CpsDataServiceIntegrationSpec extends FunctionalSpecBase {
             json = '{"webinfo": {"domain-name":"newdomain.com" ,"contact-email":"info@newdomain.com" }}'
             objectUnderTest.updateDataNodeAndDescendants(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore', json, now)
         then: 'webinfo has been updated with teh new details'
-            def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/webinfo', DIRECT_CHILDREN_ONLY)
+            def result = objectUnderTest.getDataNodes(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_ANCHOR_1, '/bookstore/webinfo', DIRECT_CHILD_ONLY)
             result.leaves.'domain-name'[0] == 'newdomain.com'
             result.leaves.'contact-email'[0] == 'info@newdomain.com'
         cleanup:
index 74496d3..463a8fe 100644 (file)
@@ -27,7 +27,7 @@ import org.onap.cps.integration.base.FunctionalSpecBase
 import org.onap.cps.spi.FetchDescendantsOption
 import org.onap.cps.spi.exceptions.CpsPathException
 
-import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY
 import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
 
@@ -232,7 +232,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase {
         where: 'the following data is used'
             scenario | fetchDescendantsOption  || expectedNumberOfNodes
             'no'     | OMIT_DESCENDANTS        || 1
-            'direct' | DIRECT_CHILDREN_ONLY    || 7
+            'direct' | DIRECT_CHILD_ONLY       || 7
             'all'    | INCLUDE_ALL_DESCENDANTS || 28
     }
 
@@ -282,7 +282,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase {
         where: 'the following data is used'
             scenario | fetchDescendantsOption  || expectedNumberOfNodesPerAnchor
             'no'     | OMIT_DESCENDANTS        || 1
-            'direct' | DIRECT_CHILDREN_ONLY    || 7
+            'direct' | DIRECT_CHILD_ONLY       || 7
             'all'    | INCLUDE_ALL_DESCENDANTS || 28
     }
 
@@ -296,7 +296,7 @@ class CpsQueryServiceIntegrationSpec extends FunctionalSpecBase {
         where: 'the following data is used'
             scenario | fetchDescendantsOption  || expectedNumberOfNodesPerAnchor
             'no'     | OMIT_DESCENDANTS        || 1
-            'direct' | DIRECT_CHILDREN_ONLY    || 7
+            'direct' | DIRECT_CHILD_ONLY       || 7
             'all'    | INCLUDE_ALL_DESCENDANTS || 28
     }
 
index 9cb65ab..4a1178b 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2023 Nordix Foundation
+ *  Modifications Copyright (C) 2023 TechMahindra Ltd.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the 'License');
  *  you may not use this file except in compliance with the License.
@@ -24,7 +25,7 @@ import java.time.OffsetDateTime
 import org.onap.cps.api.CpsDataService
 import org.onap.cps.integration.performance.base.CpsPerfTestBase
 
-import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
 
 class CpsDataServiceLimitsPerfTest extends CpsPerfTestBase {
@@ -92,7 +93,7 @@ class CpsDataServiceLimitsPerfTest extends CpsPerfTestBase {
     }
 
     def countDataNodes() {
-        def results = objectUnderTest.getDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'limitsAnchor', '/bookstore/categories[@code=1]', DIRECT_CHILDREN_ONLY)
+        def results = objectUnderTest.getDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'limitsAnchor', '/bookstore/categories[@code=1]', DIRECT_CHILD_ONLY)
         return results[0].childDataNodes.size()
     }
 
index f6ca5fc..ea5db69 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2023 Nordix Foundation
+ *  Modifications Copyright (C) 2023 TechMahindra Ltd.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the 'License');
  *  you may not use this file except in compliance with the License.
@@ -23,7 +24,7 @@ package org.onap.cps.integration.performance.cps
 import org.onap.cps.api.CpsDataService
 import org.onap.cps.integration.performance.base.CpsPerfTestBase
 
-import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY
 import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
 
@@ -45,7 +46,7 @@ class GetPerfTest extends CpsPerfTestBase {
         where: 'the following parameters are used'
             scenario             | fetchDescendantsOption  | anchor       || durationLimit | expectedNumberOfDataNodes
             'no descendants'     | OMIT_DESCENDANTS        | 'openroadm1' || 20            | 1
-            'direct descendants' | DIRECT_CHILDREN_ONLY    | 'openroadm2' || 100           | 1 + 50
+            'direct descendants' | DIRECT_CHILD_ONLY       | 'openroadm2' || 100           | 1 + 50
             'all descendants'    | INCLUDE_ALL_DESCENDANTS | 'openroadm3' || 200           | 1 + 50 * 86
     }
 
index 78e0d01..3ae25ca 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2023 Nordix Foundation
+ *  Modifications Copyright (C) 2023 TechMahindra Ltd.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the 'License');
  *  you may not use this file except in compliance with the License.
@@ -23,7 +24,7 @@ package org.onap.cps.integration.performance.cps
 import org.onap.cps.api.CpsQueryService
 import org.onap.cps.integration.performance.base.CpsPerfTestBase
 
-import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY
+import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILD_ONLY
 import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
 
@@ -83,7 +84,7 @@ class QueryPerfTest extends CpsPerfTestBase {
         where: 'the following parameters are used'
             scenario             | fetchDescendantsOption  | anchor       || durationLimit | expectedNumberOfDataNodes
             'no descendants'     | OMIT_DESCENDANTS        | 'openroadm1' || 15            | 50
-            'direct descendants' | DIRECT_CHILDREN_ONLY    | 'openroadm2' || 60            | 50 * 2
+            'direct descendants' | DIRECT_CHILD_ONLY       | 'openroadm2' || 60            | 50 * 2
             'all descendants'    | INCLUDE_ALL_DESCENDANTS | 'openroadm3' || 150           | 50 * 86
     }
 
@@ -99,9 +100,9 @@ class QueryPerfTest extends CpsPerfTestBase {
             recordAndAssertPerformance("Query ancestors with ${scenario}", durationLimit, durationInMillis)
         where: 'the following parameters are used'
             scenario             | fetchDescendantsOption  | anchor       || durationLimit | expectedNumberOfDataNodes
-            'no descendants'     | OMIT_DESCENDANTS        | 'openroadm1' || 15            | 1
-            'direct descendants' | DIRECT_CHILDREN_ONLY    | 'openroadm2' || 60            | 1 + 50
-            'all descendants'    | INCLUDE_ALL_DESCENDANTS | 'openroadm3' || 150           | 1 + 50 * 86
+            'no descendants'     | OMIT_DESCENDANTS        | 'openroadm1' || 15  | 1
+            'direct descendants' | DIRECT_CHILD_ONLY       | 'openroadm2' || 60  | 1 + 50
+            'all descendants'    | INCLUDE_ALL_DESCENDANTS | 'openroadm3' || 150 | 1 + 50 * 86
     }
 
 }