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.common.utils.io.Serializer;
58 import org.onap.policy.controlloop.ControlLoopEventStatus;
59 import org.onap.policy.controlloop.ControlLoopException;
60 import org.onap.policy.controlloop.ControlLoopNotificationType;
61 import org.onap.policy.controlloop.Util;
62 import org.onap.policy.controlloop.VirtualControlLoopEvent;
63 import org.onap.policy.controlloop.VirtualControlLoopNotification;
64 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS;
65 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
66 import org.onap.policy.controlloop.policy.PolicyResult;
67 import org.onap.policy.drools.system.PolicyEngine;
68 import org.onap.policy.guard.GuardResult;
69 import org.onap.policy.guard.PolicyGuard;
70 import org.onap.policy.guard.PolicyGuard.LockResult;
71 import org.onap.policy.guard.TargetLock;
72 import org.powermock.reflect.Whitebox;
73 import org.slf4j.Logger;
74 import org.slf4j.LoggerFactory;
76 public class ControlLoopEventManagerTest {
77 private static final String INVALID_URL = "http://localhost:9999";
79 private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
82 public ExpectedException thrown = ExpectedException.none();
84 private VirtualControlLoopEvent onset;
90 public static void setUpSimulator() {
92 org.onap.policy.simulators.Util.buildAaiSim();
93 } catch (Exception e) {
96 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
97 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
98 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
102 public static void tearDownSimulator() {
103 HttpServletServer.factory.destroy();
110 public void setUp() {
111 onset = new VirtualControlLoopEvent();
112 onset.setClosedLoopControlName("ControlLoop-vUSP");
113 onset.setRequestId(UUID.randomUUID());
114 onset.setTarget("VM_NAME");
115 onset.setClosedLoopAlarmStart(Instant.now());
116 onset.setAai(new HashMap<String, String>());
117 onset.getAai().put("cloud-region.identity-url", "foo");
118 onset.getAai().put("vserver.selflink", "bar");
119 onset.getAai().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
120 onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
122 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
126 public void testAaiVnfInfo() {
127 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
128 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
130 AaiGetVnfResponse response = getQueryByVnfId2(
131 PolicyEngine.manager.getEnvironmentProperty("aai.url")
132 + "/aai/v11/network/generic-vnfs/generic-vnf/",
133 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
134 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
135 "5e49ca06-2972-4532-9ed4-6d071588d792");
136 assertNotNull(response);
137 logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
138 } catch (Exception e) {
139 logger.error("testAAIVnfInfo Exception: ", e);
140 fail(e.getMessage());
145 public void testAaiVnfInfo2() {
146 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
147 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
149 AaiGetVnfResponse response = getQueryByVnfName2(
150 PolicyEngine.manager.getEnvironmentProperty("aai.url")
151 + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
152 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
153 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
154 assertNotNull(response);
155 logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
156 } catch (Exception e) {
157 logger.error("testAAIVnfInfo2 Exception: ", e);
158 fail(e.getMessage());
163 public void testAaiVserver() {
164 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
165 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
167 AaiGetVserverResponse response = getQueryByVserverName2(
168 PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
169 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
170 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
171 "USMSO1SX7NJ0103UJZZ01-vjunos0");
172 assertNotNull(response);
173 logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
174 } catch (Exception e) {
175 logger.error("testAAIVserver Exception: ", e);
176 fail(e.getMessage());
181 public void abatementCheckEventSyntaxTest() {
182 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
183 event.setClosedLoopControlName("abatementAAI");
184 event.setRequestId(UUID.randomUUID());
185 event.setTarget("generic-vnf.vnf-id");
186 event.setClosedLoopAlarmStart(Instant.now());
187 event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
188 ControlLoopEventManager manager = makeManager(event);
189 assertNull(manager.getVnfResponse());
190 assertNull(manager.getVserverResponse());
192 manager.checkEventSyntax(event);
193 } catch (ControlLoopException e) {
194 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
196 fail("Exception in check event syntax");
198 assertNull(manager.getVnfResponse());
199 assertNull(manager.getVserverResponse());
202 event.setAai(new HashMap<>());
203 event.getAai().put("generic-vnf.vnf-name", "abatementTest");
205 manager.checkEventSyntax(event);
206 } catch (ControlLoopException e) {
207 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
209 fail("Exception in check event syntax");
211 assertNull(manager.getVnfResponse());
212 assertNull(manager.getVserverResponse());
216 public void subsequentOnsetTest() throws IOException {
217 UUID requestId = UUID.randomUUID();
218 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
219 event.setClosedLoopControlName("TwoOnsetTest");
220 event.setRequestId(requestId);
221 event.setTarget("generic-vnf.vnf-id");
222 event.setClosedLoopAlarmStart(Instant.now());
223 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
224 event.setAai(new HashMap<>());
225 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
227 ControlLoopEventManager manager = makeManager(event);
228 VirtualControlLoopNotification notification = manager.activate(event);
230 assertNotNull(notification);
231 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
233 ControlLoopEventManager.NEW_EVENT_STATUS status = null;
235 status = manager.onNewEvent(event);
236 } catch (AaiException e) {
237 logger.warn(e.toString());
238 fail("A&AI Query Failed");
240 assertNotNull(status);
241 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
243 AaiGetVnfResponse response = manager.getVnfResponse();
244 assertNotNull(response);
245 assertNull(manager.getVserverResponse());
247 VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
248 event2.setClosedLoopControlName("TwoOnsetTest");
249 event2.setRequestId(requestId);
250 event2.setTarget("generic-vnf.vnf-id");
251 event2.setClosedLoopAlarmStart(Instant.now());
252 event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
253 event2.setAai(new HashMap<>());
254 event2.getAai().put("generic-vnf.vnf-name", "onsetTwo");
258 status = manager.onNewEvent(event2);
259 } catch (AaiException e) {
260 logger.warn(e.toString());
261 fail("A&AI Query Failed");
263 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
264 AaiGetVnfResponse response2 = manager.getVnfResponse();
265 assertNotNull(response2);
266 // We should not have queried AAI, so the stored response should be the same
267 assertEquals(response, response2);
268 assertNull(manager.getVserverResponse());
272 * Simulate a response.
274 public static AaiGetVnfResponse getQueryByVnfId2(String urlGet, String username, String password, UUID requestId,
276 AaiGetVnfResponse response = new AaiGetVnfResponse();
278 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
279 response.setVnfName("lll_vnf_010317");
280 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
281 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
282 response.setOrchestrationStatus("Created");
283 response.setInMaint(false);
284 response.setIsClosedLoopDisabled(false);
285 response.setResourceVersion("1494001988835");
286 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
288 final RelationshipList relationshipList = new RelationshipList();
289 final Relationship relationship = new Relationship();
290 RelationshipData relationshipDataItem = new RelationshipData();
292 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
293 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
294 relationship.getRelationshipData().add(relationshipDataItem);
296 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
297 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
298 relationship.getRelationshipData().add(relationshipDataItem);
300 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
301 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
302 relationship.getRelationshipData().add(relationshipDataItem);
304 RelatedToProperty item = new RelatedToProperty();
305 item.setPropertyKey("service-instance.service-instance-name");
306 item.setPropertyValue("lll_svc_010317");
307 relationship.getRelatedToProperty().add(item);
309 relationship.setRelatedTo("service-instance");
310 relationship.setRelatedLink(
311 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
312 + "/MSO-dev-service-type/service-instances/service-instance/"
313 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
315 relationshipList.getRelationships().add(relationship);
316 response.setRelationshipList(relationshipList);
322 * Simulate a response.
324 public static AaiGetVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestId,
326 AaiGetVnfResponse response = new AaiGetVnfResponse();
328 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
329 response.setVnfName("lll_vnf_010317");
330 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
331 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
332 response.setOrchestrationStatus("Created");
333 response.setInMaint(false);
334 response.setIsClosedLoopDisabled(false);
335 response.setResourceVersion("1494001988835");
336 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
338 final RelationshipList relationshipList = new RelationshipList();
339 final Relationship relationship = new Relationship();
340 RelationshipData relationshipDataItem = new RelationshipData();
342 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
343 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
344 relationship.getRelationshipData().add(relationshipDataItem);
346 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
347 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
348 relationship.getRelationshipData().add(relationshipDataItem);
350 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
351 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
352 relationship.getRelationshipData().add(relationshipDataItem);
354 RelatedToProperty item = new RelatedToProperty();
355 item.setPropertyKey("service-instance.service-instance-name");
356 item.setPropertyValue("lll_svc_010317");
357 relationship.getRelatedToProperty().add(item);
359 relationship.setRelatedTo("service-instance");
360 relationship.setRelatedLink(
361 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
362 + "/MSO-dev-service-type/service-instances/service-instance/"
363 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
365 relationshipList.getRelationships().add(relationship);
366 response.setRelationshipList(relationshipList);
372 * Simulate a response.
374 public static AaiGetVserverResponse getQueryByVserverName2(String urlGet, String username, String password,
375 UUID requestId, String key) {
376 final AaiGetVserverResponse response = new AaiGetVserverResponse();
378 AaiNqVServer svr = new AaiNqVServer();
380 svr.setVserverId("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
381 svr.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
382 svr.setVserverName2("vjunos0");
383 svr.setVserverSelflink(
384 "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");
385 svr.setInMaint(false);
386 svr.setIsClosedLoopDisabled(false);
387 svr.setResourceVersion("1494001931513");
389 final RelationshipList relationshipList = new RelationshipList();
390 final Relationship relationship = new Relationship();
391 RelationshipData relationshipDataItem = new RelationshipData();
393 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
394 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
395 relationship.getRelationshipData().add(relationshipDataItem);
397 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
398 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
399 relationship.getRelationshipData().add(relationshipDataItem);
401 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
402 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
403 relationship.getRelationshipData().add(relationshipDataItem);
405 RelatedToProperty item = new RelatedToProperty();
406 item.setPropertyKey("service-instance.service-instance-name");
407 item.setPropertyValue("lll_svc_010317");
408 relationship.getRelatedToProperty().add(item);
410 relationship.setRelatedTo("service-instance");
411 relationship.setRelatedLink(
412 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
413 + "/MSO-dev-service-type/service-instances/service-instance/"
414 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
416 relationshipList.getRelationships().add(relationship);
417 svr.setRelationshipList(relationshipList);
419 response.getVserver().add(svr);
425 public void testMethods() {
426 UUID requestId = UUID.randomUUID();
427 ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", requestId);
429 assertEquals("MyClosedLoopName", clem.getClosedLoopControlName());
430 assertEquals(requestId, clem.getRequestID());
432 clem.setActivated(true);
433 assertEquals(true, clem.isActivated());
435 clem.setControlLoopResult("SUCCESS");
436 assertEquals("SUCCESS", clem.getControlLoopResult());
438 clem.setControlLoopTimedOut();
439 assertEquals(true, clem.isControlLoopTimedOut());
441 clem.setNumAbatements(12345);
442 assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
444 clem.setNumOnsets(54321);
445 assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
447 assertNull(clem.getOnsetEvent());
448 assertNull(clem.getAbatementEvent());
449 assertNull(clem.getProcessor());
451 assertEquals(true, clem.isActive());
452 assertEquals(false, clem.releaseLock());
453 assertEquals(true, clem.isControlLoopTimedOut());
455 assertNull(clem.unlockCurrentOperation());
459 public void testAlreadyActivated() {
460 UUID requestId = UUID.randomUUID();
461 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
462 event.setClosedLoopControlName("TwoOnsetTest");
463 event.setRequestId(requestId);
464 event.setTarget("generic-vnf.vnf-id");
465 event.setClosedLoopAlarmStart(Instant.now());
466 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
467 event.setAai(new HashMap<>());
468 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
470 ControlLoopEventManager manager = makeManager(event);
471 manager.setActivated(true);
472 VirtualControlLoopNotification notification = manager.activate(event);
473 assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
477 public void testActivationYaml() throws IOException {
478 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
479 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
481 InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
482 final String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
484 UUID requestId = UUID.randomUUID();
485 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
486 event.setClosedLoopControlName("TwoOnsetTest");
487 event.setRequestId(requestId);
488 event.setTarget("generic-vnf.vnf-id");
489 event.setClosedLoopAlarmStart(Instant.now());
490 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
491 event.setAai(new HashMap<>());
492 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
494 ControlLoopEventManager manager = makeManager(event);
496 // Null YAML should fail
497 VirtualControlLoopNotification notificationNull = manager.activate(null, event);
498 assertNotNull(notificationNull);
499 assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification());
501 // Empty YAML should fail
502 VirtualControlLoopNotification notificationEmpty = manager.activate("", event);
503 assertNotNull(notificationEmpty);
504 assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification());
506 // Bad YAML should fail
507 VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event);
508 assertNotNull(notificationBad);
509 assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification());
511 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
512 assertNotNull(notification);
513 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
515 // Another activate should fail
516 VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event);
517 assertNotNull(notificationActive);
518 assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification());
522 public void testControlLoopFinal() throws ControlLoopException, IOException {
523 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
524 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
526 UUID requestId = UUID.randomUUID();
527 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
528 event.setClosedLoopControlName("TwoOnsetTest");
529 event.setRequestId(requestId);
530 event.setTarget("generic-vnf.vnf-id");
531 event.setClosedLoopAlarmStart(Instant.now());
532 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
533 event.setAai(new HashMap<>());
534 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
536 ControlLoopEventManager manager = makeManager(event);
538 manager.isControlLoopFinal();
539 fail("test should throw an exception here");
540 } catch (ControlLoopException e) {
541 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
544 manager.setActivated(true);
546 manager.isControlLoopFinal();
547 fail("test should throw an exception here");
548 } catch (ControlLoopException e) {
549 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
552 manager.setActivated(false);
553 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
554 assertNotNull(notification);
555 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
557 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
558 assertNull(clfNotification);
560 // serialize and de-serialize manager
561 manager = Serializer.roundTrip(manager);
563 manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
564 clfNotification = manager.isControlLoopFinal();
565 assertNotNull(clfNotification);
566 assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
568 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
569 notification = manager.activate(yamlString, event);
570 assertNotNull(notification);
571 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
573 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
574 clfNotification = manager.isControlLoopFinal();
575 assertNotNull(clfNotification);
576 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
578 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
579 notification = manager.activate(yamlString, event);
580 assertNotNull(notification);
581 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
583 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
584 clfNotification = manager.isControlLoopFinal();
585 assertNotNull(clfNotification);
586 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
588 manager.setControlLoopTimedOut();
589 clfNotification = manager.isControlLoopFinal();
590 assertNotNull(clfNotification);
591 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
595 public void testProcessControlLoop() throws ControlLoopException, IOException, AaiException {
596 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
597 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
599 UUID requestId = UUID.randomUUID();
600 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
601 event.setClosedLoopControlName("TwoOnsetTest");
602 event.setRequestId(requestId);
603 event.setTarget("generic-vnf.vnf-id");
604 event.setClosedLoopAlarmStart(Instant.now());
605 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
606 event.setAai(new HashMap<>());
607 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
609 ControlLoopEventManager manager = makeManager(event);
611 manager.processControlLoop();
612 fail("test should throw an exception here");
613 } catch (Exception e) {
614 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
617 manager.setActivated(true);
619 manager.processControlLoop();
620 fail("test should throw an exception here");
621 } catch (Exception e) {
622 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
625 manager.setActivated(false);
626 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
627 assertNotNull(notification);
628 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
630 ControlLoopOperationManager clom = manager.processControlLoop();
632 assertNull(clom.getOperationResult());
634 // serialize and de-serialize manager
635 manager = Serializer.roundTrip(manager);
637 // Test operation in progress
639 manager.processControlLoop();
640 fail("test should throw an exception here");
641 } catch (Exception e) {
642 assertEquals("Already working an Operation, do not call this method.", e.getMessage());
645 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
646 notification = manager.activate(yamlString, event);
647 assertNotNull(notification);
648 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
650 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
651 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
652 assertNotNull(clfNotification);
653 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
655 // Test operation completed
657 manager.processControlLoop();
658 fail("test should throw an exception here");
659 } catch (Exception e) {
660 assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage());
663 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
664 notification = manager.activate(yamlString, event);
665 assertNotNull(notification);
666 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
667 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
669 // Test operation with no next policy defined
671 manager.processControlLoop();
672 fail("test should throw an exception here");
673 } catch (Exception e) {
674 assertEquals("The target type is null", e.getMessage());
679 public void testFinishOperation() throws IOException, ControlLoopException, AaiException {
680 InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
681 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
683 InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
684 final String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
686 UUID requestId = UUID.randomUUID();
687 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
688 event.setClosedLoopControlName("TwoOnsetTest");
689 event.setRequestId(requestId);
690 event.setTarget("generic-vnf.vnf-id");
691 event.setClosedLoopAlarmStart(Instant.now());
692 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
693 event.setAai(new HashMap<>());
694 event.getAai().put("generic-vnf.vnf-id", "onsetOne");
696 ControlLoopEventManager manager = makeManager(event);
698 manager.finishOperation(null);
699 fail("test should throw an exception here");
700 } catch (Exception e) {
701 assertEquals("No operation to finish.", e.getMessage());
704 manager.setActivated(true);
706 manager.finishOperation(null);
707 fail("test should throw an exception here");
708 } catch (Exception e) {
709 assertEquals("No operation to finish.", e.getMessage());
712 manager.setActivated(false);
713 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
714 assertNotNull(notification);
715 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
718 manager.lockCurrentOperation();
719 fail("test should throw an exception here");
720 } catch (Exception e) {
721 assertEquals("Do not have a current operation.", e.getMessage());
724 assertNull(manager.unlockCurrentOperation());
726 // serialize and de-serialize manager
727 manager = Serializer.roundTrip(manager);
729 ControlLoopOperationManager clom = manager.processControlLoop();
731 assertNull(clom.getOperationResult());
733 LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation();
734 assertNotNull(lockLock);
735 assertEquals(GuardResult.LOCK_ACQUIRED, lockLock.getA());
737 LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
738 assertNotNull(lockLockAgain);
739 assertEquals(GuardResult.LOCK_ACQUIRED, lockLockAgain.getA());
740 assertEquals(lockLock.getB(), lockLockAgain.getB());
742 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
743 assertNull(manager.unlockCurrentOperation());
745 lockLock = manager.lockCurrentOperation();
746 assertNotNull(lockLock);
747 PolicyGuard.unlockTarget(lockLock.getB());
748 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
750 clom.startOperation(event);
752 // This call should be exception free
753 manager.finishOperation(clom);
755 ControlLoopEventManager otherManager = makeManager(event);
756 VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
757 assertNotNull(otherNotification);
758 assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
760 ControlLoopOperationManager otherClom = otherManager.processControlLoop();
761 assertNotNull(otherClom);
762 assertNull(otherClom.getOperationResult());
764 otherManager.finishOperation(clom);
768 public void testOnNewEvent() throws IOException, AaiException {
769 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
770 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
772 UUID requestId = UUID.randomUUID();
773 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
774 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
775 onsetEvent.setRequestId(requestId);
776 onsetEvent.setTarget("generic-vnf.vnf-id");
777 onsetEvent.setClosedLoopAlarmStart(Instant.now());
778 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
779 onsetEvent.setAai(new HashMap<>());
780 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
782 VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
783 abatedEvent.setClosedLoopControlName("TwoOnsetTest");
784 abatedEvent.setRequestId(requestId);
785 abatedEvent.setTarget("generic-vnf.vnf-id");
786 abatedEvent.setClosedLoopAlarmStart(Instant.now());
787 abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
788 abatedEvent.setAai(new HashMap<>());
789 abatedEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
791 ControlLoopEventManager manager = makeManager(onsetEvent);
792 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
793 assertNotNull(notification);
794 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
796 assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
797 assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
798 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
800 VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
801 checkSyntaxEvent.setAai(null);
802 checkSyntaxEvent.setClosedLoopAlarmEnd(null);
803 checkSyntaxEvent.setClosedLoopAlarmStart(null);
804 checkSyntaxEvent.setClosedLoopControlName(null);
805 checkSyntaxEvent.setClosedLoopEventClient(null);
806 checkSyntaxEvent.setClosedLoopEventStatus(null);
807 checkSyntaxEvent.setFrom(null);
808 checkSyntaxEvent.setPolicyName(null);
809 checkSyntaxEvent.setPolicyScope(null);
810 checkSyntaxEvent.setPolicyVersion(null);
811 checkSyntaxEvent.setRequestId(null);
812 checkSyntaxEvent.setTarget(null);
813 checkSyntaxEvent.setTargetType(null);
814 checkSyntaxEvent.setVersion(null);
816 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
818 checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
819 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
821 checkSyntaxEvent.setClosedLoopControlName(null);
822 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
824 checkSyntaxEvent.setClosedLoopControlName("");
825 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
827 checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
828 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
830 checkSyntaxEvent.setRequestId(null);
831 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
833 checkSyntaxEvent.setRequestId(requestId);
834 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
836 checkSyntaxEvent.setAai(null);
837 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
839 checkSyntaxEvent.setAai(new HashMap<>());
840 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
842 checkSyntaxEvent.setTarget("");
843 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
845 checkSyntaxEvent.setTarget(null);
846 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
848 checkSyntaxEvent.setTarget("");
849 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
851 checkSyntaxEvent.setTarget("OZ");
852 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
854 checkSyntaxEvent.setTarget("VM_NAME");
855 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
857 checkSyntaxEvent.setTarget("VNF_NAME");
858 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
860 checkSyntaxEvent.setTarget("vserver.vserver-name");
861 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
863 checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
864 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
866 checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
867 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
869 checkSyntaxEvent.setAai(null);
870 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
872 checkSyntaxEvent.setAai(new HashMap<>());
873 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
875 checkSyntaxEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
876 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
878 checkSyntaxEvent.getAai().put("vserver.vserver-name", "onsetOne");
879 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
881 checkSyntaxEvent.getAai().put("generic-vnf.vnf-id", "onsetOne");
882 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
886 public void testControlLoopTimeout() throws IOException {
887 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
888 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
890 UUID requestId = UUID.randomUUID();
891 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
892 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
893 onsetEvent.setRequestId(requestId);
894 onsetEvent.setTarget("generic-vnf.vnf-id");
895 onsetEvent.setClosedLoopAlarmStart(Instant.now());
896 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
897 onsetEvent.setAai(new HashMap<>());
898 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
900 ControlLoopEventManager manager = makeManager(onsetEvent);
901 assertTrue(0 == manager.getControlLoopTimeout(null));
902 assertTrue(120 == manager.getControlLoopTimeout(120));
904 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
905 assertNotNull(notification);
906 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
908 assertTrue(60 == manager.getControlLoopTimeout(null));
912 public void testQueryAai_AlreadyDisabled() throws AaiException {
913 ControlLoopEventManager mgr = null;
916 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
917 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS,
918 ControlLoopEventManager.PROV_STATUS_ACTIVE);
920 mgr = makeManager(onset);
923 fail("missing exception");
925 } catch (AaiException expected) {
926 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", expected.getMessage());
927 assertNull(mgr.getVnfResponse());
928 assertNull(mgr.getVserverResponse());
933 public void testQueryAai_AlreadyInactive() throws AaiException {
934 ControlLoopEventManager mgr = null;
937 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
938 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, "not-active2");
940 mgr = makeManager(onset);
943 fail("missing exception");
945 } catch (AaiException expected) {
946 assertEquals("prov-status is not ACTIVE on VServer or VNF", expected.getMessage());
947 assertNull(mgr.getVnfResponse());
948 assertNull(mgr.getVserverResponse());
953 public void testQueryAai_QueryVnfById() throws AaiException {
954 ControlLoopEventManager mgr = null;
956 mgr = makeManager(onset);
959 assertNotNull(mgr.getVnfResponse());
960 assertNull(mgr.getVserverResponse());
962 AaiGetVnfResponse vnfresp = mgr.getVnfResponse();
964 // should not re-query
967 assertEquals(vnfresp, mgr.getVnfResponse());
968 assertNull(mgr.getVserverResponse());
972 public void testQueryAai_QueryVnfByName() throws AaiException {
973 ControlLoopEventManager mgr = null;
976 onset.getAai().remove(ControlLoopEventManager.GENERIC_VNF_VNF_ID);
977 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_VNF_NAME, "AVNFName");
979 mgr = makeManager(onset);
982 assertNotNull(mgr.getVnfResponse());
983 assertNull(mgr.getVserverResponse());
985 AaiGetVnfResponse vnfresp = mgr.getVnfResponse();
987 // should not re-query
990 assertEquals(vnfresp, mgr.getVnfResponse());
991 assertNull(mgr.getVserverResponse());
995 public void testQueryAai_QueryVnfById_Disabled() throws AaiException {
996 ControlLoopEventManager mgr = null;
999 onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_VNF_ID, "disableClosedLoop");
1001 mgr = makeManager(onset);
1002 mgr.queryAai(onset);
1004 fail("missing exception");
1006 } catch (AaiException expected) {
1007 assertEquals("is-closed-loop-disabled is set to true (query by vnf-id)", expected.getMessage());
1009 assertNotNull(mgr.getVnfResponse());
1010 assertNull(mgr.getVserverResponse());
1015 public void testQueryAai_QueryVserver() throws AaiException {
1016 ControlLoopEventManager mgr = null;
1018 onset.getAai().remove(ControlLoopEventManager.GENERIC_VNF_VNF_ID);
1019 onset.getAai().put(ControlLoopEventManager.VSERVER_VSERVER_NAME, "AVserver");
1021 mgr = makeManager(onset);
1022 mgr.queryAai(onset);
1024 assertNull(mgr.getVnfResponse());
1025 assertNotNull(mgr.getVserverResponse());
1027 AaiGetVserverResponse vsvresp = mgr.getVserverResponse();
1029 // should not re-query
1030 mgr.queryAai(onset);
1032 assertNull(mgr.getVnfResponse());
1033 assertEquals(vsvresp, mgr.getVserverResponse());
1037 public void testQueryAai_QueryVserver_Disabled() throws AaiException {
1038 ControlLoopEventManager mgr = null;
1041 onset.getAai().remove(ControlLoopEventManager.GENERIC_VNF_VNF_ID);
1042 onset.getAai().put(ControlLoopEventManager.VSERVER_VSERVER_NAME, "disableClosedLoop");
1044 mgr = makeManager(onset);
1045 mgr.queryAai(onset);
1047 fail("missing exception");
1049 } catch (AaiException expected) {
1050 assertEquals("is-closed-loop-disabled is set to true (query by vserver-name)", expected.getMessage());
1052 assertNull(mgr.getVnfResponse());
1053 assertNotNull(mgr.getVserverResponse());
1057 @Test(expected = AaiException.class)
1058 public void testQueryAai_QueryException() throws AaiException {
1060 PolicyEngine.manager.setEnvironmentProperty("aai.url", INVALID_URL);
1062 makeManager(onset).queryAai(onset);
1066 public void testProcessVnfResponse_Success() throws Exception {
1067 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1068 resp.setIsClosedLoopDisabled(false);
1069 resp.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1070 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, true);
1074 public void testProcessVnfResponse_NullResponse() throws Exception {
1075 thrown.expect(AaiException.class);
1076 thrown.expectMessage("AAI Response is null (query by vnf-id)");
1078 AaiGetVnfResponse resp = null;
1079 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, true);
1083 public void testProcessVnfResponse_Error() throws Exception {
1084 thrown.expect(AaiException.class);
1085 thrown.expectMessage("AAI Responded with a request error (query by vnf-name)");
1087 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1089 resp.setRequestError(new AaiNqRequestError());
1091 resp.setIsClosedLoopDisabled(false);
1092 resp.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1093 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, false);
1097 public void testProcessVnfResponse_Disabled() throws Exception {
1098 thrown.expect(AaiException.class);
1099 thrown.expectMessage("is-closed-loop-disabled is set to true (query by vnf-id)");
1101 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1102 resp.setIsClosedLoopDisabled(true);
1103 resp.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1104 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, true);
1108 public void testProcessVnfResponse_Inactive() throws Exception {
1109 thrown.expect(AaiException.class);
1110 thrown.expectMessage("prov-status is not ACTIVE (query by vnf-name)");
1112 AaiGetVnfResponse resp = new AaiGetVnfResponse();
1113 resp.setIsClosedLoopDisabled(false);
1114 resp.setProvStatus("inactive1");
1115 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVNFResponse", resp, false);
1119 public void testProcessVserverResponse_Success() throws Exception {
1120 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1122 AaiNqVServer svr = new AaiNqVServer();
1123 resp.getVserver().add(svr);
1125 svr.setIsClosedLoopDisabled(false);
1126 svr.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1127 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1131 public void testProcessVserverResponse_NullResponse() throws Exception {
1132 thrown.expect(AaiException.class);
1133 thrown.expectMessage("AAI Response is null (query by vserver-name)");
1135 AaiGetVserverResponse resp = null;
1136 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1140 public void testProcessVserverResponse_Error() throws Exception {
1141 thrown.expect(AaiException.class);
1142 thrown.expectMessage("AAI Responded with a request error (query by vserver-name)");
1144 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1146 resp.setRequestError(new AaiNqRequestError());
1148 AaiNqVServer svr = new AaiNqVServer();
1149 resp.getVserver().add(svr);
1151 svr.setIsClosedLoopDisabled(false);
1152 svr.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1154 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1158 public void testProcessVserverResponse_Disabled() throws Exception {
1159 thrown.expect(AaiException.class);
1160 thrown.expectMessage("is-closed-loop-disabled is set to true (query by vserver-name)");
1162 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1163 AaiNqVServer svr = new AaiNqVServer();
1164 resp.getVserver().add(svr);
1166 svr.setIsClosedLoopDisabled(true);
1167 svr.setProvStatus(ControlLoopEventManager.PROV_STATUS_ACTIVE);
1168 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1172 public void testProcessVserverResponse_Inactive() throws Exception {
1173 thrown.expect(AaiException.class);
1174 thrown.expectMessage("prov-status is not ACTIVE (query by vserver-name)");
1176 AaiGetVserverResponse resp = new AaiGetVserverResponse();
1177 AaiNqVServer svr = new AaiNqVServer();
1178 resp.getVserver().add(svr);
1180 svr.setIsClosedLoopDisabled(false);
1181 svr.setProvStatus("inactive1");
1182 Whitebox.invokeMethod(ControlLoopEventManager.class, "processVServerResponse", resp);
1186 public void testIsClosedLoopDisabled() {
1187 Map<String, String> aai = onset.getAai();
1190 aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
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.FALSE.toString());
1197 assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
1200 aai.put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
1201 aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
1202 assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
1205 aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
1206 aai.put(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
1207 assertTrue(ControlLoopEventManager.isClosedLoopDisabled(onset));
1210 aai.put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
1211 aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
1212 assertTrue(ControlLoopEventManager.isClosedLoopDisabled(onset));
1216 public void testIsProvStatusInactive() {
1217 Map<String, String> aai = onset.getAai();
1220 aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
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, ControlLoopEventManager.PROV_STATUS_ACTIVE);
1227 assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
1230 aai.put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, ControlLoopEventManager.PROV_STATUS_ACTIVE);
1231 aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
1232 assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
1235 aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
1236 aai.put(ControlLoopEventManager.VSERVER_PROV_STATUS, "other1");
1237 assertTrue(ControlLoopEventManager.isProvStatusInactive(onset));
1240 aai.put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, "other2");
1241 aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
1242 assertTrue(ControlLoopEventManager.isProvStatusInactive(onset));
1246 public void testIsAaiTrue() {
1247 assertTrue(ControlLoopEventManager.isAaiTrue("tRuE"));
1248 assertTrue(ControlLoopEventManager.isAaiTrue("T"));
1249 assertTrue(ControlLoopEventManager.isAaiTrue("t"));
1250 assertTrue(ControlLoopEventManager.isAaiTrue("yES"));
1251 assertTrue(ControlLoopEventManager.isAaiTrue("Y"));
1252 assertTrue(ControlLoopEventManager.isAaiTrue("y"));
1254 assertFalse(ControlLoopEventManager.isAaiTrue("no"));
1255 assertFalse(ControlLoopEventManager.isAaiTrue(null));
1259 public void testGetNqVserverFromAai() throws Exception {
1261 // empty vserver name
1262 ControlLoopEventManager manager = makeManager(onset);
1263 manager.activate(onset);
1264 assertNull(manager.getNqVserverFromAai());
1267 // re-create manager with a vserver name in the onset
1268 onset.getAai().put(ControlLoopEventManager.VSERVER_VSERVER_NAME, "my-name");
1269 manager = makeManager(onset);
1270 manager.activate(onset);
1272 AaiNqResponseWrapper resp = manager.getNqVserverFromAai();
1273 assertNotNull(resp);
1274 assertEquals(onset.getRequestId(), resp.getRequestId());
1275 assertNotNull(resp.getAaiNqResponse());
1276 assertFalse(resp.getAaiNqResponse().getInventoryResponseItems().isEmpty());
1278 // re-query should return the same object
1279 assertTrue(resp == manager.getNqVserverFromAai());
1283 PolicyEngine.manager.setEnvironmentProperty("aai.url", INVALID_URL);
1285 // re-create manager
1286 manager = makeManager(onset);
1287 manager.activate(onset);
1288 assertNull(manager.getNqVserverFromAai());
1291 private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
1292 return new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());