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.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
31 import java.io.FileInputStream;
32 import java.io.IOException;
33 import java.io.InputStream;
34 import java.nio.charset.StandardCharsets;
35 import java.time.Instant;
36 import java.util.HashMap;
38 import java.util.UUID;
39 import org.apache.commons.io.IOUtils;
40 import org.junit.AfterClass;
41 import org.junit.Before;
42 import org.junit.BeforeClass;
43 import org.junit.Rule;
44 import org.junit.Test;
45 import org.junit.rules.ExpectedException;
46 import org.onap.policy.aai.AaiGetVnfResponse;
47 import org.onap.policy.aai.AaiGetVserverResponse;
48 import org.onap.policy.aai.AaiNqRequestError;
49 import org.onap.policy.aai.AaiNqResponseWrapper;
50 import org.onap.policy.aai.AaiNqVServer;
51 import org.onap.policy.aai.RelatedToProperty;
52 import org.onap.policy.aai.Relationship;
53 import org.onap.policy.aai.RelationshipData;
54 import org.onap.policy.aai.RelationshipList;
55 import org.onap.policy.aai.util.AaiException;
56 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
57 import org.onap.policy.controlloop.ControlLoopEventStatus;
58 import org.onap.policy.controlloop.ControlLoopException;
59 import org.onap.policy.controlloop.ControlLoopNotificationType;
60 import org.onap.policy.controlloop.Util;
61 import org.onap.policy.controlloop.VirtualControlLoopEvent;
62 import org.onap.policy.controlloop.VirtualControlLoopNotification;
63 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS;
64 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
65 import org.onap.policy.controlloop.policy.PolicyResult;
66 import org.onap.policy.drools.system.PolicyEngine;
67 import org.onap.policy.guard.GuardResult;
68 import org.onap.policy.guard.PolicyGuard;
69 import org.onap.policy.guard.PolicyGuard.LockResult;
70 import org.onap.policy.guard.TargetLock;
71 import org.powermock.reflect.Whitebox;
72 import org.slf4j.Logger;
73 import org.slf4j.LoggerFactory;
75 public class ControlLoopEventManagerTest {
76 private static final String INVALID_URL = "http://localhost:9999";
78 private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
81 public ExpectedException thrown = ExpectedException.none();
83 private VirtualControlLoopEvent onset;
89 public static void setUpSimulator() {
91 org.onap.policy.simulators.Util.buildAaiSim();
92 } catch (Exception e) {
95 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
96 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
97 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
101 public static void tearDownSimulator() {
102 HttpServletServer.factory.destroy();
109 public void setUp() {
110 onset = new VirtualControlLoopEvent();
111 onset.setClosedLoopControlName("ControlLoop-vUSP");
112 onset.setRequestId(UUID.randomUUID());
113 onset.setTarget("VM_NAME");
114 onset.setClosedLoopAlarmStart(Instant.now());
115 onset.setAai(new HashMap<String, String>());
116 onset.getAai().put("cloud-region.identity-url", "foo");
117 onset.getAai().put("vserver.selflink", "bar");
118 onset.getAai().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
119 onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
121 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
125 public void testAaiVnfInfo() {
126 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
127 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
129 AaiGetVnfResponse response = getQueryByVnfId2(
130 PolicyEngine.manager.getEnvironmentProperty("aai.url")
131 + "/aai/v11/network/generic-vnfs/generic-vnf/",
132 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
133 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
134 "5e49ca06-2972-4532-9ed4-6d071588d792");
135 assertNotNull(response);
136 logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
137 } catch (Exception e) {
138 logger.error("testAAIVnfInfo Exception: ", e);
139 fail(e.getMessage());
144 public void testAaiVnfInfo2() {
145 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
146 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
148 AaiGetVnfResponse response = getQueryByVnfName2(
149 PolicyEngine.manager.getEnvironmentProperty("aai.url")
150 + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
151 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
152 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
153 assertNotNull(response);
154 logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
155 } catch (Exception e) {
156 logger.error("testAAIVnfInfo2 Exception: ", e);
157 fail(e.getMessage());
162 public void testAaiVserver() {
163 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
164 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
166 AaiGetVserverResponse response = getQueryByVserverName2(
167 PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
168 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
169 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
170 "USMSO1SX7NJ0103UJZZ01-vjunos0");
171 assertNotNull(response);
172 logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
173 } catch (Exception e) {
174 logger.error("testAAIVserver Exception: ", e);
175 fail(e.getMessage());
180 public void abatementCheckEventSyntaxTest() {
181 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
182 event.setClosedLoopControlName("abatementAAI");
183 event.setRequestId(UUID.randomUUID());
184 event.setTarget("generic-vnf.vnf-id");
185 event.setClosedLoopAlarmStart(Instant.now());
186 event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
187 ControlLoopEventManager manager = makeManager(event);
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.setAai(new HashMap<>());
202 event.getAai().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.setClosedLoopControlName("TwoOnsetTest");
219 event.setRequestId(requestId);
220 event.setTarget("generic-vnf.vnf-id");
221 event.setClosedLoopAlarmStart(Instant.now());
222 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
223 event.setAai(new HashMap<>());
224 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
226 ControlLoopEventManager manager = makeManager(event);
227 VirtualControlLoopNotification notification = manager.activate(event);
229 assertNotNull(notification);
230 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
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.setClosedLoopControlName("TwoOnsetTest");
248 event2.setRequestId(requestId);
249 event2.setTarget("generic-vnf.vnf-id");
250 event2.setClosedLoopAlarmStart(Instant.now());
251 event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
252 event2.setAai(new HashMap<>());
253 event2.getAai().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());
271 * Simulate a response.
273 public static AaiGetVnfResponse getQueryByVnfId2(String urlGet, String username, String password, UUID requestId,
275 AaiGetVnfResponse response = new AaiGetVnfResponse();
277 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
278 response.setVnfName("lll_vnf_010317");
279 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
280 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
281 response.setOrchestrationStatus("Created");
282 response.setInMaint(false);
283 response.setIsClosedLoopDisabled(false);
284 response.setResourceVersion("1494001988835");
285 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
287 final RelationshipList relationshipList = new RelationshipList();
288 final Relationship relationship = new Relationship();
289 RelationshipData relationshipDataItem = new RelationshipData();
291 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
292 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
293 relationship.getRelationshipData().add(relationshipDataItem);
295 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
296 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
297 relationship.getRelationshipData().add(relationshipDataItem);
299 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
300 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
301 relationship.getRelationshipData().add(relationshipDataItem);
303 RelatedToProperty item = new RelatedToProperty();
304 item.setPropertyKey("service-instance.service-instance-name");
305 item.setPropertyValue("lll_svc_010317");
306 relationship.getRelatedToProperty().add(item);
308 relationship.setRelatedTo("service-instance");
309 relationship.setRelatedLink(
310 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
311 + "/MSO-dev-service-type/service-instances/service-instance/"
312 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
314 relationshipList.getRelationships().add(relationship);
315 response.setRelationshipList(relationshipList);
321 * Simulate a response.
323 public static AaiGetVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestId,
325 AaiGetVnfResponse response = new AaiGetVnfResponse();
327 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
328 response.setVnfName("lll_vnf_010317");
329 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
330 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
331 response.setOrchestrationStatus("Created");
332 response.setInMaint(false);
333 response.setIsClosedLoopDisabled(false);
334 response.setResourceVersion("1494001988835");
335 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
337 final RelationshipList relationshipList = new RelationshipList();
338 final Relationship relationship = new Relationship();
339 RelationshipData relationshipDataItem = new RelationshipData();
341 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
342 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
343 relationship.getRelationshipData().add(relationshipDataItem);
345 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
346 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
347 relationship.getRelationshipData().add(relationshipDataItem);
349 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
350 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
351 relationship.getRelationshipData().add(relationshipDataItem);
353 RelatedToProperty item = new RelatedToProperty();
354 item.setPropertyKey("service-instance.service-instance-name");
355 item.setPropertyValue("lll_svc_010317");
356 relationship.getRelatedToProperty().add(item);
358 relationship.setRelatedTo("service-instance");
359 relationship.setRelatedLink(
360 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
361 + "/MSO-dev-service-type/service-instances/service-instance/"
362 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
364 relationshipList.getRelationships().add(relationship);
365 response.setRelationshipList(relationshipList);
371 * Simulate a response.
373 public static AaiGetVserverResponse getQueryByVserverName2(String urlGet, String username, String password,
374 UUID requestId, String key) {
375 final AaiGetVserverResponse response = new AaiGetVserverResponse();
377 AaiNqVServer svr = new AaiNqVServer();
379 svr.setVserverId("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
380 svr.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
381 svr.setVserverName2("vjunos0");
382 svr.setVserverSelflink(
383 "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");
384 svr.setInMaint(false);
385 svr.setIsClosedLoopDisabled(false);
386 svr.setResourceVersion("1494001931513");
388 final RelationshipList relationshipList = new RelationshipList();
389 final Relationship relationship = new Relationship();
390 RelationshipData relationshipDataItem = new RelationshipData();
392 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
393 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
394 relationship.getRelationshipData().add(relationshipDataItem);
396 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
397 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
398 relationship.getRelationshipData().add(relationshipDataItem);
400 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
401 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
402 relationship.getRelationshipData().add(relationshipDataItem);
404 RelatedToProperty item = new RelatedToProperty();
405 item.setPropertyKey("service-instance.service-instance-name");
406 item.setPropertyValue("lll_svc_010317");
407 relationship.getRelatedToProperty().add(item);
409 relationship.setRelatedTo("service-instance");
410 relationship.setRelatedLink(
411 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
412 + "/MSO-dev-service-type/service-instances/service-instance/"
413 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
415 relationshipList.getRelationships().add(relationship);
416 svr.setRelationshipList(relationshipList);
418 response.getVserver().add(svr);
424 public void testMethods() {
425 UUID requestId = UUID.randomUUID();
426 ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", requestId);
428 assertEquals("MyClosedLoopName", clem.getClosedLoopControlName());
429 assertEquals(requestId, clem.getRequestID());
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 = makeManager(event);
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 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
480 InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
481 final 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 = makeManager(event);
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 final 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 = makeManager(event);
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 final 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 = makeManager(event);
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 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
676 InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
677 final 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-id", "onsetOne");
689 ControlLoopEventManager manager = makeManager(event);
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);
725 assertEquals(GuardResult.LOCK_ACQUIRED, lockLock.getA());
727 LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
728 assertNotNull(lockLockAgain);
729 assertEquals(GuardResult.LOCK_ACQUIRED, lockLockAgain.getA());
730 assertEquals(lockLock.getB(), lockLockAgain.getB());
732 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
733 assertNull(manager.unlockCurrentOperation());
735 lockLock = manager.lockCurrentOperation();
736 assertNotNull(lockLock);
737 PolicyGuard.unlockTarget(lockLock.getB());
738 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
740 clom.startOperation(event);
742 // This call should be exception free
743 manager.finishOperation(clom);
745 ControlLoopEventManager otherManager = makeManager(event);
746 VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
747 assertNotNull(otherNotification);
748 assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
750 ControlLoopOperationManager otherClom = otherManager.processControlLoop();
751 assertNotNull(otherClom);
752 assertNull(otherClom.getOperationResult());
754 otherManager.finishOperation(clom);
758 public void testOnNewEvent() throws IOException, AaiException {
759 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
760 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
762 UUID requestId = UUID.randomUUID();
763 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
764 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
765 onsetEvent.setRequestId(requestId);
766 onsetEvent.setTarget("generic-vnf.vnf-id");
767 onsetEvent.setClosedLoopAlarmStart(Instant.now());
768 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
769 onsetEvent.setAai(new HashMap<>());
770 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
772 VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
773 abatedEvent.setClosedLoopControlName("TwoOnsetTest");
774 abatedEvent.setRequestId(requestId);
775 abatedEvent.setTarget("generic-vnf.vnf-id");
776 abatedEvent.setClosedLoopAlarmStart(Instant.now());
777 abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
778 abatedEvent.setAai(new HashMap<>());
779 abatedEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
781 ControlLoopEventManager manager = makeManager(onsetEvent);
782 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
783 assertNotNull(notification);
784 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
786 assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
787 assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
788 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
790 VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
791 checkSyntaxEvent.setAai(null);
792 checkSyntaxEvent.setClosedLoopAlarmEnd(null);
793 checkSyntaxEvent.setClosedLoopAlarmStart(null);
794 checkSyntaxEvent.setClosedLoopControlName(null);
795 checkSyntaxEvent.setClosedLoopEventClient(null);
796 checkSyntaxEvent.setClosedLoopEventStatus(null);
797 checkSyntaxEvent.setFrom(null);
798 checkSyntaxEvent.setPolicyName(null);
799 checkSyntaxEvent.setPolicyScope(null);
800 checkSyntaxEvent.setPolicyVersion(null);
801 checkSyntaxEvent.setRequestId(null);
802 checkSyntaxEvent.setTarget(null);
803 checkSyntaxEvent.setTargetType(null);
804 checkSyntaxEvent.setVersion(null);
806 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
808 checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
809 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
811 checkSyntaxEvent.setClosedLoopControlName(null);
812 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
814 checkSyntaxEvent.setClosedLoopControlName("");
815 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
817 checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
818 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
820 checkSyntaxEvent.setRequestId(null);
821 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
823 checkSyntaxEvent.setRequestId(requestId);
824 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
826 checkSyntaxEvent.setAai(null);
827 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
829 checkSyntaxEvent.setAai(new HashMap<>());
830 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
832 checkSyntaxEvent.setTarget("");
833 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
835 checkSyntaxEvent.setTarget(null);
836 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
838 checkSyntaxEvent.setTarget("");
839 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
841 checkSyntaxEvent.setTarget("OZ");
842 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
844 checkSyntaxEvent.setTarget("VM_NAME");
845 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
847 checkSyntaxEvent.setTarget("VNF_NAME");
848 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
850 checkSyntaxEvent.setTarget("vserver.vserver-name");
851 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
853 checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
854 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
856 checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
857 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
859 checkSyntaxEvent.setAai(null);
860 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
862 checkSyntaxEvent.setAai(new HashMap<>());
863 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
865 checkSyntaxEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
866 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
868 checkSyntaxEvent.getAai().put("vserver.vserver-name", "onsetOne");
869 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
871 checkSyntaxEvent.getAai().put("generic-vnf.vnf-id", "onsetOne");
872 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
876 public void testControlLoopTimeout() throws IOException {
877 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
878 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
880 UUID requestId = UUID.randomUUID();
881 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
882 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
883 onsetEvent.setRequestId(requestId);
884 onsetEvent.setTarget("generic-vnf.vnf-id");
885 onsetEvent.setClosedLoopAlarmStart(Instant.now());
886 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
887 onsetEvent.setAai(new HashMap<>());
888 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
890 ControlLoopEventManager manager = makeManager(onsetEvent);
891 assertTrue(0 == manager.getControlLoopTimeout(null));
892 assertTrue(120 == manager.getControlLoopTimeout(120));
894 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
895 assertNotNull(notification);
896 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
898 assertTrue(60 == manager.getControlLoopTimeout(null));
902 public void testQueryAai_AlreadyDisabled() throws AaiException {
903 ControlLoopEventManager mgr = null;
906 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
907 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS,
908 ControlLoopEventManager.PROV_STATUS_ACTIVE);
910 mgr = makeManager(onset);
913 fail("missing exception");
915 } catch (AaiException expected) {
916 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", expected.getMessage());
917 assertNull(mgr.getVnfResponse());
918 assertNull(mgr.getVserverResponse());
923 public void testQueryAai_AlreadyInactive() throws AaiException {
924 ControlLoopEventManager mgr = null;
927 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
928 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, "not-active2");
930 mgr = makeManager(onset);
933 fail("missing exception");
935 } catch (AaiException expected) {
936 assertEquals("prov-status is not ACTIVE on VServer or VNF", expected.getMessage());
937 assertNull(mgr.getVnfResponse());
938 assertNull(mgr.getVserverResponse());
943 public void testQueryAai_QueryVnfById() throws AaiException {
944 ControlLoopEventManager mgr = null;
946 mgr = makeManager(onset);
949 assertNotNull(mgr.getVnfResponse());
950 assertNull(mgr.getVserverResponse());
952 AaiGetVnfResponse vnfresp = mgr.getVnfResponse();
954 // should not re-query
957 assertEquals(vnfresp, mgr.getVnfResponse());
958 assertNull(mgr.getVserverResponse());
962 public void testQueryAai_QueryVnfByName() throws AaiException {
963 ControlLoopEventManager mgr = null;
966 onset.getAai().remove(ControlLoopEventManager.GENERIC_VNF_VNF_ID);
967 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_VNF_NAME, "AVNFName");
969 mgr = makeManager(onset);
972 assertNotNull(mgr.getVnfResponse());
973 assertNull(mgr.getVserverResponse());
975 AaiGetVnfResponse vnfresp = mgr.getVnfResponse();
977 // should not re-query
980 assertEquals(vnfresp, mgr.getVnfResponse());
981 assertNull(mgr.getVserverResponse());
985 public void testQueryAai_QueryVnfById_Disabled() throws AaiException {
986 ControlLoopEventManager mgr = null;
989 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_VNF_ID, "disableClosedLoop");
991 mgr = makeManager(onset);
994 fail("missing exception");
996 } catch (AaiException expected) {
997 assertEquals("is-closed-loop-disabled is set to true (query by vnf-id)", expected.getMessage());
999 assertNotNull(mgr.getVnfResponse());
1000 assertNull(mgr.getVserverResponse());
1005 public void testQueryAai_QueryVserver() throws AaiException {
1006 ControlLoopEventManager mgr = null;
1008 onset.getAai().remove(ControlLoopEventManager.GENERIC_VNF_VNF_ID);
1009 onset.getAai().put(ControlLoopEventManager.VSERVER_VSERVER_NAME, "AVserver");
1011 mgr = makeManager(onset);
1012 mgr.queryAai(onset);
1014 assertNull(mgr.getVnfResponse());
1015 assertNotNull(mgr.getVserverResponse());
1017 AaiGetVserverResponse vsvresp = mgr.getVserverResponse();
1019 // should not re-query
1020 mgr.queryAai(onset);
1022 assertNull(mgr.getVnfResponse());
1023 assertEquals(vsvresp, mgr.getVserverResponse());
1027 public void testQueryAai_QueryVserver_Disabled() throws AaiException {
1028 ControlLoopEventManager mgr = null;
1031 onset.getAai().remove(ControlLoopEventManager.GENERIC_VNF_VNF_ID);
1032 onset.getAai().put(ControlLoopEventManager.VSERVER_VSERVER_NAME, "disableClosedLoop");
1034 mgr = makeManager(onset);
1035 mgr.queryAai(onset);
1037 fail("missing exception");
1039 } catch (AaiException expected) {
1040 assertEquals("is-closed-loop-disabled is set to true (query by vserver-name)", expected.getMessage());
1042 assertNull(mgr.getVnfResponse());
1043 assertNotNull(mgr.getVserverResponse());
1047 @Test(expected = AaiException.class)
1048 public void testQueryAai_QueryException() throws AaiException {
1050 PolicyEngine.manager.setEnvironmentProperty("aai.url", INVALID_URL);
1052 makeManager(onset).queryAai(onset);
1056 public void testProcessVnfResponse_Success() throws Exception {
1057 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1058 resp.setIsClosedLoopDisabled(false);
1059 resp.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1060 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, true);
1064 public void testProcessVnfResponse_NullResponse() throws Exception {
1065 thrown.expect(AaiException.class);
1066 thrown.expectMessage("AAI Response is null (query by vnf-id)");
1068 AaiGetVnfResponse resp = null;
1069 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, true);
1073 public void testProcessVnfResponse_Error() throws Exception {
1074 thrown.expect(AaiException.class);
1075 thrown.expectMessage("AAI Responded with a request error (query by vnf-name)");
1077 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1079 resp.setRequestError(new AaiNqRequestError());
1081 resp.setIsClosedLoopDisabled(false);
1082 resp.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1083 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, false);
1087 public void testProcessVnfResponse_Disabled() throws Exception {
1088 thrown.expect(AaiException.class);
1089 thrown.expectMessage("is-closed-loop-disabled is set to true (query by vnf-id)");
1091 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1092 resp.setIsClosedLoopDisabled(true);
1093 resp.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1094 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, true);
1098 public void testProcessVnfResponse_Inactive() throws Exception {
1099 thrown.expect(AaiException.class);
1100 thrown.expectMessage("prov-status is not ACTIVE (query by vnf-name)");
1102 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1103 resp.setIsClosedLoopDisabled(false);
1104 resp.setProvStatus("inactive1");
1105 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, false);
1109 public void testProcessVserverResponse_Success() throws Exception {
1110 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1112 AaiNqVServer svr = new AaiNqVServer();
1113 resp.getVserver().add(svr);
1115 svr.setIsClosedLoopDisabled(false);
1116 svr.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1117 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1121 public void testProcessVserverResponse_NullResponse() throws Exception {
1122 thrown.expect(AaiException.class);
1123 thrown.expectMessage("AAI Response is null (query by vserver-name)");
1125 AaiGetVserverResponse resp = null;
1126 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1130 public void testProcessVserverResponse_Error() throws Exception {
1131 thrown.expect(AaiException.class);
1132 thrown.expectMessage("AAI Responded with a request error (query by vserver-name)");
1134 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1136 resp.setRequestError(new AaiNqRequestError());
1138 AaiNqVServer svr = new AaiNqVServer();
1139 resp.getVserver().add(svr);
1141 svr.setIsClosedLoopDisabled(false);
1142 svr.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1144 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1148 public void testProcessVserverResponse_Disabled() throws Exception {
1149 thrown.expect(AaiException.class);
1150 thrown.expectMessage("is-closed-loop-disabled is set to true (query by vserver-name)");
1152 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1153 AaiNqVServer svr = new AaiNqVServer();
1154 resp.getVserver().add(svr);
1156 svr.setIsClosedLoopDisabled(true);
1157 svr.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1158 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1162 public void testProcessVserverResponse_Inactive() throws Exception {
1163 thrown.expect(AaiException.class);
1164 thrown.expectMessage("prov-status is not ACTIVE (query by vserver-name)");
1166 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1167 AaiNqVServer svr = new AaiNqVServer();
1168 resp.getVserver().add(svr);
1170 svr.setIsClosedLoopDisabled(false);
1171 svr.setProvStatus("inactive1");
1172 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1176 public void testIsClosedLoopDisabled() {
1177 Map<String, String> aai = onset.getAai();
1180 aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
1181 aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
1182 assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
1185 aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
1186 aai.put(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
1187 assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
1190 aai.put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
1191 aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
1192 assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
1195 aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
1196 aai.put(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
1197 assertTrue(ControlLoopEventManager.isClosedLoopDisabled(onset));
1200 aai.put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
1201 aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
1202 assertTrue(ControlLoopEventManager.isClosedLoopDisabled(onset));
1206 public void testIsProvStatusInactive() {
1207 Map<String, String> aai = onset.getAai();
1210 aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
1211 aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
1212 assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
1215 aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
1216 aai.put(ControlLoopEventManager.VSERVER_PROV_STATUS, ControlLoopEventManager.PROV_STATUS_ACTIVE);
1217 assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
1220 aai.put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, ControlLoopEventManager.PROV_STATUS_ACTIVE);
1221 aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
1222 assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
1225 aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
1226 aai.put(ControlLoopEventManager.VSERVER_PROV_STATUS, "other1");
1227 assertTrue(ControlLoopEventManager.isProvStatusInactive(onset));
1230 aai.put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, "other2");
1231 aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
1232 assertTrue(ControlLoopEventManager.isProvStatusInactive(onset));
1236 public void testIsAaiTrue() {
1237 assertTrue(ControlLoopEventManager.isAaiTrue("tRuE"));
1238 assertTrue(ControlLoopEventManager.isAaiTrue("T"));
1239 assertTrue(ControlLoopEventManager.isAaiTrue("t"));
1240 assertTrue(ControlLoopEventManager.isAaiTrue("yES"));
1241 assertTrue(ControlLoopEventManager.isAaiTrue("Y"));
1242 assertTrue(ControlLoopEventManager.isAaiTrue("y"));
1244 assertFalse(ControlLoopEventManager.isAaiTrue("no"));
1245 assertFalse(ControlLoopEventManager.isAaiTrue(null));
1249 public void testGetNqVserverFromAai() throws Exception {
1251 // empty vserver name
1252 ControlLoopEventManager manager = makeManager(onset);
1253 manager.activate(onset);
1254 assertNull(manager.getNqVserverFromAai());
1257 // re-create manager with a vserver name in the onset
1258 onset.getAai().put(ControlLoopEventManager.VSERVER_VSERVER_NAME, "my-name");
1259 manager = makeManager(onset);
1260 manager.activate(onset);
1262 AaiNqResponseWrapper resp = manager.getNqVserverFromAai();
1263 assertNotNull(resp);
1264 assertEquals(onset.getRequestId(), resp.getRequestId());
1265 assertNotNull(resp.getAaiNqResponse());
1266 assertFalse(resp.getAaiNqResponse().getInventoryResponseItems().isEmpty());
1268 // re-query should return the same object
1269 assertTrue(resp == manager.getNqVserverFromAai());
1273 PolicyEngine.manager.setEnvironmentProperty("aai.url", INVALID_URL);
1275 // re-create manager
1276 manager = makeManager(onset);
1277 manager.activate(onset);
1278 assertNull(manager.getNqVserverFromAai());
1281 private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
1282 return new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());