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