37558474a9ae47752f862140667b2600a4c30a93
[policy/drools-applications.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * unit test
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.policy.controlloop.eventmanager;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28 import java.io.File;
29 import java.io.FileInputStream;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.nio.charset.StandardCharsets;
33 import java.time.Instant;
34 import java.util.HashMap;
35 import java.util.UUID;
36 import org.apache.commons.io.IOUtils;
37 import org.junit.AfterClass;
38 import org.junit.BeforeClass;
39 import org.junit.Test;
40 import org.onap.policy.aai.AaiGetVnfResponse;
41 import org.onap.policy.aai.AaiGetVserverResponse;
42 import org.onap.policy.aai.AaiNqVServer;
43 import org.onap.policy.aai.RelatedToProperty;
44 import org.onap.policy.aai.Relationship;
45 import org.onap.policy.aai.RelationshipData;
46 import org.onap.policy.aai.RelationshipList;
47 import org.onap.policy.aai.util.AaiException;
48 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
49 import org.onap.policy.controlloop.ControlLoopEventStatus;
50 import org.onap.policy.controlloop.ControlLoopException;
51 import org.onap.policy.controlloop.ControlLoopNotificationType;
52 import org.onap.policy.controlloop.Util;
53 import org.onap.policy.controlloop.VirtualControlLoopEvent;
54 import org.onap.policy.controlloop.VirtualControlLoopNotification;
55 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS;
56 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
57 import org.onap.policy.controlloop.policy.PolicyResult;
58 import org.onap.policy.drools.system.PolicyEngine;
59 import org.onap.policy.guard.GuardResult;
60 import org.onap.policy.guard.PolicyGuard;
61 import org.onap.policy.guard.PolicyGuard.LockResult;
62 import org.onap.policy.guard.TargetLock;
63 import org.slf4j.Logger;
64 import org.slf4j.LoggerFactory;
65
66 public class ControlLoopEventManagerTest {
67     private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
68
69     private static VirtualControlLoopEvent onset;
70
71     {
72         onset = new VirtualControlLoopEvent();
73         onset.setClosedLoopControlName("ControlLoop-vUSP");
74         onset.setRequestId(UUID.randomUUID());
75         onset.setTarget("VM_NAME");
76         onset.setClosedLoopAlarmStart(Instant.now());
77         onset.setAai(new HashMap<String, String>());
78         onset.getAai().put("cloud-region.identity-url", "foo");
79         onset.getAai().put("vserver.selflink", "bar");
80         onset.getAai().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
81         onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
82     }
83
84     /**
85      * Set up test class.
86      */
87     @BeforeClass
88     public static void setUpSimulator() {
89         try {
90             org.onap.policy.simulators.Util.buildAaiSim();
91         } catch (Exception e) {
92             fail(e.getMessage());
93         }
94         PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
95         PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
96         PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
97     }
98
99     @AfterClass
100     public static void tearDownSimulator() {
101         HttpServletServer.factory.destroy();
102     }
103
104     @Test
105     public void testAaiVnfInfo() {
106         final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
107         onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
108         try {
109             AaiGetVnfResponse response = getQueryByVnfId2(
110                     PolicyEngine.manager.getEnvironmentProperty("aai.url")
111                             + "/aai/v11/network/generic-vnfs/generic-vnf/",
112                     PolicyEngine.manager.getEnvironmentProperty("aai.username"),
113                     PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
114                     "5e49ca06-2972-4532-9ed4-6d071588d792");
115             assertNotNull(response);
116             logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
117         } catch (Exception e) {
118             logger.error("testAAIVnfInfo Exception: ", e);
119             fail(e.getMessage());
120         }
121     }
122
123     @Test
124     public void testAaiVnfInfo2() {
125         final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
126         onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
127         try {
128             AaiGetVnfResponse response = getQueryByVnfName2(
129                     PolicyEngine.manager.getEnvironmentProperty("aai.url")
130                             + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
131                     PolicyEngine.manager.getEnvironmentProperty("aai.username"),
132                     PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
133             assertNotNull(response);
134             logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
135         } catch (Exception e) {
136             logger.error("testAAIVnfInfo2 Exception: ", e);
137             fail(e.getMessage());
138         }
139     }
140
141     @Test
142     public void testAaiVserver() {
143         final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
144         onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
145         try {
146             AaiGetVserverResponse response = getQueryByVserverName2(
147                     PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
148                     PolicyEngine.manager.getEnvironmentProperty("aai.username"),
149                     PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
150                     "USMSO1SX7NJ0103UJZZ01-vjunos0");
151             assertNotNull(response);
152             logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
153         } catch (Exception e) {
154             logger.error("testAAIVserver Exception: ", e);
155             fail(e.getMessage());
156         }
157     }
158
159     @Test
160     public void testIsClosedLoopDisabled() {
161         //
162         // Load up the policy
163         //
164         final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
165         onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
166
167         try {
168             logger.info("testIsClosedLoopDisabled --");
169             AaiGetVnfResponse response = getQueryByVnfId2(
170                     PolicyEngine.manager.getEnvironmentProperty("aai.url")
171                             + "/aai/v11/network/generic-vnfs/generic-vnf/",
172                     PolicyEngine.manager.getEnvironmentProperty("aai.username"),
173                     PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
174                     "5e49ca06-2972-4532-9ed4-6d071588d792");
175             assertNotNull(response);
176
177             // TODO: Handle this
178             // boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
179             // logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled);
180
181             response = getQueryByVnfName2(
182                     PolicyEngine.manager.getEnvironmentProperty("aai.url")
183                             + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
184                     PolicyEngine.manager.getEnvironmentProperty("aai.username"),
185                     PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
186             assertNotNull(response);
187             // TODO: Handle this
188             // disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
189             // logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled);
190
191             AaiGetVserverResponse response2 = getQueryByVserverName2(
192                     PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
193                     PolicyEngine.manager.getEnvironmentProperty("aai.user"),
194                     PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
195                     "USMSO1SX7NJ0103UJZZ01-vjunos0");
196             assertNotNull(response2);
197             // TODO: Handle this
198             // disabled = ControlLoopEventManager.isClosedLoopDisabled(response2);
199             // logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled);
200         } catch (Exception e) {
201             fail(e.getMessage());
202         }
203     }
204
205     @Test
206     public void abatemetCheckEventSyntaxTest() {
207         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
208         event.setClosedLoopControlName("abatementAAI");
209         event.setRequestId(UUID.randomUUID());
210         event.setTarget("generic-vnf.vnf-id");
211         event.setClosedLoopAlarmStart(Instant.now());
212         event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
213         ControlLoopEventManager manager = makeManager(event);
214         assertNull(manager.getVnfResponse());
215         assertNull(manager.getVserverResponse());
216         try {
217             manager.checkEventSyntax(event);
218         } catch (ControlLoopException e) {
219             logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
220             e.printStackTrace();
221             fail("Exception in check event syntax");
222         }
223         assertNull(manager.getVnfResponse());
224         assertNull(manager.getVserverResponse());
225
226
227         event.setAai(new HashMap<>());
228         event.getAai().put("generic-vnf.vnf-name", "abatementTest");
229         try {
230             manager.checkEventSyntax(event);
231         } catch (ControlLoopException e) {
232             logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
233             e.printStackTrace();
234             fail("Exception in check event syntax");
235         }
236         assertNull(manager.getVnfResponse());
237         assertNull(manager.getVserverResponse());
238     }
239
240     @Test
241     public void subsequentOnsetTest() {
242         UUID requestId = UUID.randomUUID();
243         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
244         event.setClosedLoopControlName("TwoOnsetTest");
245         event.setRequestId(requestId);
246         event.setTarget("generic-vnf.vnf-id");
247         event.setClosedLoopAlarmStart(Instant.now());
248         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
249         event.setAai(new HashMap<>());
250         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
251
252         ControlLoopEventManager manager = makeManager(event);
253         VirtualControlLoopNotification notification = manager.activate(event);
254
255         assertNotNull(notification);
256         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
257
258         ControlLoopEventManager.NEW_EVENT_STATUS status = null;
259         try {
260             status = manager.onNewEvent(event);
261         } catch (AaiException e) {
262             logger.warn(e.toString());
263             fail("A&AI Query Failed");
264         }
265         assertNotNull(status);
266         assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
267
268         AaiGetVnfResponse response = manager.getVnfResponse();
269         assertNotNull(response);
270         assertNull(manager.getVserverResponse());
271
272         VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
273         event2.setClosedLoopControlName("TwoOnsetTest");
274         event2.setRequestId(requestId);
275         event2.setTarget("generic-vnf.vnf-id");
276         event2.setClosedLoopAlarmStart(Instant.now());
277         event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
278         event2.setAai(new HashMap<>());
279         event2.getAai().put("generic-vnf.vnf-name", "onsetTwo");
280
281
282         try {
283             status = manager.onNewEvent(event2);
284         } catch (AaiException e) {
285             logger.warn(e.toString());
286             fail("A&AI Query Failed");
287         }
288         assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
289         AaiGetVnfResponse response2 = manager.getVnfResponse();
290         assertNotNull(response2);
291         // We should not have queried AAI, so the stored response should be the same
292         assertEquals(response, response2);
293         assertNull(manager.getVserverResponse());
294     }
295
296     /**
297      * Simulate a response.
298      */
299     public static AaiGetVnfResponse getQueryByVnfId2(String urlGet, String username, String password, UUID requestId,
300             String key) {
301         AaiGetVnfResponse response = new AaiGetVnfResponse();
302
303         response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
304         response.setVnfName("lll_vnf_010317");
305         response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
306         response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
307         response.setOrchestrationStatus("Created");
308         response.setInMaint(false);
309         response.setIsClosedLoopDisabled(false);
310         response.setResourceVersion("1494001988835");
311         response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
312
313         final RelationshipList relationshipList = new RelationshipList();
314         final Relationship relationship = new Relationship();
315         RelationshipData relationshipDataItem = new RelationshipData();
316
317         relationshipDataItem.setRelationshipKey("customer.global-customer-id");
318         relationshipDataItem.setRelationshipValue("MSO_1610_ST");
319         relationship.getRelationshipData().add(relationshipDataItem);
320
321         relationshipDataItem.setRelationshipKey("service-subscription.service-type");
322         relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
323         relationship.getRelationshipData().add(relationshipDataItem);
324
325         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
326         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
327         relationship.getRelationshipData().add(relationshipDataItem);
328
329         RelatedToProperty item = new RelatedToProperty();
330         item.setPropertyKey("service-instance.service-instance-name");
331         item.setPropertyValue("lll_svc_010317");
332         relationship.getRelatedToProperty().add(item);
333
334         relationship.setRelatedTo("service-instance");
335         relationship.setRelatedLink(
336                 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
337                         + "/MSO-dev-service-type/service-instances/service-instance/"
338                         + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
339
340         relationshipList.getRelationships().add(relationship);
341         response.setRelationshipList(relationshipList);
342
343         return response;
344     }
345
346     /**
347      * Simulate a response.
348      */
349     public static AaiGetVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestId,
350             String key) {
351         AaiGetVnfResponse response = new AaiGetVnfResponse();
352
353         response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
354         response.setVnfName("lll_vnf_010317");
355         response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
356         response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
357         response.setOrchestrationStatus("Created");
358         response.setInMaint(false);
359         response.setIsClosedLoopDisabled(false);
360         response.setResourceVersion("1494001988835");
361         response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
362
363         final RelationshipList relationshipList = new RelationshipList();
364         final Relationship relationship = new Relationship();
365         RelationshipData relationshipDataItem = new RelationshipData();
366
367         relationshipDataItem.setRelationshipKey("customer.global-customer-id");
368         relationshipDataItem.setRelationshipValue("MSO_1610_ST");
369         relationship.getRelationshipData().add(relationshipDataItem);
370
371         relationshipDataItem.setRelationshipKey("service-subscription.service-type");
372         relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
373         relationship.getRelationshipData().add(relationshipDataItem);
374
375         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
376         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
377         relationship.getRelationshipData().add(relationshipDataItem);
378
379         RelatedToProperty item = new RelatedToProperty();
380         item.setPropertyKey("service-instance.service-instance-name");
381         item.setPropertyValue("lll_svc_010317");
382         relationship.getRelatedToProperty().add(item);
383
384         relationship.setRelatedTo("service-instance");
385         relationship.setRelatedLink(
386                 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
387                         + "/MSO-dev-service-type/service-instances/service-instance/"
388                         + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
389
390         relationshipList.getRelationships().add(relationship);
391         response.setRelationshipList(relationshipList);
392
393         return response;
394     }
395
396     /**
397      * Simulate a response.
398      */
399     public static AaiGetVserverResponse getQueryByVserverName2(String urlGet, String username, String password,
400             UUID requestId, String key) {
401         AaiGetVserverResponse response = new AaiGetVserverResponse();
402         
403         AaiNqVServer svr = new AaiNqVServer();
404
405         svr.setVserverId("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
406         svr.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
407         svr.setVserverName2("vjunos0");
408         svr.setVserverSelflink(
409                 "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");
410         svr.setInMaint(false);
411         svr.setIsClosedLoopDisabled(false);
412         svr.setResourceVersion("1494001931513");
413
414         final RelationshipList relationshipList = new RelationshipList();
415         final Relationship relationship = new Relationship();
416         RelationshipData relationshipDataItem = new RelationshipData();
417
418         relationshipDataItem.setRelationshipKey("customer.global-customer-id");
419         relationshipDataItem.setRelationshipValue("MSO_1610_ST");
420         relationship.getRelationshipData().add(relationshipDataItem);
421
422         relationshipDataItem.setRelationshipKey("service-subscription.service-type");
423         relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
424         relationship.getRelationshipData().add(relationshipDataItem);
425
426         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
427         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
428         relationship.getRelationshipData().add(relationshipDataItem);
429
430         RelatedToProperty item = new RelatedToProperty();
431         item.setPropertyKey("service-instance.service-instance-name");
432         item.setPropertyValue("lll_svc_010317");
433         relationship.getRelatedToProperty().add(item);
434
435         relationship.setRelatedTo("service-instance");
436         relationship.setRelatedLink(
437                 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
438                         + "/MSO-dev-service-type/service-instances/service-instance/"
439                         + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
440
441         relationshipList.getRelationships().add(relationship);
442         svr.setRelationshipList(relationshipList);
443         
444         response.getVserver().add(svr);
445
446         return response;
447     }
448
449     @Test
450     public void testMethods() {
451         UUID requestId = UUID.randomUUID();
452         ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", requestId);
453
454         assertEquals("MyClosedLoopName", clem.getClosedLoopControlName());
455         assertEquals(requestId, clem.getRequestID());
456
457         clem.setActivated(true);
458         assertEquals(true, clem.isActivated());
459
460         clem.setControlLoopResult("SUCCESS");
461         assertEquals("SUCCESS", clem.getControlLoopResult());
462
463         clem.setControlLoopTimedOut();
464         assertEquals(true, clem.isControlLoopTimedOut());
465
466         clem.setNumAbatements(12345);
467         assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
468
469         clem.setNumOnsets(54321);
470         assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
471
472         assertNull(clem.getOnsetEvent());
473         assertNull(clem.getAbatementEvent());
474         assertNull(clem.getProcessor());
475
476         assertEquals(true, clem.isActive());
477         assertEquals(false, clem.releaseLock());
478         assertEquals(true, clem.isControlLoopTimedOut());
479
480         assertNull(clem.unlockCurrentOperation());
481     }
482
483     @Test
484     public void testAlreadyActivated() {
485         UUID requestId = UUID.randomUUID();
486         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
487         event.setClosedLoopControlName("TwoOnsetTest");
488         event.setRequestId(requestId);
489         event.setTarget("generic-vnf.vnf-id");
490         event.setClosedLoopAlarmStart(Instant.now());
491         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
492         event.setAai(new HashMap<>());
493         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
494
495         ControlLoopEventManager manager = makeManager(event);
496         manager.setActivated(true);
497         VirtualControlLoopNotification notification = manager.activate(event);
498         assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
499     }
500
501     @Test
502     public void testActivationYaml() throws IOException {
503         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
504         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
505
506         InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
507         final String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
508
509         UUID requestId = UUID.randomUUID();
510         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
511         event.setClosedLoopControlName("TwoOnsetTest");
512         event.setRequestId(requestId);
513         event.setTarget("generic-vnf.vnf-id");
514         event.setClosedLoopAlarmStart(Instant.now());
515         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
516         event.setAai(new HashMap<>());
517         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
518
519         ControlLoopEventManager manager = makeManager(event);
520
521         // Null YAML should fail
522         VirtualControlLoopNotification notificationNull = manager.activate(null, event);
523         assertNotNull(notificationNull);
524         assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification());
525
526         // Empty YAML should fail
527         VirtualControlLoopNotification notificationEmpty = manager.activate("", event);
528         assertNotNull(notificationEmpty);
529         assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification());
530
531         // Bad YAML should fail
532         VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event);
533         assertNotNull(notificationBad);
534         assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification());
535
536         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
537         assertNotNull(notification);
538         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
539
540         // Another activate should fail
541         VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event);
542         assertNotNull(notificationActive);
543         assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification());
544     }
545
546     @Test
547     public void testControlLoopFinal() throws ControlLoopException, IOException {
548         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
549         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
550
551         UUID requestId = UUID.randomUUID();
552         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
553         event.setClosedLoopControlName("TwoOnsetTest");
554         event.setRequestId(requestId);
555         event.setTarget("generic-vnf.vnf-id");
556         event.setClosedLoopAlarmStart(Instant.now());
557         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
558         event.setAai(new HashMap<>());
559         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
560
561         ControlLoopEventManager manager = makeManager(event);
562         try {
563             manager.isControlLoopFinal();
564             fail("test should throw an exception here");
565         } catch (ControlLoopException e) {
566             assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
567         }
568
569         manager.setActivated(true);
570         try {
571             manager.isControlLoopFinal();
572             fail("test should throw an exception here");
573         } catch (ControlLoopException e) {
574             assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
575         }
576
577         manager.setActivated(false);
578         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
579         assertNotNull(notification);
580         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
581
582         VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
583         assertNull(clfNotification);
584
585         manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
586         clfNotification = manager.isControlLoopFinal();
587         assertNotNull(clfNotification);
588         assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
589
590         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
591         notification = manager.activate(yamlString, event);
592         assertNotNull(notification);
593         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
594
595         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
596         clfNotification = manager.isControlLoopFinal();
597         assertNotNull(clfNotification);
598         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
599
600         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
601         notification = manager.activate(yamlString, event);
602         assertNotNull(notification);
603         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
604
605         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
606         clfNotification = manager.isControlLoopFinal();
607         assertNotNull(clfNotification);
608         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
609
610         manager.setControlLoopTimedOut();
611         clfNotification = manager.isControlLoopFinal();
612         assertNotNull(clfNotification);
613         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
614     }
615
616     @Test
617     public void testProcessControlLoop() throws ControlLoopException, IOException, AaiException {
618         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
619         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
620
621         UUID requestId = UUID.randomUUID();
622         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
623         event.setClosedLoopControlName("TwoOnsetTest");
624         event.setRequestId(requestId);
625         event.setTarget("generic-vnf.vnf-id");
626         event.setClosedLoopAlarmStart(Instant.now());
627         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
628         event.setAai(new HashMap<>());
629         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
630
631         ControlLoopEventManager manager = makeManager(event);
632         try {
633             manager.processControlLoop();
634             fail("test should throw an exception here");
635         } catch (Exception e) {
636             assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
637         }
638
639         manager.setActivated(true);
640         try {
641             manager.processControlLoop();
642             fail("test should throw an exception here");
643         } catch (Exception e) {
644             assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
645         }
646
647         manager.setActivated(false);
648         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
649         assertNotNull(notification);
650         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
651
652         ControlLoopOperationManager clom = manager.processControlLoop();
653         assertNotNull(clom);
654         assertNull(clom.getOperationResult());
655
656         // Test operation in progress
657         try {
658             manager.processControlLoop();
659             fail("test should throw an exception here");
660         } catch (Exception e) {
661             assertEquals("Already working an Operation, do not call this method.", e.getMessage());
662         }
663
664         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
665         notification = manager.activate(yamlString, event);
666         assertNotNull(notification);
667         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
668
669         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
670         VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
671         assertNotNull(clfNotification);
672         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
673
674         // Test operation completed
675         try {
676             manager.processControlLoop();
677             fail("test should throw an exception here");
678         } catch (Exception e) {
679             assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage());
680         }
681
682         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
683         notification = manager.activate(yamlString, event);
684         assertNotNull(notification);
685         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
686         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
687
688         // Test operation with no next policy defined
689         try {
690             manager.processControlLoop();
691             fail("test should throw an exception here");
692         } catch (Exception e) {
693             assertEquals("The target type is null", e.getMessage());
694         }
695     }
696
697     @Test
698     public void testFinishOperation() throws IOException, ControlLoopException, AaiException {
699         InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
700         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
701
702         InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
703         final String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
704
705         UUID requestId = UUID.randomUUID();
706         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
707         event.setClosedLoopControlName("TwoOnsetTest");
708         event.setRequestId(requestId);
709         event.setTarget("generic-vnf.vnf-id");
710         event.setClosedLoopAlarmStart(Instant.now());
711         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
712         event.setAai(new HashMap<>());
713         event.getAai().put("generic-vnf.vnf-id", "onsetOne");
714
715         ControlLoopEventManager manager = makeManager(event);
716         try {
717             manager.finishOperation(null);
718             fail("test should throw an exception here");
719         } catch (Exception e) {
720             assertEquals("No operation to finish.", e.getMessage());
721         }
722
723         manager.setActivated(true);
724         try {
725             manager.finishOperation(null);
726             fail("test should throw an exception here");
727         } catch (Exception e) {
728             assertEquals("No operation to finish.", e.getMessage());
729         }
730
731         manager.setActivated(false);
732         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
733         assertNotNull(notification);
734         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
735
736         try {
737             manager.lockCurrentOperation();
738             fail("test should throw an exception here");
739         } catch (Exception e) {
740             assertEquals("Do not have a current operation.", e.getMessage());
741         }
742
743         assertNull(manager.unlockCurrentOperation());
744
745         ControlLoopOperationManager clom = manager.processControlLoop();
746         assertNotNull(clom);
747         assertNull(clom.getOperationResult());
748
749         LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation();
750         assertNotNull(lockLock);
751         assertEquals(GuardResult.LOCK_ACQUIRED, lockLock.getA());
752
753         LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
754         assertNotNull(lockLockAgain);
755         assertEquals(GuardResult.LOCK_ACQUIRED, lockLockAgain.getA());
756         assertEquals(lockLock.getB(), lockLockAgain.getB());
757
758         assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
759         assertNull(manager.unlockCurrentOperation());
760
761         lockLock = manager.lockCurrentOperation();
762         assertNotNull(lockLock);
763         PolicyGuard.unlockTarget(lockLock.getB());
764         assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
765
766         clom.startOperation(event);
767
768         // This call should be exception free
769         manager.finishOperation(clom);
770
771         ControlLoopEventManager otherManager = makeManager(event);
772         VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
773         assertNotNull(otherNotification);
774         assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
775
776         ControlLoopOperationManager otherClom = otherManager.processControlLoop();
777         assertNotNull(otherClom);
778         assertNull(otherClom.getOperationResult());
779
780         otherManager.finishOperation(clom);
781     }
782
783     @Test
784     public void testOnNewEvent() throws IOException, AaiException {
785         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
786         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
787
788         UUID requestId = UUID.randomUUID();
789         VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
790         onsetEvent.setClosedLoopControlName("TwoOnsetTest");
791         onsetEvent.setRequestId(requestId);
792         onsetEvent.setTarget("generic-vnf.vnf-id");
793         onsetEvent.setClosedLoopAlarmStart(Instant.now());
794         onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
795         onsetEvent.setAai(new HashMap<>());
796         onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
797
798         VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
799         abatedEvent.setClosedLoopControlName("TwoOnsetTest");
800         abatedEvent.setRequestId(requestId);
801         abatedEvent.setTarget("generic-vnf.vnf-id");
802         abatedEvent.setClosedLoopAlarmStart(Instant.now());
803         abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
804         abatedEvent.setAai(new HashMap<>());
805         abatedEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
806
807         ControlLoopEventManager manager = makeManager(onsetEvent);
808         VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
809         assertNotNull(notification);
810         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
811
812         assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
813         assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
814         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
815
816         VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
817         checkSyntaxEvent.setAai(null);
818         checkSyntaxEvent.setClosedLoopAlarmEnd(null);
819         checkSyntaxEvent.setClosedLoopAlarmStart(null);
820         checkSyntaxEvent.setClosedLoopControlName(null);
821         checkSyntaxEvent.setClosedLoopEventClient(null);
822         checkSyntaxEvent.setClosedLoopEventStatus(null);
823         checkSyntaxEvent.setFrom(null);
824         checkSyntaxEvent.setPolicyName(null);
825         checkSyntaxEvent.setPolicyScope(null);
826         checkSyntaxEvent.setPolicyVersion(null);
827         checkSyntaxEvent.setRequestId(null);
828         checkSyntaxEvent.setTarget(null);
829         checkSyntaxEvent.setTargetType(null);
830         checkSyntaxEvent.setVersion(null);
831
832         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
833
834         checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
835         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
836
837         checkSyntaxEvent.setClosedLoopControlName(null);
838         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
839
840         checkSyntaxEvent.setClosedLoopControlName("");
841         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
842
843         checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
844         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
845
846         checkSyntaxEvent.setRequestId(null);
847         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
848
849         checkSyntaxEvent.setRequestId(requestId);
850         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
851
852         checkSyntaxEvent.setAai(null);
853         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
854
855         checkSyntaxEvent.setAai(new HashMap<>());
856         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
857
858         checkSyntaxEvent.setTarget("");
859         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
860
861         checkSyntaxEvent.setTarget(null);
862         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
863
864         checkSyntaxEvent.setTarget("");
865         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
866
867         checkSyntaxEvent.setTarget("OZ");
868         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
869
870         checkSyntaxEvent.setTarget("VM_NAME");
871         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
872
873         checkSyntaxEvent.setTarget("VNF_NAME");
874         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
875
876         checkSyntaxEvent.setTarget("vserver.vserver-name");
877         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
878
879         checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
880         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
881
882         checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
883         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
884
885         checkSyntaxEvent.setAai(null);
886         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
887
888         checkSyntaxEvent.setAai(new HashMap<>());
889         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
890
891         checkSyntaxEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
892         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
893
894         checkSyntaxEvent.getAai().put("vserver.vserver-name", "onsetOne");
895         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
896
897         checkSyntaxEvent.getAai().put("generic-vnf.vnf-id", "onsetOne");
898         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
899     }
900
901     @Test
902     public void testControlLoopTimeout() throws IOException {
903         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
904         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
905
906         UUID requestId = UUID.randomUUID();
907         VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
908         onsetEvent.setClosedLoopControlName("TwoOnsetTest");
909         onsetEvent.setRequestId(requestId);
910         onsetEvent.setTarget("generic-vnf.vnf-id");
911         onsetEvent.setClosedLoopAlarmStart(Instant.now());
912         onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
913         onsetEvent.setAai(new HashMap<>());
914         onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
915
916         ControlLoopEventManager manager = makeManager(onsetEvent);
917         assertTrue(0 == manager.getControlLoopTimeout(null));
918         assertTrue(120 == manager.getControlLoopTimeout(120));
919
920         VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
921         assertNotNull(notification);
922         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
923
924         assertTrue(60 == manager.getControlLoopTimeout(null));
925     }
926
927     @Test
928     public void testQueryAai() throws IOException, AaiException {
929         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
930         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
931
932         UUID requestId = UUID.randomUUID();
933         VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
934         onsetEvent.setClosedLoopControlName("TwoOnsetTest");
935         onsetEvent.setRequestId(requestId);
936         onsetEvent.setTarget("generic-vnf.vnf-id");
937         onsetEvent.setClosedLoopAlarmStart(Instant.now());
938         onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
939         onsetEvent.setAai(new HashMap<>());
940         onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
941
942         ControlLoopEventManager manager = makeManager(onsetEvent);
943         manager.queryAai(onsetEvent);
944
945         VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
946         assertNotNull(notification);
947         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
948
949         // repeat query with same manager
950         manager.queryAai(onsetEvent);
951
952         // remaining queries each use their own manager so they will be re-executed
953
954         makeManager(onsetEvent).queryAai(onsetEvent);
955
956         onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "true");
957         try {
958             makeManager(onsetEvent).queryAai(onsetEvent);
959             fail("test should throw an exception here");
960         } catch (Exception e) {
961             assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
962         }
963         onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "true");
964         try {
965             makeManager(onsetEvent).queryAai(onsetEvent);
966             fail("test should throw an exception here");
967         } catch (Exception e) {
968             assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
969         }
970         onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
971         try {
972             makeManager(onsetEvent).queryAai(onsetEvent);
973             fail("test should throw an exception here");
974         } catch (Exception e) {
975             assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
976         }
977         onsetEvent.getAai().remove("vserver.is-closed-loop-disabled");
978         makeManager(onsetEvent).queryAai(onsetEvent);
979
980         onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "false");
981         makeManager(onsetEvent).queryAai(onsetEvent);
982
983         onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
984         onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "false");
985         makeManager(onsetEvent).queryAai(onsetEvent);
986
987         onsetEvent.getAai().remove("generic-vnf.vnf-id");
988         onsetEvent.getAai().remove("generic-vnf.vnf-name");
989         onsetEvent.getAai().remove("vserver.vserver-name");
990         onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
991         onsetEvent.getAai().remove("vserver.is-closed-loop-disabled");
992         makeManager(onsetEvent).queryAai(onsetEvent);
993
994         onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
995         makeManager(onsetEvent).queryAai(onsetEvent);
996
997         onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
998         makeManager(onsetEvent).queryAai(onsetEvent);
999
1000         onsetEvent.getAai().put("generic-vnf.vnf-id", "AVNFID");
1001         makeManager(onsetEvent).queryAai(onsetEvent);
1002
1003         onsetEvent.getAai().remove("vserver.vserver-name");
1004         makeManager(onsetEvent).queryAai(onsetEvent);
1005
1006         onsetEvent.getAai().remove("generic-vnf.vnf-name");
1007         makeManager(onsetEvent).queryAai(onsetEvent);
1008
1009         // Force AAI errors
1010         PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:9999");
1011
1012         try {
1013             makeManager(onsetEvent).queryAai(onsetEvent);
1014             fail("test should throw an exception here");
1015         } catch (Exception e) {
1016             assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1017                     + "(query by vnf-id)", e.getMessage());
1018         }
1019
1020         onsetEvent.getAai().remove("generic-vnf.vnf-id");
1021         onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1022         try {
1023             makeManager(onsetEvent).queryAai(onsetEvent);
1024             fail("test should throw an exception here");
1025         } catch (Exception e) {
1026             assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1027                     + "(query by vnf-name)", e.getMessage());
1028         }
1029
1030         onsetEvent.getAai().remove("generic-vnf.vnf-name");
1031         onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1032         try {
1033             makeManager(onsetEvent).queryAai(onsetEvent);
1034             fail("test should throw an exception here");
1035         } catch (Exception e) {
1036             assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1037                     + "(query by vserver-name)", e.getMessage());
1038         }
1039
1040         PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
1041     }
1042
1043     private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
1044         return new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
1045     }
1046 }