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