summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cps-rest/docs/openapi/cpsData.yml3
-rw-r--r--cps-service/src/main/java/org/onap/cps/api/CpsDataService.java4
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java12
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy11
-rw-r--r--docs/api/swagger/cps/openapi.yaml4
-rwxr-xr-xdocs/release-notes.rst5
6 files changed, 31 insertions, 8 deletions
diff --git a/cps-rest/docs/openapi/cpsData.yml b/cps-rest/docs/openapi/cpsData.yml
index 1d60e1f780..0a032e4be0 100644
--- a/cps-rest/docs/openapi/cpsData.yml
+++ b/cps-rest/docs/openapi/cpsData.yml
@@ -131,7 +131,8 @@ nodesByDataspaceAndAnchor:
'500':
$ref: 'components.yml#/components/responses/InternalServerError'
patch:
- description: Update a data node leaves for a given dataspace and anchor and a parent node xpath
+ description: Update a data node leaves for a given dataspace and anchor and a parent node xpath. This operation
+ is currently supported for one top level data node only.
tags:
- cps-data
summary: Update node leaves
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java
index 39fa45ac1a..fc008685c1 100644
--- a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java
+++ b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java
@@ -138,7 +138,9 @@ public interface CpsDataService {
FetchDescendantsOption fetchDescendantsOption);
/**
- * Updates data node for given dataspace and anchor using xpath to parent node.
+ * Updates data node for given dataspace and anchor using xpath to parent node. This method can currently
+ * update only one top level data node. The method will throw DataValidationException when more than one top level
+ * data nodes are provided in jsonData
*
* @param dataspaceName dataspace name
* @param anchorName anchor name
diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java
index cd14795ad5..51e31f08c8 100755
--- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java
+++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java
@@ -160,9 +160,15 @@ public class CpsDataServiceImpl implements CpsDataService {
final String jsonData, final OffsetDateTime observedTimestamp) {
cpsValidator.validateNameCharacters(dataspaceName, anchorName);
final Anchor anchor = cpsAdminService.getAnchor(dataspaceName, anchorName);
- final DataNode dataNode = buildDataNode(anchor, parentNodeXpath, jsonData, ContentType.JSON);
- cpsDataPersistenceService.updateDataLeaves(dataspaceName, anchorName, dataNode.getXpath(),
- dataNode.getLeaves());
+ final Collection<DataNode> dataNodesInPatch = buildDataNodes(anchor, parentNodeXpath, jsonData,
+ ContentType.JSON);
+ if (dataNodesInPatch.size() > 1) {
+ throw new DataValidationException("Operation is not supported for multiple data nodes",
+ "Number of data nodes present: " + dataNodesInPatch.size());
+ }
+ cpsDataPersistenceService.updateDataLeaves(dataspaceName, anchorName,
+ dataNodesInPatch.iterator().next().getXpath(),
+ dataNodesInPatch.iterator().next().getLeaves());
processDataUpdatedEventAsync(anchor, parentNodeXpath, UPDATE, observedTimestamp);
}
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 faa5d2edbd..be397b92cd 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
@@ -240,6 +240,17 @@ class CpsDataServiceImplSpec extends Specification {
'one leaf' | '{"name": "some-name"}'
}
+ def 'Update multiple data nodes' () {
+ given: 'schema set for given dataspace and anchor refers multipleDataTree model'
+ setupSchemaSetMocks('multipleDataTree.yang')
+ and: 'json string with multiple data trees'
+ def updatedJsonData = '{"first-container":{"a-leaf":"a-new-Value"},"last-container":{"x-leaf":"x-new-value"}}'
+ when: 'update operation is performed on multiple data nodes'
+ objectUnderTest.updateNodeLeaves(dataspaceName, anchorName, '/', updatedJsonData, observedTimestamp)
+ then: 'expected exception is thrown'
+ thrown(DataValidationException)
+ }
+
def 'Update Bookstore node leaves' () {
given: 'a DMI registry model'
setupSchemaSetMocks('bookstore.yang')
diff --git a/docs/api/swagger/cps/openapi.yaml b/docs/api/swagger/cps/openapi.yaml
index edbf878d3d..57b996206d 100644
--- a/docs/api/swagger/cps/openapi.yaml
+++ b/docs/api/swagger/cps/openapi.yaml
@@ -1720,8 +1720,8 @@ paths:
tags:
- cps-data
summary: Update node leaves
- description: Update a data node leaves for a given dataspace and anchor and
- a parent node xpath
+ description: Update a data node leaves for a given dataspace and anchor and a parent node xpath. This
+ operation is currently supported for one top level data node only.
operationId: updateNodeLeaves
parameters:
- name: apiVersion
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index 12e485aae8..d52e72991f 100755
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -39,7 +39,7 @@ Release Data
Bug Fixes
---------
3.2.6
- - None
+ - `CPS-1526 <https://jira.onap.org/browse/CPS-1526>`_ Fix response message for PATCH operation
Features
--------
@@ -229,6 +229,9 @@ Known Limitations, Issues and Workarounds
For upgrading, CPS uses Liquibase for database upgrades. CPS/NCMP currently only supports upgrading from Liquibase changelog 11 to Liquibase changelog 16.
This is from commit CPS-506: List all known modules and revision to CPS-1312: Default CMHandles to READY during upgrade or from ONAP release Honolulu to Kohn.
+CPS core Patch operation currently supports updating data of one top level data node. When performing Patch on multiple top level data nodes at once
+a 400 Bad Request is sent as response. This is part of commit CPS-1526.
+
.. ====================
.. * * * KOHN * * *
.. ====================