2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.controlloop.eventmanager;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.fail;
28 import java.time.Instant;
29 import java.util.HashMap;
30 import java.util.UUID;
32 import org.junit.AfterClass;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.policy.aai.AAIGETVnfResponse;
36 import org.onap.policy.aai.AAIGETVserverResponse;
37 import org.onap.policy.aai.RelatedToProperty;
38 import org.onap.policy.aai.RelatedToPropertyItem;
39 import org.onap.policy.aai.Relationship;
40 import org.onap.policy.aai.RelationshipData;
41 import org.onap.policy.aai.RelationshipDataItem;
42 import org.onap.policy.aai.RelationshipList;
43 import org.onap.policy.aai.util.AAIException;
44 import org.onap.policy.controlloop.ControlLoopEventStatus;
45 import org.onap.policy.controlloop.ControlLoopException;
46 import org.onap.policy.controlloop.ControlLoopNotificationType;
47 import org.onap.policy.controlloop.Util;
48 import org.onap.policy.controlloop.VirtualControlLoopEvent;
49 import org.onap.policy.controlloop.VirtualControlLoopNotification;
50 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
51 import org.onap.policy.drools.http.server.HttpServletServer;
52 import org.onap.policy.drools.system.PolicyEngine;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
56 public class ControlLoopEventManagerTest {
57 private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
59 private static VirtualControlLoopEvent onset;
61 onset = new VirtualControlLoopEvent();
62 onset.closedLoopControlName = "ControlLoop-vUSP";
63 onset.requestID = UUID.randomUUID();
64 onset.target = "VM_NAME";
65 onset.closedLoopAlarmStart = Instant.now();
66 onset.AAI = new HashMap<String, String>();
67 onset.AAI.put("cloud-region.identity-url", "foo");
68 onset.AAI.put("vserver.selflink", "bar");
69 onset.AAI.put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
70 onset.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
74 public static void setUpSimulator() {
76 org.onap.policy.simulators.Util.buildAaiSim();
77 } catch (Exception e) {
80 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
81 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
82 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
86 public static void tearDownSimulator() {
87 HttpServletServer.factory.destroy();
91 public void testAAIVnfInfo() {
92 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
93 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
95 AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/",
96 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
97 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
98 UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792");
99 assertNotNull(response);
100 logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
101 } catch (Exception e) {
102 logger.error("testAAIVnfInfo Exception: ", e);
103 fail(e.getMessage());
108 public void testAAIVnfInfo2() {
109 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
110 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
112 AAIGETVnfResponse response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
113 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
114 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
115 UUID.randomUUID(), "lll_vnf_010317");
116 assertNotNull(response);
117 logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
118 } catch (Exception e) {
119 logger.error("testAAIVnfInfo2 Exception: ", e);
120 fail(e.getMessage());
125 public void testAAIVserver() {
126 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
127 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
129 AAIGETVserverResponse response = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
130 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
131 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
132 UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0");
133 assertNotNull(response);
134 logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
135 } catch (Exception e) {
136 logger.error("testAAIVserver Exception: ", e);
137 fail(e.getMessage());
142 public void testIsClosedLoopDisabled() {
144 // Load up the policy
146 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
147 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
150 logger.info("testIsClosedLoopDisabled --");
151 AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/",
152 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
153 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
154 UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792");
155 assertNotNull(response);
156 boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
157 logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled);
159 response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
160 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
161 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
162 UUID.randomUUID(), "lll_vnf_010317");
163 assertNotNull(response);
164 disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
165 logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled);
167 AAIGETVserverResponse response2 = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
168 PolicyEngine.manager.getEnvironmentProperty("aai.user"),
169 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
170 UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0");
171 assertNotNull(response2);
172 disabled = ControlLoopEventManager.isClosedLoopDisabled(response2);
173 logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled);
174 } catch (Exception e) {
175 fail(e.getMessage());
180 public void abatemetCheckEventSyntaxTest() {
181 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
182 event.closedLoopControlName = "abatementAAI";
183 event.requestID = UUID.randomUUID();
184 event.target = "generic-vnf.vnf-id";
185 event.closedLoopAlarmStart = Instant.now();
186 event.closedLoopEventStatus = ControlLoopEventStatus.ABATED;
187 ControlLoopEventManager manager = new ControlLoopEventManager(event.closedLoopControlName, event.requestID);
188 assertNull(manager.getVnfResponse());
189 assertNull(manager.getVserverResponse());
191 manager.checkEventSyntax(event);
192 } catch (ControlLoopException e) {
193 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage());
195 fail("Exception in check event syntax");
197 assertNull(manager.getVnfResponse());
198 assertNull(manager.getVserverResponse());
201 event.AAI = new HashMap<>();
202 event.AAI.put("generic-vnf.vnf-name", "abatementTest");
204 manager.checkEventSyntax(event);
205 } catch (ControlLoopException e) {
206 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage());
208 fail("Exception in check event syntax");
210 assertNull(manager.getVnfResponse());
211 assertNull(manager.getVserverResponse());
215 public void subsequentOnsetTest() {
216 UUID requestId = UUID.randomUUID();
217 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
218 event.closedLoopControlName = "TwoOnsetTest";
219 event.requestID = requestId;
220 event.target = "generic-vnf.vnf-id";
221 event.closedLoopAlarmStart = Instant.now();
222 event.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
223 event.AAI = new HashMap<>();
224 event.AAI.put("generic-vnf.vnf-name", "onsetOne");
226 ControlLoopEventManager manager = new ControlLoopEventManager(event.closedLoopControlName, event.requestID);
227 VirtualControlLoopNotification notification = manager.activate(event);
229 assertNotNull(notification);
230 assertEquals(ControlLoopNotificationType.ACTIVE, notification.notification);
232 ControlLoopEventManager.NEW_EVENT_STATUS status = null;
234 status = manager.onNewEvent(event);
235 } catch (AAIException e) {
236 logger.warn(e.toString());
237 fail("A&AI Query Failed");
239 assertNotNull(status);
240 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
242 AAIGETVnfResponse response = manager.getVnfResponse();
243 assertNotNull(response);
244 assertNull(manager.getVserverResponse());
246 VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
247 event2.closedLoopControlName = "TwoOnsetTest";
248 event2.requestID = requestId;
249 event2.target = "generic-vnf.vnf-id";
250 event2.closedLoopAlarmStart = Instant.now();
251 event2.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
252 event2.AAI = new HashMap<>();
253 event2.AAI.put("generic-vnf.vnf-name", "onsetTwo");
257 status = manager.onNewEvent(event2);
258 } catch (AAIException e) {
259 logger.warn(e.toString());
260 fail("A&AI Query Failed");
262 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
263 AAIGETVnfResponse response2 = manager.getVnfResponse();
264 assertNotNull(response2);
265 // We should not have queried AAI, so the stored response should be the same
266 assertEquals(response, response2);
267 assertNull(manager.getVserverResponse());
270 // Simulate a response
271 public static AAIGETVnfResponse getQueryByVnfID2(String urlGet, String username, String password, UUID requestID, String key) {
272 AAIGETVnfResponse response = new AAIGETVnfResponse();
274 response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491");
275 response.setVnfName("lll_vnf_010317");
276 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
277 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
278 response.setOrchestrationStatus("Created");
279 response.setInMaint("false");
280 response.setIsClosedLoopDisabled("false");
281 response.setResourceVersion("1494001988835");
282 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
284 RelationshipList relationshipList = new RelationshipList();
285 Relationship relationship = new Relationship();
286 RelationshipData relationshipData = new RelationshipData();
287 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
289 relationshipDataItem.setRelationshipKey ("customer.global-customer-id");
290 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
291 relationshipData.getRelationshipData().add(relationshipDataItem);
293 relationshipDataItem.setRelationshipKey ("service-subscription.service-type");
294 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
295 relationshipData.getRelationshipData().add(relationshipDataItem);
297 relationshipDataItem.setRelationshipKey ("service-instance.service-instance-id");
298 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
299 relationshipData.getRelationshipData().add(relationshipDataItem);
301 RelatedToProperty relatedToProperty = new RelatedToProperty();
302 RelatedToPropertyItem item = new RelatedToPropertyItem();
303 item.setPropertyKey("service-instance.service-instance-name");
304 item.setPropertyValue("lll_svc_010317");
305 relatedToProperty.getRelatedTo().add(item);
307 relationship.setRelatedTo("service-instance");
308 relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
309 relationship.setRelationshipData(relationshipData);
310 relationship.setRelatedToProperty(relatedToProperty);
312 relationshipList.getRelationshipList().add(relationship);
313 response.setRelationshipList(relationshipList);
318 public static AAIGETVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestID, String key) {
319 AAIGETVnfResponse response = new AAIGETVnfResponse();
321 response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491");
322 response.setVnfName("lll_vnf_010317");
323 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
324 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
325 response.setOrchestrationStatus("Created");
326 response.setInMaint("false");
327 response.setIsClosedLoopDisabled("false");
328 response.setResourceVersion("1494001988835");
329 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
331 RelationshipList relationshipList = new RelationshipList();
332 Relationship relationship = new Relationship();
333 RelationshipData relationshipData = new RelationshipData();
334 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
336 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
337 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
338 relationshipData.getRelationshipData().add(relationshipDataItem);
340 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
341 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
342 relationshipData.getRelationshipData().add(relationshipDataItem);
344 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
345 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
346 relationshipData.getRelationshipData().add(relationshipDataItem);
348 RelatedToProperty relatedToProperty = new RelatedToProperty();
349 RelatedToPropertyItem item = new RelatedToPropertyItem();
350 item.setPropertyKey("service-instance.service-instance-name");
351 item.setPropertyValue("lll_svc_010317");
352 relatedToProperty.getRelatedTo().add(item);
354 relationship.setRelatedTo("service-instance");
355 relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
356 relationship.setRelationshipData(relationshipData);
357 relationship.setRelatedToProperty(relatedToProperty);
359 relationshipList.getRelationshipList().add(relationship);
360 response.setRelationshipList(relationshipList);
365 public static AAIGETVserverResponse getQueryByVserverName2(String urlGet, String username, String password, UUID requestID, String key) {
366 AAIGETVserverResponse response = new AAIGETVserverResponse();
368 response.setVserverID("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
369 response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
370 response.setVserverName2("vjunos0");
371 response.setVserverSelflink("https://aai-ext1.test.att.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/USMSO1SX7NJ0103UJZZ01%3A%3AuCPE-VMS/vservers/vserver/d0668d4f-c25e-4a1b-87c4-83845c01efd8");
372 response.setInMaint("false");
373 response.setIsClosedLoopDisabled("false");
374 response.setResourceVersion("1494001931513");
376 RelationshipList relationshipList = new RelationshipList();
377 Relationship relationship = new Relationship();
378 RelationshipData relationshipData = new RelationshipData();
379 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
381 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
382 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
383 relationshipData.getRelationshipData().add(relationshipDataItem);
385 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
386 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
387 relationshipData.getRelationshipData().add(relationshipDataItem);
389 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
390 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
391 relationshipData.getRelationshipData().add(relationshipDataItem);
393 RelatedToProperty relatedToProperty = new RelatedToProperty();
394 RelatedToPropertyItem item = new RelatedToPropertyItem();
395 item.setPropertyKey("service-instance.service-instance-name");
396 item.setPropertyValue("lll_svc_010317");
397 relatedToProperty.getRelatedTo().add(item);
399 relationship.setRelatedTo("service-instance");
400 relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
401 relationship.setRelationshipData(relationshipData);
402 relationship.setRelatedToProperty(relatedToProperty);
404 relationshipList.getRelationshipList().add(relationship);
405 response.setRelationshipList(relationshipList);