Additional tosca method
[clamp.git] / src / test / java / org / onap / clamp / clds / it / PolicyClientItCase.java
index c7f0f28..d0a0fd9 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
  */
 
 package org.onap.clamp.clds.it;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
 
+import javax.xml.transform.TransformerException;
+
+import org.assertj.core.api.Assertions;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq;
+import org.onap.clamp.clds.client.req.policy.GuardPolicyAttributesConstructor;
+import org.onap.clamp.clds.client.req.policy.OperationalPolicyAttributesConstructor;
 import org.onap.clamp.clds.client.req.policy.PolicyClient;
 import org.onap.clamp.clds.client.req.tca.TcaRequestFormatter;
 import org.onap.clamp.clds.config.ClampProperties;
-import org.onap.clamp.clds.config.PolicyConfiguration;
 import org.onap.clamp.clds.model.CldsEvent;
 import org.onap.clamp.clds.model.properties.ModelProperties;
 import org.onap.clamp.clds.model.properties.Policy;
-import org.onap.clamp.clds.model.properties.PolicyChain;
+import org.onap.clamp.clds.model.properties.PolicyItem;
 import org.onap.clamp.clds.model.properties.Tca;
+import org.onap.clamp.clds.transform.XslTransformer;
+import org.onap.clamp.clds.util.JacksonUtils;
+import org.onap.clamp.clds.util.LoggingUtils;
 import org.onap.clamp.clds.util.ResourceFileUtil;
 import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.controlloop.policy.builder.BuilderException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
