summaryrefslogtreecommitdiffstats
path: root/controlloop/templates/template.demo.v1.0.0/template.demo/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'controlloop/templates/template.demo.v1.0.0/template.demo/src/test')
-rw-r--r--controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestAPPCPayload.java58
-rw-r--r--controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestFirewallDemo.java593
-rw-r--r--controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestMSO.java159
-rw-r--r--controlloop/templates/template.demo.v1.0.0/template.demo/src/test/resources/aairesponse.json227
4 files changed, 1037 insertions, 0 deletions
diff --git a/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestAPPCPayload.java b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestAPPCPayload.java
new file mode 100644
index 000000000..73501bce5
--- /dev/null
+++ b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestAPPCPayload.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * demo
+ * ================================================================================
+ * Copyright (C) 2017 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.template.demo;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+import org.junit.Test;
+import org.onap.policy.appc.CommonHeader;
+import org.onap.policy.appc.Request;
+import org.onap.policy.appc.util.Serialization;
+import org.onap.policy.vnf.trafficgenerator.PGRequest;
+import org.onap.policy.vnf.trafficgenerator.PGStream;
+import org.onap.policy.vnf.trafficgenerator.PGStreams;
+
+public class TestAPPCPayload {
+
+ @Test
+ public void test() {
+ PGRequest request = new PGRequest();
+ request.pgStreams = new PGStreams();
+
+ PGStream pgStream;
+ for(int i = 0; i < 5; i++){
+ pgStream = new PGStream();
+ pgStream.streamId = "fw_udp"+(i+1);
+ pgStream.isEnabled = "true";
+ request.pgStreams.pgStream.add(pgStream);
+ }
+
+ Request appc = new Request();
+ appc.CommonHeader = new CommonHeader();
+ appc.CommonHeader.RequestID = UUID.randomUUID();
+ appc.Action = "ModifyConfig";
+ appc.Payload = new HashMap<String, Object>();
+ appc.Payload.put("pg-streams", request);
+ System.out.println(Serialization.gsonPretty.toJson(appc));
+ }
+
+}
diff --git a/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestFirewallDemo.java b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestFirewallDemo.java
new file mode 100644
index 000000000..e48aafdad
--- /dev/null
+++ b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestFirewallDemo.java
@@ -0,0 +1,593 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * demo
+ * ================================================================================
+ * Copyright (C) 2017 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.template.demo;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.Instant;
+import java.util.HashMap;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.junit.Test;
+import org.kie.api.KieServices;
+import org.kie.api.builder.KieBuilder;
+import org.kie.api.builder.KieFileSystem;
+import org.kie.api.builder.Message;
+import org.kie.api.builder.ReleaseId;
+import org.kie.api.builder.Results;
+import org.kie.api.builder.model.KieModuleModel;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.kie.api.runtime.rule.FactHandle;
+import org.onap.policy.appc.CommonHeader;
+import org.onap.policy.appc.Response;
+import org.onap.policy.appc.ResponseStatus;
+import org.onap.policy.controlloop.ControlLoopEventStatus;
+import org.onap.policy.controlloop.ControlLoopTargetType;
+import org.onap.policy.controlloop.VirtualControlLoopEvent;
+import org.onap.policy.appc.util.Serialization;
+
+
+
+public class TestFirewallDemo {
+
+
+ @Test
+ public void testvDNS() throws IOException {
+ //
+ // Build a container
+ //
+ final String closedLoopControlName = "CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8";
+ final KieSession kieSession = buildContainer("src/main/resources/archetype-resources/src/main/resources/ControlLoopDemo__closedLoopControlName__.drl",
+ closedLoopControlName,
+ "type=operational",
+ "myFirewallDemoPolicy",
+ "v1.0",
+ "MSO",
+ "http://localhost:8080/TestREST/Test",
+ "POLICY",
+ "POLICY",
+ "http://localhost:8080/TestREST/Test",
+ "POLICY",
+ "POLICY",
+ "4ff56a54-9e3f-46b7-a337-07a1d3c6b469",
+ 0,
+ "POLICY-CL-MGT",
+ "APPC-CL"
+ );
+ //
+ // Initial fire of rules
+ //
+ kieSession.fireAllRules();
+ //
+ // Kick a thread that starts testing
+ //
+ new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ //
+ // Generate an invalid DCAE Event with requestID=null
+ //
+ VirtualControlLoopEvent invalidEvent = new VirtualControlLoopEvent();
+ invalidEvent.closedLoopControlName = closedLoopControlName;
+ invalidEvent.requestID = null;
+ invalidEvent.closedLoopEventClient = "tca.instance00001";
+ invalidEvent.target_type = ControlLoopTargetType.VF;
+ invalidEvent.target = "generic-vnf.vnf-id";
+ invalidEvent.from = "DCAE";
+ invalidEvent.closedLoopAlarmStart = Instant.now();
+ invalidEvent.AAI = new HashMap<String, String>();
+ invalidEvent.AAI.put("vserver.vserver-name", "vserver-name-16102016-aai3255-data-11-1");
+ invalidEvent.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
+
+ System.out.println("----- Invalid ONSET -----");
+ System.out.println(Serialization.gsonPretty.toJson(invalidEvent));
+
+ //
+ // Insert invalid DCAE Event into memory
+ //
+ kieSession.insert(invalidEvent);
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ }
+ //
+ // Generate first DCAE ONSET Event
+ //
+ VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
+ onsetEvent.closedLoopControlName = closedLoopControlName;
+ onsetEvent.requestID = UUID.randomUUID();
+ onsetEvent.closedLoopEventClient = "tca.instance00001";
+ onsetEvent.target_type = ControlLoopTargetType.VF;
+ onsetEvent.target = "generic-vnf.vnf-id";
+ onsetEvent.from = "DCAE";
+ onsetEvent.closedLoopAlarmStart = Instant.now();
+ onsetEvent.AAI = new HashMap<String, String>();
+ onsetEvent.AAI.put("vserver.vserver-name", "vserver-name-16102016-aai3255-data-11-1");
+ onsetEvent.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
+
+ System.out.println("----- ONSET -----");
+ System.out.println(Serialization.gsonPretty.toJson(onsetEvent));
+
+ //
+ // Insert first DCAE ONSET Event into memory
+ //
+ kieSession.insert(onsetEvent);
+ //
+ // We have test for subsequent ONSET Events in testvFirewall()
+ // So no need to test it again here
+ //
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ }
+ //
+ // Test is finished, so stop the kieSession
+ //
+ kieSession.halt();
+ }
+ //
+ }).start();
+ //
+ // Start firing rules
+ //
+ kieSession.fireUntilHalt();
+ //
+ // Dump working memory
+ //
+ dumpFacts(kieSession);
+ //
+ // See if there is anything left in memory, there SHOULD only be
+ // a params fact.
+ //
+ assertEquals("There should only be 1 Fact left in memory.", 1, kieSession.getFactCount());
+ for (FactHandle handle : kieSession.getFactHandles()) {
+ Object fact = kieSession.getObject(handle);
+ assertEquals("Non-Param Fact left in working memory", "org.onap.policy.controlloop.Params", fact.getClass().getName());
+ }
+ }
+
+ @Test
+ public void testvFirewall() throws IOException {
+ //
+ // Build a container
+ //
+ final String closedLoopControlName = "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8";
+ final KieSession kieSession = buildContainer("src/main/resources/archetype-resources/src/main/resources/ControlLoopDemo__closedLoopControlName__.drl",
+ closedLoopControlName,
+ "type=operational",
+ "myFirewallDemoPolicy",
+ "v1.0",
+ "APPC",
+ "http://localhost:8080/TestREST/Test",
+ "POLICY",
+ "POLICY",
+ null,
+ null,
+ null,
+ null,
+ 1,
+ "POLICY-CL-MGT",
+ "APPC-CL"
+ );
+ //
+ // Initial fire of rules
+ //
+ kieSession.fireAllRules();
+ //
+ // Kick a thread that starts testing
+ //
+ new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ //
+ // Generate an invalid DCAE Event with requestID=null
+ //
+ VirtualControlLoopEvent invalidEvent = new VirtualControlLoopEvent();
+ invalidEvent.closedLoopControlName = closedLoopControlName;
+ invalidEvent.requestID = null;
+ invalidEvent.closedLoopEventClient = "tca.instance00001";
+ invalidEvent.target_type = ControlLoopTargetType.VF;
+ invalidEvent.target = "generic-vnf.vnf-id";
+ invalidEvent.from = "DCAE";
+ invalidEvent.closedLoopAlarmStart = Instant.now();
+ invalidEvent.AAI = new HashMap<String, String>();
+ invalidEvent.AAI.put("generic-vnf.vnf-id", "foo");
+ invalidEvent.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
+
+ System.out.println("----- Invalid ONSET -----");
+ System.out.println(Serialization.gsonPretty.toJson(invalidEvent));
+
+ //
+ // Insert invalid DCAE Event into memory
+ //
+ kieSession.insert(invalidEvent);
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ }
+ //
+ // Generate first DCAE ONSET Event
+ //
+ VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
+ onsetEvent.closedLoopControlName = closedLoopControlName;
+ onsetEvent.requestID = UUID.randomUUID();
+ onsetEvent.closedLoopEventClient = "tca.instance00001";
+ onsetEvent.target_type = ControlLoopTargetType.VF;
+ onsetEvent.target = "generic-vnf.vnf-id";
+ onsetEvent.from = "DCAE";
+ onsetEvent.closedLoopAlarmStart = Instant.now();
+ onsetEvent.AAI = new HashMap<String, String>();
+ onsetEvent.AAI.put("generic-vnf.vnf-id", "fw0001vm001fw001");
+ //onsetEvent.AAI.put("vserver.vserver-name", "vserver-name-16102016-aai3255-data-11-1");
+ onsetEvent.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
+
+ System.out.println("----- ONSET -----");
+ System.out.println(Serialization.gsonPretty.toJson(onsetEvent));
+
+ //
+ // Insert first DCAE ONSET Event into memory
+ //
+ kieSession.insert(onsetEvent);
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ }
+
+
+ Thread thread = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ while (true) {
+ //
+ // Generate subsequent DCAE ONSET Event
+ //
+ VirtualControlLoopEvent subOnsetEvent = new VirtualControlLoopEvent();
+ subOnsetEvent.closedLoopControlName = closedLoopControlName;
+ subOnsetEvent.requestID = UUID.randomUUID();
+ subOnsetEvent.closedLoopEventClient = "tca.instance00001";
+ subOnsetEvent.target_type = ControlLoopTargetType.VF;
+ subOnsetEvent.target = "generic-vnf.vnf-id";
+ subOnsetEvent.from = "DCAE";
+ subOnsetEvent.closedLoopAlarmStart = Instant.now();
+ subOnsetEvent.AAI = new HashMap<String, String>();
+ subOnsetEvent.AAI.put("generic-vnf.vnf-id", "fw0001vm001fw001");
+ //subOnsetEvent.AAI.put("vserver.vserver-name", "vserver-name-16102016-aai3255-data-11-1");
+ subOnsetEvent.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
+
+ System.out.println("----- Subsequent ONSET -----");
+ System.out.println(Serialization.gsonPretty.toJson(subOnsetEvent));
+
+ //
+ // Insert subsequent DCAE ONSET Event into memory
+ //
+ kieSession.insert(subOnsetEvent);
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ break;
+ }
+ }
+ }
+
+ });
+ thread.start();
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ }
+ //
+ // Stop the thread
+ //
+ thread.interrupt();
+ //
+ // Generate APPC ACCEPT Response
+ //
+ Response response1 = new Response();
+ // CommonHeader
+ CommonHeader commonHeader1 = new CommonHeader();
+ commonHeader1.RequestID = onsetEvent.requestID;
+ response1.CommonHeader = commonHeader1;
+ // ResponseStatus
+ ResponseStatus responseStatus1 = new ResponseStatus();
+ responseStatus1.Code = 100;
+ response1.Status = responseStatus1;
+ //
+ System.out.println("----- APP-C RESPONSE 100 -----");
+ System.out.println(Serialization.gsonPretty.toJson(response1));
+ //
+ // Insert APPC Response into memory
+ //
+ kieSession.insert(response1);
+ //
+ // Simulating APPC takes some time for processing the recipe
+ // and then gives response
+ //
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ }
+ //
+ // Generate APPC SUCCESS Response
+ //
+ Response response2 = new Response();
+ // CommonHeader
+ CommonHeader commonHeader2 = new CommonHeader();
+ commonHeader2.RequestID = onsetEvent.requestID;
+ response2.CommonHeader = commonHeader2;
+ // ResponseStatus
+ ResponseStatus responseStatus2 = new ResponseStatus();
+ responseStatus2.Code = 400;
+ response2.Status = responseStatus2;
+ //
+ System.out.println("----- APP-C RESPONSE 400 -----");
+ System.out.println(Serialization.gsonPretty.toJson(response2));
+ //
+ // Insert APPC Response into memory
+ //
+ kieSession.insert(response2);
+ //
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ }
+ //
+ // Test is finished, so stop the kieSession
+ //
+ kieSession.halt();
+ }
+ //
+ }).start();
+ //
+ // Start firing rules
+ //
+ kieSession.fireUntilHalt();
+ //
+ // Dump working memory
+ //
+ dumpFacts(kieSession);
+ //
+ // See if there is anything left in memory, there SHOULD only be
+ // a params fact.
+ //
+ assertEquals("There should only be 1 Fact left in memory.", 1, kieSession.getFactCount());
+ for (FactHandle handle : kieSession.getFactHandles()) {
+ Object fact = kieSession.getObject(handle);
+ assertEquals("Non-Param Fact left in working memory", "org.onap.policy.controlloop.Params", fact.getClass().getName());
+ }
+ }
+
+ public static void dumpFacts(KieSession kieSession) {
+ System.out.println("Fact Count: " + kieSession.getFactCount());
+ for (FactHandle handle : kieSession.getFactHandles()) {
+ System.out.println("FACT: " + handle);
+ }
+ }
+
+ public static KieSession buildContainer(String droolsTemplate,
+ String closedLoopControlName,
+ String policyScope,
+ String policyName,
+ String policyVersion,
+ String actor,
+ String aaiURL,
+ String aaiUsername,
+ String aaiPassword,
+ String msoURL,
+ String msoUsername,
+ String msoPassword,
+ String aaiNamedQuery,
+ int aaiPatternMatch,
+ String notificationTopic,
+ String appcTopic ) throws IOException {
+ //
+ // Get our Drools Kie factory
+ //
+ KieServices ks = KieServices.Factory.get();
+
+ KieModuleModel kModule = ks.newKieModuleModel();
+
+ System.out.println("KMODULE:" + System.lineSeparator() + kModule.toXML());
+
+ //
+ // Generate our drools rule from our template
+ //
+ KieFileSystem kfs = ks.newKieFileSystem();
+
+ kfs.writeKModuleXML(kModule.toXML());
+ {
+ Path rule = Paths.get(droolsTemplate);
+ String ruleTemplate = new String(Files.readAllBytes(rule));
+ String drlContents = generatePolicy(ruleTemplate,
+ closedLoopControlName,
+ policyScope,
+ policyName,
+ policyVersion,
+ actor,
+ aaiURL,
+ aaiUsername,
+ aaiPassword,
+ msoURL,
+ msoUsername,
+ msoPassword,
+ aaiNamedQuery,
+ aaiPatternMatch,
+ notificationTopic,
+ appcTopic
+ );
+
+ kfs.write("src/main/resources/" + policyName + ".drl", ks.getResources().newByteArrayResource(drlContents.getBytes()));
+ }
+ //
+ // Compile the rule
+ //
+ KieBuilder builder = ks.newKieBuilder(kfs).buildAll();
+ Results results = builder.getResults();
+ if (results.hasMessages(Message.Level.ERROR)) {
+ for (Message msg : results.getMessages()) {
+ System.err.println(msg.toString());
+ }
+ throw new RuntimeException("Drools Rule has Errors");
+ }
+ for (Message msg : results.getMessages()) {
+ System.out.println(msg.toString());
+ }
+ //
+ // Create our kie Session and container
+ //
+ ReleaseId releaseId = ks.getRepository().getDefaultReleaseId();
+ System.out.println(releaseId);
+ KieContainer kContainer = ks.newKieContainer(releaseId);
+
+ return kContainer.newKieSession();
+ }
+ public static String generatePolicy(String ruleContents,
+ String closedLoopControlName,
+ String policyScope,
+ String policyName,
+ String policyVersion,
+ String actor,
+ String aaiURL,
+ String aaiUsername,
+ String aaiPassword,
+ String msoURL,
+ String msoUsername,
+ String msoPassword,
+ String aaiNamedQueryUUID,
+ int aaiPatternMatch,
+ String notificationTopic,
+ String appcTopic) {
+
+ Pattern p = Pattern.compile("\\$\\{closedLoopControlName\\}");
+ Matcher m = p.matcher(ruleContents);
+ ruleContents = m.replaceAll(closedLoopControlName);
+
+ p = Pattern.compile("\\$\\{policyScope\\}");
+ m = p.matcher(ruleContents);
+ ruleContents = m.replaceAll(policyScope);
+
+ p = Pattern.compile("\\$\\{policyName\\}");
+ m = p.matcher(ruleContents);
+ ruleContents = m.replaceAll(policyName);
+
+ p = Pattern.compile("\\$\\{policyVersion\\}");
+ m = p.matcher(ruleContents);
+ ruleContents = m.replaceAll(policyVersion);
+
+ p = Pattern.compile("\\$\\{actor\\}");
+ m = p.matcher(ruleContents);
+ ruleContents = m.replaceAll(actor);
+
+ p = Pattern.compile("\\$\\{aaiURL\\}");
+ m = p.matcher(ruleContents);
+ if (aaiURL == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(aaiURL);
+ }
+
+ p = Pattern.compile("\\$\\{aaiUsername\\}");
+ m = p.matcher(ruleContents);
+ if (aaiUsername == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(aaiUsername);
+ }
+
+ p = Pattern.compile("\\$\\{aaiPassword\\}");
+ m = p.matcher(ruleContents);
+ if (aaiPassword == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(aaiPassword);
+ }
+
+ p = Pattern.compile("\\$\\{msoURL\\}");
+ m = p.matcher(ruleContents);
+ if (msoURL == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(msoURL);
+ }
+
+ p = Pattern.compile("\\$\\{msoUsername\\}");
+ m = p.matcher(ruleContents);
+ if (msoUsername == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(msoUsername);
+ }
+
+ p = Pattern.compile("\\$\\{msoPassword\\}");
+ m = p.matcher(ruleContents);
+ if (msoPassword == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(msoPassword);
+ }
+
+ p = Pattern.compile("\\$\\{aaiNamedQueryUUID\\}");
+ m = p.matcher(ruleContents);
+ if (aaiNamedQueryUUID == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(aaiNamedQueryUUID);
+ }
+
+ p = Pattern.compile("\\$\\{aaiPatternMatch\\}");
+ m = p.matcher(ruleContents);
+ if (aaiPatternMatch == 1) {
+ ruleContents = m.replaceAll("1");
+ } else {
+ ruleContents = m.replaceAll("0");
+ }
+
+ p = Pattern.compile("\\$\\{notificationTopic\\}");
+ m = p.matcher(ruleContents);
+ if (notificationTopic == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(notificationTopic);
+ }
+
+ p = Pattern.compile("\\$\\{appcTopic\\}");
+ m = p.matcher(ruleContents);
+ if (appcTopic == null) {
+ ruleContents = m.replaceAll("null");
+ } else {
+ ruleContents = m.replaceAll(appcTopic);
+ }
+
+ System.out.println(ruleContents);
+
+ return ruleContents;
+ }
+
+}
diff --git a/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestMSO.java b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestMSO.java
new file mode 100644
index 000000000..a960661ee
--- /dev/null
+++ b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/java/org/onap/policy/template/demo/TestMSO.java
@@ -0,0 +1,159 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * demo
+ * ================================================================================
+ * Copyright (C) 2017 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.template.demo;
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.util.UUID;
+
+import org.junit.Test;
+import org.onap.policy.mso.MSOCloudConfiguration;
+import org.onap.policy.mso.MSOModelInfo;
+import org.onap.policy.mso.MSORelatedInstance;
+import org.onap.policy.mso.MSORelatedInstanceListElement;
+import org.onap.policy.mso.MSORequest;
+import org.onap.policy.mso.MSORequestDetails;
+import org.onap.policy.mso.MSORequestInfo;
+import org.onap.policy.mso.MSORequestParameters;
+import org.onap.policy.aai.AAINQF199.AAINQF199Response;
+import org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;
+import org.onap.policy.mso.util.Serialization;
+
+import com.google.gson.Gson;
+import com.google.gson.stream.JsonReader;
+
+public class TestMSO {
+
+ @Test
+ public void test() throws FileNotFoundException {
+ Gson gson = new Gson();
+ JsonReader reader = new JsonReader(new FileReader("src/test/resources/aairesponse.json"));
+ AAINQF199Response response = gson.fromJson(reader, AAINQF199Response.class);
+
+ System.out.println(Serialization.gsonPretty.toJson(response));
+
+ AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper(UUID.randomUUID(), response);
+
+ //
+ //
+ // vnfItem
+ //
+ String vnfItemVnfId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;
+ String vnfItemVnfType = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;
+ vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf("/")+1);
+ String vnfItemPersonaModelId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;
+ String vnfItemPersonaModelVersion = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;
+ String vnfItemModelName = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;
+ String vnfItemModelNameVersionId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;
+ //
+ // serviceItem
+ //
+ String serviceItemServiceInstanceId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;
+ String serviceItemPersonaModelId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;
+ String serviceItemModelName = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;
+ String serviceItemModelVersion = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;
+ String serviceItemModelNameVersionId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;
+ //
+ // This comes from the base module
+ //
+ String vfModuleItemVfModuleName = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).vfModule.vfModuleName;
+ vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace("Vfmodule", "vDNS");
+ //
+ // vfModuleItem - NOT the base module
+ //
+ String vfModuleItemPersonaModelId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(2).vfModule.personaModelId;
+ String vfModuleItemPersonaModelVersion = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(2).vfModule.personaModelVersion;
+ String vfModuleItemModelName = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(2).extraProperties.extraProperty.get(0).propertyValue;
+ String vfModuleItemModelNameVersionId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(2).extraProperties.extraProperty.get(4).propertyValue;
+
+ //
+ // tenantItem
+ //
+ String tenantItemTenantId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;
+ //
+ // cloudRegionItem
+ //
+ String cloudRegionItemCloudRegionId = aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;
+
+ //
+ // Construct an MSO request
+ //
+ MSORequest request = new MSORequest();
+ request.requestDetails = new MSORequestDetails();
+ request.requestDetails.modelInfo = new MSOModelInfo();
+ request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();
+ request.requestDetails.requestInfo = new MSORequestInfo();
+ request.requestDetails.requestParameters = new MSORequestParameters();
+ request.requestDetails.requestParameters.userParams = null;
+ //
+ // cloudConfiguration
+ //
+ request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;
+ request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;
+ //
+ // modelInfo
+ //
+ request.requestDetails.modelInfo.modelType = "vfModule";
+ request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;
+ request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;
+ request.requestDetails.modelInfo.modelName = vfModuleItemModelName;
+ request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;
+ //
+ // requestInfo
+ //
+ request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;
+ request.requestDetails.requestInfo.source = "POLICY";
+ request.requestDetails.requestInfo.suppressRollback = false;
+ //
+ // relatedInstanceList
+ //
+ MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();
+ MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();
+ relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();
+ relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();
+ //
+ relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;
+ relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();
+ relatedInstanceListElement1.relatedInstance.modelInfo.modelType = "service";
+ relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;
+ relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;
+ relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;
+ relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;
+ //
+ relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;
+ relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();
+ relatedInstanceListElement2.relatedInstance.modelInfo.modelType = "vnf";
+ relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;
+ relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;
+ relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;
+ relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemPersonaModelVersion;
+ relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;
+ //
+ request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);
+ request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);
+ //
+ // print MSO request for debug
+ //
+ System.out.println("MSO request sent:");
+ System.out.println(Serialization.gsonPretty.toJson(request));
+ }
+
+}
diff --git a/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/resources/aairesponse.json b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/resources/aairesponse.json
new file mode 100644
index 000000000..66da8e715
--- /dev/null
+++ b/controlloop/templates/template.demo.v1.0.0/template.demo/src/test/resources/aairesponse.json
@@ -0,0 +1,227 @@
+{
+ "inventory-response-item": [
+ {
+ "extra-properties": {},
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model.model-name",
+ "property-value": "c15ce9e1-e914-4c8f-b8bb"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-version",
+ "property-value": "1"
+ },
+ {
+ "property-name": "model.model-id",
+ "property-value": "033a32ed-aa65-4764-a736-36f2942f1aa0"
+ },
+ {
+ "property-name": "model.model-name-version-id",
+ "property-value": "d4d072dc-4e21-4a03-9524-628985819a8e"
+ }
+ ]
+ },
+ "generic-vnf": {
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "orchestration-status": "Created",
+ "persona-model-id": "033a32ed-aa65-4764-a736-36f2942f1aa0",
+ "persona-model-version": "1.0",
+ "resource-version": "1485542422",
+ "service-id": "b3f70641-bdb9-4030-825e-6abb73a1f929",
+ "vnf-id": "594e2fe0-48b8-41ff-82e2-3d4bab69b192",
+ "vnf-name": "Vnf_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8",
+ "vnf-type": "8330e932-2a23-4943-8606/c15ce9e1-e914-4c8f-b8bb 1"
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model.model-name",
+ "property-value": "8330e932-2a23-4943-8606"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "service"
+ },
+ {
+ "property-name": "model.model-version",
+ "property-value": "1"
+ },
+ {
+ "property-name": "model.model-id",
+ "property-value": "4fcbc1c0-7793-46d8-8aa1-fa1c2ed9ec7b"
+ },
+ {
+ "property-name": "model.model-name-version-id",
+ "property-value": "5c996219-b2e2-4c76-9b43-7e8672a33c1d"
+ }
+ ]
+ },
+ "service-instance": {
+ "persona-model-id": "4fcbc1c0-7793-46d8-8aa1-fa1c2ed9ec7b",
+ "persona-model-version": "1.0",
+ "resource-version": "1485542400",
+ "service-instance-id": "cf8426a6-0b53-4e3d-bfa6-4b2f4d5913a5",
+ "service-instance-name": "Service_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8"
+ }
+ },
+ {
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model.model-name",
+ "property-value": "C15ce9e1E9144c8fB8bb..base_vlb..module-0"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-version",
+ "property-value": "1"
+ },
+ {
+ "property-name": "model.model-id",
+ "property-value": "79ee24cd-fc9a-4f14-afae-5e1dd2ab2941"
+ },
+ {
+ "property-name": "model.model-name-version-id",
+ "property-value": "5484cabb-1a0d-4f29-a616-094a3f643d73"
+ }
+ ]
+ },
+ "model-name": "C15ce9e1E9144c8fB8bb..base_vlb..module-0",
+ "vf-module": {
+ "heat-stack-id": "Vfmodule_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8/5845f37b-6cda-4e91-8ca3-f5572d226488",
+ "is-base-vf-module": true,
+ "orchestration-status": "active",
+ "persona-model-id": "79ee24cd-fc9a-4f14-afae-5e1dd2ab2941",
+ "persona-model-version": "1",
+ "resource-version": "1485542667",
+ "vf-module-id": "b0eff878-e2e1-4947-9597-39afdd0f51dd",
+ "vf-module-name": "Vfmodule_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8"
+ }
+ },
+ {
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model.model-name",
+ "property-value": "C15ce9e1E9144c8fB8bb..dnsscaling..module-1"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-version",
+ "property-value": "1"
+ },
+ {
+ "property-name": "model.model-id",
+ "property-value": "f32568ec-2f1c-458a-864b-0593d53d141a"
+ },
+ {
+ "property-name": "model.model-name-version-id",
+ "property-value": "69615025-879d-4f0d-afe3-b7d1a7eeed1f"
+ }
+ ]
+ },
+ "vf-module": {
+ "is-base-vf-module": false,
+ "persona-model-id": "f32568ec-2f1c-458a-864b-0593d53d141a",
+ "persona-model-version": "1.0",
+ "resource-version": "1485561752",
+ "vf-module-id": "dummy",
+ "vf-module-name": "dummy"
+ }
+ },
+ {
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model.model-name",
+ "property-value": "C15ce9e1E9144c8fB8bb..dnsscaling..module-1"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-version",
+ "property-value": "1"
+ },
+ {
+ "property-name": "model.model-id",
+ "property-value": "f32568ec-2f1c-458a-864b-0593d53d141a"
+ },
+ {
+ "property-name": "model.model-name-version-id",
+ "property-value": "69615025-879d-4f0d-afe3-b7d1a7eeed1f"
+ }
+ ]
+ },
+ "vf-module": {
+ "heat-stack-id": "vDNS_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8/f447ce51-14dd-4dcd-9957-68a047c79673",
+ "is-base-vf-module": false,
+ "orchestration-status": "active",
+ "persona-model-id": "f32568ec-2f1c-458a-864b-0593d53d141a",
+ "persona-model-version": "1.0",
+ "resource-version": "1485562712",
+ "vf-module-id": "8cd79e44-1fae-48c1-a160-609f90b46749",
+ "vf-module-name": "vDNS_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "extra-properties": {},
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "cloud-region": {
+ "cloud-owner": "Rackspace",
+ "cloud-region-id": "DFW",
+ "cloud-region-version": "v1",
+ "cloud-type": "SharedNode",
+ "cloud-zone": "CloudZone",
+ "owner-defined-type": "OwnerType",
+ "resource-version": "1485465545"
+ },
+ "extra-properties": {}
+ }
+ ]
+ },
+ "tenant": {
+ "resource-version": "1485465545",
+ "tenant-id": "1015548",
+ "tenant-name": "1015548"
+ }
+ }
+ ]
+ },
+ "vserver": {
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "prov-status": "ACTIVE",
+ "resource-version": "1485546436",
+ "vserver-id": "70f081eb-2a87-4c81-9296-4b93d7d145c6",
+ "vserver-name": "vlb-lb-32c8",
+ "vserver-name2": "vlb-lb-32c8",
+ "vserver-selflink": "https://dfw.servers.api.rackspacecloud.com/v2/1015548/servers/70f081eb-2a87-4c81-9296-4b93d7d145c6"
+ }
+ }
+ ]
+}