diff options
Diffstat (limited to 'cps-service')
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/utils/YangUtils.java | 12 | ||||
-rw-r--r-- | cps-service/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 8c32010d7b..5e1b486aa0 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 25b90d702f..3f190910b1 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'] + } + } |