a10ab4b7dfc27564f27a0b70ca9bc049e8b56a60
[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.tasks.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.adapters.tasks.audit.AuditCreateStackService;
40 import org.onap.so.adapters.tasks.audit.AuditDataService;
41 import org.onap.so.adapters.tasks.audit.AuditQueryStackService;
42 import org.onap.so.adapters.tasks.audit.HeatStackAudit;
43 import org.onap.so.audit.beans.AuditInventory;
44 import org.onap.so.logging.tasks.AuditMDCSetup;
45 import org.onap.so.objects.audit.AAIObjectAuditList;
46 import org.springframework.core.env.Environment;
47 import com.fasterxml.jackson.core.JsonParseException;
48 import com.fasterxml.jackson.core.JsonProcessingException;
49 import com.fasterxml.jackson.databind.JsonMappingException;
50 import com.fasterxml.jackson.databind.ObjectMapper;
51
52 public class AuditStackServiceDataTest extends AuditCreateStackService {
53
54     @InjectMocks
55     private AuditCreateStackService auditStackService = new AuditCreateStackService();
56
57     @InjectMocks
58     private AuditQueryStackService auditQueryStackService = new AuditQueryStackService();
59
60     @Mock
61     private HeatStackAudit heatStackAuditMock;
62
63     @Mock
64     private Environment mockEnv;
65
66     @Mock
67     private ExternalTask mockExternalTask;
68
69     @Mock
70     private ExternalTaskService mockExternalTaskService;
71
72     @Mock
73     private AuditDataService auditDataService;
74
75     @Mock
76     private AuditMDCSetup mdcSetup;
77
78     private ObjectMapper objectMapper = new ObjectMapper();
79
80     private AuditInventory auditInventory = new AuditInventory();
81
82     Optional<AAIObjectAuditList> auditListOptSuccess;
83
84     Optional<AAIObjectAuditList> auditListOptFailure;
85
86     @Before
87     public void setup() throws JsonParseException, JsonMappingException, IOException {
88         auditInventory.setCloudOwner("cloudOwner");
89         auditInventory.setCloudRegion("cloudRegion");
90         auditInventory.setTenantId("tenantId");
91         auditInventory.setHeatStackName("stackName");
92         MockitoAnnotations.initMocks(this);
93
94         AAIObjectAuditList auditListSuccess = objectMapper
95                 .readValue(new File("src/test/resources/ExpectedVServerFound.json"), AAIObjectAuditList.class);
96         auditListOptSuccess = Optional.of(auditListSuccess);
97
98         AAIObjectAuditList auditListFailure = objectMapper.readValue(
99                 new File("src/test/resources/Vserver2_Found_VServer1_Not_Found.json"), AAIObjectAuditList.class);
100         auditListOptFailure = Optional.of(auditListFailure);
101         String[] retrySequence = new String[8];
102         retrySequence[0] = "1";
103         retrySequence[1] = "1";
104         retrySequence[2] = "2";
105         retrySequence[3] = "3";
106         retrySequence[4] = "5";
107         retrySequence[5] = "8";
108         retrySequence[6] = "13";
109         retrySequence[7] = "20";
110         doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory");
111         doReturn("6000").when(mockEnv).getProperty("mso.workflow.topics.retryMultiplier", "6000");
112         doReturn(retrySequence).when(mockEnv).getProperty("mso.workflow.topics.retrySequence", String[].class);
113         doReturn("aasdfasdf").when(mockExternalTask).getId();
114     }
115
116     @Test
117     public void execute_external_task_audit_success_Test() {
118         doReturn(auditListOptSuccess).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
119                 "stackName");
120         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
121         ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
122         ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
123         Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture());
124         Map actualMap = captor.getValue();
125         assertEquals(true, actualMap.get("auditIsSuccessful"));
126         assertNotNull(actualMap.get("auditInventoryResult"));
127     }
128
129     @Test
130     public void executeExternalTaskQueryAuditTest() throws JsonProcessingException {
131         doReturn(auditListOptSuccess).when(heatStackAuditMock).queryHeatStack("cloudOwner", "cloudRegion", "tenantId",
132                 "stackName");
133         Mockito.doNothing().when(auditDataService).writeStackDataToRequestDb(Mockito.any(AuditInventory.class),
134                 Mockito.any(AAIObjectAuditList.class));
135         auditQueryStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
136         ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
137         ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
138         Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture());
139         Mockito.verify(auditDataService).writeStackDataToRequestDb(Mockito.any(AuditInventory.class),
140                 Mockito.any(AAIObjectAuditList.class));
141     }
142
143     @Test
144     public void execute_external_task_audit_first_failure_Test() {
145         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
146                 "stackName");
147         doReturn(null).when(mockExternalTask).getRetries();
148         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
149         Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask,
150                 "Unable to find all VServers and L-Interaces in A&AI",
151                 "Unable to find all VServers and L-Interaces in A&AI", 8, 10000L);
152     }
153
154     @Test
155     public void execute_external_task_audit_intermediate_failure_Test() {
156         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
157                 "stackName");
158         doReturn(6).when(mockExternalTask).getRetries();
159         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
160         Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask,
161                 "Unable to find all VServers and L-Interaces in A&AI",
162                 "Unable to find all VServers and L-Interaces in A&AI", 5, 12000L);
163
164     }
165
166     @Test
167     public void execute_external_task_audit_final_failure_Test() {
168         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
169                 "stackName");
170         doReturn(1).when(mockExternalTask).getRetries();
171         auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
172         ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
173         ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
174         Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture());
175         Map actualMap = captor.getValue();
176         assertEquals(false, actualMap.get("auditIsSuccessful"));
177         assertNotNull(actualMap.get("auditInventoryResult"));
178     }
179
180     @Test
181     public void determineAuditResult_Test() throws Exception {
182         boolean actual = auditStackService.didCreateAuditFail(auditListOptSuccess);
183         assertEquals(false, actual);
184     }
185
186     @Test
187     public void determineAuditResult_Failure_Test() throws Exception {
188         boolean actual = auditStackService.didCreateAuditFail(auditListOptFailure);
189         assertEquals(true, actual);
190     }
191 }