aboutsummaryrefslogtreecommitdiffstats
path: root/cps-rest/src
diff options
context:
space:
mode:
Diffstat (limited to 'cps-rest/src')
-rwxr-xr-xcps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java61
-rwxr-xr-xcps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy95
2 files changed, 129 insertions, 27 deletions
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java
index d460f52415..be552ecc6a 100755
--- a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java
+++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java
@@ -102,12 +102,17 @@ public class DataRestController implements CpsDataApi {
@Override
public ResponseEntity<String> addListElements(final String apiVersion, final String dataspaceName,
final String anchorName, final String parentNodeXpath,
- final String nodeData, final String observedTimestamp,
- final String contentTypeInHeader) {
+ final String nodeData, final Boolean dryRunEnabled,
+ final String observedTimestamp, final String contentTypeInHeader) {
final ContentType contentType = ContentType.fromString(contentTypeInHeader);
- cpsDataService.saveListElements(dataspaceName, anchorName, parentNodeXpath,
- nodeData, toOffsetDateTime(observedTimestamp), contentType);
- return new ResponseEntity<>(HttpStatus.CREATED);
+ if (Boolean.TRUE.equals(dryRunEnabled)) {
+ cpsDataService.validateData(dataspaceName, anchorName, parentNodeXpath, nodeData, contentType);
+ return ResponseEntity.ok().build();
+ } else {
+ cpsDataService.saveListElements(dataspaceName, anchorName, parentNodeXpath,
+ nodeData, toOffsetDateTime(observedTimestamp), contentType);
+ }
+ return ResponseEntity.status(HttpStatus.CREATED).build();
}
@Override
@@ -151,34 +156,50 @@ public class DataRestController implements CpsDataApi {
@Override
public ResponseEntity<Object> updateNodeLeaves(final String apiVersion, final String dataspaceName,
final String anchorName, final String nodeData,
- final String parentNodeXpath, final String observedTimestamp,
- final String contentTypeInHeader) {
+ final String parentNodeXpath, final Boolean dryRunEnabled,
+ final String observedTimestamp, final String contentTypeInHeader) {
final ContentType contentType = ContentType.fromString(contentTypeInHeader);
- cpsDataService.updateNodeLeaves(dataspaceName, anchorName, parentNodeXpath,
- nodeData, toOffsetDateTime(observedTimestamp), contentType);
- return new ResponseEntity<>(HttpStatus.OK);
+ if (Boolean.TRUE.equals(dryRunEnabled)) {
+ cpsDataService.validateData(dataspaceName, anchorName, parentNodeXpath, nodeData, contentType);
+ return ResponseEntity.ok().build();
+ } else {
+ cpsDataService.updateNodeLeaves(dataspaceName, anchorName, parentNodeXpath,
+ nodeData, toOffsetDateTime(observedTimestamp), contentType);
+ }
+ return ResponseEntity.status(HttpStatus.OK).build();
}
@Override
public ResponseEntity<Object> replaceNode(final String apiVersion, final String dataspaceName,
final String anchorName, final String nodeData,
- final String parentNodeXpath, final String observedTimestamp,
- final String contentTypeInHeader) {
+ final String parentNodeXpath, final Boolean dryRunEnabled,
+ final String observedTimestamp, final String contentTypeInHeader) {
final ContentType contentType = ContentType.fromString(contentTypeInHeader);
- cpsDataService.updateDataNodeAndDescendants(dataspaceName, anchorName, parentNodeXpath,
- nodeData, toOffsetDateTime(observedTimestamp), contentType);
- return new ResponseEntity<>(HttpStatus.OK);
+ if (Boolean.TRUE.equals(dryRunEnabled)) {
+ cpsDataService.validateData(dataspaceName, anchorName, parentNodeXpath, nodeData, contentType);
+ return ResponseEntity.ok().build();
+ } else {
+ cpsDataService.updateDataNodeAndDescendants(dataspaceName, anchorName, parentNodeXpath,
+ nodeData, toOffsetDateTime(observedTimestamp), contentType);
+ }
+ return ResponseEntity.status(HttpStatus.OK).build();
}
@Override
public ResponseEntity<Object> replaceListContent(final String apiVersion, final String dataspaceName,
final String anchorName, final String parentNodeXpath,
- final String nodeData, final String observedTimestamp,
- final String contentTypeInHeader) {
+ final String nodeData, final Boolean dryRunEnabled,
+ final String observedTimestamp, final String contentTypeInHeader) {
final ContentType contentType = ContentType.fromString(contentTypeInHeader);
- cpsDataService.replaceListContent(dataspaceName, anchorName, parentNodeXpath,
- nodeData, toOffsetDateTime(observedTimestamp), contentType);
- return new ResponseEntity<>(HttpStatus.OK);
+ if (Boolean.TRUE.equals(dryRunEnabled)) {
+ cpsDataService.validateData(dataspaceName, anchorName, parentNodeXpath, nodeData,
+ ContentType.JSON);
+ return ResponseEntity.ok().build();
+ } else {
+ cpsDataService.replaceListContent(dataspaceName, anchorName, parentNodeXpath,
+ nodeData, toOffsetDateTime(observedTimestamp), contentType);
+ }
+ return ResponseEntity.status(HttpStatus.OK).build();
}
@Override
diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy
index 915fbdecf5..ca89fafe83 100755
--- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy
+++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy
@@ -168,16 +168,17 @@ class DataRestControllerSpec extends Specification {
given: 'an endpoint to create a node'
def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/nodes"
def parentNodeXpath = '/'
+ and: 'dryRunEnabled flag is set to true'
def dryRunEnabled = 'true'
when: 'post is invoked with json data and dry-run flag enabled'
def response =
- mvc.perform(
- post(endpoint)
- .contentType(MediaType.APPLICATION_JSON)
- .param('xpath', parentNodeXpath)
- .param('dry-run', dryRunEnabled)
- .content(requestBodyJson)
- ).andReturn().response
+ mvc.perform(
+ post(endpoint)
+ .contentType(MediaType.APPLICATION_JSON)
+ .param('xpath', parentNodeXpath)
+ .param('dry-run', dryRunEnabled)
+ .content(requestBodyJson)
+ ).andReturn().response
then: 'a 200 OK response is returned'
response.status == HttpStatus.OK.value()
then: 'the service was called with correct parameters'
@@ -263,6 +264,26 @@ class DataRestControllerSpec extends Specification {
'Content type XML with invalid observed-timestamp' | 'invalid' | MediaType.APPLICATION_XML | requestBodyXml || 0 | HttpStatus.BAD_REQUEST | expectedXmlData | ContentType.XML
}
+ def 'Validate data using Save list elements API'() {
+ given: 'endpoint to save list elements'
+ def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/list-nodes"
+ and: 'dryRunEnabled flag is set to true'
+ def dryRunEnabled = 'true'
+ when: 'post request is performed'
+ def response =
+ mvc.perform(
+ post(endpoint)
+ .contentType(MediaType.APPLICATION_JSON)
+ .param('xpath', '/')
+ .content(requestBodyJson)
+ .param('dry-run', dryRunEnabled)
+ ).andReturn().response
+ then: 'a 200 OK response is returned'
+ response.status == HttpStatus.OK.value()
+ then: 'the service was called with correct parameters'
+ 1 * mockCpsDataService.validateData(dataspaceName, anchorName, '/', requestBodyJson, ContentType.JSON)
+ }
+
def 'Get data node with leaves'() {
given: 'the service returns data node leaves'
def xpath = 'parent-1'
@@ -515,6 +536,26 @@ class DataRestControllerSpec extends Specification {
'with invalid observed-timestamp' | 'invalid' || 0 | HttpStatus.BAD_REQUEST
}
+ def 'Validate data using Update a node API'() {
+ given: 'endpoint to update a node leaves'
+ def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/nodes"
+ and: 'dryRunEnabled flag is set to true'
+ def dryRunEnabled = 'true'
+ when: 'patch request is performed'
+ def response =
+ mvc.perform(
+ patch(endpoint)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(requestBodyJson)
+ .param('xpath', '/')
+ .param('dry-run', dryRunEnabled)
+ ).andReturn().response
+ then: 'a 200 OK response is returned'
+ response.status == HttpStatus.OK.value()
+ then: 'the service was called with correct parameters'
+ 1 * mockCpsDataService.validateData(dataspaceName, anchorName, '/', requestBodyJson, ContentType.JSON)
+ }
+
def 'Replace data node tree: #scenario.'() {
given: 'endpoint to replace node'
def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/nodes"
@@ -540,6 +581,26 @@ class DataRestControllerSpec extends Specification {
'XML content: some xpath by parent' | '/some/xpath' | MediaType.APPLICATION_XML || '/some/xpath' | requestBodyXml | expectedXmlData | ContentType.XML
}
+ def 'Validate data using Replace data node API'() {
+ given: 'endpoint to replace node'
+ def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/nodes"
+ and: 'dryRunEnabled flag is set to true'
+ def dryRunEnabled = 'true'
+ when: 'put request is performed'
+ def response =
+ mvc.perform(
+ put(endpoint)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(requestBodyJson)
+ .param('xpath', '/')
+ .param('dry-run', dryRunEnabled)
+ ).andReturn().response
+ then: 'a 200 OK response is returned'
+ response.status == HttpStatus.OK.value()
+ then: 'the service was called with correct parameters'
+ 1 * mockCpsDataService.validateData(dataspaceName, anchorName, '/', requestBodyJson, ContentType.JSON)
+ }
+
def 'Update data node and descendants with observedTimestamp.'() {
given: 'endpoint to replace node'
def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/nodes"
@@ -605,6 +666,26 @@ class DataRestControllerSpec extends Specification {
'with invalid observed-timestamp' | 'invalid' || 0 | HttpStatus.BAD_REQUEST
}
+ def 'Validate data using Replace list content API'() {
+ given: 'endpoint to replace list-nodes'
+ def endpoint = "$dataNodeBaseEndpointV1/anchors/$anchorName/list-nodes"
+ and: 'dryRunEnabled flag is set to true'
+ def dryRunEnabled = 'true'
+ when: 'put request is performed'
+ def response =
+ mvc.perform(
+ put(endpoint)
+ .contentType(MediaType.APPLICATION_JSON)
+ .param('xpath', '/')
+ .content(requestBodyJson)
+ .param('dry-run', dryRunEnabled)
+ ).andReturn().response
+ then: 'a 200 OK response is returned'
+ response.status == HttpStatus.OK.value()
+ then: 'the service was called with correct parameters'
+ 1 * mockCpsDataService.validateData(dataspaceName, anchorName, '/', requestBodyJson, ContentType.JSON)
+ }
+
def 'Delete list element #scenario.'() {
when: 'list-nodes endpoint is invoked with delete operation'
def deleteRequestBuilder = delete("$dataNodeBaseEndpointV1/anchors/$anchorName/list-nodes")