be0eb2bc3a6f89443c52ce46b590ec1f5eaa726d
[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.vnfID = "83f674e8-7555-44d7-9a39-bdc3770b0491"; 
275                 response.vnfName = "lll_vnf_010317";
276                 response.vnfType = "Basa-122216-Service/VidVsamp12BaseVolume 1";
277                 response.serviceId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
278                 response.orchestrationStatus = "Created";
279                 response.inMaint = "false";
280                 response.isClosedLoopDisabled = "false";
281                 response.resourceVersion = "1494001988835";
282                 response.modelInvariantId = "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.relationshipKey   = "customer.global-customer-id"; 
290         relationshipDataItem.relationshipValue = "MSO_1610_ST"; 
291         relationshipData.relationshipData.add(relationshipDataItem);
292         
293         relationshipDataItem.relationshipKey   = "service-subscription.service-type"; 
294         relationshipDataItem.relationshipValue = "MSO-dev-service-type"; 
295         relationshipData.relationshipData.add(relationshipDataItem);
296         
297         relationshipDataItem.relationshipKey   = "service-instance.service-instance-id"; 
298         relationshipDataItem.relationshipValue = "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"; 
299         relationshipData.relationshipData.add(relationshipDataItem);
300         
301         RelatedToProperty relatedToProperty = new RelatedToProperty();
302         RelatedToPropertyItem item = new RelatedToPropertyItem();  
303         item.propertyKey = "service-instance.service-instance-name"; 
304         item.propertyValue = "lll_svc_010317"; 
305         relatedToProperty.relatedTo.add(item);
306         
307         relationship.relatedTo = "service-instance";
308         relationship.relatedLink = "/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.relationshipData = relationshipData;
310         relationship.relatedToProperty = relatedToProperty;
311        
312         relationshipList.relationshipList.add(relationship);
313         response.relationshipList = 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.vnfID = "83f674e8-7555-44d7-9a39-bdc3770b0491"; 
322                 response.vnfName = "lll_vnf_010317";
323                 response.vnfType = "Basa-122216-Service/VidVsamp12BaseVolume 1";
324                 response.serviceId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
325                 response.orchestrationStatus = "Created";
326                 response.inMaint = "false";
327                 response.isClosedLoopDisabled = "false";
328                 response.resourceVersion = "1494001988835";
329                 response.modelInvariantId = "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.relationshipKey   = "customer.global-customer-id"; 
337         relationshipDataItem.relationshipValue = "MSO_1610_ST"; 
338         relationshipData.relationshipData.add(relationshipDataItem);
339         
340         relationshipDataItem.relationshipKey   = "service-subscription.service-type"; 
341         relationshipDataItem.relationshipValue = "MSO-dev-service-type"; 
342         relationshipData.relationshipData.add(relationshipDataItem);
343         
344         relationshipDataItem.relationshipKey   = "service-instance.service-instance-id"; 
345         relationshipDataItem.relationshipValue = "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"; 
346         relationshipData.relationshipData.add(relationshipDataItem);
347         
348         RelatedToProperty relatedToProperty = new RelatedToProperty();
349         RelatedToPropertyItem item = new RelatedToPropertyItem();  
350         item.propertyKey = "service-instance.service-instance-name"; 
351         item.propertyValue = "lll_svc_010317"; 
352         relatedToProperty.relatedTo.add(item);
353         
354         relationship.relatedTo = "service-instance";
355         relationship.relatedLink = "/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.relationshipData = relationshipData;
357         relationship.relatedToProperty = relatedToProperty;
358        
359         relationshipList.relationshipList.add(relationship);
360         response.relationshipList = 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.vserverID = "d0668d4f-c25e-4a1b-87c4-83845c01efd8"; 
369                 response.vserverName = "USMSO1SX7NJ0103UJZZ01-vjunos0"; 
370                 response.vserverName2 = "vjunos0"; 
371                 response.vserverSelflink = "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.inMaint = "false"; 
373                 response.isClosedLoopDisabled = "false"; 
374                 response.resourceVersion = "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.relationshipKey   = "customer.global-customer-id"; 
382         relationshipDataItem.relationshipValue = "MSO_1610_ST"; 
383         relationshipData.relationshipData.add(relationshipDataItem);
384         
385         relationshipDataItem.relationshipKey   = "service-subscription.service-type"; 
386         relationshipDataItem.relationshipValue = "MSO-dev-service-type"; 
387         relationshipData.relationshipData.add(relationshipDataItem);
388         
389         relationshipDataItem.relationshipKey   = "service-instance.service-instance-id"; 
390         relationshipDataItem.relationshipValue = "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"; 
391         relationshipData.relationshipData.add(relationshipDataItem);
392         
393         RelatedToProperty relatedToProperty = new RelatedToProperty();
394         RelatedToPropertyItem item = new RelatedToPropertyItem();  
395         item.propertyKey = "service-instance.service-instance-name"; 
396         item.propertyValue = "lll_svc_010317"; 
397         relatedToProperty.relatedTo.add(item);
398         
399         relationship.relatedTo = "service-instance";
400         relationship.relatedLink = "/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.relationshipData = relationshipData;
402         relationship.relatedToProperty = relatedToProperty;
403        
404         relationshipList.relationshipList.add(relationship);
405         response.relationshipList = relationshipList; 
406
407                 return response;
408         }
409 }