0c626e24782954f0d4cacd3bdce7abe68f6289ce
[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 = makeManager(event);
217         assertNull(manager.getVnfResponse());
218         assertNull(manager.getVserverResponse());
219         try {
220             manager.checkEventSyntax(event);
221         } catch (ControlLoopException e) {
222             logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
223             e.printStackTrace();
224             fail("Exception in check event syntax");
225         }
226         assertNull(manager.getVnfResponse());
227         assertNull(manager.getVserverResponse());
228
229
230         event.setAai(new HashMap<>());
231         event.getAai().put("generic-vnf.vnf-name", "abatementTest");
232         try {
233             manager.checkEventSyntax(event);
234         } catch (ControlLoopException e) {
235             logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
236             e.printStackTrace();
237             fail("Exception in check event syntax");
238         }
239         assertNull(manager.getVnfResponse());
240         assertNull(manager.getVserverResponse());
241     }
242
243     @Test
244     public void subsequentOnsetTest() {
245         UUID requestId = UUID.randomUUID();
246         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
247         event.setClosedLoopControlName("TwoOnsetTest");
248         event.setRequestId(requestId);
249         event.setTarget("generic-vnf.vnf-id");
250         event.setClosedLoopAlarmStart(Instant.now());
251         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
252         event.setAai(new HashMap<>());
253         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
254
255         ControlLoopEventManager manager = makeManager(event);
256         VirtualControlLoopNotification notification = manager.activate(event);
257
258         assertNotNull(notification);
259         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
260
261         ControlLoopEventManager.NEW_EVENT_STATUS status = null;
262         try {
263             status = manager.onNewEvent(event);
264         } catch (AaiException e) {
265             logger.warn(e.toString());
266             fail("A&AI Query Failed");
267         }
268         assertNotNull(status);
269         assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
270
271         AaiGetVnfResponse response = manager.getVnfResponse();
272         assertNotNull(response);
273         assertNull(manager.getVserverResponse());
274
275         VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
276         event2.setClosedLoopControlName("TwoOnsetTest");
277         event2.setRequestId(requestId);
278         event2.setTarget("generic-vnf.vnf-id");
279         event2.setClosedLoopAlarmStart(Instant.now());
280         event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
281         event2.setAai(new HashMap<>());
282         event2.getAai().put("generic-vnf.vnf-name", "onsetTwo");
283
284
285         try {
286             status = manager.onNewEvent(event2);
287         } catch (AaiException e) {
288             logger.warn(e.toString());
289             fail("A&AI Query Failed");
290         }
291         assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
292         AaiGetVnfResponse response2 = manager.getVnfResponse();
293         assertNotNull(response2);
294         // We should not have queried AAI, so the stored response should be the same
295         assertEquals(response, response2);
296         assertNull(manager.getVserverResponse());
297     }
298
299     /**
300      * Simulate a response.
301      */
302     public static AaiGetVnfResponse getQueryByVnfId2(String urlGet, String username, String password, UUID requestId,
303             String key) {
304         AaiGetVnfResponse response = new AaiGetVnfResponse();
305
306         response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
307         response.setVnfName("lll_vnf_010317");
308         response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
309         response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
310         response.setOrchestrationStatus("Created");
311         response.setInMaint("false");
312         response.setIsClosedLoopDisabled("false");
313         response.setResourceVersion("1494001988835");
314         response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
315
316         final RelationshipList relationshipList = new RelationshipList();
317         final Relationship relationship = new Relationship();
318         RelationshipData relationshipData = new RelationshipData();
319         RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
320
321         relationshipDataItem.setRelationshipKey("customer.global-customer-id");
322         relationshipDataItem.setRelationshipValue("MSO_1610_ST");
323         relationshipData.getRelationshipData().add(relationshipDataItem);
324
325         relationshipDataItem.setRelationshipKey("service-subscription.service-type");
326         relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
327         relationshipData.getRelationshipData().add(relationshipDataItem);
328
329         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
330         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
331         relationshipData.getRelationshipData().add(relationshipDataItem);
332
333         RelatedToProperty relatedToProperty = new RelatedToProperty();
334         RelatedToPropertyItem item = new RelatedToPropertyItem();
335         item.setPropertyKey("service-instance.service-instance-name");
336         item.setPropertyValue("lll_svc_010317");
337         relatedToProperty.getRelatedTo().add(item);
338
339         relationship.setRelatedTo("service-instance");
340         relationship.setRelatedLink(
341                 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
342                         + "/MSO-dev-service-type/service-instances/service-instance/"
343                         + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
344         relationship.setRelationshipData(relationshipData);
345         relationship.setRelatedToProperty(relatedToProperty);
346
347         relationshipList.getRelationshipList().add(relationship);
348         response.setRelationshipList(relationshipList);
349
350         return response;
351     }
352
353     /**
354      * Simulate a response.
355      */
356     public static AaiGetVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestId,
357             String key) {
358         AaiGetVnfResponse response = new AaiGetVnfResponse();
359
360         response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
361         response.setVnfName("lll_vnf_010317");
362         response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
363         response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
364         response.setOrchestrationStatus("Created");
365         response.setInMaint("false");
366         response.setIsClosedLoopDisabled("false");
367         response.setResourceVersion("1494001988835");
368         response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
369
370         final RelationshipList relationshipList = new RelationshipList();
371         final Relationship relationship = new Relationship();
372         RelationshipData relationshipData = new RelationshipData();
373         RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
374
375         relationshipDataItem.setRelationshipKey("customer.global-customer-id");
376         relationshipDataItem.setRelationshipValue("MSO_1610_ST");
377         relationshipData.getRelationshipData().add(relationshipDataItem);
378
379         relationshipDataItem.setRelationshipKey("service-subscription.service-type");
380         relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
381         relationshipData.getRelationshipData().add(relationshipDataItem);
382
383         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
384         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
385         relationshipData.getRelationshipData().add(relationshipDataItem);
386
387         RelatedToProperty relatedToProperty = new RelatedToProperty();
388         RelatedToPropertyItem item = new RelatedToPropertyItem();
389         item.setPropertyKey("service-instance.service-instance-name");
390         item.setPropertyValue("lll_svc_010317");
391         relatedToProperty.getRelatedTo().add(item);
392
393         relationship.setRelatedTo("service-instance");
394         relationship.setRelatedLink(
395                 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
396                         + "/MSO-dev-service-type/service-instances/service-instance/"
397                         + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
398         relationship.setRelationshipData(relationshipData);
399         relationship.setRelatedToProperty(relatedToProperty);
400
401         relationshipList.getRelationshipList().add(relationship);
402         response.setRelationshipList(relationshipList);
403
404         return response;
405     }
406
407     /**
408      * Simulate a response.
409      */
410     public static AaiGetVserverResponse getQueryByVserverName2(String urlGet, String username, String password,
411             UUID requestId, String key) {
412         AaiGetVserverResponse response = new AaiGetVserverResponse();
413
414         response.setVserverId("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
415         response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
416         response.setVserverName2("vjunos0");
417         response.setVserverSelflink(
418                 "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");
419         response.setInMaint("false");
420         response.setIsClosedLoopDisabled("false");
421         response.setResourceVersion("1494001931513");
422
423         final RelationshipList relationshipList = new RelationshipList();
424         final Relationship relationship = new Relationship();
425         RelationshipData relationshipData = new RelationshipData();
426         RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
427
428         relationshipDataItem.setRelationshipKey("customer.global-customer-id");
429         relationshipDataItem.setRelationshipValue("MSO_1610_ST");
430         relationshipData.getRelationshipData().add(relationshipDataItem);
431
432         relationshipDataItem.setRelationshipKey("service-subscription.service-type");
433         relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
434         relationshipData.getRelationshipData().add(relationshipDataItem);
435
436         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
437         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
438         relationshipData.getRelationshipData().add(relationshipDataItem);
439
440         RelatedToProperty relatedToProperty = new RelatedToProperty();
441         RelatedToPropertyItem item = new RelatedToPropertyItem();
442         item.setPropertyKey("service-instance.service-instance-name");
443         item.setPropertyValue("lll_svc_010317");
444         relatedToProperty.getRelatedTo().add(item);
445
446         relationship.setRelatedTo("service-instance");
447         relationship.setRelatedLink(
448                 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
449                         + "/MSO-dev-service-type/service-instances/service-instance/"
450                         + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
451         relationship.setRelationshipData(relationshipData);
452         relationship.setRelatedToProperty(relatedToProperty);
453
454         relationshipList.getRelationshipList().add(relationship);
455         response.setRelationshipList(relationshipList);
456
457         return response;
458     }
459
460     @Test
461     public void testMethods() {
462         UUID requestId = UUID.randomUUID();
463         ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", requestId);
464         
465         assertEquals("MyClosedLoopName", clem.getClosedLoopControlName());
466         assertEquals(requestId, clem.getRequestID());
467
468         clem.setActivated(true);
469         assertEquals(true, clem.isActivated());
470
471         clem.setControlLoopResult("SUCCESS");
472         assertEquals("SUCCESS", clem.getControlLoopResult());
473
474         clem.setControlLoopTimedOut();
475         assertEquals(true, clem.isControlLoopTimedOut());
476
477         clem.setNumAbatements(12345);
478         assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
479
480         clem.setNumOnsets(54321);
481         assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
482
483         assertNull(clem.getOnsetEvent());
484         assertNull(clem.getAbatementEvent());
485         assertNull(clem.getProcessor());
486
487         assertEquals(true, clem.isActive());
488         assertEquals(false, clem.releaseLock());
489         assertEquals(true, clem.isControlLoopTimedOut());
490
491         assertNull(clem.unlockCurrentOperation());
492     }
493
494     @Test
495     public void testAlreadyActivated() {
496         UUID requestId = UUID.randomUUID();
497         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
498         event.setClosedLoopControlName("TwoOnsetTest");
499         event.setRequestId(requestId);
500         event.setTarget("generic-vnf.vnf-id");
501         event.setClosedLoopAlarmStart(Instant.now());
502         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
503         event.setAai(new HashMap<>());
504         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
505
506         ControlLoopEventManager manager = makeManager(event);
507         manager.setActivated(true);
508         VirtualControlLoopNotification notification = manager.activate(event);
509         assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
510     }
511
512     @Test
513     public void testActivationYaml() throws IOException {
514         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
515         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
516
517         InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
518         final String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
519
520         UUID requestId = UUID.randomUUID();
521         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
522         event.setClosedLoopControlName("TwoOnsetTest");
523         event.setRequestId(requestId);
524         event.setTarget("generic-vnf.vnf-id");
525         event.setClosedLoopAlarmStart(Instant.now());
526         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
527         event.setAai(new HashMap<>());
528         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
529
530         ControlLoopEventManager manager = makeManager(event);
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 = makeManager(event);
573         try {
574             manager.isControlLoopFinal();
575             fail("test should throw an exception here");
576         } catch (ControlLoopException e) {
577             assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
578         }
579
580         manager.setActivated(true);
581         try {
582             manager.isControlLoopFinal();
583             fail("test should throw an exception here");
584         } catch (ControlLoopException e) {
585             assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
586         }
587
588         manager.setActivated(false);
589         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
590         assertNotNull(notification);
591         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
592
593         VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
594         assertNull(clfNotification);
595
596         manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
597         clfNotification = manager.isControlLoopFinal();
598         assertNotNull(clfNotification);
599         assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
600
601         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
602         notification = manager.activate(yamlString, event);
603         assertNotNull(notification);
604         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
605
606         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
607         clfNotification = manager.isControlLoopFinal();
608         assertNotNull(clfNotification);
609         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
610
611         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
612         notification = manager.activate(yamlString, event);
613         assertNotNull(notification);
614         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
615
616         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
617         clfNotification = manager.isControlLoopFinal();
618         assertNotNull(clfNotification);
619         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
620
621         manager.setControlLoopTimedOut();
622         clfNotification = manager.isControlLoopFinal();
623         assertNotNull(clfNotification);
624         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
625     }
626
627     @Test
628     public void testProcessControlLoop() throws ControlLoopException, IOException, AaiException {
629         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
630         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
631
632         UUID requestId = UUID.randomUUID();
633         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
634         event.setClosedLoopControlName("TwoOnsetTest");
635         event.setRequestId(requestId);
636         event.setTarget("generic-vnf.vnf-id");
637         event.setClosedLoopAlarmStart(Instant.now());
638         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
639         event.setAai(new HashMap<>());
640         event.getAai().put("generic-vnf.vnf-name", "onsetOne");
641
642         ControlLoopEventManager manager = makeManager(event);
643         try {
644             manager.processControlLoop();
645             fail("test should throw an exception here");
646         } catch (Exception e) {
647             assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
648         }
649
650         manager.setActivated(true);
651         try {
652             manager.processControlLoop();
653             fail("test should throw an exception here");
654         } catch (Exception e) {
655             assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
656         }
657
658         manager.setActivated(false);
659         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
660         assertNotNull(notification);
661         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
662
663         ControlLoopOperationManager clom = manager.processControlLoop();
664         assertNotNull(clom);
665         assertNull(clom.getOperationResult());
666
667         // Test operation in progress
668         try {
669             manager.processControlLoop();
670             fail("test should throw an exception here");
671         } catch (Exception e) {
672             assertEquals("Already working an Operation, do not call this method.", e.getMessage());
673         }
674
675         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
676         notification = manager.activate(yamlString, event);
677         assertNotNull(notification);
678         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
679
680         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
681         VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
682         assertNotNull(clfNotification);
683         assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
684
685         // Test operation completed
686         try {
687             manager.processControlLoop();
688             fail("test should throw an exception here");
689         } catch (Exception e) {
690             assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage());
691         }
692
693         manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
694         notification = manager.activate(yamlString, event);
695         assertNotNull(notification);
696         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
697         manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
698
699         // Test operation with no next policy defined
700         try {
701             manager.processControlLoop();
702             fail("test should throw an exception here");
703         } catch (Exception e) {
704             assertEquals("The target type is null", e.getMessage());
705         }
706     }
707
708     @Test
709     public void testFinishOperation() throws IOException, ControlLoopException, AaiException {
710         InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
711         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
712
713         InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
714         final String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
715
716         UUID requestId = UUID.randomUUID();
717         VirtualControlLoopEvent event = new VirtualControlLoopEvent();
718         event.setClosedLoopControlName("TwoOnsetTest");
719         event.setRequestId(requestId);
720         event.setTarget("generic-vnf.vnf-id");
721         event.setClosedLoopAlarmStart(Instant.now());
722         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
723         event.setAai(new HashMap<>());
724         event.getAai().put("generic-vnf.vnf-id", "onsetOne");
725
726         ControlLoopEventManager manager = makeManager(event);
727         try {
728             manager.finishOperation(null);
729             fail("test should throw an exception here");
730         } catch (Exception e) {
731             assertEquals("No operation to finish.", e.getMessage());
732         }
733
734         manager.setActivated(true);
735         try {
736             manager.finishOperation(null);
737             fail("test should throw an exception here");
738         } catch (Exception e) {
739             assertEquals("No operation to finish.", e.getMessage());
740         }
741
742         manager.setActivated(false);
743         VirtualControlLoopNotification notification = manager.activate(yamlString, event);
744         assertNotNull(notification);
745         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
746
747         try {
748             manager.lockCurrentOperation();
749             fail("test should throw an exception here");
750         } catch (Exception e) {
751             assertEquals("Do not have a current operation.", e.getMessage());
752         }
753
754         assertNull(manager.unlockCurrentOperation());
755
756         ControlLoopOperationManager clom = manager.processControlLoop();
757         assertNotNull(clom);
758         assertNull(clom.getOperationResult());
759
760         LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation();
761         assertNotNull(lockLock);
762         assertEquals(GuardResult.LOCK_ACQUIRED, lockLock.getA());
763
764         LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
765         assertNotNull(lockLockAgain);
766         assertEquals(GuardResult.LOCK_ACQUIRED, lockLockAgain.getA());
767         assertEquals(lockLock.getB(), lockLockAgain.getB());
768
769         assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
770         assertNull(manager.unlockCurrentOperation());
771
772         lockLock = manager.lockCurrentOperation();
773         assertNotNull(lockLock);
774         PolicyGuard.unlockTarget(lockLock.getB());
775         assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
776
777         clom.startOperation(event);
778
779         // This call should be exception free
780         manager.finishOperation(clom);
781
782         ControlLoopEventManager otherManager = makeManager(event);
783         VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
784         assertNotNull(otherNotification);
785         assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
786
787         ControlLoopOperationManager otherClom = otherManager.processControlLoop();
788         assertNotNull(otherClom);
789         assertNull(otherClom.getOperationResult());
790
791         otherManager.finishOperation(clom);
792     }
793
794     @Test
795     public void testOnNewEvent() throws IOException, AaiException {
796         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
797         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
798
799         UUID requestId = UUID.randomUUID();
800         VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
801         onsetEvent.setClosedLoopControlName("TwoOnsetTest");
802         onsetEvent.setRequestId(requestId);
803         onsetEvent.setTarget("generic-vnf.vnf-id");
804         onsetEvent.setClosedLoopAlarmStart(Instant.now());
805         onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
806         onsetEvent.setAai(new HashMap<>());
807         onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
808
809         VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
810         abatedEvent.setClosedLoopControlName("TwoOnsetTest");
811         abatedEvent.setRequestId(requestId);
812         abatedEvent.setTarget("generic-vnf.vnf-id");
813         abatedEvent.setClosedLoopAlarmStart(Instant.now());
814         abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
815         abatedEvent.setAai(new HashMap<>());
816         abatedEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
817
818         ControlLoopEventManager manager = makeManager(onsetEvent);
819         VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
820         assertNotNull(notification);
821         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
822
823         assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
824         assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
825         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
826
827         VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
828         checkSyntaxEvent.setAai(null);
829         checkSyntaxEvent.setClosedLoopAlarmEnd(null);
830         checkSyntaxEvent.setClosedLoopAlarmStart(null);
831         checkSyntaxEvent.setClosedLoopControlName(null);
832         checkSyntaxEvent.setClosedLoopEventClient(null);
833         checkSyntaxEvent.setClosedLoopEventStatus(null);
834         checkSyntaxEvent.setFrom(null);
835         checkSyntaxEvent.setPolicyName(null);
836         checkSyntaxEvent.setPolicyScope(null);
837         checkSyntaxEvent.setPolicyVersion(null);
838         checkSyntaxEvent.setRequestId(null);
839         checkSyntaxEvent.setTarget(null);
840         checkSyntaxEvent.setTargetType(null);
841         checkSyntaxEvent.setVersion(null);
842
843         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
844
845         checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
846         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
847
848         checkSyntaxEvent.setClosedLoopControlName(null);
849         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
850
851         checkSyntaxEvent.setClosedLoopControlName("");
852         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
853
854         checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
855         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
856
857         checkSyntaxEvent.setRequestId(null);
858         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
859
860         checkSyntaxEvent.setRequestId(requestId);
861         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
862
863         checkSyntaxEvent.setAai(null);
864         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
865
866         checkSyntaxEvent.setAai(new HashMap<>());
867         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
868
869         checkSyntaxEvent.setTarget("");
870         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
871
872         checkSyntaxEvent.setTarget(null);
873         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
874
875         checkSyntaxEvent.setTarget("");
876         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
877
878         checkSyntaxEvent.setTarget("OZ");
879         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
880
881         checkSyntaxEvent.setTarget("VM_NAME");
882         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
883
884         checkSyntaxEvent.setTarget("VNF_NAME");
885         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
886
887         checkSyntaxEvent.setTarget("vserver.vserver-name");
888         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
889
890         checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
891         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
892
893         checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
894         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
895
896         checkSyntaxEvent.setAai(null);
897         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
898
899         checkSyntaxEvent.setAai(new HashMap<>());
900         assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
901
902         checkSyntaxEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
903         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
904
905         checkSyntaxEvent.getAai().put("vserver.vserver-name", "onsetOne");
906         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
907
908         checkSyntaxEvent.getAai().put("generic-vnf.vnf-id", "onsetOne");
909         assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
910     }
911
912     @Test
913     public void testControlLoopTimeout() throws IOException {
914         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
915         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
916
917         UUID requestId = UUID.randomUUID();
918         VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
919         onsetEvent.setClosedLoopControlName("TwoOnsetTest");
920         onsetEvent.setRequestId(requestId);
921         onsetEvent.setTarget("generic-vnf.vnf-id");
922         onsetEvent.setClosedLoopAlarmStart(Instant.now());
923         onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
924         onsetEvent.setAai(new HashMap<>());
925         onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
926
927         ControlLoopEventManager manager = makeManager(onsetEvent);
928         assertTrue(0 == manager.getControlLoopTimeout(null));
929         assertTrue(120 == manager.getControlLoopTimeout(120));
930
931         VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
932         assertNotNull(notification);
933         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
934
935         assertTrue(60 == manager.getControlLoopTimeout(null));
936     }
937
938     @Test
939     public void testQueryAai() throws IOException, AaiException {
940         InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
941         final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
942
943         UUID requestId = UUID.randomUUID();
944         VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
945         onsetEvent.setClosedLoopControlName("TwoOnsetTest");
946         onsetEvent.setRequestId(requestId);
947         onsetEvent.setTarget("generic-vnf.vnf-id");
948         onsetEvent.setClosedLoopAlarmStart(Instant.now());
949         onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
950         onsetEvent.setAai(new HashMap<>());
951         onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
952
953         ControlLoopEventManager manager = makeManager(onsetEvent);
954         manager.queryAai(onsetEvent);
955
956         VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
957         assertNotNull(notification);
958         assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
959
960         // repeat query with same manager
961         manager.queryAai(onsetEvent);
962         
963         // remaining queries each use their own manager so they will be re-executed
964         
965         makeManager(onsetEvent).queryAai(onsetEvent);
966
967         onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "true");
968         try {
969             makeManager(onsetEvent).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             makeManager(onsetEvent).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             makeManager(onsetEvent).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         makeManager(onsetEvent).queryAai(onsetEvent);
990
991         onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "false");
992         makeManager(onsetEvent).queryAai(onsetEvent);
993
994         onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
995         onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "false");
996         makeManager(onsetEvent).queryAai(onsetEvent);
997
998         onsetEvent.getAai().remove("generic-vnf.vnf-id");
999         onsetEvent.getAai().remove("generic-vnf.vnf-name");
1000         onsetEvent.getAai().remove("vserver.vserver-name");
1001         onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
1002         onsetEvent.getAai().remove("vserver.is-closed-loop-disabled");
1003         makeManager(onsetEvent).queryAai(onsetEvent);
1004
1005         onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1006         makeManager(onsetEvent).queryAai(onsetEvent);
1007
1008         onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1009         makeManager(onsetEvent).queryAai(onsetEvent);
1010
1011         onsetEvent.getAai().put("generic-vnf.vnf-id", "AVNFID");
1012         makeManager(onsetEvent).queryAai(onsetEvent);
1013
1014         onsetEvent.getAai().remove("vserver.vserver-name");
1015         makeManager(onsetEvent).queryAai(onsetEvent);
1016
1017         onsetEvent.getAai().remove("generic-vnf.vnf-name");
1018         makeManager(onsetEvent).queryAai(onsetEvent);
1019
1020         // Force AAI errors
1021         PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:9999");
1022
1023         try {
1024             makeManager(onsetEvent).queryAai(onsetEvent);
1025             fail("test should throw an exception here");
1026         } catch (Exception e) {
1027             assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1028                     + "(query by vnf-id)", e.getMessage());
1029         }
1030
1031         onsetEvent.getAai().remove("generic-vnf.vnf-id");
1032         onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1033         try {
1034             makeManager(onsetEvent).queryAai(onsetEvent);
1035             fail("test should throw an exception here");
1036         } catch (Exception e) {
1037             assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1038                     + "(query by vnf-name)", e.getMessage());
1039         }
1040
1041         onsetEvent.getAai().remove("generic-vnf.vnf-name");
1042         onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1043         try {
1044             makeManager(onsetEvent).queryAai(onsetEvent);
1045             fail("test should throw an exception here");
1046         } catch (Exception e) {
1047             assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1048                     + "(query by vserver-name)", e.getMessage());
1049         }
1050
1051         PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
1052     }
1053
1054     private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
1055         return new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
1056     }
1057 }