- * Test Policy API in org.onap.clamp.ClampDesigner.client package - replicate
- * Policy Delegates in tests.
+ * Test Policy API, this uses the emulator written in python that is started
+ * during the tests, It returns the payload sent in the policy queries so that
+ * it can be validated here.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest
 public class PolicyClientItCase {
 
-    @Autowired
-    private PolicyConfiguration policyConfiguration;
     @Autowired
     private ClampProperties refProp;
     @Autowired
-    protected PolicyClient policyClient;
+    private PolicyClient policyClient;
+    @Autowired
+    XslTransformer cldsBpmnTransformer;
+
     String modelProp;
-    String modelBpmnProp;
     String modelName;
     String controlName;
+    String modelBpmnPropJson;
+    ModelProperties prop;
 
-    /**
-     * Initialize Test.
-     */
     @Before
-    public void setUp() throws IOException {
-        modelProp = ResourceFileUtil.getResourceAsString("example/model-properties/policy/modelBpmnProperties.json");
-        modelBpmnProp = ResourceFileUtil.getResourceAsString("example/model-properties/policy/modelBpmn.json");
+    public void setUp() throws IOException, TransformerException {
+        modelProp = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/model-properties.json");
         modelName = "example-model06";
         controlName = "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf";
+        modelBpmnPropJson = cldsBpmnTransformer.doXslTransformToString(
+            ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/tca-template.xml"));
+        prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmnPropJson,
+            modelProp);
     }
 
-    private void createUpdateOperationalPolicy(String actionCd) throws Exception {
-        ModelProperties prop = new ModelProperties(modelName, controlName, actionCd, false, modelBpmnProp, modelProp);
-        Policy policy = prop.getType(Policy.class);
-        if (policy.isFound()) {
-            for (PolicyChain policyChain : policy.getPolicyChains()) {
-                String operationalPolicyRequestUuid = UUID.randomUUID().toString();
-                Map<AttributeType, Map<String, String>> attributes = OperationalPolicyReq.formatAttributes(refProp,
-                        prop, policy.getId(), policyChain);
-                policyClient.sendBrmsPolicy(attributes, prop, operationalPolicyRequestUuid);
-            }
-        }
+    @Test
+    public void testSendGuardPolicy() throws TransformerException, IOException {
+        // Normally there is only one Guard
+        List<PolicyItem> policyItems = GuardPolicyAttributesConstructor
+            .getAllPolicyGuardsFromPolicyChain(prop.getType(Policy.class).getPolicyChains().get(0));
+        PolicyItem policyItem = policyItems.get(0);
+        prop.setCurrentModelElementId(prop.getType(Policy.class).getId());
+        prop.setPolicyUniqueId(prop.getType(Policy.class).getPolicyChains().get(0).getPolicyId());
+        prop.setGuardUniqueId(policyItem.getId());
+        String response = policyClient.sendGuardPolicy(
+            GuardPolicyAttributesConstructor.formatAttributes(prop, policyItem), prop, LoggingUtils.getRequestId(),
+            policyItem);
+        Map<String, Object> mapNodes = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(response), Map.class);
+        Assertions.assertThat(mapNodes).contains(Assertions.entry("policyClass", "Decision"),
+            Assertions.entry("policyName",
+                modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h_0_Guard_6TtHGPq"),
+            Assertions.entry("policyDescription", "from clds"), Assertions.entry("onapName", "PDPD"),
+            Assertions.entry("requestID", LoggingUtils.getRequestId()), Assertions.entry("ruleProvider", "GUARD_YAML"));
+
+        // Check Guard attributes
+        Assertions.assertThat((Map<String, Object>) mapNodes.get("attributes"))
+            .containsKey(AttributeType.MATCHING.name());
+        Assertions.assertThat(
+            (Map<String, Object>) ((Map<String, Object>) mapNodes.get("attributes")).get(AttributeType.MATCHING.name()))
+            .contains(Assertions.entry(GuardPolicyAttributesConstructor.ACTOR, "APPC"),
+                Assertions.entry(GuardPolicyAttributesConstructor.CLNAME, controlName + "_0"),
+                Assertions.entry(GuardPolicyAttributesConstructor.TIME_WINDOW, "10"));
     }
 
-    private void createUpdateTcaPolicy(String actionCd) throws Exception {
-        ModelProperties prop = new ModelProperties(modelName, controlName, actionCd, false, modelBpmnProp, modelProp);
-        Tca tca = prop.getType(Tca.class);
-        if (tca.isFound()) {
-            String tcaPolicyRequestUuid = UUID.randomUUID().toString();
-            String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop);
-            try {
-                policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid);
-            } catch (Exception e) {
-                assertTrue(e.getMessage().contains("Policy send failed: PE500 "));
-            }
-        }
+    @Test
+    public void testSendBrmsPolicy()
+        throws TransformerException, BuilderException, IllegalArgumentException, IOException {
+        Map<AttributeType, Map<String, String>> attributes = OperationalPolicyAttributesConstructor.formatAttributes(
+            refProp, prop, prop.getType(Policy.class).getId(), prop.getType(Policy.class).getPolicyChains().get(0));
+        String response = policyClient.sendBrmsPolicy(attributes, prop, LoggingUtils.getRequestId());
+
+        Map<String, Object> mapNodes = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(response), Map.class);
+        Assertions.assertThat(mapNodes).contains(Assertions.entry("policyClass", "Config"),
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h_0"),
+            Assertions.entry("policyConfigType", PolicyConfigType.BRMS_PARAM.name()),
+            Assertions.entry("requestID", LoggingUtils.getRequestId()));
+
+        // Check BRMS attributes present
+        Assertions.assertThat((Map<String, Object>) mapNodes.get("attributes"))
+            .containsKeys(AttributeType.MATCHING.name(), AttributeType.RULE.name());
+
     }
 
-    private void deleteOperationalPolicy(String actionCd) throws Exception {
-        ModelProperties prop = new ModelProperties(modelName, controlName, actionCd, false, modelBpmnProp, modelProp);
-        Policy policy = prop.getType(Policy.class);
-        if (policy.isFound()) {
-            prop.setCurrentModelElementId(policy.getId());
-            for (PolicyChain policyChain : policy.getPolicyChains()) {
-                prop.setPolicyUniqueId(policyChain.getPolicyId());
-                policyClient.deleteBrms(prop);
-            }
-        }
+    @Test
+    public void testSendMicroServiceInJson()
+        throws TransformerException, BuilderException, IllegalArgumentException, IOException {
+        prop.setCurrentModelElementId(prop.getType(Policy.class).getId());
+        String jsonToSend = "{\"test\":\"test\"}";
+        String response = policyClient.sendMicroServiceInJson(jsonToSend, prop, LoggingUtils.getRequestId());
+
+        Map<String, Object> mapNodes = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(response), Map.class);
+        Assertions.assertThat(mapNodes).contains(Assertions.entry("policyClass", "Config"),
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h"),
+            Assertions.entry("policyConfigType", PolicyConfigType.MicroService.name()),
+            Assertions.entry("requestID", LoggingUtils.getRequestId()),
+            Assertions.entry("configBodyType", PolicyType.JSON.name()), Assertions.entry("onapName", "DCAE"),
+            Assertions.entry("configBody", jsonToSend));
+
     }
 
-    private void deleteTcaPolicy(String actionCd) throws Exception {
-        ModelProperties prop = new ModelProperties(modelName, controlName, actionCd, false, modelBpmnProp, modelProp);
+    @Test
+    public void testSendBasePolicyInOther() throws IllegalArgumentException, IOException {
+        String body = "test";
+        String response = policyClient.sendBasePolicyInOther(body, "myPolicy", prop, LoggingUtils.getRequestId());
+        Map<String, Object> mapNodes = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(response), Map.class);
+        Assertions.assertThat(mapNodes).contains(Assertions.entry("policyClass", "Config"),
+            Assertions.entry("policyName", "myPolicy"),
+            Assertions.entry("policyConfigType", PolicyConfigType.Base.name()),
+            Assertions.entry("requestID", LoggingUtils.getRequestId()),
+            Assertions.entry("configBodyType", PolicyType.OTHER.name()), Assertions.entry("onapName", "DCAE"),
+            Assertions.entry("configBody", body));
+    }
+
+    @Test
+    public void testSendMicroServiceInOther() throws IllegalArgumentException, IOException {
         Tca tca = prop.getType(Tca.class);
-        if (tca.isFound()) {
-            prop.setCurrentModelElementId(tca.getId());
-            try {
-                policyClient.deleteMicrosService(prop);
-            } catch (Exception e) {
-                assertTrue(e.getMessage().contains("Policy delete failed: PE500 "));
-            }
-        }
+        String tcaJson = TcaRequestFormatter.createPolicyJson(refProp, prop);
+        String response = policyClient.sendMicroServiceInOther(tcaJson, prop);
+
+        Map<String, Object> mapNodes = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(response), Map.class);
+        Assertions.assertThat(mapNodes).contains(Assertions.entry("policyClass", "Config"),
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_TCA_1d13unw"),
+            Assertions.entry("policyConfigType", PolicyConfigType.MicroService.name()),
+            Assertions.entry("configBody", tcaJson), Assertions.entry("onapName", "DCAE"));
     }
 
