aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruno Sakoto <bruno.sakoto@bell.ca>2021-06-18 19:12:12 +0000
committerGerrit Code Review <gerrit@onap.org>2021-06-18 19:12:12 +0000
commitcec636cf769e3713ede2d2bf2a8e29722e710e98 (patch)
treea84d3e6efbbc40e94570b2b614f51209e581d5c8
parentea21e7db83ae4961a5008560a2e6e53c703845c2 (diff)
parent657a97124f0890f6bb5fec61a37978a6aa00a29d (diff)
Merge "Updating exception and explanation for update node leaves"
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java5
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/YangUtils.java8
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy13
3 files changed, 24 insertions, 2 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
index 762e61ac59..4a9957deb4 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
@@ -29,6 +29,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
+import org.onap.cps.spi.exceptions.DataValidationException;
import org.onap.cps.utils.YangUtils;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
@@ -142,6 +143,10 @@ public class DataNodeBuilder {
private DataNode buildFromNormalizedNodeTree() {
final Collection<DataNode> dataNodeCollection = buildCollectionFromNormalizedNodeTree();
+ if (!dataNodeCollection.iterator().hasNext()) {
+ throw new DataValidationException(
+ "Unsupported xpath: ", "Unsupported xpath as it is referring to one element");
+ }
return dataNodeCollection.iterator().next();
}
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 0b66d37fba..b5c14a0721 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
@@ -94,9 +94,13 @@ public class YangUtils {
final var jsonReader = new JsonReader(new StringReader(jsonData));
jsonParserStream.parse(jsonReader);
- } catch (final IOException | IllegalStateException | JsonSyntaxException exception) {
+ } catch (final IOException | JsonSyntaxException exception) {
throw new DataValidationException(
- "Failed to parse json data: " + jsonData, exception.getMessage(), exception);
+ "Failed to parse json data: " + jsonData, exception.getMessage(), exception);
+ } catch (final IllegalStateException illegalStateException) {
+ throw new DataValidationException(
+ "Failed to parse json data. Unsupported xpath or json data:" + jsonData, illegalStateException
+ .getMessage(), illegalStateException);
}
return normalizedNodeResult.getResult();
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy
index 27a5a4e0ca..8001d6a9fe 100644
--- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy
@@ -125,6 +125,19 @@ class CpsDataServiceImplSpec extends Specification {
'level 2 node' | '/test-tree' | '{"branch": [{"name":"Name"}]}' || '/test-tree/branch[@name=\'Name\']' | ['name': 'Name']
}
+ def 'Update list-element data node with : #scenario.'() {
+ given: 'schema set for given anchor and dataspace references bookstore model'
+ setupSchemaSetMocks('bookstore.yang')
+ when: 'update data method is invoked with json data #jsonData and parent node xpath'
+ objectUnderTest.updateNodeLeaves(dataspaceName, anchorName, '/bookstore/categories[@code=2]', jsonData)
+ then: 'the persistence service method is invoked with correct parameters'
+ thrown(DataValidationException)
+ where: 'following parameters were used'
+ scenario | jsonData
+ 'multiple leaves' | '{"code": "01","name": "some-name"}'
+ 'one leaf' | '{"name": "some-name"}'
+ }
+
def 'Replace data node: #scenario.'() {
given: 'schema set for given anchor and dataspace references test-tree model'
setupSchemaSetMocks('test-tree.yang')