if audit fails write sub interface data to a ai
[so.git] / adapters / mso-openstack-adapters / src / test / java / org / onap / so / adapters / audit / AuditStackServiceDataTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017-2019 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.so.adapters.audit;
22
23 import static org.hamcrest.CoreMatchers.isA;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.mockito.Mockito.doReturn;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.Map;
33 import java.util.Optional;
34
35 import org.camunda.bpm.client.task.ExternalTask;
36 import org.camunda.bpm.client.task.ExternalTaskService;
37 import org.hamcrest.Matchers;
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.mockito.ArgumentCaptor;
41 import org.mockito.InjectMocks;
42 import org.mockito.Mock;
43 import org.mockito.Mockito;
44 import org.mockito.MockitoAnnotations;
45 import org.onap.aai.domain.yang.LInterface;
46 import org.onap.so.audit.beans.AuditInventory;
47 import org.springframework.core.env.Environment;
48 import com.fasterxml.jackson.core.JsonParseException;
49 import com.fasterxml.jackson.databind.JsonMappingException;
50 import com.fasterxml.jackson.databind.ObjectMapper;
51
52 public class AuditStackServiceDataTest extends AuditStackServiceData {
53
54         @InjectMocks
55         private AuditStackServiceData auditStackService = new AuditStackServiceData();
56
57         @Mock
58         private HeatStackAudit heatStackAuditMock;
59
60         @Mock
61         private Environment mockEnv;
62
63         @Mock
64         private ExternalTask mockExternalTask;
65
66         @Mock
67         private ExternalTaskService mockExternalTaskService;
68
69         private ObjectMapper objectMapper = new ObjectMapper();
70         
71         private AuditInventory auditInventory = new AuditInventory();
72
73         Optional<AAIObjectAuditList> auditListOptSuccess;
74         
75         Optional<AAIObjectAuditList> auditListOptFailure;
76         
77         @Before
78         public void setup() throws JsonParseException, JsonMappingException, IOException {
79                 auditInventory.setCloudOwner("cloudOwner");
80                 auditInventory.setCloudRegion("cloudRegion");
81                 auditInventory.setTenantId("tenantId");
82                 auditInventory.setHeatStackName("stackName");
83                 MockitoAnnotations.initMocks(this);
84                 
85                 AAIObjectAuditList auditListSuccess = objectMapper.readValue(new File("src/test/resources/ExpectedVServerFound.json"), AAIObjectAuditList.class);
86                 auditListOptSuccess = Optional.of(auditListSuccess);
87                 
88                 AAIObjectAuditList auditListFailure = objectMapper.readValue(new File("src/test/resources/Vserver2_Found_VServer1_Not_Found.json"), AAIObjectAuditList.class);
89                 auditListOptFailure = Optional.of(auditListFailure);
90                 String[] retrySequence = new String[8];
91                 retrySequence[0] = "1";
92                 retrySequence[1] = "1";
93                 retrySequence[2] = "2";
94                 retrySequence[3] = "3";
95                 retrySequence[4] = "5";
96                 retrySequence[5] = "8";
97                 retrySequence[6] = "13";
98                 retrySequence[7] = "20";
99                 doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory");
100                 doReturn("6000").when(mockEnv).getProperty("mso.workflow.topics.retryMultiplier","6000");
101                 doReturn(retrySequence).when(mockEnv).getProperty("mso.workflow.topics.retrySequence",String[].class);
102                 doReturn("aasdfasdf").when(mockExternalTask).getId();
103         }
104
105         @Test
106         public void execute_external_task_audit_success_Test() {
107                 doReturn(auditListOptSuccess).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName");
108                 auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
109                 ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
110                 ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
111                 Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(),captor.capture());
112                 Map actualMap = captor.getValue();
113                 assertEquals(true,actualMap.get("auditIsSuccessful"));
114                 assertNotNull(actualMap.get("auditInventoryResult"));
115         }
116
117         @Test
118         public void execute_external_task_audit_first_failure_Test() {
119                 doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName");
120                 doReturn(null).when(mockExternalTask).getRetries();
121                 auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
122                 Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask,
123                                 "Unable to find all VServers and L-Interaces in A&AI",
124                                 "Unable to find all VServers and L-Interaces in A&AI", 8, 10000L);
125         }
126
127         @Test
128         public void execute_external_task_audit_intermediate_failure_Test() {
129                 doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName");
130                 doReturn(6).when(mockExternalTask).getRetries();
131                 auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);               
132                 Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask,
133                                 "Unable to find all VServers and L-Interaces in A&AI",
134                                 "Unable to find all VServers and L-Interaces in A&AI", 5, 12000L);
135
136         }
137
138         @Test
139         public void execute_external_task_audit_final_failure_Test() {
140                 doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName");
141                 doReturn(1).when(mockExternalTask).getRetries();
142                 auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);               
143                 ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
144                 ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
145                 Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(),captor.capture());
146                 Map actualMap = captor.getValue();
147                 assertEquals(false,actualMap.get("auditIsSuccessful"));
148                 assertNotNull(actualMap.get("auditInventoryResult"));
149         }
150
151         @Test
152         public void retry_sequence_calculation_Test() {
153                 long firstRetry = auditStackService.calculateRetryDelay(8);
154                 assertEquals(6000L, firstRetry);
155                 long secondRetry = auditStackService.calculateRetryDelay(7);
156                 assertEquals(6000L, secondRetry);
157                 long thirdRetry = auditStackService.calculateRetryDelay(6);
158                 assertEquals(12000L, thirdRetry);
159                 long fourthRetry = auditStackService.calculateRetryDelay(5);
160                 assertEquals(18000L, fourthRetry);
161                 long fifthRetry = auditStackService.calculateRetryDelay(4);
162                 assertEquals(30000L, fifthRetry);
163                 long sixRetry = auditStackService.calculateRetryDelay(3);
164                 assertEquals(48000L, sixRetry);
165                 long seventhRetry = auditStackService.calculateRetryDelay(2);
166                 assertEquals(78000L, seventhRetry);
167                 long eigthRetry = auditStackService.calculateRetryDelay(1);
168                 assertEquals(120000L, eigthRetry);
169         }
170
171         @Test
172         public void retry_sequence_Test() {
173                 long firstRetry = auditStackService.calculateRetryDelay(8);
174                 assertEquals(6000L, firstRetry);
175                 long secondRetry = auditStackService.calculateRetryDelay(7);
176                 assertEquals(6000L, secondRetry);
177                 long thirdRetry = auditStackService.calculateRetryDelay(6);
178                 assertEquals(12000L, thirdRetry);
179                 long fourthRetry = auditStackService.calculateRetryDelay(5);
180                 assertEquals(18000L, fourthRetry);
181                 long fifthRetry = auditStackService.calculateRetryDelay(4);
182                 assertEquals(30000L, fifthRetry);
183                 long sixRetry = auditStackService.calculateRetryDelay(3);
184                 assertEquals(48000L, sixRetry);
185                 long seventhRetry = auditStackService.calculateRetryDelay(2);
186                 assertEquals(78000L, seventhRetry);
187                 long eigthRetry = auditStackService.calculateRetryDelay(1);
188                 assertEquals(120000L, eigthRetry);
189         }
190         
191
192         @Test
193         public void determineAuditResult_Test() throws Exception{               
194                 boolean actual = auditStackService.didAuditFail(auditListOptSuccess);
195                 assertEquals(false, actual);
196         }
197         
198         @Test
199         public void determineAuditResult_Failure_Test() throws Exception{
200                 boolean actual = auditStackService.didAuditFail(auditListOptFailure);
201                 assertEquals(true, actual);
202         }
203 }