2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.adapters.tasks.audit;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.mockito.Mockito.doReturn;
27 import java.io.IOException;
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;
52 public class AuditStackServiceDataTest extends AuditCreateStackService {
55 private AuditCreateStackService auditStackService = new AuditCreateStackService();
58 private AuditQueryStackService auditQueryStackService = new AuditQueryStackService();
61 private HeatStackAudit heatStackAuditMock;
64 private Environment mockEnv;
67 private ExternalTask mockExternalTask;
70 private ExternalTaskService mockExternalTaskService;
73 private AuditDataService auditDataService;
76 private AuditMDCSetup mdcSetup;
78 private ObjectMapper objectMapper = new ObjectMapper();
80 private AuditInventory auditInventory = new AuditInventory();
82 Optional<AAIObjectAuditList> auditListOptSuccess;
84 Optional<AAIObjectAuditList> auditListOptFailure;
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);
94 AAIObjectAuditList auditListSuccess = objectMapper
95 .readValue(new File("src/test/resources/ExpectedVServerFound.json"), AAIObjectAuditList.class);
96 auditListOptSuccess = Optional.of(auditListSuccess);
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();
117 public void execute_external_task_audit_success_Test() {
118 doReturn(auditListOptSuccess).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
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"));
130 public void executeExternalTaskQueryAuditTest() throws JsonProcessingException {
131 doReturn(auditListOptSuccess).when(heatStackAuditMock).queryHeatStack("cloudOwner", "cloudRegion", "tenantId",
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));
144 public void execute_external_task_audit_first_failure_Test() {
145 doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
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);
155 public void execute_external_task_audit_intermediate_failure_Test() {
156 doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
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);
167 public void execute_external_task_audit_final_failure_Test() {
168 doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
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"));
181 public void determineAuditResult_Test() throws Exception {
182 boolean actual = auditStackService.didCreateAuditFail(auditListOptSuccess);
183 assertEquals(false, actual);
187 public void determineAuditResult_Failure_Test() throws Exception {
188 boolean actual = auditStackService.didCreateAuditFail(auditListOptFailure);
189 assertEquals(true, actual);