Enhanced List Level flow with backward support
[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.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.mockito.Mockito.doReturn;
26 import java.io.File;
27 import java.io.IOException;
28 import java.util.Map;
29 import java.util.Optional;
30 import org.camunda.bpm.client.task.ExternalTask;
31 import org.camunda.bpm.client.task.ExternalTaskService;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.ArgumentCaptor;
35 import org.mockito.InjectMocks;
36 import org.mockito.Mock;
37 import org.mockito.Mockito;
38 import org.mockito.MockitoAnnotations;
39 import org.onap.so.audit.beans.AuditInventory;
40 import org.onap.so.objects.audit.AAIObjectAuditList;
41 import org.springframework.core.env.Environment;
42 import com.fasterxml.jackson.core.JsonParseException;
43 import com.fasterxml.jackson.databind.JsonMappingException;
44 import com.fasterxml.jackson.databind.ObjectMapper;
45
46 public class AuditStackServiceDataTest extends AuditCreateStackService {
47
48     @InjectMocks
49     private AuditCreateStackService auditStackService = new AuditCreateStackService();
50
51     @Mock
52     private HeatStackAudit heatStackAuditMock;
53
54     @Mock
55     private Environment mockEnv;
56
57     @Mock
58     private ExternalTask mockExternalTask;
59
60     @Mock
61     private ExternalTaskService mockExternalTaskService;
62
63     private ObjectMapper objectMapper = new ObjectMapper();
64
65     private AuditInventory auditInventory = new AuditInventory();
66
67     Optional<AAIObjectAuditList> auditListOptSuccess;
68
69     Optional<AAIObjectAuditList> auditListOptFailure;
70
71     @Before
72     public void setup() throws JsonParseException, JsonMappingException, IOException {
73         auditInventory.setCloudOwner("cloudOwner");
74         auditInventory.setCloudRegion("cloudRegion");
75         auditInventory.setTenantId("tenantId");
76         auditInventory.setHeatStackName("stackName");
77         MockitoAnnotations.initMocks(this);
78
79         AAIObjectAuditList auditListSuccess = objectMapper
80                 .readValue(new File("src/test/resources/ExpectedVServerFound.json"), AAIObjectAuditList.class);
81         auditListOptSuccess = Optional.of(auditListSuccess);
82
83         AAIObjectAuditList auditListFailure = objectMapper.readValue(
84                 new File("src/test/resources/Vserver2_Found_VServer1_Not_Found.json"), AAIObjectAuditList.class);
85         auditListOptFailure = Optional.of(auditListFailure);
86         String[] retrySequence = new String[8];
87         retrySequence[0] = "1";
88         retrySequence[1] = "1";
89         retrySequence[2] = "2";
90         retrySequence[3] = "3";
91         retrySequence[4] = "5";
92         retrySequence[5] = "8";
93         retrySequence[6] = "13";
94         retrySequence[7] = "20";
95         doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory");
96         doReturn("6000").when(mockEnv).getProperty("mso.workflow.topics.retryMultiplier", "6000");
97         doReturn(retrySequence).when(mockEnv).getProperty("mso.workflow.topics.retrySequence", String[].class);
98         doReturn("aasdfasdf").when(mockExternalTask).getId();
99     }
100
101     @Test
102     public void execute_external_task_audit_success_Test() {
103         doReturn(auditListOptSuccess).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
104                 "stackName");
105         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
106         ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
107         ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
108         Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture());
109         Map actualMap = captor.getValue();
110         assertEquals(true, actualMap.get("auditIsSuccessful"));
111         assertNotNull(actualMap.get("auditInventoryResult"));
112     }
113
114     @Test
115     public void execute_external_task_audit_first_failure_Test() {
116         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
117                 "stackName");
118         doReturn(null).when(mockExternalTask).getRetries();
119         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
120         Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask,
121                 "Unable to find all VServers and L-Interaces in A&AI",
122                 "Unable to find all VServers and L-Interaces in A&AI", 8, 10000L);
123     }
124
125     @Test
126     public void execute_external_task_audit_intermediate_failure_Test() {
127         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
128                 "stackName");
129         doReturn(6).when(mockExternalTask).getRetries();
130         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
131         Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask,
132                 "Unable to find all VServers and L-Interaces in A&AI",
133                 "Unable to find all VServers and L-Interaces in A&AI", 5, 12000L);
134
135     }
136
137     @Test
138     public void execute_external_task_audit_final_failure_Test() {
139         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
140                 "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.didCreateAuditFail(auditListOptSuccess);
195         assertEquals(false, actual);
196     }
197
198     @Test
199     public void determineAuditResult_Failure_Test() throws Exception {
200         boolean actual = auditStackService.didCreateAuditFail(auditListOptFailure);
201         assertEquals(true, actual);
202     }
203 }