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