From ce559bf358caf180ba3b61d43a2cf86dd3f3e111 Mon Sep 17 00:00:00 2001 From: "Gandhapu, Yashwanth" Date: Fri, 2 Sep 2022 11:01:31 +0530 Subject: Xpath to NodeId invalid Issue-ID: CPS-1244 Signed-off-by: Gandhapu, Yashwanth Change-Id: Ib091de1247cb0bb48d3157bf2c5becfc9189b773 --- cps-service/src/main/java/org/onap/cps/utils/YangUtils.java | 12 +++++++----- .../src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy | 12 ++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java b/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java index 8c32010d7..5e1b486aa 100644 --- a/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java +++ b/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java @@ -52,7 +52,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class YangUtils { private static final String XPATH_DELIMITER_REGEX = "\\/"; - private static final String XPATH_NODE_KEY_ATTRIBUTES_REGEX = "\\[.+"; + private static final String XPATH_NODE_KEY_ATTRIBUTES_REGEX = "\\[.*?\\]"; + //Might cause an issue with [] inside [] in key-values /** * Parses jsonData into NormalizedNode according to given schema context. @@ -149,10 +150,11 @@ public class YangUtils { } private static String[] xpathToNodeIdSequence(final String xpath) { - final String[] xpathNodeIdSequence = Arrays.stream(xpath.split(XPATH_DELIMITER_REGEX)) - .map(identifier -> identifier.replaceFirst(XPATH_NODE_KEY_ATTRIBUTES_REGEX, "")) - .filter(identifier -> !identifier.isEmpty()) - .toArray(String[]::new); + final String[] xpathNodeIdSequence = Arrays.stream(xpath + .replaceAll(XPATH_NODE_KEY_ATTRIBUTES_REGEX, "") + .split(XPATH_DELIMITER_REGEX)) + .filter(identifier -> !identifier.isEmpty()) + .toArray(String[]::new); if (xpathNodeIdSequence.length < 1) { throw new DataValidationException("Invalid xpath.", "Xpath contains no node identifiers."); } diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy index 25b90d702..3f190910b 100644 --- a/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy @@ -115,4 +115,16 @@ class YangUtilsSpec extends Specification { noExceptionThrown() } + def 'Parsing xPath to nodeId for #scenario.'() { + when: 'xPath is parsed' + def result = YangUtils.xpathToNodeIdSequence(xPath) + then: 'result represents an array of expected identifiers' + assert result == expectedNodeIdentifier + where: 'the following parameters are used' + scenario | xPath || expectedNodeIdentifier + 'container xpath' | '/test-tree' || ['test-tree'] + 'xpath contains list attribute' | '/test-tree/branch[@name=\'Branch\']' || ['test-tree','branch'] + 'xpath contains list attributes with /' | '/test-tree/branch[@name=\'/Branch\']/categories[@id=\'/broken\']' || ['test-tree','branch','categories'] + } + } -- cgit 1.2.3-korg