-    // @Test
-    /**
-     * Temporarily disabled Test.
-     */
-    public void testCreateUpdateDeleteOperationalPolicy() throws Exception {
-        createUpdateOperationalPolicy(CldsEvent.ACTION_SUBMIT);
-        TimeUnit.SECONDS.sleep(20);
-        deleteOperationalPolicy(CldsEvent.ACTION_DELETE);
+    @Test
+    public void testDeleteMicrosService() throws IllegalArgumentException, IOException {
+        Tca tca = prop.getType(Tca.class);
+        prop.setCurrentModelElementId(tca.getId());
+        String[] responses = policyClient.deleteMicrosService(prop).split("\\}\\{");
+
+        // There are 2 responses appended to the result, one for PDP one for PAP !
+        Map<String, Object> mapNodesPdp = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(responses[0] + "}"), Map.class);
+        Map<String, Object> mapNodesPap = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree("{" + responses[1]), Map.class);
+
+        Assertions.assertThat(mapNodesPdp).contains(
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_TCA_1d13unw"),
+            Assertions.entry("policyType", PolicyConfigType.MicroService.name()),
+            Assertions.entry("policyComponent", "PDP"), Assertions.entry("deleteCondition", "ALL"));
+
+        Assertions.assertThat(mapNodesPap).contains(
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_TCA_1d13unw"),
+            Assertions.entry("policyType", PolicyConfigType.MicroService.name()),
+            Assertions.entry("policyComponent", "PAP"), Assertions.entry("deleteCondition", "ALL"));
     }
 
     @Test
