bc832a9072a86bbbaf95ca7532b17d7af68ea9e2
[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.fail;
27
28 import java.time.Instant;
29 import java.util.HashMap;
30 import java.util.UUID;
31
32 import org.junit.AfterClass;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.policy.aai.AAIGETVnfResponse;
36 import org.onap.policy.aai.AAIGETVserverResponse;
37 import org.onap.policy.aai.RelatedToProperty;
38 import org.onap.policy.aai.RelatedToPropertyItem;
39 import org.onap.policy.aai.Relationship;
40 import org.onap.policy.aai.RelationshipData;
41 import org.onap.policy.aai.RelationshipDataItem;
42 import org.onap.policy.aai.RelationshipList;
43 import org.onap.policy.aai.util.AAIException;
44 import org.onap.policy.controlloop.ControlLoopEventStatus;
45 import org.onap.policy.controlloop.ControlLoopException;
46 import org.onap.policy.controlloop.ControlLoopNotificationType;
47 import org.onap.policy.controlloop.Util;
48 import org.onap.policy.controlloop.VirtualControlLoopEvent;
49 import org.onap.policy.controlloop.VirtualControlLoopNotification;
50 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
51 import org.onap.policy.drools.http.server.HttpServletServer;
52 import org.onap.policy.drools.system.PolicyEngine; 
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56 public class ControlLoopEventManagerTest {
57         private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
58         
59         private static VirtualControlLoopEvent onset;
60         static {
61                 onset = new VirtualControlLoopEvent();
62                 onset.closedLoopControlName = "ControlLoop-vUSP"; 
63                 onset.requestID = UUID.randomUUID();
64                 onset.target = "VM_NAME";
65                 onset.closedLoopAlarmStart = Instant.now();
66                 onset.AAI = new HashMap<String, String>();
67                 onset.AAI.put("cloud-region.identity-url", "foo");
68                 onset.AAI.put("vserver.selflink", "bar");
69                 onset.AAI.put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
70                 onset.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
71         }
72         
73         @BeforeClass
74         public static void setUpSimulator() {
75                 try {
76                         org.onap.policy.simulators.Util.buildAaiSim();
77                 } catch (Exception e) {
78                         fail(e.getMessage());
79                 }
80                 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
81                 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
82                 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
83         }
84
85         @AfterClass
86         public static void tearDownSimulator() {
87                 HttpServletServer.factory.destroy();
88         }
89         
90         @Test
91         public void testAAIVnfInfo() {
92                 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
93                 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
94                 try {                   
95                         AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/", 
96                                         PolicyEngine.manager.getEnvironmentProperty("aai.username"), 
97                                         PolicyEngine.manager.getEnvironmentProperty("aai.password"), 
98                                         UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792");
99                         assertNotNull(response);
100                         logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
101                 } catch (Exception e) {
102                         logger.error("testAAIVnfInfo Exception: ", e);
103                         fail(e.getMessage());
104                 }
105         }
106         
107         @Test
108         public void testAAIVnfInfo2() {
109                 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
110                 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
111                 try {
112                         AAIGETVnfResponse response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=", 
113                                         PolicyEngine.manager.getEnvironmentProperty("aai.username"), 
114                                         PolicyEngine.manager.getEnvironmentProperty("aai.password"), 
115                                         UUID.randomUUID(), "lll_vnf_010317");   
116                         assertNotNull(response);
117                         logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
118                 } catch (Exception e) {
119                         logger.error("testAAIVnfInfo2 Exception: ", e);
120                         fail(e.getMessage());
121                 }
122         }
123         
124         @Test
125         public void testAAIVserver() {
126                 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
127                 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
128                 try {
129                         AAIGETVserverResponse response = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=", 
130                                         PolicyEngine.manager.getEnvironmentProperty("aai.username"), 
131                                         PolicyEngine.manager.getEnvironmentProperty("aai.password"), 
132                                         UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0");
133                         assertNotNull(response);
134                         logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
135                 } catch (Exception e) {
136                         logger.error("testAAIVserver Exception: ", e);
137                         fail(e.getMessage());
138                 }
139         }
140
141         @Test
142         public void testIsClosedLoopDisabled() {
143                 //
144                 // Load up the policy
145                 //
146                 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
147                 onset.closedLoopControlName = pair.a.getControlLoop().getControlLoopName();
148                 
149                 try {
150                         logger.info("testIsClosedLoopDisabled --");
151                         AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/", 
152                                         PolicyEngine.manager.getEnvironmentProperty("aai.username"), 
153                                         PolicyEngine.manager.getEnvironmentProperty("aai.password"), 
154                                         UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792");
155                         assertNotNull(response);
156                         boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
157                         logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled); 
158
159                         response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=", 
160                                         PolicyEngine.manager.getEnvironmentProperty("aai.username"), 
161                                         PolicyEngine.manager.getEnvironmentProperty("aai.password"), 
162                                         UUID.randomUUID(), "lll_vnf_010317");                   
163                         assertNotNull(response);
164                         disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
165                         logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled); 
166
167                         AAIGETVserverResponse response2 = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=", 
168                                         PolicyEngine.manager.getEnvironmentProperty("aai.user"), 
169                                         PolicyEngine.manager.getEnvironmentProperty("aai.password"), 
170                                         UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0");
171                         assertNotNull(response2);
172                         disabled = ControlLoopEventManager.isClosedLoopDisabled(response2);
173                         logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled); 
174                 } catch (Exception e) {
175                         fail(e.getMessage());
176                 }
177         }
178         
179         @Test
180         public void abatemetCheckEventSyntaxTest() {
181                 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
182         event.closedLoopControlName = "abatementAAI";
183         event.requestID = UUID.randomUUID();
184         event.target = "generic-vnf.vnf-id";
185         event.closedLoopAlarmStart = Instant.now();
186         event.closedLoopEventStatus = ControlLoopEventStatus.ABATED;
187         ControlLoopEventManager manager = new ControlLoopEventManager(event.closedLoopControlName, event.requestID);
188         assertNull(manager.getVnfResponse());
189         assertNull(manager.getVserverResponse());
190         try {
191                         manager.checkEventSyntax(event);
192                 } catch (ControlLoopException e) {
193                         logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage());
194                         e.printStackTrace();
195                         fail("Exception in check event syntax");
196                 }
197         assertNull(manager.getVnfResponse());
198         assertNull(manager.getVserverResponse());
199         
200
201         event.AAI = new HashMap<>();
202         event.AAI.put("generic-vnf.vnf-name", "abatementTest");
203         try {
204                         manager.checkEventSyntax(event);
205                 } catch (ControlLoopException e) {
206                         logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage());
207                         e.printStackTrace();
208                         fail("Exception in check event syntax");
209                 }
210         assertNull(manager.getVnfResponse());
211         assertNull(manager.getVserverResponse());
212         }
213         
214         @Test
215         public void subsequentOnsetTest() {
216                 UUID requestId = UUID.randomUUID();
217                 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
218                 event.closedLoopControlName = "TwoOnsetTest";
219                 event.requestID = requestId;
220                 event.target = "generic-vnf.vnf-id";
221         event.closedLoopAlarmStart = Instant.now();
222         event.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
223         event.AAI = new HashMap<>();
224         event.AAI.put("generic-vnf.vnf-name", "onsetOne");
225         
226         ControlLoopEventManager manager = new ControlLoopEventManager(event.closedLoopControlName, event.requestID);
227         VirtualControlLoopNotification notification = manager.activate(event);
228         
229         assertNotNull(notification);
230         assertEquals(ControlLoopNotificationType.ACTIVE, notification.notification);
231         
232         ControlLoopEventManager.NEW_EVENT_STATUS status = null;
233         try {
234             status = manager.onNewEvent(event);
235         } catch (AAIException e) {
236             logger.warn(e.toString());
237             fail("A&AI Query Failed");
238         }
239         assertNotNull(status);
240         assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
241         
242         AAIGETVnfResponse response = manager.getVnfResponse();
243         assertNotNull(response);
244         assertNull(manager.getVserverResponse());
245         
246         VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
247                 event2.closedLoopControlName = "TwoOnsetTest";
248                 event2.requestID = requestId;
249                 event2.target = "generic-vnf.vnf-id";
250         event2.closedLoopAlarmStart = Instant.now();
251         event2.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
252         event2.AAI = new HashMap<>();
253         event2.AAI.put("generic-vnf.vnf-name", "onsetTwo");
254         
255         
256         try {
257             status = manager.onNewEvent(event2);
258         } catch (AAIException e) {
259             logger.warn(e.toString());
260             fail("A&AI Query Failed");
261         }
262         assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
263         AAIGETVnfResponse response2 = manager.getVnfResponse();
264         assertNotNull(response2);
265         // We should not have queried AAI, so the stored response should be the same
266         assertEquals(response, response2);
267         assertNull(manager.getVserverResponse());
268         }
269         
270         // Simulate a response 
271         public static AAIGETVnfResponse getQueryByVnfID2(String urlGet, String username, String password, UUID requestID, String key) {
272                 AAIGETVnfResponse response = new AAIGETVnfResponse();
273                 
274                 response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491"); 
275                 response.setVnfName("lll_vnf_010317");
276                 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
277                 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
278                 response.setOrchestrationStatus("Created");
279                 response.setInMaint("false");
280                 response.setIsClosedLoopDisabled("false");
281                 response.setResourceVersion("1494001988835");
282                 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
283                   
284         RelationshipList relationshipList = new RelationshipList();
285         Relationship     relationship = new Relationship();
286         RelationshipData relationshipData = new RelationshipData();
287         RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
288         
289         relationshipDataItem.setRelationshipKey  ("customer.global-customer-id"); 
290         relationshipDataItem.setRelationshipValue("MSO_1610_ST"); 
291         relationshipData.getRelationshipData().add(relationshipDataItem);
292         
293         relationshipDataItem.setRelationshipKey  ("service-subscription.service-type"); 
294         relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); 
295         relationshipData.getRelationshipData().add(relationshipDataItem);
296         
297         relationshipDataItem.setRelationshipKey  ("service-instance.service-instance-id"); 
298         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); 
299         relationshipData.getRelationshipData().add(relationshipDataItem);
300         
301         RelatedToProperty relatedToProperty = new RelatedToProperty();
302         RelatedToPropertyItem item = new RelatedToPropertyItem();  
303         item.setPropertyKey("service-instance.service-instance-name"); 
304         item.setPropertyValue("lll_svc_010317"); 
305         relatedToProperty.getRelatedTo().add(item);
306         
307         relationship.setRelatedTo("service-instance");
308         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");
309         relationship.setRelationshipData(relationshipData);
310         relationship.setRelatedToProperty(relatedToProperty);
311        
312         relationshipList.getRelationshipList().add(relationship);
313         response.setRelationshipList(relationshipList); 
314
315                 return response;
316         }
317
318         public static AAIGETVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestID, String key) {
319                 AAIGETVnfResponse response = new AAIGETVnfResponse();
320                 
321                 response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491"); 
322                 response.setVnfName("lll_vnf_010317");
323                 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
324                 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
325                 response.setOrchestrationStatus("Created");
326                 response.setInMaint("false");
327                 response.setIsClosedLoopDisabled("false");
328                 response.setResourceVersion("1494001988835");
329                 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
330                   
331         RelationshipList relationshipList = new RelationshipList();
332         Relationship     relationship = new Relationship();
333         RelationshipData relationshipData = new RelationshipData();
334         RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
335         
336         relationshipDataItem.setRelationshipKey("customer.global-customer-id"); 
337         relationshipDataItem.setRelationshipValue("MSO_1610_ST"); 
338         relationshipData.getRelationshipData().add(relationshipDataItem);
339         
340         relationshipDataItem.setRelationshipKey("service-subscription.service-type"); 
341         relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); 
342         relationshipData.getRelationshipData().add(relationshipDataItem);
343         
344         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id"); 
345         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); 
346         relationshipData.getRelationshipData().add(relationshipDataItem);
347         
348         RelatedToProperty relatedToProperty = new RelatedToProperty();
349         RelatedToPropertyItem item = new RelatedToPropertyItem();  
350         item.setPropertyKey("service-instance.service-instance-name"); 
351         item.setPropertyValue("lll_svc_010317"); 
352         relatedToProperty.getRelatedTo().add(item);
353         
354         relationship.setRelatedTo("service-instance");
355         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");
356         relationship.setRelationshipData(relationshipData);
357         relationship.setRelatedToProperty(relatedToProperty);
358        
359         relationshipList.getRelationshipList().add(relationship);
360         response.setRelationshipList(relationshipList); 
361
362                 return response;
363         }
364
365         public static AAIGETVserverResponse getQueryByVserverName2(String urlGet, String username, String password, UUID requestID, String key) {
366                 AAIGETVserverResponse response = new AAIGETVserverResponse();
367                 
368                 response.setVserverID("d0668d4f-c25e-4a1b-87c4-83845c01efd8"); 
369                 response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0"); 
370                 response.setVserverName2("vjunos0"); 
371                 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"); 
372                 response.setInMaint("false"); 
373                 response.setIsClosedLoopDisabled("false"); 
374                 response.setResourceVersion("1494001931513"); 
375                   
376         RelationshipList relationshipList = new RelationshipList();
377         Relationship     relationship = new Relationship();
378         RelationshipData relationshipData = new RelationshipData();
379         RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
380         
381         relationshipDataItem.setRelationshipKey("customer.global-customer-id"); 
382         relationshipDataItem.setRelationshipValue("MSO_1610_ST"); 
383         relationshipData.getRelationshipData().add(relationshipDataItem);
384         
385         relationshipDataItem.setRelationshipKey("service-subscription.service-type"); 
386         relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); 
387         relationshipData.getRelationshipData().add(relationshipDataItem);
388         
389         relationshipDataItem.setRelationshipKey("service-instance.service-instance-id"); 
390         relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); 
391         relationshipData.getRelationshipData().add(relationshipDataItem);
392         
393         RelatedToProperty relatedToProperty = new RelatedToProperty();
394         RelatedToPropertyItem item = new RelatedToPropertyItem();  
395         item.setPropertyKey("service-instance.service-instance-name"); 
396         item.setPropertyValue("lll_svc_010317"); 
397         relatedToProperty.getRelatedTo().add(item);
398         
399         relationship.setRelatedTo("service-instance");
400         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");
401         relationship.setRelationshipData(relationshipData);
402         relationship.setRelatedToProperty(relatedToProperty);
403        
404         relationshipList.getRelationshipList().add(relationship);
405         response.setRelationshipList(relationshipList); 
406
407                 return response;
408         }
409 }