* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
*/
@Override
public void runOnNotification(PDPNotification notification){
+ // reset the BRMSPush data structures
+ bRMSPush.resetDS();
if(notification.getNotificationType().equals(NotificationType.REMOVE)){
removedPolicies(notification.getRemovedPolicies());
}else if(notification.getNotificationType().equals(NotificationType.UPDATE)|| notification.getNotificationType().equals(NotificationType.BOTH)){
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
if (flag)
syncGroupInfo();
}
+
+ public void resetDS(){
+ resetModifiedGroups();
+ controllers = new ArrayList<>();
+ }
private static void resetModifiedGroups() {
modifiedGroups = new HashMap<>();
PEDependency dependency = PolicyUtils.jsonStringToObject(value,
PEDependency.class);
userControllerName = key.replaceFirst("$controller:", "");
+ LOGGER.info("addRule: userControllerName - " + userControllerName + ", dependency: - " + dependency);
addToGroup(userControllerName, dependency);
} catch (Exception e) {
LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while resolving Controller: " + e);
// If the key is not got as parameters set by the user, setting the default value for kSessionName as
// closedLoop
if (kSessionName == null) {
+ LOGGER.info("kSessionName is null, selectedName is : " + selectedName );
if (selectedName == defaultName) {
kSessionName = "closedloop";
} else {
InvocationResult result = null;
String group = entry.getKey();
try {
+ LOGGER.info("PushRules: ModifiedGroups, Key: " + group + ", Value: " + entry.getValue());
InvocationRequest request = new DefaultInvocationRequest();
setVersion(group);
createPom(group);
* ============LICENSE_START=======================================================
* ONAP-PAP-REST
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
Map<String,String> copyMap=new HashMap<>();
copyMap.putAll(brmsParamBody);
- copyMap.put("policyName", policyName.substring(0, policyName.replace(".xml", "").lastIndexOf(".")));
+ copyMap.put("policyName", policyName.substring(0, policyName.replace(".xml", "").lastIndexOf('.')));
copyMap.put("policyScope", policyAdapter.getDomainDir());
copyMap.put("policyVersion",policyAdapter.getHighestVersion().toString());
copyMap.put("unique", ("p"+policyName+UUID.randomUUID().toString()).replaceAll("[^A-Za-z0-9]", ""));
// Saving the Configurations file at server location for config policy.
protected void saveConfigurations(String policyName, String ruleBody) {
- try {
- if (policyName.endsWith(".xml")) {
- policyName = policyName.substring(0,
- policyName.lastIndexOf(".xml"));
- }
- PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt");
+ if (policyName.endsWith(".xml")) {
+ policyName = policyName.substring(0, policyName.lastIndexOf(".xml"));
+ }
+ try (PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt")) {
String expandedBody=expandConfigBody(ruleBody,policyAdapter.getBrmsParamBody());
out.println(expandedBody);
policyAdapter.setJsonBody(expandedBody);
if (flag) {
params.append(line);
}
- if (line.contains("declare PapParams")) {
+ if (line.contains("declare Params")) {
params.append(line);
flag = true;
}
break;
}
}
- String param = params.toString().replace("declare PapParams", "").replace("end", "")
+ String param = params.toString().replace("declare Params", "").replace("end", "")
.replaceAll("\\s+", "");
String[] components = param.split(":");
String caption = "";
if (policyAdapter.getData() != null) {
Map<String,String> ruleAndUIValue= policyAdapter.getBrmsParamBody();
- String tempateValue= ruleAndUIValue.get("templateName");
- String valueFromDictionary= getValueFromDictionary(tempateValue);
+ String templateValue= ruleAndUIValue.get("templateName");
+ String valueFromDictionary= getValueFromDictionary(templateValue);
- //Get the type of the UI Fields.
- Map<String,String> typeOfUIField=findType(valueFromDictionary);
- StringBuilder generatedRule = new StringBuilder();
StringBuilder body = new StringBuilder();
try {
-
- try {
- body.append("/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " +
- "<$%BRMSParamTemplate=" + tempateValue + "%$> \n */ \n");
- body.append(valueFromDictionary + "\n");
- generatedRule.append("rule \"" +policyName.substring(0, policyName.replace(".xml", "").lastIndexOf(".")) +".PapParams\" \n\tsalience 1000 \n\twhen\n\tthen\n\t\tPapParams params = new PapParams();");
-
- //We first read the map data structure(ruleAndUIValue) received from the PAP-ADMIN
- //We ignore if the key is "templateName as we are interested only in the UI fields and its value.
- //We have one more map data structure(typeOfUIField) created by parsing the Drools rule.
- //From the type of the UI field(String/int) we structure whether to put the "" or not.
- for (Map.Entry<String, String> entry : ruleAndUIValue.entrySet()) {
- if(entry.getKey()!="templateName")
- {
- for(Map.Entry<String, String> fieldType:typeOfUIField.entrySet())
- {
- if(fieldType.getKey().equalsIgnoreCase(entry.getKey()))
- {
- String key = entry.getKey().substring(0, 1).toUpperCase() + entry.getKey().substring(1);
- if(fieldType.getValue()=="String")
- {
- //Type is String
- generatedRule.append("\n\t\tparams.set"
- + key + "(\""
- + entry.getValue() + "\");");
- }
- else{
- generatedRule.append("\n\t\tparams.set"
- + key + "("
- + entry.getValue() + ");");
- }
- }
- }
- }
- }
-
- generatedRule.append("\n\t\tinsert(params);\nend");
- LOGGER.info("New rule generated with :" + generatedRule);
- body.append(generatedRule);
- } catch (Exception e) {
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy");
- }
+ body.append("/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " +
+ "<$%BRMSParamTemplate=" + templateValue + "%$> \n");
+ body.append("<%$Values=");
+ for (Map.Entry<String, String> entry : ruleAndUIValue.entrySet()) {
+ String uiKey = entry.getKey();
+ if(!"templateName".equals(uiKey)) {
+ body.append(uiKey+":-:"+entry.getValue()+":|:");
+ }
+ }
+ body.append("$%> \n*/ \n");
+ body.append(valueFromDictionary + "\n");
}
catch (Exception e) {
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy");
+ PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy");
}
saveConfigurations(policyName,body.toString());
template.setUserCreatedBy(userInfo);
String rule = "package com.sample;\n"
+ "import com.sample.DroolsTest.Message;\n"
- + "declare PapParams\n"
+ + "declare Params\n"
+ "samPoll : int\n"
+ "value : String\n"
+ "end\n"
@Test
public void testReadFile() throws IOException {
- String goodRule = "declare PapParams\nparam1 : int\nend\n";
- String badRule = "declare PapParams\nparam1+ : int\nend\n";
+ String goodRule = "declare Params\nparam1 : int\nend\n";
+ String badRule = "declare Params\nparam1+ : int\nend\n";
assertEquals(CreateBRMSRuleTemplate.validateRuleParams(goodRule), true);
assertEquals(CreateBRMSRuleTemplate.validateRuleParams(badRule), false);
}
package org.onap.policy.pap.xacml.rest.components;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.anyString;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
+import java.io.File;
+import java.util.Collections;
@RunWith(PowerMockRunner.class)
-@PrepareForTest(MicroServiceConfigPolicy.class)
public class MicroServicePolicyTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
assertNull(policy.getCorrectPolicyDataObject());
}
+ @PrepareForTest({MicroServiceConfigPolicy.class})
@Test
public void testPrepareToSave() throws Exception {
// Need to mock internal dictionary retrieval
policy.prepareToSave();
assertEquals(policy.isPreparedToSave(), true);
}
-}
\ No newline at end of file
+
+ @Test
+ public void testCreateConstructor1() {
+ CreateNewMicroServiceModel model = new CreateNewMicroServiceModel(null, null, null, null);
+ assertNotNull(model);
+ }
+
+ @PrepareForTest({CreateNewMicroServiceModel.class})
+ @Test
+ public void testCreateModel() throws Exception {
+ // Mock file retrieval
+ File testFile = new File("testFile");
+ File[] testList = new File[1];
+ testList[0] = testFile;
+ File impl = Mockito.mock(File.class);
+ PowerMockito.whenNew(File.class).withAnyArguments().thenReturn(impl);
+ when(impl.listFiles()).thenReturn(testList);
+ when(impl.isFile()).thenReturn(true);
+
+ // Mock internal dictionary retrieval
+ CommonClassDaoImpl daoImpl = Mockito.mock(CommonClassDaoImpl.class);
+ PowerMockito.whenNew(CommonClassDaoImpl.class).withNoArguments().thenReturn(daoImpl);
+ when(daoImpl.getDataById(any(), anyString(), anyString())).thenReturn(Collections.emptyList());
+
+ // Test create methods
+ String testFileName = "testFile.zip";
+ String testVal = "testVal";
+ CreateNewMicroServiceModel model = new CreateNewMicroServiceModel(testFileName, testVal, testVal, testVal, testVal);
+ model.addValuesToNewModel();
+ model.saveImportService();
+ }
+}
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-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.pap.xacml.rest.handler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.when;
+import static org.mockito.Matchers.any;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.onap.policy.common.logging.ONAPLoggingContext;
+import org.onap.policy.pap.xacml.rest.XACMLPapServlet;
+import org.onap.policy.pap.xacml.rest.elk.client.PolicyElasticSearchController;
+import org.onap.policy.rest.jpa.PolicyEntity;
+import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
+import org.onap.policy.xacml.std.pap.StdEngine;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import com.mockrunner.mock.web.MockHttpServletRequest;
+import com.mockrunner.mock.web.MockHttpServletResponse;
+import java.sql.Connection;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.EntityManager;
+
+@RunWith(PowerMockRunner.class)
+public class DeleteHandlerTest {
+ @Test
+ public void testGets() {
+ DeleteHandler handler = new DeleteHandler();
+ assertNotNull(handler);
+ assertEquals(handler.preSafetyCheck(null), true);
+ assertNull(handler.getDeletedGroup());
+ }
+
+ @Test
+ public void testGetInstance() {
+ DeleteHandler handler = DeleteHandler.getInstance();
+ assertNotNull(handler);
+ }
+
+ @PrepareForTest({DeleteHandler.class, XACMLPapServlet.class})
+ @Test
+ public void testDeletes() throws Exception {
+ // Mock request
+ DeleteHandler handler = new DeleteHandler();
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setBodyContent("{\n\"PAPPolicyType\": \"StdPAPPolicy\"\n}\n");
+
+ // Mock servlet
+ PAPPolicyEngine engine = Mockito.mock(StdEngine.class);
+ PowerMockito.mockStatic(XACMLPapServlet.class);
+ when(XACMLPapServlet.getPAPEngine()).thenReturn(engine);
+ when(engine.getGroup(any())).thenReturn(null);
+
+ // Mock elastic search
+ PolicyElasticSearchController controller = Mockito.mock(PolicyElasticSearchController.class);
+ PowerMockito.whenNew(PolicyElasticSearchController.class).withNoArguments().thenReturn(controller);
+
+ // Mock entity manager
+ EntityManager em = Mockito.mock(EntityManager.class);
+
+ // Test deletion from PAP
+ MockHttpServletResponse response = new MockHttpServletResponse();
+ try {
+ handler.doAPIDeleteFromPAP(request, response);
+ }
+ catch (Exception ex) {
+ fail("Not expecting an exception: " + ex);
+ }
+
+ // Test deletion from PDP
+ ONAPLoggingContext loggingContext = Mockito.mock(ONAPLoggingContext.class);
+ try {
+ handler.doAPIDeleteFromPDP(request, response, loggingContext);
+ }
+ catch (Exception ex) {
+ fail("Not expecting an exception: " + ex);
+ }
+
+ // Test delete entity
+ PolicyEntity policyEntity = new PolicyEntity();
+ policyEntity.setPolicyName("testVal");
+ String result = DeleteHandler.deletePolicyEntityData(em, policyEntity);
+ assertEquals(result, "success");
+
+ // Test check entity
+ Connection con = null;
+ List<?> peResult = Collections.emptyList();
+ assertEquals(DeleteHandler.checkPolicyGroupEntity(con, peResult), false);
+ }
+}
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PDP-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.pdp.rest.api.utils.test;
+
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+
+import org.json.JSONObject;
+import org.junit.Test;
+import org.onap.policy.pdp.rest.api.utils.PolicyApiUtils;
+
+public class PolicyApiUtilsTest {
+
+ @Test
+ public void testValidateDirectoryJsonFields() {
+
+ String dictonaryAction = "Action";
+
+
+ JsonObject jsonObjAttrGood = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+
+ JsonObject jsonObjAttrNull = Json.createObjectBuilder().add("attributeName", "").build();
+ JsonObject jsonObjAttrBad = Json.createObjectBuilder().add("attributeName", "succ ess").build();
+ JsonObject jsonObjectMissingAttrName = Json.createObjectBuilder().add("foo", "bar").build();
+
+
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGood, dictonaryAction).contains("success"));
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrNull, dictonaryAction).contains("No Attribute Name provided"));
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrBad, dictonaryAction).contains("Invalid Attribute Name"));
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjectMissingAttrName, dictonaryAction).contains("Missing attributeName"));
+
+ /* "type" parameter variations. */
+ JsonObject jsonObjAttrGoodTemp = jsonObjAttrGood;
+
+ //null/empty type
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("No Type provided"));
+
+ //missing type
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing type key in the dictionaryJson parameter"));
+
+ //invalid type
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "INVALID")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Invalid Type value"));
+
+ /* "method" parameter variations. */
+ jsonObjAttrGoodTemp = jsonObjAttrGood;
+
+ //null/empty method
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("No Method provided"));
+
+ //missing method
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing method key in the dictionaryJson parameter"));
+
+ //valid method
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("success"));
+
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "PUT")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("success"));
+
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "POST")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("success"));
+
+
+ //invalid method
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "INVALID")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Invalid Method value"));
+
+
+ /* url parameter variations */
+ jsonObjAttrGoodTemp = jsonObjAttrGood;
+
+ //null/empty url
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("No URL provided"));
+
+ //missing url
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("body", "foobody")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing url key in the dictionaryJson parameter"));
+
+ /* body parameter variations */
+ jsonObjAttrGoodTemp = jsonObjAttrGood;
+
+ //null body
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("No Body provided"));
+
+ //missing body
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .build();
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing body key in the dictionaryJson parameter"));
+
+
+ /*headers parameter variations*/
+ JsonObject jsonObjOption;
+ JsonObject jsonObjNumber;
+ JsonArray jsonArrayHeaders;
+
+ //missing number headers
+ jsonObjOption = Json.createObjectBuilder().add("option","foobar").build();
+ //jsonObjNumber = Json.createObjectBuilder().add("number","foobar").build();
+
+ jsonArrayHeaders = Json.createArrayBuilder()
+ .add(jsonObjOption)
+ //.add(jsonObjNumber)
+ .build();
+
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .add("headers", jsonArrayHeaders)
+ .build();
+
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing number key in the headers list of the dictionaryJson parameter."));
+
+ //missing options headers
+ jsonObjOption = Json.createObjectBuilder().add("option","foobar").build();
+ jsonObjNumber = Json.createObjectBuilder().add("number","foobar").build();
+
+ jsonArrayHeaders = Json.createArrayBuilder()
+ //.add(jsonObjOption)
+ .add(jsonObjNumber)
+ .build();
+
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .add("headers", jsonArrayHeaders)
+ .build();
+
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing option key in the headers list of the dictionaryJson parameter."));
+
+ //null option
+ jsonObjOption = Json.createObjectBuilder().add("option","").build();
+ jsonObjNumber = Json.createObjectBuilder().add("number","foobar").build();
+
+ jsonArrayHeaders = Json.createArrayBuilder()
+ .add(jsonObjOption)
+ .add(jsonObjNumber)
+ .build();
+
+ jsonObjAttrGoodTemp = Json.createObjectBuilder().add("attributeName", "success")
+ .add("type", "REST")
+ .add("method", "GET")
+ .add("url", "http://foobar.com")
+ .add("body", "foobody")
+ .add("headers", jsonArrayHeaders)
+ .build();
+
+ assertTrue(PolicyApiUtils.validateDictionaryJsonFields(jsonObjAttrGoodTemp, dictonaryAction).contains("Missing required Option value"));
+
+ //null number can't be tested
+
+ }
+
+ @Test
+ public void testStringToJsonObject() {
+ String jsonString = "{\"foo\":\"bar\"}";
+ JsonObject obj = PolicyApiUtils.stringToJsonObject(jsonString);
+ assertTrue(obj.get("foo").toString().equals("\"bar\""));
+ }
+
+ @Test
+ public void testIsNumeric() {
+ assertFalse(PolicyApiUtils.isNumeric("notNumeric"));
+ assertTrue(PolicyApiUtils.isNumeric("2"));
+ }
+
+
+}
SimpleBindings peParams = new SimpleBindings();
peParams.put("oldPolicySplit_1", oldPolicySplit[1]);
peParams.put("oldPolicySplit_0", oldPolicySplit[0]);
- queryData = controller.getDataByQuery(policyEntityquery, peParams);
+ if(PolicyController.isjUnit()){
+ queryData = controller.getDataByQuery(policyEntityquery, null);
+ }else{
+ queryData = controller.getDataByQuery(policyEntityquery, peParams);
+ }
if(!queryData.isEmpty()){
entity = (PolicyEntity) queryData.get(0);
}
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
if (flag) {
params.append(line);
}
- if (line.contains("declare PapParams")) {
+ if (line.contains("declare Params")) {
params.append(line);
flag = true;
}
break;
}
}
- params = new StringBuilder(params.toString().replace("declare PapParams", "").replace("end", "").replaceAll("\\s+", ""));
+ params = new StringBuilder(params.toString().replace("declare Params", "").replace("end", "").replaceAll("\\s+", ""));
String[] components = params.toString().split(":");
String caption = "";
for (int i = 0; i < components.length; i++) {
value = value.replace(brmsTemplateVlaue, "");
policyAdapter.setRuleName(value);
}
+ if(line.contains("<%$Values=")) {
+ String value = line.substring(line.indexOf("<%$"), line.indexOf("$%>"));
+ value = value.replaceAll("<%\\$Values=", "");
+ for( String keyValue : value.split(":\\|:")) {
+ String[] pair = keyValue.split(":-:");
+ if (pair != null && pair.length > 0) {
+ dynamicLayoutMap.put(pair[0], (pair.length > 1) ? pair[1] : "");
+ }
+ }
+ return;
+ }
if (line.startsWith("/*")) {
comment = true;
continue;
if (flag) {
params.append(line);
}
- if (line.contains("rule") && line.contains(".PapParams\"")) {
+ if (line.contains("rule") && line.contains(".Params\"")) {
params.append(line);
flag = true;
}
break;
}
}
- params = new StringBuilder(params.substring(params.indexOf(".PapParams\"")+ 11));
- params = new StringBuilder(params.toString().replaceAll("\\s+", "").replace("salience1000whenthenPapParamsparams=newPapParams();","")
+ params = new StringBuilder(params.substring(params.indexOf(".Params\"")+ 11));
+ params = new StringBuilder(params.toString().replaceAll("\\s+", "").replace("salience1000whenthenParamsparams=newParams();","")
.replace("insert(params);end", "")
.replace("params.set", ""));
String[] components = params.toString().split("\\);");
}
String body;
+ body = findRule((String) policyData.getRuleName()) + "\n";
+ StringBuilder generatedMetadata = new StringBuilder();
+ generatedMetadata.append("/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " +
+ brmsTemplateVlaue + policyData.getRuleName() + "%$> \n */ \n");
- body = "/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " +
- brmsTemplateVlaue + policyData.getRuleName() + "%$> \n */ \n";
- body = body + findRule((String) policyData.getRuleName()) + "\n";
- StringBuilder generatedRule = new StringBuilder();
- generatedRule.append("rule \""+ policyData.getDomainDir().replace("\\", ".") +".Config_BRMS_Param_" + policyData.getPolicyName()+".PapParams\" \n\tsalience 1000 \n\twhen\n\tthen\n\t\tPapParams params = new PapParams();");
-
- if(policyData.getRuleData().size() > 0){
- for(Object keyValue: policyData.getRuleData().keySet()){
- String key = keyValue.toString().substring(0, 1).toUpperCase() + keyValue.toString().substring(1);
- if (string.equals(keyValue)) {
- generatedRule.append("\n\t\tparams.set"
- + key + "(\""
- + policyData.getRuleData().get(keyValue).toString() + "\");");
- } else {
- generatedRule.append("\n\t\tparams.set"
- + key + "("
- + policyData.getRuleData().get(keyValue).toString() + ");");
- }
- }
+ if(policyData.getDynamicLayoutMap().size() > 0){
+ generatedMetadata.append("/* <%$Values=");
+ for (Entry<?, ?> entry : policyData.getRuleData().entrySet()) {
+ String uiKey = (String) entry.getKey();
+ if(!"templateName".equals(uiKey)) {
+ generatedMetadata.append(uiKey+":-:"+entry.getValue()+":|:");
+ }
+ }
+ generatedMetadata.append("$%> \n*/ \n");
}
- generatedRule.append("\n\t\tinsert(params);\nend");
- policyLogger.info("New rule generated with :" + generatedRule.toString());
- body = body + generatedRule.toString();
+ policyLogger.info("Metadata generated with :" + generatedMetadata.toString());
+ body = generatedMetadata.toString() + body;
// Expand the body.
Map<String,String> copyMap=new HashMap<>();
copyMap.putAll((Map<? extends String, ? extends String>) policyData.getRuleData());
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.IOUtils;
import org.onap.policy.rest.jpa.UserInfo;
import org.onap.portalsdk.core.domain.User;
import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.mock.web.MockHttpServletResponse;
public class PolicyManagerServletTest extends Mockito{
private static List<Object> policyEditorScopes;
private static List<Object> policyVersion;
private static CommonClassDao commonClassDao;
+ private ConfigurationDataEntity configurationEntity;
private HttpServletRequest request;
- private HttpServletResponse response;
+ private MockHttpServletResponse response;
@Before
public void setUp() throws Exception{
logger.info("setUp: Entering");
request = mock(HttpServletRequest.class);
- response = mock(HttpServletResponse.class);
+ response = new MockHttpServletResponse();
PolicyController.setjUnit(true);
UserInfo userinfo = new UserInfo();
entity.setPolicyName("Config_SampleTest.1.xml");
entity.setPolicyData(policyContent);
entity.setScope("com");
- ConfigurationDataEntity configurationEntity = new ConfigurationDataEntity();
+ configurationEntity = new ConfigurationDataEntity();
configurationEntity.setConfigBody("Sample Test");
configurationEntity.setConfigType("OTHER");
configurationEntity.setConfigurationName("com.Config_SampleTest1206.1.txt");
user.setOrgUserId("Test");
Mockito.when(mockSession.getAttribute(SystemProperties.getProperty("user_attribute_name"))).thenReturn(user);
Mockito.when(request.getSession(false)).thenReturn(mockSession);
+ commonClassDao = mock(CommonClassDao.class);
}
}
}
}
+
+ @Test
+ public void testAddScope(){
+ PolicyManagerServlet servlet = new PolicyManagerServlet();
+ PolicyController controller = mock(PolicyController.class);
+ List<BufferedReader> readers = new ArrayList<>();
+ readers.add(new BufferedReader(new StringReader("{params: { mode: 'ADDFOLDER', path: '/', name: 'Test'}}")));
+ readers.add(new BufferedReader(new StringReader("{params: { mode: 'ADDFOLDER', path: '/', name: 'Test*&'}}")));
+ readers.add(new BufferedReader(new StringReader("{params: { mode: 'ADDFOLDER', path: '/Test', subScopename: 'Test1'}}")));
+ for(int i=0; i<readers.size(); i++){
+ try {
+ when(request.getReader()).thenReturn(readers.get(i));
+ PolicyManagerServlet.setPolicyController(controller);
+ servlet.doPost(request, response);
+ assertTrue(response.getContentAsString() != null && response.getContentAsString().contains("success"));
+ } catch (Exception e1) {
+ logger.error("Exception Occured"+e1);
+ fail();
+ }
+ }
+ }
+
+ @Test
+ public void testClone(){
+ PolicyManagerServlet servlet = new PolicyManagerServlet();
+ PolicyController controller = mock(PolicyController.class);
+ List<BufferedReader> readers = new ArrayList<>();
+ when(controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", "com.Config_SampleTest1206.1.txt")).thenReturn(configurationEntity);
+ when(controller.getDataByQuery("FROM PolicyEntity where policyName = :oldPolicySplit_1 and scope = :oldPolicySplit_0", null)).thenReturn(basePolicyData);
+ readers.add(new BufferedReader(new StringReader("{params: { mode: 'COPY', path: 'com.Config_test.1.xml', newPath: 'com.Config_testClone.1.xml'}}")));
+ for(int i=0; i<readers.size(); i++){
+ try {
+ when(request.getReader()).thenReturn(readers.get(i));
+ PolicyManagerServlet.setPolicyController(controller);
+ servlet.doPost(request, response);
+ assertTrue(response.getContentAsString() != null && response.getContentAsString().contains("success"));
+ } catch (Exception e1) {
+ logger.error("Exception Occured"+e1);
+ fail();
+ }
+ }
+ }
+
+ @Test
+ public void testRename(){
+ PolicyManagerServlet servlet = new PolicyManagerServlet();
+ PolicyController controller = mock(PolicyController.class);
+ List<BufferedReader> readers = new ArrayList<>();
+ when(controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", "com.Config_SampleTest1206.1.txt")).thenReturn(configurationEntity);
+ when(controller.getDataByQuery("FROM PolicyEntity where policyName = :oldPolicySplit_1 and scope = :oldPolicySplit_0", null)).thenReturn(basePolicyData);
+ readers.add(new BufferedReader(new StringReader("{params: { mode: 'RENAME', path: 'com.Config_test.1.xml', newPath: 'com.Config_testClone.1.xml'}}")));
+ for(int i=0; i<readers.size(); i++){
+ try {
+ when(request.getReader()).thenReturn(readers.get(i));
+ PolicyManagerServlet.setPolicyController(controller);
+ servlet.doPost(request, response);
+ assertTrue(response.getContentAsString() != null && response.getContentAsString().contains("success"));
+ } catch (Exception e1) {
+ logger.error("Exception Occured"+e1);
+ fail();
+ }
+ }
+ }
+
+ @Test
+ public void testRenameScope(){
+ PolicyManagerServlet servlet = new PolicyManagerServlet();
+ PolicyController controller = mock(PolicyController.class);
+ List<BufferedReader> readers = new ArrayList<>();
+ readers.add(new BufferedReader(new StringReader("{params: { mode: 'RENAME', path: 'com', newPath: 'Test'}}")));
+ for(int i=0; i<readers.size(); i++){
+ try {
+ when(request.getReader()).thenReturn(readers.get(i));
+ PolicyManagerServlet.setPolicyController(controller);
+ servlet.doPost(request, response);
+ assertTrue(response.getContentAsString() != null && response.getContentAsString().contains("success"));
+ } catch (Exception e1) {
+ logger.error("Exception Occured"+e1);
+ fail();
+ }
+ }
+ }
}
//
// These parameters are required to build the runtime policy
//
-declare PapParams
+declare Params
closedLoopControlName : String
actor : String
aaiURL : String
package com.sample
import com.sample.DroolsTest.Message;
// Declare the Parameters here.
-declare PapParams
+declare Params
samPoll : int
value : String
end
* ============LICENSE_START=======================================================
* PolicyEngineAPI
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
import java.util.Collection;
import java.util.Map;
+import java.util.Properties;
import java.util.UUID;
import javax.json.JsonObject;
* @version 2.0
*/
public class PolicyEngine{
- private String propertyFilePath = null;
private final StdPolicyEngine stdPolicyEngine;
private NotificationScheme scheme = null;
private NotificationHandler handler = null;
+ /**
+ * PolicyEngine Constructor with <code>Properties</code> structure
+ *
+ * @param properties the <code>Properties</code> structure containing the Policy engine parameters
+ * @throws PolicyEngineException PolicyEngine Exception
+ */
+ public PolicyEngine(final Properties properties) throws PolicyEngineException {
+ this.stdPolicyEngine= new StdPolicyEngine(properties, (String)null);
+ }
+
/**
* PolicyEngine Constructor with <code>String</code> format of propertiesFilePathname
*
* @throws PolicyEngineException PolicyEngine Exception
*/
public PolicyEngine(final String propertiesFilePathname) throws PolicyEngineException {
- this.propertyFilePath = propertiesFilePathname ;
- this.stdPolicyEngine= new StdPolicyEngine(this.propertyFilePath, (String)null);
+ this.stdPolicyEngine= new StdPolicyEngine(propertiesFilePathname, (String)null);
}
/**
- * PolicyEngine Constructor with <code>String</code> format of propertiesFilePathname
+ * PolicyEngine Constructor with <code>Properties</code> structure
*
- * @param propertiesFilePathname the <code>String</code> format of the propertiesFilePathname
+ * @param properties the <code>Properties</code> structure containing the Policy engine parameters
* @param clientKey depicts String format of Password/ Client_Key.
* @throws PolicyEngineException PolicyEngine Exception
*/
- public PolicyEngine(final String propertiesFilePathname, final String clientKey) throws PolicyEngineException {
- this.propertyFilePath = propertiesFilePathname ;
- this.stdPolicyEngine= new StdPolicyEngine(this.propertyFilePath, clientKey);
+ public PolicyEngine(final Properties properties, final String clientKey) throws PolicyEngineException {
+ this.stdPolicyEngine= new StdPolicyEngine(properties, clientKey);
}
+ /**
+ * PolicyEngine Constructor with <code>String</code> format of propertiesFilePathname
+ *
+ * @param propertiesFilePathname the <code>String</code> format of the propertiesFilePathname
+ * @param clientKey depicts String format of Password/ Client_Key.
+ * @throws PolicyEngineException PolicyEngine Exception
+ */
+ public PolicyEngine(final String propertiesFilePathname, final String clientKey) throws PolicyEngineException {
+ this.stdPolicyEngine= new StdPolicyEngine(propertiesFilePathname, clientKey);
+ }
+
/**
* PolicyEngine Constructor with <code>String</code> format of PropertiesFilePathname and <code>NotificationScheme</code>
*
* @throws PolicyEngineException PolicyEngine Exception
*/
public PolicyEngine(final String propertiesFilePathname, final NotificationScheme scheme) throws PolicyEngineException{
- this.propertyFilePath = propertiesFilePathname;
this.scheme = scheme;
- this.stdPolicyEngine = new StdPolicyEngine(this.propertyFilePath, this.scheme);
+ this.stdPolicyEngine = new StdPolicyEngine(propertiesFilePathname, this.scheme);
}
/**
* @throws PolicyEngineException PolicyEngine Exception
*/
public PolicyEngine(final String propertiesFilePathname, final NotificationScheme scheme, final NotificationHandler handler) throws PolicyEngineException {
- this.propertyFilePath = propertiesFilePathname ;
this.scheme = scheme;
this.handler = handler;
- this.stdPolicyEngine= new StdPolicyEngine(this.propertyFilePath,this.scheme,this.handler);
+ this.stdPolicyEngine= new StdPolicyEngine(propertiesFilePathname,this.scheme,this.handler);
}
/**
* ============LICENSE_START=======================================================
* PolicyEngineAPI
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
AutoClientEnd.url = url;
if (scheme == null || handler == null ||
- ! (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS) &&
+ ! (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS) ||
scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS) ) ||
AutoClientEnd.client != null) {
return;
* ============LICENSE_START=======================================================
* PolicyEngineAPI
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
public StdPolicyEngine(final String propertyFilePath, final String clientKey) throws PolicyEngineException {
setProperty(propertyFilePath, clientKey);
}
+
+ /*
+ * Taking the Property structure even if it null.
+ */
+ public StdPolicyEngine(final Properties properties, final String clientKey) throws PolicyEngineException {
+ setProperty(properties, clientKey);
+ }
/*
* Taking the Notification Constructor.
throw new PolicyEngineException(
XACMLErrorConstants.ERROR_DATA_ISSUE + "Error NO PropertyFile Path provided");
}
-
final Properties prop = getProperties(propertyFilePath);
+ setProperty(prop,clientKey);
+ }
+
+ private void setProperty(final Properties properties, String clientKey) throws PolicyEngineException {
+ if (properties == null) {
+ throw new PolicyEngineException(
+ XACMLErrorConstants.ERROR_DATA_ISSUE + "NO properties provided, the value is NULL");
+ }
+
// UEB and DMAAP Settings
- final String notificationTypeValue = prop.getProperty(NOTIFICATION_TYPE_PROP_NAME);
- final String serverList = prop.getProperty(NOTIFICATION_SERVERS_PROP_NAME);
- topic = prop.getProperty(NOTIFICATION_TOPIC_PROP_NAME);
- apiKey = prop.getProperty(UEB_API_KEY_PROP_NAME);
- apiSecret = prop.getProperty(UEB_API_SECRET_PROP_NAME);
+ final String notificationTypeValue = properties.getProperty(NOTIFICATION_TYPE_PROP_NAME);
+ final String serverList = properties.getProperty(NOTIFICATION_SERVERS_PROP_NAME);
+ topic = properties.getProperty(NOTIFICATION_TOPIC_PROP_NAME);
+ apiKey = properties.getProperty(UEB_API_KEY_PROP_NAME);
+ apiSecret = properties.getProperty(UEB_API_SECRET_PROP_NAME);
setNotificationType(notificationTypeValue, DEFAULT_NOTIFICATION);
}
// Client ID Authorization Settings.
- final String clientID = prop.getProperty(CLIENT_ID_PROP_NAME);
+ final String clientID = properties.getProperty(CLIENT_ID_PROP_NAME);
if (clientKey == null) {
- clientKey = getClientKeyFromProperties(prop);
+ clientKey = getClientKeyFromProperties(properties);
}
if (clientID == null || clientKey == null || clientID.isEmpty() || clientKey.isEmpty()) {
LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS
setClientId(clientID.trim());
setClientKey(clientKey.trim());
}
- setEnvironment(prop);
+ setEnvironment(properties);
// Initializing the values.
init();
- readPdpProperites(prop);
+ readPdpProperites(properties);
// Get JUNIT property from properties file when running tests
- checkJunit(prop);
+ checkJunit(properties);
}
private void readPdpProperites(final Properties prop) throws PolicyEngineException {
assertEquals(Arrays.asList(UEB, DMAAP), policyEngine.getNotificationType());
assertEquals(Arrays.asList(SERVER_NAME, SERVER_NAME), policyEngine.getNotificationURLList());
}
+
+ @Test
+ public void testStdPolicyEngineWithPropertiesInitialize_noException() throws Exception {
+ final StdPolicyEngine policyEngine = new StdPolicyEngine(getDefaultProperties(), (String) null);
+ policyEngine.setScheme(NotificationScheme.MANUAL_NOTIFICATIONS);
+ assertEquals("TEST", StdPolicyEngine.getEnvironment());
+ assertEquals("http://localhost:8092/pdp/", StdPolicyEngine.getPDPURL());
+ assertEquals(Arrays.asList(UEB, DMAAP), policyEngine.getNotificationType());
+ assertEquals(Arrays.asList(SERVER_NAME, SERVER_NAME), policyEngine.getNotificationURLList());
+ }
@Test
public void testStdPolicyEngineInitializeWithSingleServerName_noException() throws Exception {
@Test(expected = PolicyEngineException.class)
public void testStdPolicyEngineInitialize_NullArguments_Exception() throws Exception {
- new StdPolicyEngine(null, (String) null);
+ new StdPolicyEngine((String)null, (String) null);
+ }
+
+ @Test(expected = PolicyEngineException.class)
+ public void testStdPolicyEngineWithPropertiesInitialize_NullArguments_Exception() throws Exception {
+ new StdPolicyEngine((Properties)null, (String) null);
}
@Test(expected = PolicyEngineException.class)
* ============LICENSE_START=======================================================
* archetype-closed-loop-demo-rules
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
//
// These parameters are required to build the runtime policy
//
-declare PapParams
+declare Params
closedLoopControlName : String
actor : String
aaiURL : String
* ============LICENSE_START=======================================================
* PolicyEngineUtils
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
public void testBRMSValidate(){
String rule = "package com.sample;\n"
+ "import com.sample.DroolsTest.Message;\n"
- + "declare PapParams\n"
+ + "declare Params\n"
+ "samPoll : int\n"
+ "value : String\n"
+ "end\n"