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.assertTrue;
27 import static org.junit.Assert.fail;
30 import java.io.FileInputStream;
31 import java.io.IOException;
32 import java.io.InputStream;
33 import java.nio.charset.StandardCharsets;
34 import java.time.Instant;
35 import java.util.HashMap;
36 import java.util.UUID;
38 import org.apache.commons.io.IOUtils;
39 import org.junit.AfterClass;
40 import org.junit.BeforeClass;
41 import org.junit.Test;
42 import org.onap.policy.aai.AAIGETVnfResponse;
43 import org.onap.policy.aai.AAIGETVserverResponse;
44 import org.onap.policy.aai.RelatedToProperty;
45 import org.onap.policy.aai.RelatedToPropertyItem;
46 import org.onap.policy.aai.Relationship;
47 import org.onap.policy.aai.RelationshipData;
48 import org.onap.policy.aai.RelationshipDataItem;
49 import org.onap.policy.aai.RelationshipList;
50 import org.onap.policy.aai.util.AAIException;
51 import org.onap.policy.controlloop.ControlLoopEventStatus;
52 import org.onap.policy.controlloop.ControlLoopException;
53 import org.onap.policy.controlloop.ControlLoopNotificationType;
54 import org.onap.policy.controlloop.Util;
55 import org.onap.policy.controlloop.VirtualControlLoopEvent;
56 import org.onap.policy.controlloop.VirtualControlLoopNotification;
57 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS;
58 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
59 import org.onap.policy.controlloop.policy.PolicyResult;
60 import org.onap.policy.drools.http.server.HttpServletServer;
61 import org.onap.policy.drools.system.PolicyEngine;
62 import org.onap.policy.guard.GuardResult;
63 import org.onap.policy.guard.PolicyGuard;
64 import org.onap.policy.guard.PolicyGuard.LockResult;
65 import org.onap.policy.guard.TargetLock;
66 import org.slf4j.Logger;
67 import org.slf4j.LoggerFactory;
69 public class ControlLoopEventManagerTest {
70 private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
72 private static VirtualControlLoopEvent onset;
74 onset = new VirtualControlLoopEvent();
75 onset.setClosedLoopControlName("ControlLoop-vUSP");
76 onset.setRequestID(UUID.randomUUID());
77 onset.setTarget("VM_NAME");
78 onset.setClosedLoopAlarmStart(Instant.now());
79 onset.setAAI(new HashMap<String, String>());
80 onset.getAAI().put("cloud-region.identity-url", "foo");
81 onset.getAAI().put("vserver.selflink", "bar");
82 onset.getAAI().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
83 onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
87 public static void setUpSimulator() {
89 org.onap.policy.simulators.Util.buildAaiSim();
90 } catch (Exception e) {
93 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
94 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
95 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
99 public static void tearDownSimulator() {
100 HttpServletServer.factory.destroy();
104 public void testAAIVnfInfo() {
105 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
106 onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName());
108 AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/",
109 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
110 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
111 UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792");
112 assertNotNull(response);
113 logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
114 } catch (Exception e) {
115 logger.error("testAAIVnfInfo Exception: ", e);
116 fail(e.getMessage());
121 public void testAAIVnfInfo2() {
122 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
123 onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName());
125 AAIGETVnfResponse response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
126 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
127 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
128 UUID.randomUUID(), "lll_vnf_010317");
129 assertNotNull(response);
130 logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
131 } catch (Exception e) {
132 logger.error("testAAIVnfInfo2 Exception: ", e);
133 fail(e.getMessage());
138 public void testAAIVserver() {
139 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
140 onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName());
142 AAIGETVserverResponse response = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
143 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
144 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
145 UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0");
146 assertNotNull(response);
147 logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
148 } catch (Exception e) {
149 logger.error("testAAIVserver Exception: ", e);
150 fail(e.getMessage());
155 public void testIsClosedLoopDisabled() {
157 // Load up the policy
159 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
160 onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName());
163 logger.info("testIsClosedLoopDisabled --");
164 AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/",
165 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
166 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
167 UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792");
168 assertNotNull(response);
171 //boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
172 //logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled);
174 response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
175 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
176 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
177 UUID.randomUUID(), "lll_vnf_010317");
178 assertNotNull(response);
180 //disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
181 //logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled);
183 AAIGETVserverResponse response2 = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
184 PolicyEngine.manager.getEnvironmentProperty("aai.user"),
185 PolicyEngine.manager.getEnvironmentProperty("aai.password"),
186 UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0");
187 assertNotNull(response2);
189 //disabled = ControlLoopEventManager.isClosedLoopDisabled(response2);
190 //logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled);
191 } catch (Exception e) {
192 fail(e.getMessage());
197 public void abatemetCheckEventSyntaxTest() {
198 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
199 event.setClosedLoopControlName("abatementAAI");
200 event.setRequestID(UUID.randomUUID());
201 event.setTarget("generic-vnf.vnf-id");
202 event.setClosedLoopAlarmStart(Instant.now());
203 event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
204 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
205 assertNull(manager.getVnfResponse());
206 assertNull(manager.getVserverResponse());
208 manager.checkEventSyntax(event);
209 } catch (ControlLoopException e) {
210 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage());
212 fail("Exception in check event syntax");
214 assertNull(manager.getVnfResponse());
215 assertNull(manager.getVserverResponse());
218 event.setAAI(new HashMap<>());
219 event.getAAI().put("generic-vnf.vnf-name", "abatementTest");
221 manager.checkEventSyntax(event);
222 } catch (ControlLoopException e) {
223 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage());
225 fail("Exception in check event syntax");
227 assertNull(manager.getVnfResponse());
228 assertNull(manager.getVserverResponse());
232 public void subsequentOnsetTest() {
233 UUID requestId = UUID.randomUUID();
234 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
235 event.setClosedLoopControlName("TwoOnsetTest");
236 event.setRequestID(requestId);
237 event.setTarget("generic-vnf.vnf-id");
238 event.setClosedLoopAlarmStart(Instant.now());
239 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
240 event.setAAI(new HashMap<>());
241 event.getAAI().put("generic-vnf.vnf-name", "onsetOne");
243 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
244 VirtualControlLoopNotification notification = manager.activate(event);
246 assertNotNull(notification);
247 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
249 ControlLoopEventManager.NEW_EVENT_STATUS status = null;
251 status = manager.onNewEvent(event);
252 } catch (AAIException e) {
253 logger.warn(e.toString());
254 fail("A&AI Query Failed");
256 assertNotNull(status);
257 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
259 AAIGETVnfResponse response = manager.getVnfResponse();
260 assertNotNull(response);
261 assertNull(manager.getVserverResponse());
263 VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
264 event2.setClosedLoopControlName("TwoOnsetTest");
265 event2.setRequestID(requestId);
266 event2.setTarget("generic-vnf.vnf-id");
267 event2.setClosedLoopAlarmStart(Instant.now());
268 event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
269 event2.setAAI(new HashMap<>());
270 event2.getAAI().put("generic-vnf.vnf-name", "onsetTwo");
274 status = manager.onNewEvent(event2);
275 } catch (AAIException e) {
276 logger.warn(e.toString());
277 fail("A&AI Query Failed");
279 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
280 AAIGETVnfResponse response2 = manager.getVnfResponse();
281 assertNotNull(response2);
282 // We should not have queried AAI, so the stored response should be the same
283 assertEquals(response, response2);
284 assertNull(manager.getVserverResponse());
287 // Simulate a response
288 public static AAIGETVnfResponse getQueryByVnfID2(String urlGet, String username, String password, UUID requestID, String key) {
289 AAIGETVnfResponse response = new AAIGETVnfResponse();
291 response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491");
292 response.setVnfName("lll_vnf_010317");
293 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
294 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
295 response.setOrchestrationStatus("Created");
296 response.setInMaint("false");
297 response.setIsClosedLoopDisabled("false");
298 response.setResourceVersion("1494001988835");
299 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
301 RelationshipList relationshipList = new RelationshipList();
302 Relationship relationship = new Relationship();
303 RelationshipData relationshipData = new RelationshipData();
304 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
306 relationshipDataItem.setRelationshipKey ("customer.global-customer-id");
307 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
308 relationshipData.getRelationshipData().add(relationshipDataItem);
310 relationshipDataItem.setRelationshipKey ("service-subscription.service-type");
311 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
312 relationshipData.getRelationshipData().add(relationshipDataItem);
314 relationshipDataItem.setRelationshipKey ("service-instance.service-instance-id");
315 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
316 relationshipData.getRelationshipData().add(relationshipDataItem);
318 RelatedToProperty relatedToProperty = new RelatedToProperty();
319 RelatedToPropertyItem item = new RelatedToPropertyItem();
320 item.setPropertyKey("service-instance.service-instance-name");
321 item.setPropertyValue("lll_svc_010317");
322 relatedToProperty.getRelatedTo().add(item);
324 relationship.setRelatedTo("service-instance");
325 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");
326 relationship.setRelationshipData(relationshipData);
327 relationship.setRelatedToProperty(relatedToProperty);
329 relationshipList.getRelationshipList().add(relationship);
330 response.setRelationshipList(relationshipList);
335 public static AAIGETVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestID, String key) {
336 AAIGETVnfResponse response = new AAIGETVnfResponse();
338 response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491");
339 response.setVnfName("lll_vnf_010317");
340 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
341 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
342 response.setOrchestrationStatus("Created");
343 response.setInMaint("false");
344 response.setIsClosedLoopDisabled("false");
345 response.setResourceVersion("1494001988835");
346 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
348 RelationshipList relationshipList = new RelationshipList();
349 Relationship relationship = new Relationship();
350 RelationshipData relationshipData = new RelationshipData();
351 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
353 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
354 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
355 relationshipData.getRelationshipData().add(relationshipDataItem);
357 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
358 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
359 relationshipData.getRelationshipData().add(relationshipDataItem);
361 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
362 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
363 relationshipData.getRelationshipData().add(relationshipDataItem);
365 RelatedToProperty relatedToProperty = new RelatedToProperty();
366 RelatedToPropertyItem item = new RelatedToPropertyItem();
367 item.setPropertyKey("service-instance.service-instance-name");
368 item.setPropertyValue("lll_svc_010317");
369 relatedToProperty.getRelatedTo().add(item);
371 relationship.setRelatedTo("service-instance");
372 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");
373 relationship.setRelationshipData(relationshipData);
374 relationship.setRelatedToProperty(relatedToProperty);
376 relationshipList.getRelationshipList().add(relationship);
377 response.setRelationshipList(relationshipList);
382 public static AAIGETVserverResponse getQueryByVserverName2(String urlGet, String username, String password, UUID requestID, String key) {
383 AAIGETVserverResponse response = new AAIGETVserverResponse();
385 response.setVserverID("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
386 response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
387 response.setVserverName2("vjunos0");
388 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");
389 response.setInMaint("false");
390 response.setIsClosedLoopDisabled("false");
391 response.setResourceVersion("1494001931513");
393 RelationshipList relationshipList = new RelationshipList();
394 Relationship relationship = new Relationship();
395 RelationshipData relationshipData = new RelationshipData();
396 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
398 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
399 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
400 relationshipData.getRelationshipData().add(relationshipDataItem);
402 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
403 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
404 relationshipData.getRelationshipData().add(relationshipDataItem);
406 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
407 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
408 relationshipData.getRelationshipData().add(relationshipDataItem);
410 RelatedToProperty relatedToProperty = new RelatedToProperty();
411 RelatedToPropertyItem item = new RelatedToPropertyItem();
412 item.setPropertyKey("service-instance.service-instance-name");
413 item.setPropertyValue("lll_svc_010317");
414 relatedToProperty.getRelatedTo().add(item);
416 relationship.setRelatedTo("service-instance");
417 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");
418 relationship.setRelationshipData(relationshipData);
419 relationship.setRelatedToProperty(relatedToProperty);
421 relationshipList.getRelationshipList().add(relationship);
422 response.setRelationshipList(relationshipList);
428 public void testMethods() {
429 ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", UUID.randomUUID());
431 clem.setActivated(true);
432 assertEquals(true, clem.isActivated());
434 clem.setControlLoopResult("SUCCESS");
435 assertEquals("SUCCESS", clem.getControlLoopResult());
437 clem.setControlLoopTimedOut();
438 assertEquals(true, clem.isControlLoopTimedOut());
440 clem.setNumAbatements(12345);
441 assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
443 clem.setNumOnsets(54321);
444 assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
446 assertNull(clem.getOnsetEvent());
447 assertNull(clem.getAbatementEvent());
448 assertNull(clem.getProcessor());
450 assertEquals(true, clem.isActive());
451 assertEquals(false, clem.releaseLock());
452 assertEquals(true, clem.isControlLoopTimedOut());
454 assertNull(clem.unlockCurrentOperation());
458 public void testAlreadyActivated() {
459 UUID requestId = UUID.randomUUID();
460 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
461 event.setClosedLoopControlName("TwoOnsetTest");
462 event.setRequestID(requestId);
463 event.setTarget("generic-vnf.vnf-id");
464 event.setClosedLoopAlarmStart(Instant.now());
465 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
466 event.setAAI(new HashMap<>());
467 event.getAAI().put("generic-vnf.vnf-name", "onsetOne");
469 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
470 manager.setActivated(true);
471 VirtualControlLoopNotification notification = manager.activate(event);
472 assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
476 public void testActivationYaml() throws IOException {
477 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
478 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
480 InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
481 String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
483 UUID requestId = UUID.randomUUID();
484 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
485 event.setClosedLoopControlName("TwoOnsetTest");
486 event.setRequestID(requestId);
487 event.setTarget("generic-vnf.vnf-id");
488 event.setClosedLoopAlarmStart(Instant.now());
489 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
490 event.setAAI(new HashMap<>());
491 event.getAAI().put("generic-vnf.vnf-name", "onsetOne");
493 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
495 // Null YAML should fail
496 VirtualControlLoopNotification notificationNull = manager.activate(null, event);
497 assertNotNull(notificationNull);
498 assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification());
500 // Empty YAML should fail
501 VirtualControlLoopNotification notificationEmpty = manager.activate("", event);
502 assertNotNull(notificationEmpty);
503 assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification());
505 // Bad YAML should fail
506 VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event);
507 assertNotNull(notificationBad);
508 assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification());
510 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
511 assertNotNull(notification);
512 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
514 // Another activate should fail
515 VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event);
516 assertNotNull(notificationActive);
517 assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification());
521 public void testControlLoopFinal() throws ControlLoopException, IOException {
522 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
523 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
525 UUID requestId = UUID.randomUUID();
526 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
527 event.setClosedLoopControlName("TwoOnsetTest");
528 event.setRequestID(requestId);
529 event.setTarget("generic-vnf.vnf-id");
530 event.setClosedLoopAlarmStart(Instant.now());
531 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
532 event.setAAI(new HashMap<>());
533 event.getAAI().put("generic-vnf.vnf-name", "onsetOne");
535 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
537 manager.isControlLoopFinal();
538 fail("test should throw an exception here");
539 } catch (ControlLoopException e) {
540 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
543 manager.setActivated(true);
545 manager.isControlLoopFinal();
546 fail("test should throw an exception here");
547 } catch (ControlLoopException e) {
548 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
551 manager.setActivated(false);
552 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
553 assertNotNull(notification);
554 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
556 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
557 assertNull(clfNotification);
559 manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
560 clfNotification = manager.isControlLoopFinal();
561 assertNotNull(clfNotification);
562 assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
564 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
565 notification = manager.activate(yamlString, event);
566 assertNotNull(notification);
567 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
569 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
570 clfNotification = manager.isControlLoopFinal();
571 assertNotNull(clfNotification);
572 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
574 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
575 notification = manager.activate(yamlString, event);
576 assertNotNull(notification);
577 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
579 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
580 clfNotification = manager.isControlLoopFinal();
581 assertNotNull(clfNotification);
582 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
584 manager.setControlLoopTimedOut();
585 clfNotification = manager.isControlLoopFinal();
586 assertNotNull(clfNotification);
587 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
591 public void testProcessControlLoop() throws ControlLoopException, IOException, AAIException {
592 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
593 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
595 UUID requestId = UUID.randomUUID();
596 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
597 event.setClosedLoopControlName("TwoOnsetTest");
598 event.setRequestID(requestId);
599 event.setTarget("generic-vnf.vnf-id");
600 event.setClosedLoopAlarmStart(Instant.now());
601 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
602 event.setAAI(new HashMap<>());
603 event.getAAI().put("generic-vnf.vnf-name", "onsetOne");
605 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
607 manager.processControlLoop();
608 fail("test should throw an exception here");
609 } catch (Exception e) {
610 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
613 manager.setActivated(true);
615 manager.processControlLoop();
616 fail("test should throw an exception here");
617 } catch (Exception e) {
618 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
621 manager.setActivated(false);
622 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
623 assertNotNull(notification);
624 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
626 ControlLoopOperationManager clom = manager.processControlLoop();
628 assertNull(clom.getOperationResult());
630 // Test operation in progress
632 manager.processControlLoop();
633 fail("test should throw an exception here");
634 } catch (Exception e) {
635 assertEquals("Already working an Operation, do not call this method.", e.getMessage());
638 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
639 notification = manager.activate(yamlString, event);
640 assertNotNull(notification);
641 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
643 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
644 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
645 assertNotNull(clfNotification);
646 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
648 // Test operation completed
650 manager.processControlLoop();
651 fail("test should throw an exception here");
652 } catch (Exception e) {
653 assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage());
656 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
657 notification = manager.activate(yamlString, event);
658 assertNotNull(notification);
659 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
660 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
662 // Test operation with no next policy defined
664 manager.processControlLoop();
665 fail("test should throw an exception here");
666 } catch (Exception e) {
667 assertEquals("The target type is null", e.getMessage());
672 public void testFinishOperation() throws IOException, ControlLoopException, AAIException {
673 InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
674 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
676 InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
677 String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
679 UUID requestId = UUID.randomUUID();
680 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
681 event.setClosedLoopControlName("TwoOnsetTest");
682 event.setRequestID(requestId);
683 event.setTarget("generic-vnf.vnf-id");
684 event.setClosedLoopAlarmStart(Instant.now());
685 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
686 event.setAAI(new HashMap<>());
687 event.getAAI().put("generic-vnf.vnf-name", "onsetOne");
689 ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
691 manager.finishOperation(null);
692 fail("test should throw an exception here");
693 } catch (Exception e) {
694 assertEquals("No operation to finish.", e.getMessage());
697 manager.setActivated(true);
699 manager.finishOperation(null);
700 fail("test should throw an exception here");
701 } catch (Exception e) {
702 assertEquals("No operation to finish.", e.getMessage());
705 manager.setActivated(false);
706 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
707 assertNotNull(notification);
708 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
711 manager.lockCurrentOperation();
712 fail("test should throw an exception here");
713 } catch (Exception e) {
714 assertEquals("Do not have a current operation.", e.getMessage());
717 assertNull(manager.unlockCurrentOperation());
719 ControlLoopOperationManager clom = manager.processControlLoop();
721 assertNull(clom.getOperationResult());
723 LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation();
724 assertNotNull(lockLock);
726 LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
727 assertNotNull(lockLockAgain);
728 assertEquals(lockLock.getB(), lockLockAgain.getB());
730 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
731 assertNull(manager.unlockCurrentOperation());
733 lockLock = manager.lockCurrentOperation();
734 assertNotNull(lockLock);
735 PolicyGuard.unlockTarget(lockLock.getB());
736 assertNull(manager.unlockCurrentOperation());
738 clom.startOperation(event);
740 // This call should be exception free
741 manager.finishOperation(clom);
743 ControlLoopEventManager otherManager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID());
744 VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
745 assertNotNull(otherNotification);
746 assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
748 ControlLoopOperationManager otherClom = otherManager.processControlLoop();
749 assertNotNull(otherClom);
750 assertNull(otherClom.getOperationResult());
752 otherManager.finishOperation(clom);
756 public void testOnNewEvent() throws IOException, AAIException {
757 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
758 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
760 UUID requestId = UUID.randomUUID();
761 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
762 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
763 onsetEvent.setRequestID(requestId);
764 onsetEvent.setTarget("generic-vnf.vnf-id");
765 onsetEvent.setClosedLoopAlarmStart(Instant.now());
766 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
767 onsetEvent.setAAI(new HashMap<>());
768 onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne");
770 VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
771 abatedEvent.setClosedLoopControlName("TwoOnsetTest");
772 abatedEvent.setRequestID(requestId);
773 abatedEvent.setTarget("generic-vnf.vnf-id");
774 abatedEvent.setClosedLoopAlarmStart(Instant.now());
775 abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
776 abatedEvent.setAAI(new HashMap<>());
777 abatedEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne");
779 ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID());
780 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
781 assertNotNull(notification);
782 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
784 assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
785 assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
786 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
788 VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
789 checkSyntaxEvent.setAAI(null);
790 checkSyntaxEvent.setClosedLoopAlarmEnd(null);
791 checkSyntaxEvent.setClosedLoopAlarmStart(null);
792 checkSyntaxEvent.setClosedLoopControlName(null);
793 checkSyntaxEvent.setClosedLoopEventClient(null);
794 checkSyntaxEvent.setClosedLoopEventStatus(null);
795 checkSyntaxEvent.setFrom(null);
796 checkSyntaxEvent.setPolicyName(null);
797 checkSyntaxEvent.setPolicyScope(null);
798 checkSyntaxEvent.setPolicyVersion(null);
799 checkSyntaxEvent.setRequestID(null);
800 checkSyntaxEvent.setTarget(null);
801 checkSyntaxEvent.setTargetType(null);
802 checkSyntaxEvent.setVersion(null);
804 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
806 checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
807 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
809 checkSyntaxEvent.setClosedLoopControlName(null);
810 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
812 checkSyntaxEvent.setClosedLoopControlName("");
813 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
815 checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
816 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
818 checkSyntaxEvent.setRequestID(null);
819 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
821 checkSyntaxEvent.setRequestID(requestId);
822 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
824 checkSyntaxEvent.setAAI(null);
825 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
827 checkSyntaxEvent.setAAI(new HashMap<>());
828 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
830 checkSyntaxEvent.setTarget("");
831 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
833 checkSyntaxEvent.setTarget(null);
834 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
836 checkSyntaxEvent.setTarget("");
837 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
839 checkSyntaxEvent.setTarget("OZ");
840 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
842 checkSyntaxEvent.setTarget("VM_NAME");
843 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
845 checkSyntaxEvent.setTarget("VNF_NAME");
846 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
848 checkSyntaxEvent.setTarget("vserver.vserver-name");
849 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
851 checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
852 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
854 checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
855 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
857 checkSyntaxEvent.setAAI(null);
858 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
860 checkSyntaxEvent.setAAI(new HashMap<>());
861 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
863 checkSyntaxEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne");
864 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
866 checkSyntaxEvent.getAAI().put("vserver.vserver-name", "onsetOne");
867 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
869 checkSyntaxEvent.getAAI().put("generic-vnf.vnf-id", "onsetOne");
870 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
874 public void testControlLoopTimeout() throws IOException {
875 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
876 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
878 UUID requestId = UUID.randomUUID();
879 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
880 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
881 onsetEvent.setRequestID(requestId);
882 onsetEvent.setTarget("generic-vnf.vnf-id");
883 onsetEvent.setClosedLoopAlarmStart(Instant.now());
884 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
885 onsetEvent.setAAI(new HashMap<>());
886 onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne");
888 ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID());
889 assertTrue(0 == manager.getControlLoopTimeout(null));
890 assertTrue(120 == manager.getControlLoopTimeout(120));
892 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
893 assertNotNull(notification);
894 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
896 assertTrue(60 == manager.getControlLoopTimeout(null));
900 public void testQueryAAI() throws IOException, AAIException {
901 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
902 String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
904 UUID requestId = UUID.randomUUID();
905 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
906 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
907 onsetEvent.setRequestID(requestId);
908 onsetEvent.setTarget("generic-vnf.vnf-id");
909 onsetEvent.setClosedLoopAlarmStart(Instant.now());
910 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
911 onsetEvent.setAAI(new HashMap<>());
912 onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne");
914 ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID());
915 manager.queryAai(onsetEvent);
917 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
918 assertNotNull(notification);
919 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
921 manager.queryAai(onsetEvent);
923 onsetEvent.getAAI().put("generic-vnf.is-closed-loop-disabled", "true");
925 manager.queryAai(onsetEvent);
926 fail("test should throw an exception here");
927 } catch (Exception e) {
928 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
930 onsetEvent.getAAI().put("vserver.is-closed-loop-disabled", "true");
932 manager.queryAai(onsetEvent);
933 fail("test should throw an exception here");
934 } catch (Exception e) {
935 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
937 onsetEvent.getAAI().remove("generic-vnf.is-closed-loop-disabled");
939 manager.queryAai(onsetEvent);
940 fail("test should throw an exception here");
941 } catch (Exception e) {
942 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
944 onsetEvent.getAAI().remove("vserver.is-closed-loop-disabled");
945 manager.queryAai(onsetEvent);
947 onsetEvent.getAAI().put("generic-vnf.is-closed-loop-disabled", "false");
948 manager.queryAai(onsetEvent);
949 onsetEvent.getAAI().put("vserver.is-closed-loop-disabled", "false");
950 manager.queryAai(onsetEvent);
952 onsetEvent.getAAI().remove("generic-vnf.vnf-id");
953 onsetEvent.getAAI().remove("generic-vnf.vnf-name");
954 onsetEvent.getAAI().remove("vserver.vserver-name");
955 manager.queryAai(onsetEvent);
957 onsetEvent.getAAI().put("vserver.vserver-name", "AVserver");
958 manager.queryAai(onsetEvent);
960 onsetEvent.getAAI().put("generic-vnf.vnf-name", "AVNFName");
961 manager.queryAai(onsetEvent);
963 onsetEvent.getAAI().put("generic-vnf.vnf-id", "AVNFID");
964 manager.queryAai(onsetEvent);
966 onsetEvent.getAAI().remove("vserver.vserver-name");
967 manager.queryAai(onsetEvent);
969 onsetEvent.getAAI().remove("generic-vnf.vnf-name");
970 manager.queryAai(onsetEvent);
973 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:9999");
976 manager.queryAai(onsetEvent);
977 fail("test should throw an exception here");
978 } catch (Exception e) {
979 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AAIException: AAI Response is null (query by vnf-id)", e.getMessage());
982 onsetEvent.getAAI().remove("generic-vnf.vnf-id");
983 onsetEvent.getAAI().put("generic-vnf.vnf-name", "AVNFName");
985 manager.queryAai(onsetEvent);
986 fail("test should throw an exception here");
987 } catch (Exception e) {
988 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AAIException: AAI Response is null (query by vnf-name)", e.getMessage());
991 onsetEvent.getAAI().remove("generic-vnf.vnf-name");
992 onsetEvent.getAAI().put("vserver.vserver-name", "AVserver");
994 manager.queryAai(onsetEvent);
995 fail("test should throw an exception here");
996 } catch (Exception e) {
997 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AAIException: AAI Response is null (query by vserver-name)", e.getMessage());
1000 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");