-    public void testCreateUpdateDeleteTcaPolicy() throws Exception {
-        createUpdateTcaPolicy(CldsEvent.ACTION_SUBMIT);
-        TimeUnit.SECONDS.sleep(20);
-        deleteTcaPolicy(CldsEvent.ACTION_DELETE);
+    public void testDeleteGuard() throws IllegalArgumentException, IOException {
+        List<PolicyItem> policyItems = GuardPolicyAttributesConstructor
+            .getAllPolicyGuardsFromPolicyChain(prop.getType(Policy.class).getPolicyChains().get(0));
+        prop.setCurrentModelElementId(prop.getType(Policy.class).getId());
+        prop.setPolicyUniqueId(prop.getType(Policy.class).getPolicyChains().get(0).getPolicyId());
+        prop.setGuardUniqueId(policyItems.get(0).getId());
+        String[] responses = policyClient.deleteGuard(prop).split("\\}\\{");
+
+        // There are 2 responses appended to the result, one for PDP one for PAP !
+        Map<String, Object> mapNodesPdp = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(responses[0] + "}"), Map.class);
+        Map<String, Object> mapNodesPap = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree("{" + responses[1]), Map.class);
+
+        Assertions.assertThat(mapNodesPdp).contains(
+            Assertions.entry("policyName",
+                modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h_0_Guard_6TtHGPq"),
+            Assertions.entry("policyType", "Decision"), Assertions.entry("policyComponent", "PDP"),
+            Assertions.entry("deleteCondition", "ALL"));
+        Assertions.assertThat(mapNodesPap).contains(
+            Assertions.entry("policyName",
+                modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h_0_Guard_6TtHGPq"),
+            Assertions.entry("policyType", "Decision"), Assertions.entry("policyComponent", "PAP"),
+            Assertions.entry("deleteCondition", "ALL"));
     }
 
     @Test
-    public void testPolicyConfiguration() {
-        assertNotNull(policyConfiguration.getPdpUrl1());
-        assertNotNull(policyConfiguration.getPdpUrl2());
-        assertNotNull(policyConfiguration.getPapUrl());
-        assertNotNull(policyConfiguration.getPolicyEnvironment());
-        assertNotNull(policyConfiguration.getClientId());
-        assertNotNull(policyConfiguration.getClientKey());
-        assertNotNull(policyConfiguration.getNotificationType());
-        assertNotNull(policyConfiguration.getNotificationUebServers());
-        assertEquals(8, policyConfiguration.getProperties().size());
-        assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PDP_URL1))
-                .contains("/pdp/ , testpdp, alpha123"));
-        assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PDP_URL2))
-                .contains("/pdp/ , testpdp, alpha123"));
-        assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PAP_URL))
-                .contains("/pap/ , testpap, alpha123"));
-        assertEquals("websocket", policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_TYPE));
-        assertEquals("localhost",
-                policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_UEB_SERVERS));
-        assertEquals("myclientid", policyConfiguration.getProperties().get(PolicyConfiguration.CLIENT_ID));
-        assertEquals("5CE79532B3A2CB4D132FC0C04BF916A7",
-                policyConfiguration.getProperties().get(PolicyConfiguration.CLIENT_KEY));
-        assertEquals("DEVL", policyConfiguration.getProperties().get(PolicyConfiguration.ENVIRONMENT));
+    public void testDeleteBrms() throws IllegalArgumentException, IOException {
+        prop.setPolicyUniqueId(prop.getType(Policy.class).getPolicyChains().get(0).getPolicyId());
+        prop.setCurrentModelElementId(prop.getType(Policy.class).getId());
+        String[] responses = policyClient.deleteBrms(prop).split("\\}\\{");
+
+        // There are 2 responses appended to the result, one for PDP one for PAP !
+        Map<String, Object> mapNodesPdp = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree(responses[0] + "}"), Map.class);
+        Map<String, Object> mapNodesPap = JacksonUtils.getObjectMapperInstance()
+            .convertValue(JacksonUtils.getObjectMapperInstance().readTree("{" + responses[1]), Map.class);
+
+        Assertions.assertThat(mapNodesPdp).contains(
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h_0"),
+            Assertions.entry("policyType", "BRMS_Param"), Assertions.entry("policyComponent", "PDP"),
+            Assertions.entry("deleteCondition", "ALL"));
+        Assertions.assertThat(mapNodesPap).contains(
+            Assertions.entry("policyName", modelName.replace("-", "_") + "." + controlName + "_Policy_12lup3h_0"),
+            Assertions.entry("policyType", "BRMS_Param"), Assertions.entry("policyComponent", "PAP"),
+            Assertions.entry("deleteCondition", "ALL"));
+
     }
 }