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