aboutsummaryrefslogtreecommitdiffstats
path: root/ONAP-REST/src
diff options
context:
space:
mode:
authorMichael Mokry <mm117s@att.com>2018-02-05 09:48:59 -0600
committerMichael Mokry <mm117s@att.com>2018-02-08 07:45:06 -0600
commitc5d97e8a9a6bea71f3be329a2e44bdbe5fe50882 (patch)
tree8db57c1406d2479e7624a2778dd5d518e874f59c /ONAP-REST/src
parentc9039d15e8a84a9304fba40283a332a2a65ef854 (diff)
MS Model Input Validation
- Provides validation for MS policy input content body that matches the GUI validations when create/update MS policy from API - Added changes to satisfy review comments and updated copywright headers for modified and new files Change-Id: I02bfa639bffb48520badd0e4fa34eb36418547ae Issue-ID: POLICY-377 Signed-off-by: Michael Mokry <mm117s@att.com>
Diffstat (limited to 'ONAP-REST/src')
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java95
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java32
-rw-r--r--ONAP-REST/src/test/java/org/onap/policy/rest/util/PolicyValidationTest.java80
3 files changed, 151 insertions, 56 deletions
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
index 446073d40..47291cf7f 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
@@ -515,7 +515,7 @@ public class PolicyValidation {
if (MICROSERVICES.equals(policyData.getConfigPolicyType())){
if(!Strings.isNullOrEmpty(policyData.getServiceType())){
- modelRequiredFieldsList = new ArrayList<>();
+ modelRequiredFieldsList.clear();
pullJsonKeyPairs((JsonNode) policyData.getPolicyJSON());
String service;
@@ -570,7 +570,7 @@ public class PolicyValidation {
}
} else {
// Validate for configName, location, uuid, and policyScope if no annotations exist for this model
- if(Strings.isNullOrEmpty(policyData.getMsLocation())){
+ if(Strings.isNullOrEmpty(policyData.getLocation())){
responseString.append("<b>Micro Service Model</b>:<i> location is required for this model" + HTML_ITALICS_LNBREAK);
valid = false;
}
@@ -591,51 +591,64 @@ public class PolicyValidation {
}
}
- // get list of required fields from the sub_Attributes of the Model
- if(!Strings.isNullOrEmpty(subAttributes)) {
- JsonObject subAttributesJson = stringToJsonObject(subAttributes);
- findRequiredFields(subAttributesJson);
- }
-
- // get list of required fields from the attributes of the Model
- if (!Strings.isNullOrEmpty(modelAttributes)) {
- Map<String, String> modelAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(modelAttributes);
- String json = new ObjectMapper().writeValueAsString(modelAttributesMap);
- findRequiredFields(stringToJsonObject(json));
- }
-
- // get list of required fields from the ref_Attributes of the Model
- if (!Strings.isNullOrEmpty(refAttributes)) {
- Map<String, String> refAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(refAttributes);
- String json = new ObjectMapper().writeValueAsString(refAttributesMap);
- findRequiredFields(stringToJsonObject(json));
- }
-
- // Validate Required Fields in the Micro Service Model
- if (modelRequiredFieldsList!=null || !modelRequiredFieldsList.isEmpty()) {
- // create jsonRequestMap with all json keys and values from request
- JsonNode rootNode = (JsonNode) policyData.getPolicyJSON();
- pullModelJsonKeyPairs(rootNode);
+ // If request comes from the API we need to validate required fields in the Micro Service Model
+ // GUI request are already validated from the SDK-APP
+ if("API".equals(policyData.getApiflag())){
+ // get list of required fields from the sub_Attributes of the Model
+ if(!Strings.isNullOrEmpty(subAttributes)) {
+ JsonObject subAttributesJson = stringToJsonObject(subAttributes);
+ findRequiredFields(subAttributesJson);
+ }
+
+ // get list of required fields from the attributes of the Model
+ if (!Strings.isNullOrEmpty(modelAttributes)) {
+ Map<String, String> modelAttributesMap = null;
+ if (",".equals(modelAttributes.substring(modelAttributes.length()-1))) {
+ String attributeString = modelAttributes.substring(0, modelAttributes.length()-1);
+ modelAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(attributeString);
+ } else {
+ modelAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(modelAttributes);
+ }
+ String json = new ObjectMapper().writeValueAsString(modelAttributesMap);
+ findRequiredFields(stringToJsonObject(json));
+ }
- // validate if the requiredFields are in the request
- for(String requiredField : modelRequiredFieldsList) {
- if (jsonRequestMap.containsKey(requiredField)) {
- String value = jsonRequestMap.get(requiredField);
- if(Strings.isNullOrEmpty(jsonRequestMap.get(requiredField)) ||
- "\"\"".equals(value) ||
- "".equals(jsonRequestMap.get(requiredField))){
+ // get list of required fields from the ref_Attributes of the Model
+ if (!Strings.isNullOrEmpty(refAttributes)) {
+ Map<String, String> refAttributesMap = null;
+ if (",".equals(refAttributes.substring(refAttributes.length()-1))) {
+ String attributesString = refAttributes.substring(0, refAttributes.length()-1);
+ refAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(attributesString);
+ } else {
+ refAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(modelAttributes);
+ }
+ String json = new ObjectMapper().writeValueAsString(refAttributesMap);
+ findRequiredFields(stringToJsonObject(json));
+ }
+
+ if (modelRequiredFieldsList!=null || !modelRequiredFieldsList.isEmpty()) {
+ // create jsonRequestMap with all json keys and values from request
+ JsonNode rootNode = (JsonNode) policyData.getPolicyJSON();
+ jsonRequestMap.clear();
+ pullModelJsonKeyPairs(rootNode);
+
+ // validate if the requiredFields are in the request
+ for(String requiredField : modelRequiredFieldsList) {
+ if (jsonRequestMap.containsKey(requiredField)) {
+ String value = jsonRequestMap.get(requiredField);
+ if(Strings.isNullOrEmpty(jsonRequestMap.get(requiredField)) ||
+ "\"\"".equals(value) ||
+ "".equals(jsonRequestMap.get(requiredField))){
+ responseString.append("<b>Micro Service Model</b>:<i> " + requiredField + " is required" + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+ } else {
responseString.append("<b>Micro Service Model</b>:<i> " + requiredField + " is required" + HTML_ITALICS_LNBREAK);
valid = false;
}
- } else {
- responseString.append("<b>Micro Service Model</b>:<i> " + requiredField + " is required" + HTML_ITALICS_LNBREAK);
- valid = false;
}
}
- }
-
-
-
+ }
} else {
responseString.append("<b>Micro Service Model</b>:<i> Invalid Model. The model name, " + service +
" of version, " + version + " was not found in the dictionary" + HTML_ITALICS_LNBREAK);
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java
index f19773964..76584e7c7 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java
@@ -52,6 +52,9 @@ public class PolicyValidationRequestWrapper {
private static final Logger LOGGER = FlexLogger.getLogger(PolicyValidationRequestWrapper.class);
public static final String CONFIG_NAME="configName";
+ public static final String INVALIDJSON = " improper JSON format: ";
+ public static final String ONAPNAME = "onapname";
+ public static final String SERVICETYPE_POLICY_NAME = "serviceTypePolicyName";
public PolicyRestAdapter populateRequestParameters(HttpServletRequest request) {
@@ -107,6 +110,7 @@ public class PolicyValidationRequestWrapper {
policyData.setRiskLevel(parameters.getRiskLevel());//Safe parameters Attributes
policyData.setGuard(String.valueOf(parameters.getGuard()));//Safe parameters Attributes
policyData.setTtlDate(convertDate(parameters.getTtlDate()));//Safe parameters Attributes
+ policyData.setApiflag("API");
//Some policies require jsonObject conversion from String for configBody (i.e. MicroService and Firewall)
JsonObject json = null;
@@ -115,7 +119,7 @@ public class PolicyValidationRequestWrapper {
json = stringToJsonObject(parameters.getConfigBody());
}
} catch(JsonException| IllegalStateException e){
- String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ " improper JSON object : " + parameters.getConfigBody();
+ String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ INVALIDJSON + parameters.getConfigBody();
LOGGER.error(message, e);
return null;
}
@@ -284,7 +288,7 @@ public class PolicyValidationRequestWrapper {
try {
policyJSON = mapper.readTree(content);
} catch (IOException e) {
- String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ " improper JSON object : " + parameters.getConfigBody();
+ String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ INVALIDJSON + parameters.getConfigBody();
LOGGER.error(message, e);
return null;
}
@@ -300,7 +304,7 @@ public class PolicyValidationRequestWrapper {
}
if (json.containsKey("location")){
String msLocation = json.get("location").toString().replace("\"", "");
- policyData.setMsLocation(msLocation);
+ policyData.setLocation(msLocation);
}
if (json.containsKey(CONFIG_NAME)){
String configName = json.get(CONFIG_NAME).toString().replace("\"", "");
@@ -331,7 +335,7 @@ public class PolicyValidationRequestWrapper {
policyData.setGuard(guard);
}
} else {
- String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ " improper JSON object : " + parameters.getConfigBody();
+ String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ INVALIDJSON + parameters.getConfigBody();
LOGGER.error(message);
return null;
}
@@ -339,12 +343,11 @@ public class PolicyValidationRequestWrapper {
} else if("Fault".equals(parameters.getPolicyConfigType().toString())){
policyData.setConfigPolicyType("ClosedLoop_Fault");
- policyData.setApiflag("API");
if(json != null){
policyData.setJsonBody(json.toString());
- if (json.get("onapname")!=null){
- String onapName = json.get("onapname").toString().replace("\"", "");
+ if (json.get(ONAPNAME)!=null){
+ String onapName = json.get(ONAPNAME).toString().replace("\"", "");
policyData.setOnapName(onapName);
}
}
@@ -355,14 +358,14 @@ public class PolicyValidationRequestWrapper {
if(json != null){
policyData.setJsonBody(json.toString());
- if (json.get("onapname")!=null){
- String onapName = json.get("onapname").toString().replace("\"", "");
+ if (json.get(ONAPNAME)!=null){
+ String onapName = json.get(ONAPNAME).toString().replace("\"", "");
policyData.setOnapName(onapName);
}
- if (json.get("serviceTypePolicyName")!=null){
- String serviceType = json.get("serviceTypePolicyName").toString().replace("\"", "");
+ if (json.get(SERVICETYPE_POLICY_NAME)!=null){
+ String serviceType = json.get(SERVICETYPE_POLICY_NAME).toString().replace("\"", "");
LinkedHashMap<String, String> serviceTypePolicyName = new LinkedHashMap<>();
- serviceTypePolicyName.put("serviceTypePolicyName", serviceType);
+ serviceTypePolicyName.put(SERVICETYPE_POLICY_NAME, serviceType);
policyData.setServiceTypePolicyName(serviceTypePolicyName);
}
}
@@ -377,11 +380,10 @@ public class PolicyValidationRequestWrapper {
return policyData;
}
-
+
private JsonObject stringToJsonObject(String value) {
-
try(JsonReader jsonReader = Json.createReader(new StringReader(value))){
- return jsonReader.readObject();
+ return jsonReader.readObject();
} catch(JsonException| IllegalStateException e){
LOGGER.info(XACMLErrorConstants.ERROR_DATA_ISSUE+ "Improper JSON format... may or may not cause issues in validating the policy: " + value, e);
return null;
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/util/PolicyValidationTest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/util/PolicyValidationTest.java
new file mode 100644
index 000000000..fb51c2871
--- /dev/null
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/util/PolicyValidationTest.java
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.rest.util;
+
+import static org.junit.Assert.*;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.rest.adapter.PolicyRestAdapter;
+
+public class PolicyValidationTest {
+
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void microServicePolicyTests() throws Exception{
+ PolicyValidation validation = new PolicyValidation();
+ PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
+ PolicyParameters policyParameters = new PolicyParameters();
+
+ policyParameters.setPolicyConfigType(PolicyConfigType.MicroService);
+ policyParameters.setPolicyName("Test.junitPolicy");
+ policyParameters.setPolicyDescription("This is a sample Micro Service policy Create example");
+ policyParameters.setOnapName("DCAE");
+ policyParameters.setPriority("1");
+ String MSjsonString = "{\"service\":\"TOSCA_namingJenny\",\"location\":\"Test DictMSLoc\",\"uuid\":\"testDict DCAEUIID\",\"policyName\":\"testModelValidation\",\"description\":\"test\",\"configName\":\"testDict MSConfName\",\"templateVersion\":\"1607\",\"version\":\"gw12181031\",\"priority\":\"5\",\"policyScope\":\"resource=ResourcetypeVenktest1,service=ServiceName1707,type=Name1707,closedLoopControlName=Retest_retest1\",\"riskType\":\"Test\",\"riskLevel\":\"3\",\"guard\":\"True\",\"content\":{\"police-instance-name\":\"testing\",\"naming-models\":[{\"naming-properties\":[{\"property-value\":\"test\",\"source-endpoint\":\"test\",\"property-name\":\"testPropertyname\",\"increment-sequence\":{\"scope\":\"VNF\",\"start-value\":\"1\",\"length\":\"3\",\"increment\":\"2\"},\"source-system\":\"TOSCA\"}],\"naming-type\":\"testNamingType\",\"naming-recipe\":\"testNamingRecipe\"}]}}";;
+ policyParameters.setConfigBody(MSjsonString);
+ policyParameters.setRequestID(UUID.randomUUID());
+ SimpleDateFormat dateformat3 = new SimpleDateFormat("dd/MM/yyyy");
+ Date date = dateformat3.parse("15/10/2016");
+ policyParameters.setTtlDate(date);
+ policyParameters.setGuard(true);
+ policyParameters.setRiskLevel("5");
+ policyParameters.setRiskType("TEST");
+ policyParameters.setRequestID(UUID.randomUUID());
+
+
+ PolicyRestAdapter policyData = wrapper.populateRequestParameters(policyParameters);
+ StringBuilder responseString = validation.validatePolicy(policyData);
+
+ assertNotSame("success", responseString.toString());
+
+ }
+
+ @Test
+ public final void testEmailValidation() {
+ PolicyValidation validation = new PolicyValidation();
+ String result = validation.emailValidation("testemail@test.com", "SUCCESS");
+ assertEquals("success", result);
+ }
+
+}