2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 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;
75 onset = new VirtualControlLoopEvent();
76 onset.setClosedLoopControlName("ControlLoop-vUSP");
77 onset.setRequestId(UUID.randomUUID());
78 onset.setTarget("VM_NAME");
79 onset.setClosedLoopAlarmStart(Instant.now());
80 onset.setAai(new HashMap<String, String>());
81 onset.getAai().put("cloud-region.identity-url", "foo");
82 onset.getAai().put("vserver.selflink", "bar");
83 onset.getAai().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
84 onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
91 public static void setUpSimulator() {
93 org.onap.policy.simulators.Util.buildAaiSim();
94 } catch (Exception e) {
97 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
98 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
99 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
103 public static void tearDownSimulator() {
104 HttpServletServer.factory.destroy();
108 public void testAaiVnfInfo() {
109 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
110 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
112 AaiGetVnfResponse response = getQueryByVnfId2(
113 PolicyEngine.manager.getEnvironmentProperty("aai.url")
114 + "/aai/v11/network/generic-vnfs/generic-vnf/",
115 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
116 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
117 "5e49ca06-2972-4532-9ed4-6d071588d792");
118 assertNotNull(response);
119 logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
120 } catch (Exception e) {
121 logger.error("testAAIVnfInfo Exception: ", e);
122 fail(e.getMessage());
127 public void testAaiVnfInfo2() {
128 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
129 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
131 AaiGetVnfResponse response = getQueryByVnfName2(
132 PolicyEngine.manager.getEnvironmentProperty("aai.url")
133 + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
134 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
135 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
136 assertNotNull(response);
137 logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
138 } catch (Exception e) {
139 logger.error("testAAIVnfInfo2 Exception: ", e);
140 fail(e.getMessage());
145 public void testAaiVserver() {
146 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
147 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
149 AaiGetVserverResponse response = getQueryByVserverName2(
150 PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
151 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
152 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
153 "USMSO1SX7NJ0103UJZZ01-vjunos0");
154 assertNotNull(response);
155 logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
156 } catch (Exception e) {
157 logger.error("testAAIVserver Exception: ", e);
158 fail(e.getMessage());
163 public void testIsClosedLoopDisabled() {
165 // Load up the policy
167 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
168 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
171 logger.info("testIsClosedLoopDisabled --");
172 AaiGetVnfResponse response = getQueryByVnfId2(
173 PolicyEngine.manager.getEnvironmentProperty("aai.url")
174 + "/aai/v11/network/generic-vnfs/generic-vnf/",
175 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
176 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
177 "5e49ca06-2972-4532-9ed4-6d071588d792");
178 assertNotNull(response);
181 // boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
182 // logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled);
184 response = getQueryByVnfName2(
185 PolicyEngine.manager.getEnvironmentProperty("aai.url")
186 + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
187 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
188 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
189 assertNotNull(response);
191 // disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
192 // logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled);
194 AaiGetVserverResponse response2 = getQueryByVserverName2(
195 PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
196 PolicyEngine.manager.getEnvironmentProperty("aai.user"),
197 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
198 "USMSO1SX7NJ0103UJZZ01-vjunos0");
199 assertNotNull(response2);
201 // disabled = ControlLoopEventManager.isClosedLoopDisabled(response2);
202 // logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled);
203 } catch (Exception e) {
204 fail(e.getMessage());
209 public void abatemetCheckEventSyntaxTest() {
210 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
211 event.setClosedLoopControlName("abatementAAI");
212 event.setRequestId(UUID.randomUUID());
213 event.setTarget("generic-vnf.vnf-id");
214 event.setClosedLoopAlarmStart(Instant.now());
215 event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
216 ControlLoopEventManager manager =
217 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
218 assertNull(manager.getVnfResponse());
219 assertNull(manager.getVserverResponse());
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());
231 event.setAai(new HashMap<>());
232 event.getAai().put("generic-vnf.vnf-name", "abatementTest");
234 manager.checkEventSyntax(event);
235 } catch (ControlLoopException e) {
236 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
238 fail("Exception in check event syntax");
240 assertNull(manager.getVnfResponse());
241 assertNull(manager.getVserverResponse());
245 public void subsequentOnsetTest() {
246 UUID requestId = UUID.randomUUID();
247 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
248 event.setClosedLoopControlName("TwoOnsetTest");
249 event.setRequestId(requestId);
250 event.setTarget("generic-vnf.vnf-id");
251 event.setClosedLoopAlarmStart(Instant.now());
252 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
253 event.setAai(new HashMap<>());
254 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
256 ControlLoopEventManager manager =
257 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
258 VirtualControlLoopNotification notification = manager.activate(event);
260 assertNotNull(notification);
261 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
263 ControlLoopEventManager.NEW_EVENT_STATUS status = null;
265 status = manager.onNewEvent(event);
266 } catch (AaiException e) {
267 logger.warn(e.toString());
268 fail("A&AI Query Failed");
270 assertNotNull(status);
271 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
273 AaiGetVnfResponse response = manager.getVnfResponse();
274 assertNotNull(response);
275 assertNull(manager.getVserverResponse());
277 VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
278 event2.setClosedLoopControlName("TwoOnsetTest");
279 event2.setRequestId(requestId);
280 event2.setTarget("generic-vnf.vnf-id");
281 event2.setClosedLoopAlarmStart(Instant.now());
282 event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
283 event2.setAai(new HashMap<>());
284 event2.getAai().put("generic-vnf.vnf-name", "onsetTwo");
288 status = manager.onNewEvent(event2);
289 } catch (AaiException e) {
290 logger.warn(e.toString());
291 fail("A&AI Query Failed");
293 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
294 AaiGetVnfResponse response2 = manager.getVnfResponse();
295 assertNotNull(response2);
296 // We should not have queried AAI, so the stored response should be the same
297 assertEquals(response, response2);
298 assertNull(manager.getVserverResponse());
302 * Simulate a response.
304 public static AaiGetVnfResponse getQueryByVnfId2(String urlGet, String username, String password, UUID requestId,
306 AaiGetVnfResponse response = new AaiGetVnfResponse();
308 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
309 response.setVnfName("lll_vnf_010317");
310 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
311 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
312 response.setOrchestrationStatus("Created");
313 response.setInMaint("false");
314 response.setIsClosedLoopDisabled("false");
315 response.setResourceVersion("1494001988835");
316 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
318 final RelationshipList relationshipList = new RelationshipList();
319 final Relationship relationship = new Relationship();
320 RelationshipData relationshipData = new RelationshipData();
321 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
323 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
324 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
325 relationshipData.getRelationshipData().add(relationshipDataItem);
327 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
328 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
329 relationshipData.getRelationshipData().add(relationshipDataItem);
331 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
332 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
333 relationshipData.getRelationshipData().add(relationshipDataItem);
335 RelatedToProperty relatedToProperty = new RelatedToProperty();
336 RelatedToPropertyItem item = new RelatedToPropertyItem();
337 item.setPropertyKey("service-instance.service-instance-name");
338 item.setPropertyValue("lll_svc_010317");
339 relatedToProperty.getRelatedTo().add(item);
341 relationship.setRelatedTo("service-instance");
342 relationship.setRelatedLink(
343 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
344 + "/MSO-dev-service-type/service-instances/service-instance/"
345 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
346 relationship.setRelationshipData(relationshipData);
347 relationship.setRelatedToProperty(relatedToProperty);
349 relationshipList.getRelationshipList().add(relationship);
350 response.setRelationshipList(relationshipList);
356 * Simulate a response.
358 public static AaiGetVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestId,
360 AaiGetVnfResponse response = new AaiGetVnfResponse();
362 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
363 response.setVnfName("lll_vnf_010317");
364 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
365 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
366 response.setOrchestrationStatus("Created");
367 response.setInMaint("false");
368 response.setIsClosedLoopDisabled("false");
369 response.setResourceVersion("1494001988835");
370 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
372 final RelationshipList relationshipList = new RelationshipList();
373 final Relationship relationship = new Relationship();
374 RelationshipData relationshipData = new RelationshipData();
375 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
377 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
378 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
379 relationshipData.getRelationshipData().add(relationshipDataItem);
381 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
382 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
383 relationshipData.getRelationshipData().add(relationshipDataItem);
385 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
386 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
387 relationshipData.getRelationshipData().add(relationshipDataItem);
389 RelatedToProperty relatedToProperty = new RelatedToProperty();
390 RelatedToPropertyItem item = new RelatedToPropertyItem();
391 item.setPropertyKey("service-instance.service-instance-name");
392 item.setPropertyValue("lll_svc_010317");
393 relatedToProperty.getRelatedTo().add(item);
395 relationship.setRelatedTo("service-instance");
396 relationship.setRelatedLink(
397 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
398 + "/MSO-dev-service-type/service-instances/service-instance/"
399 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
400 relationship.setRelationshipData(relationshipData);
401 relationship.setRelatedToProperty(relatedToProperty);
403 relationshipList.getRelationshipList().add(relationship);
404 response.setRelationshipList(relationshipList);
410 * Simulate a response.
412 public static AaiGetVserverResponse getQueryByVserverName2(String urlGet, String username, String password,
413 UUID requestId, String key) {
414 AaiGetVserverResponse response = new AaiGetVserverResponse();
416 response.setVserverId("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
417 response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
418 response.setVserverName2("vjunos0");
419 response.setVserverSelflink(
420 "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");
421 response.setInMaint("false");
422 response.setIsClosedLoopDisabled("false");
423 response.setResourceVersion("1494001931513");
425 final RelationshipList relationshipList = new RelationshipList();
426 final Relationship relationship = new Relationship();
427 RelationshipData relationshipData = new RelationshipData();
428 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
430 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
431 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
432 relationshipData.getRelationshipData().add(relationshipDataItem);
434 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
435 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
436 relationshipData.getRelationshipData().add(relationshipDataItem);
438 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
439 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
440 relationshipData.getRelationshipData().add(relationshipDataItem);
442 RelatedToProperty relatedToProperty = new RelatedToProperty();
443 RelatedToPropertyItem item = new RelatedToPropertyItem();
444 item.setPropertyKey("service-instance.service-instance-name");
445 item.setPropertyValue("lll_svc_010317");
446 relatedToProperty.getRelatedTo().add(item);
448 relationship.setRelatedTo("service-instance");
449 relationship.setRelatedLink(
450 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
451 + "/MSO-dev-service-type/service-instances/service-instance/"
452 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
453 relationship.setRelationshipData(relationshipData);
454 relationship.setRelatedToProperty(relatedToProperty);
456 relationshipList.getRelationshipList().add(relationship);
457 response.setRelationshipList(relationshipList);
463 public void testMethods() {
464 ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", UUID.randomUUID());
466 clem.setActivated(true);
467 assertEquals(true, clem.isActivated());
469 clem.setControlLoopResult("SUCCESS");
470 assertEquals("SUCCESS", clem.getControlLoopResult());
472 clem.setControlLoopTimedOut();
473 assertEquals(true, clem.isControlLoopTimedOut());
475 clem.setNumAbatements(12345);
476 assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
478 clem.setNumOnsets(54321);
479 assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
481 assertNull(clem.getOnsetEvent());
482 assertNull(clem.getAbatementEvent());
483 assertNull(clem.getProcessor());
485 assertEquals(true, clem.isActive());
486 assertEquals(false, clem.releaseLock());
487 assertEquals(true, clem.isControlLoopTimedOut());
489 assertNull(clem.unlockCurrentOperation());
493 public void testAlreadyActivated() {
494 UUID requestId = UUID.randomUUID();
495 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
496 event.setClosedLoopControlName("TwoOnsetTest");
497 event.setRequestId(requestId);
498 event.setTarget("generic-vnf.vnf-id");
499 event.setClosedLoopAlarmStart(Instant.now());
500 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
501 event.setAai(new HashMap<>());
502 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
504 ControlLoopEventManager manager =
505 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
506 manager.setActivated(true);
507 VirtualControlLoopNotification notification = manager.activate(event);
508 assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
512 public void testActivationYaml() throws IOException {
513 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
514 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
516 InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
517 final String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
519 UUID requestId = UUID.randomUUID();
520 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
521 event.setClosedLoopControlName("TwoOnsetTest");
522 event.setRequestId(requestId);
523 event.setTarget("generic-vnf.vnf-id");
524 event.setClosedLoopAlarmStart(Instant.now());
525 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
526 event.setAai(new HashMap<>());
527 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
529 ControlLoopEventManager manager =
530 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
532 // Null YAML should fail
533 VirtualControlLoopNotification notificationNull = manager.activate(null, event);
534 assertNotNull(notificationNull);
535 assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification());
537 // Empty YAML should fail
538 VirtualControlLoopNotification notificationEmpty = manager.activate("", event);
539 assertNotNull(notificationEmpty);
540 assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification());
542 // Bad YAML should fail
543 VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event);
544 assertNotNull(notificationBad);
545 assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification());
547 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
548 assertNotNull(notification);
549 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
551 // Another activate should fail
552 VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event);
553 assertNotNull(notificationActive);
554 assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification());
558 public void testControlLoopFinal() throws ControlLoopException, IOException {
559 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
560 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
562 UUID requestId = UUID.randomUUID();
563 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
564 event.setClosedLoopControlName("TwoOnsetTest");
565 event.setRequestId(requestId);
566 event.setTarget("generic-vnf.vnf-id");
567 event.setClosedLoopAlarmStart(Instant.now());
568 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
569 event.setAai(new HashMap<>());
570 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
572 ControlLoopEventManager manager =
573 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
575 manager.isControlLoopFinal();
576 fail("test should throw an exception here");
577 } catch (ControlLoopException e) {
578 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
581 manager.setActivated(true);
583 manager.isControlLoopFinal();
584 fail("test should throw an exception here");
585 } catch (ControlLoopException e) {
586 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
589 manager.setActivated(false);
590 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
591 assertNotNull(notification);
592 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
594 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
595 assertNull(clfNotification);
597 manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
598 clfNotification = manager.isControlLoopFinal();
599 assertNotNull(clfNotification);
600 assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
602 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
603 notification = manager.activate(yamlString, event);
604 assertNotNull(notification);
605 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
607 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
608 clfNotification = manager.isControlLoopFinal();
609 assertNotNull(clfNotification);
610 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
612 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
613 notification = manager.activate(yamlString, event);
614 assertNotNull(notification);
615 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
617 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
618 clfNotification = manager.isControlLoopFinal();
619 assertNotNull(clfNotification);
620 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
622 manager.setControlLoopTimedOut();
623 clfNotification = manager.isControlLoopFinal();
624 assertNotNull(clfNotification);
625 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
629 public void testProcessControlLoop() throws ControlLoopException, IOException, AaiException {
630 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
631 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
633 UUID requestId = UUID.randomUUID();
634 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
635 event.setClosedLoopControlName("TwoOnsetTest");
636 event.setRequestId(requestId);
637 event.setTarget("generic-vnf.vnf-id");
638 event.setClosedLoopAlarmStart(Instant.now());
639 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
640 event.setAai(new HashMap<>());
641 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
643 ControlLoopEventManager manager =
644 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
646 manager.processControlLoop();
647 fail("test should throw an exception here");
648 } catch (Exception e) {
649 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
652 manager.setActivated(true);
654 manager.processControlLoop();
655 fail("test should throw an exception here");
656 } catch (Exception e) {
657 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
660 manager.setActivated(false);
661 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
662 assertNotNull(notification);
663 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
665 ControlLoopOperationManager clom = manager.processControlLoop();
667 assertNull(clom.getOperationResult());
669 // Test operation in progress
671 manager.processControlLoop();
672 fail("test should throw an exception here");
673 } catch (Exception e) {
674 assertEquals("Already working an Operation, do not call this method.", e.getMessage());
677 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
678 notification = manager.activate(yamlString, event);
679 assertNotNull(notification);
680 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
682 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
683 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
684 assertNotNull(clfNotification);
685 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
687 // Test operation completed
689 manager.processControlLoop();
690 fail("test should throw an exception here");
691 } catch (Exception e) {
692 assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage());
695 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
696 notification = manager.activate(yamlString, event);
697 assertNotNull(notification);
698 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
699 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
701 // Test operation with no next policy defined
703 manager.processControlLoop();
704 fail("test should throw an exception here");
705 } catch (Exception e) {
706 assertEquals("The target type is null", e.getMessage());
711 public void testFinishOperation() throws IOException, ControlLoopException, AaiException {
712 InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
713 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
715 InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
716 final String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
718 UUID requestId = UUID.randomUUID();
719 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
720 event.setClosedLoopControlName("TwoOnsetTest");
721 event.setRequestId(requestId);
722 event.setTarget("generic-vnf.vnf-id");
723 event.setClosedLoopAlarmStart(Instant.now());
724 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
725 event.setAai(new HashMap<>());
726 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
728 ControlLoopEventManager manager =
729 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
731 manager.finishOperation(null);
732 fail("test should throw an exception here");
733 } catch (Exception e) {
734 assertEquals("No operation to finish.", e.getMessage());
737 manager.setActivated(true);
739 manager.finishOperation(null);
740 fail("test should throw an exception here");
741 } catch (Exception e) {
742 assertEquals("No operation to finish.", e.getMessage());
745 manager.setActivated(false);
746 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
747 assertNotNull(notification);
748 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
751 manager.lockCurrentOperation();
752 fail("test should throw an exception here");
753 } catch (Exception e) {
754 assertEquals("Do not have a current operation.", e.getMessage());
757 assertNull(manager.unlockCurrentOperation());
759 ControlLoopOperationManager clom = manager.processControlLoop();
761 assertNull(clom.getOperationResult());
763 LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation();
764 assertNotNull(lockLock);
766 LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
767 assertNotNull(lockLockAgain);
768 assertEquals(lockLock.getB(), lockLockAgain.getB());
770 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
771 assertNull(manager.unlockCurrentOperation());
773 lockLock = manager.lockCurrentOperation();
774 assertNotNull(lockLock);
775 PolicyGuard.unlockTarget(lockLock.getB());
776 assertNull(manager.unlockCurrentOperation());
778 clom.startOperation(event);
780 // This call should be exception free
781 manager.finishOperation(clom);
783 ControlLoopEventManager otherManager =
784 new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
785 VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
786 assertNotNull(otherNotification);
787 assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
789 ControlLoopOperationManager otherClom = otherManager.processControlLoop();
790 assertNotNull(otherClom);
791 assertNull(otherClom.getOperationResult());
793 otherManager.finishOperation(clom);
797 public void testOnNewEvent() throws IOException, AaiException {
798 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
799 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
801 UUID requestId = UUID.randomUUID();
802 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
803 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
804 onsetEvent.setRequestId(requestId);
805 onsetEvent.setTarget("generic-vnf.vnf-id");
806 onsetEvent.setClosedLoopAlarmStart(Instant.now());
807 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
808 onsetEvent.setAai(new HashMap<>());
809 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
811 VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
812 abatedEvent.setClosedLoopControlName("TwoOnsetTest");
813 abatedEvent.setRequestId(requestId);
814 abatedEvent.setTarget("generic-vnf.vnf-id");
815 abatedEvent.setClosedLoopAlarmStart(Instant.now());
816 abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
817 abatedEvent.setAai(new HashMap<>());
818 abatedEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
820 ControlLoopEventManager manager =
821 new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
822 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
823 assertNotNull(notification);
824 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
826 assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
827 assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
828 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
830 VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
831 checkSyntaxEvent.setAai(null);
832 checkSyntaxEvent.setClosedLoopAlarmEnd(null);
833 checkSyntaxEvent.setClosedLoopAlarmStart(null);
834 checkSyntaxEvent.setClosedLoopControlName(null);
835 checkSyntaxEvent.setClosedLoopEventClient(null);
836 checkSyntaxEvent.setClosedLoopEventStatus(null);
837 checkSyntaxEvent.setFrom(null);
838 checkSyntaxEvent.setPolicyName(null);
839 checkSyntaxEvent.setPolicyScope(null);
840 checkSyntaxEvent.setPolicyVersion(null);
841 checkSyntaxEvent.setRequestId(null);
842 checkSyntaxEvent.setTarget(null);
843 checkSyntaxEvent.setTargetType(null);
844 checkSyntaxEvent.setVersion(null);
846 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
848 checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
849 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
851 checkSyntaxEvent.setClosedLoopControlName(null);
852 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
854 checkSyntaxEvent.setClosedLoopControlName("");
855 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
857 checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
858 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
860 checkSyntaxEvent.setRequestId(null);
861 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
863 checkSyntaxEvent.setRequestId(requestId);
864 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
866 checkSyntaxEvent.setAai(null);
867 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
869 checkSyntaxEvent.setAai(new HashMap<>());
870 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
872 checkSyntaxEvent.setTarget("");
873 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
875 checkSyntaxEvent.setTarget(null);
876 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
878 checkSyntaxEvent.setTarget("");
879 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
881 checkSyntaxEvent.setTarget("OZ");
882 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
884 checkSyntaxEvent.setTarget("VM_NAME");
885 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
887 checkSyntaxEvent.setTarget("VNF_NAME");
888 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
890 checkSyntaxEvent.setTarget("vserver.vserver-name");
891 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
893 checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
894 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
896 checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
897 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
899 checkSyntaxEvent.setAai(null);
900 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
902 checkSyntaxEvent.setAai(new HashMap<>());
903 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
905 checkSyntaxEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
906 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
908 checkSyntaxEvent.getAai().put("vserver.vserver-name", "onsetOne");
909 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
911 checkSyntaxEvent.getAai().put("generic-vnf.vnf-id", "onsetOne");
912 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
916 public void testControlLoopTimeout() throws IOException {
917 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
918 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
920 UUID requestId = UUID.randomUUID();
921 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
922 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
923 onsetEvent.setRequestId(requestId);
924 onsetEvent.setTarget("generic-vnf.vnf-id");
925 onsetEvent.setClosedLoopAlarmStart(Instant.now());
926 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
927 onsetEvent.setAai(new HashMap<>());
928 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
930 ControlLoopEventManager manager =
931 new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
932 assertTrue(0 == manager.getControlLoopTimeout(null));
933 assertTrue(120 == manager.getControlLoopTimeout(120));
935 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
936 assertNotNull(notification);
937 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
939 assertTrue(60 == manager.getControlLoopTimeout(null));
943 public void testQueryAai() throws IOException, AaiException {
944 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
945 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
947 UUID requestId = UUID.randomUUID();
948 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
949 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
950 onsetEvent.setRequestId(requestId);
951 onsetEvent.setTarget("generic-vnf.vnf-id");
952 onsetEvent.setClosedLoopAlarmStart(Instant.now());
953 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
954 onsetEvent.setAai(new HashMap<>());
955 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
957 ControlLoopEventManager manager =
958 new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
959 manager.queryAai(onsetEvent);
961 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
962 assertNotNull(notification);
963 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
965 manager.queryAai(onsetEvent);
967 onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "true");
969 manager.queryAai(onsetEvent);
970 fail("test should throw an exception here");
971 } catch (Exception e) {
972 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
974 onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "true");
976 manager.queryAai(onsetEvent);
977 fail("test should throw an exception here");
978 } catch (Exception e) {
979 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
981 onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
983 manager.queryAai(onsetEvent);
984 fail("test should throw an exception here");
985 } catch (Exception e) {
986 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
988 onsetEvent.getAai().remove("vserver.is-closed-loop-disabled");
989 manager.queryAai(onsetEvent);
991 onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "false");
992 manager.queryAai(onsetEvent);
993 onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "false");
994 manager.queryAai(onsetEvent);
996 onsetEvent.getAai().remove("generic-vnf.vnf-id");
997 onsetEvent.getAai().remove("generic-vnf.vnf-name");
998 onsetEvent.getAai().remove("vserver.vserver-name");
999 manager.queryAai(onsetEvent);
1001 onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1002 manager.queryAai(onsetEvent);
1004 onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1005 manager.queryAai(onsetEvent);
1007 onsetEvent.getAai().put("generic-vnf.vnf-id", "AVNFID");
1008 manager.queryAai(onsetEvent);
1010 onsetEvent.getAai().remove("vserver.vserver-name");
1011 manager.queryAai(onsetEvent);
1013 onsetEvent.getAai().remove("generic-vnf.vnf-name");
1014 manager.queryAai(onsetEvent);
1017 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:9999");
1020 manager.queryAai(onsetEvent);
1021 fail("test should throw an exception here");
1022 } catch (Exception e) {
1023 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1024 + "(query by vnf-id)", e.getMessage());
1027 onsetEvent.getAai().remove("generic-vnf.vnf-id");
1028 onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1030 manager.queryAai(onsetEvent);
1031 fail("test should throw an exception here");
1032 } catch (Exception e) {
1033 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1034 + "(query by vnf-name)", e.getMessage());
1037 onsetEvent.getAai().remove("generic-vnf.vnf-name");
1038 onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1040 manager.queryAai(onsetEvent);
1041 fail("test should throw an exception here");
1042 } catch (Exception e) {
1043 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1044 + "(query by vserver-name)", e.getMessage());
1047 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");