CSIT Fix for SDC-2585
[sdc.git] / asdctool / src / test / java / org / openecomp / sdc / asdctool / impl / DataMigrationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 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 /*
22
23  * Copyright (c) 2018 AT&T Intellectual Property.
24
25  *
26
27  * Licensed under the Apache License, Version 2.0 (the "License");
28
29  * you may not use this file except in compliance with the License.
30
31  * You may obtain a copy of the License at
32
33  *
34
35  *     http://www.apache.org/licenses/LICENSE-2.0
36
37  *
38
39  * Unless required by applicable law or agreed to in writing, software
40
41  * distributed under the License is distributed on an "AS IS" BASIS,
42
43  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
44
45  * See the License for the specific language governing permissions and
46
47  * limitations under the License.
48
49  */
50 package org.openecomp.sdc.asdctool.impl;
51
52 import org.junit.Before;
53 import org.junit.Test;
54 import org.junit.runner.RunWith;
55 import org.mockito.junit.MockitoJUnitRunner;
56 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
57 import org.openecomp.sdc.be.dao.cassandra.AuditCassandraDao;
58 import org.openecomp.sdc.be.dao.cassandra.schema.Table;
59 import org.openecomp.sdc.be.resources.data.auditing.*;
60 import org.openecomp.sdc.common.datastructure.AuditingFieldsKey;
61
62 import java.io.IOException;
63 import java.text.SimpleDateFormat;
64 import java.util.Date;
65 import java.util.HashMap;
66
67 import static org.assertj.core.api.Assertions.assertThat;
68 import static org.mockito.Mockito.mock;
69 import static org.openecomp.sdc.common.datastructure.AuditingFieldsKey.*;
70
71 @RunWith(MockitoJUnitRunner.class)
72 public class DataMigrationTest {
73     private final static String DESCRIPTION = "OK";
74     private final static String STATUS = "200";
75     private final static String SERVICE_INSTANCE_ID = "SERVICE_INSTANCE_ID";
76     private final static String MODIFIER = "MODIFIER";
77     private final static String REQUEST_ID = "REQUEST_ID";
78     private final static String USER = "USER";
79     private final static String USER_BEFORE = "USER_BEFORE";
80     private final static String USER_AFTER = "USER_AFTER";
81     private final static String ARTIFACT_UUID = "ARTIFACT_UUID";
82
83     private final static String PREV_STATE = "PREV_STATE";
84     private final static String CURR_STATE = "CURR_STATE";
85     private final static String PREV_VERSION = "PREV_VERSION";
86     private final static String CURR_VERSION = "CURR_VERSION";
87     private final static String DPREV_STATUS = "DPREV_STATUS";
88     private final static String DCURR_STATUS = "CURR_STATUS";
89     private final static String INVARIANT_UUID = "INVARIANT_UUID";
90     private final static String ARTIFACT_DATA = "ARTIFACT_DATA";
91     private final static String COMMENT = "COMMENT";
92     private final static String DISTRIBUTION_ID = "DISTRIBUTION_ID";
93     private final static String TOSCA_NODE_TYPE = "TOSCA_NODE_TYPE";
94     private final static String CONSUMER_ID = "CONSUMER_ID";
95     private final static String RESOURCE_URL = "RESOURCE_URL";
96     private final static String ENV_ID = "ENV_ID";
97     private final static String VNF_WORKLOAD_CONTEXT = "VNF_WORKLOAD_CONTEXT";
98     private final static String TENANT = "TENANT";
99     private final static String RESOURCE_NAME = "RESOURCE_NAME";
100     private final static String RESOURCE_TYPE = "RESOURCE_TYPE";
101     private final static String AUTH_URL = "AUTH_URL";
102     private final static String AUTH_RELM = "AUTH_RELM";
103     private final static String TOPIC_NAME = "TOPIC_NAME";
104
105     private final static String dateFormatPattern = "yyyy-MM-dd HH:mm:ss.SSS z";
106
107     private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormatPattern);
108
109     private static ArtifactCassandraDao artifactCassandraDao = mock(ArtifactCassandraDao.class);
110
111     private static AuditCassandraDao auditCassandraDaoMock = mock(AuditCassandraDao.class);
112
113     private static DataMigration dataMigration = new DataMigration(auditCassandraDaoMock, artifactCassandraDao);
114
115     private final static String ES_STRING = "{\"" + AuditingFieldsKey.AUDIT_ACTION + "\":\"%s\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_NAME + "\":\"" + RESOURCE_NAME + "\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_TOSCA_NODE_TYPE + "\":\"" + TOSCA_NODE_TYPE +
116             "\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_PREV_VERSION + "\":\"" + PREV_VERSION + "\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_PREV_STATE + "\":\"" + PREV_STATE +
117             "\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_TYPE + "\":\"" + RESOURCE_TYPE + "\", \"" + AuditingFieldsKey.AUDIT_SERVICE_INSTANCE_ID + "\":\"" + SERVICE_INSTANCE_ID +
118             "\", \"" + AuditingFieldsKey.AUDIT_INVARIANT_UUID + "\":\"" + INVARIANT_UUID + "\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_CURR_VERSION + "\":\"" + CURR_VERSION +
119             "\", \"" + AuditingFieldsKey.AUDIT_RESOURCE_CURR_STATE + "\":\"" + CURR_STATE + "\", \"" + AuditingFieldsKey.AUDIT_MODIFIER_UID + "\":\"" + MODIFIER +
120             "\", \"" + AuditingFieldsKey.AUDIT_DESC + "\":\"" + DESCRIPTION + "\", \"" + AuditingFieldsKey.AUDIT_STATUS + "\":\"" + STATUS +
121             "\", \"" + AuditingFieldsKey.AUDIT_REQUEST_ID + "\":\"" + REQUEST_ID + "\", \"" + AuditingFieldsKey.AUDIT_CURR_ARTIFACT_UUID + "\":\"" + ARTIFACT_UUID +
122             "\", \"" + AuditingFieldsKey.AUDIT_PREV_ARTIFACT_UUID + "\":\"" + ARTIFACT_UUID + "\", \"" + AuditingFieldsKey.AUDIT_ARTIFACT_DATA + "\":\"" + ARTIFACT_DATA +
123             "\", \"" + AuditingFieldsKey.AUDIT_TIMESTAMP + "\":\"%s\"}";
124
125
126     private String timestampStr;
127
128     private HashMap<AuditingFieldsKey, String> dataMap = new HashMap<>();
129
130     @Before
131     public void setUp() {
132         dataMap.put(AUDIT_DESC, DESCRIPTION);
133         dataMap.put(AUDIT_STATUS, STATUS);
134         dataMap.put(AUDIT_REQUEST_ID, REQUEST_ID);
135         dataMap.put(AUDIT_SERVICE_INSTANCE_ID, SERVICE_INSTANCE_ID);
136         dataMap.put(AUDIT_MODIFIER_UID, MODIFIER);
137         dataMap.put(AUDIT_USER_BEFORE, USER_BEFORE);
138         dataMap.put(AUDIT_USER_UID, USER);
139         dataMap.put(AUDIT_USER_AFTER, USER_AFTER);
140         dataMap.put(AUDIT_AUTH_URL, AUTH_URL);
141         dataMap.put(AUDIT_AUTH_REALM, AUTH_RELM);
142         dataMap.put(AUDIT_PREV_ARTIFACT_UUID, ARTIFACT_UUID);
143         dataMap.put(AUDIT_CURR_ARTIFACT_UUID, ARTIFACT_UUID);
144         dataMap.put(AUDIT_RESOURCE_PREV_STATE, PREV_STATE);
145         dataMap.put(AUDIT_RESOURCE_PREV_VERSION, PREV_VERSION);
146         dataMap.put(AUDIT_RESOURCE_CURR_STATE, CURR_STATE);
147         dataMap.put(AUDIT_RESOURCE_CURR_VERSION, CURR_VERSION);
148         dataMap.put(AUDIT_RESOURCE_DPREV_STATUS, DPREV_STATUS);
149         dataMap.put(AUDIT_RESOURCE_DCURR_STATUS, DCURR_STATUS);
150         dataMap.put(AUDIT_INVARIANT_UUID, INVARIANT_UUID);
151         dataMap.put(AUDIT_ARTIFACT_DATA, ARTIFACT_DATA);
152         dataMap.put(AUDIT_RESOURCE_COMMENT, COMMENT);
153         dataMap.put(AUDIT_DISTRIBUTION_ID, DISTRIBUTION_ID);
154         dataMap.put(AUDIT_RESOURCE_TOSCA_NODE_TYPE, TOSCA_NODE_TYPE);
155         dataMap.put(AUDIT_DISTRIBUTION_CONSUMER_ID, CONSUMER_ID);
156         dataMap.put(AUDIT_RESOURCE_URL, RESOURCE_URL);
157         dataMap.put(AUDIT_DISTRIBUTION_ENVIRONMENT_ID, ENV_ID);
158         dataMap.put(AUDIT_DISTRIBUTION_VNF_WORKLOAD_CONTEXT, VNF_WORKLOAD_CONTEXT);
159         dataMap.put(AUDIT_DISTRIBUTION_TENANT, TENANT);
160         dataMap.put(AUDIT_RESOURCE_NAME, RESOURCE_NAME);
161         dataMap.put(AUDIT_RESOURCE_TYPE, RESOURCE_TYPE);
162         timestampStr = simpleDateFormat.format(new Date());
163         dataMap.put(AUDIT_TIMESTAMP, timestampStr);
164         dataMap.put(AUDIT_DISTRIBUTION_TOPIC_NAME, TOPIC_NAME);
165
166     }
167
168     @Test
169     public void createUserAdminEvent() {
170         dataMap.put(AUDIT_ACTION, AuditingActionEnum.ADD_USER.getName());
171         AuditingGenericEvent event = dataMigration.createAuditEvent(dataMap, Table.USER_ADMIN_EVENT);
172         assertThat(AuditingActionEnum.ADD_USER.getName()).isEqualTo(event.getAction());
173         verifyCommonData(event, true);
174         verifyUserAdminEvent((UserAdminEvent) event);
175     }
176
177     @Test
178     public void createResourceAdminEvent() {
179         dataMap.put(AUDIT_ACTION, AuditingActionEnum.UPDATE_RESOURCE_METADATA.getName());
180         AuditingGenericEvent event = dataMigration.createAuditEvent(dataMap, Table.RESOURCE_ADMIN_EVENT);
181         assertThat(AuditingActionEnum.UPDATE_RESOURCE_METADATA.getName()).isEqualTo(event.getAction());
182         verifyCommonData(event, true);
183         verifyResourceAdminEvent((ResourceAdminEvent)event);
184     }
185
186     @Test
187     public void createDistributionNotificationEvent() {
188         dataMap.put(AUDIT_ACTION, AuditingActionEnum.DISTRIBUTION_NOTIFY.getName());
189         AuditingGenericEvent event = dataMigration.createAuditEvent(dataMap, Table.DISTRIBUTION_NOTIFICATION_EVENT);
190         assertThat(AuditingActionEnum.DISTRIBUTION_NOTIFY.getName()).isEqualTo(event.getAction());
191         verifyCommonData(event, true);
192         verifyDistributionNotificationEvent((DistributionNotificationEvent)event);
193     }
194
195     @Test
196     public void createEventWhenSomeFieldValuesNotSet() {
197         dataMap.clear();
198         dataMap.put(AUDIT_ACTION, AuditingActionEnum.AUTH_REQUEST.getName());
199         AuditingGenericEvent event = dataMigration.createAuditEvent(dataMap, Table.AUTH_EVENT);
200         assertThat(AuditingActionEnum.AUTH_REQUEST.getName()).isEqualTo(event.getAction());
201         assertThat(event.getStatus()).isNull();
202         assertThat(event.getDesc()).isNull();
203         assertThat(event.getRequestId()).isNull();
204     }
205
206     @Test
207     public void createAuthEvent() {
208         dataMap.put(AUDIT_ACTION, AuditingActionEnum.AUTH_REQUEST.getName());
209         AuditingGenericEvent event = dataMigration.createAuditEvent(dataMap, Table.AUTH_EVENT);
210         assertThat(AuditingActionEnum.AUTH_REQUEST.getName()).isEqualTo(event.getAction());
211         verifyCommonData(event, false);
212         verifyAuthEvent((AuthEvent) event);
213     }
214
215     @Test
216     public void createImportResourceEventFromEsObject() throws IOException{
217         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr), Table.RESOURCE_ADMIN_EVENT);
218         assertThat(AuditingActionEnum.IMPORT_RESOURCE.getName()).isEqualTo(event.getAction());
219         verifyCommonData(event, true);
220         verifyResourceAdminEvent((ResourceAdminEvent)event);
221     }
222
223     @Test
224     public void createGetUserListEventFromEsObject() throws IOException{
225         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.GET_USERS_LIST.getName(), timestampStr),
226                 Table.GET_USERS_LIST_EVENT);
227         assertThat(AuditingActionEnum.GET_USERS_LIST.getName()).isEqualTo(event.getAction());
228         verifyCommonData(event, false);
229         assertThat(((GetUsersListEvent)event).getModifier()).isEqualTo(MODIFIER);
230     }
231
232     @Test
233     public void createEventFromEsFailedWhenActionDoesNotExist() throws IOException {
234         dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
235                 Table.CONSUMER_EVENT);
236     }
237
238     @Test(expected = NullPointerException.class)
239     public void createRecordWhenJsonIsEmpty() throws IOException{
240         dataMigration.createAuditRecordForCassandra("{}",
241                 Table.CONSUMER_EVENT);
242     }
243
244     @Test
245     public void createEventFromUEBCluster() throws IOException
246     {
247         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
248                 Table.DISTRIBUTION_GET_UEB_CLUSTER_EVENT);
249         assertThat(AuditingActionEnum.GET_UEB_CLUSTER.getName()).isEqualTo(event.getAction());
250         verifyCommonData(event, true);
251     }
252
253     @Test
254     public void createEventFromDistEngine() throws IOException
255     {
256         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
257                 Table.DISTRIBUTION_ENGINE_EVENT);
258         assertThat(AuditingActionEnum.IMPORT_RESOURCE.getName()).isEqualTo(event.getAction());
259         verifyCommonData(event, true);
260     }
261
262     @Test
263     public void createEventFromDistStatus() throws IOException
264     {
265         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
266                 Table.DISTRIBUTION_STATUS_EVENT);
267         assertThat(AuditingActionEnum.DISTRIBUTION_STATUS.getName()).isEqualTo(event.getAction());
268         verifyCommonData(event, true);
269     }
270
271     @Test
272     public void createEventFromCategory() throws IOException
273     {
274         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
275                 Table.CATEGORY_EVENT);
276         assertThat(AuditingActionEnum.IMPORT_RESOURCE.getName()).isEqualTo(event.getAction());
277         verifyCommonData(event, true);
278     }
279
280     @Test
281     public void createFromCategoryHierarchy() throws IOException
282     {
283         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
284                 Table.GET_CATEGORY_HIERARCHY_EVENT);
285         assertThat(AuditingActionEnum.GET_CATEGORY_HIERARCHY.getName()).isEqualTo(event.getAction());
286         verifyCommonData(event, false);
287     }
288
289     @Test
290     public void createEventFromUserAccess() throws IOException
291     {
292         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
293                 Table.USER_ACCESS_EVENT);
294         assertThat(AuditingActionEnum.USER_ACCESS.getName()).isEqualTo(event.getAction());
295         verifyCommonData(event, true);
296     }
297
298     @Test
299     public void createEventFromDistDwnld() throws IOException
300     {
301         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
302                 Table.DISTRIBUTION_DOWNLOAD_EVENT);
303         assertThat(AuditingActionEnum.DISTRIBUTION_ARTIFACT_DOWNLOAD.getName()).isEqualTo(event.getAction());
304         verifyCommonData(event, true);
305     }
306
307     @Test
308     public void createEventFromDistDeploy() throws IOException
309     {
310         AuditingGenericEvent event = dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
311                 Table.DISTRIBUTION_DEPLOY_EVENT);
312         assertThat(AuditingActionEnum.DISTRIBUTION_DEPLOY.getName()).isEqualTo(event.getAction());
313         verifyCommonData(event, true);
314     }
315
316     private void verifyCommonData(AuditingGenericEvent event, boolean isServiceInstanceProvided) {
317         assertThat(STATUS).isEqualTo(event.getStatus());
318         if (isServiceInstanceProvided) {
319             assertThat(SERVICE_INSTANCE_ID).isEqualTo(event.getServiceInstanceId());
320         }
321         else {
322             assertThat(event.getServiceInstanceId()).isNull();
323         }
324         assertThat(DESCRIPTION).isEqualTo(event.getDesc());
325         assertThat(REQUEST_ID).isEqualTo(event.getRequestId());
326     }
327
328     private void verifyUserAdminEvent(UserAdminEvent event) {
329         assertThat(USER_AFTER).isEqualTo(event.getUserAfter());
330         assertThat(USER_BEFORE).isEqualTo(event.getUserBefore());
331         verifyTimestamp(event.getTimestamp1());
332     }
333
334     private void verifyAuthEvent(AuthEvent event) {
335         assertThat(USER).isEqualTo(event.getUser());
336         assertThat(AUTH_URL).isEqualTo(event.getUrl());
337         assertThat(event.getAuthStatus()).isNull();
338         assertThat(AUTH_RELM).isEqualTo(event.getRealm());
339     }
340
341     private void verifyTimestamp(Date date) {
342         assertThat(timestampStr).isEqualTo(simpleDateFormat.format(date));
343     }
344
345     private void verifyResourceAdminEvent(ResourceAdminEvent event) {
346         assertThat(CURR_STATE).isEqualTo(event.getCurrState());
347         assertThat(CURR_VERSION).isEqualTo(event.getCurrVersion());
348         assertThat(ARTIFACT_UUID).isEqualTo(event.getCurrArtifactUUID());
349         assertThat(PREV_STATE).isEqualTo(event.getPrevState());
350         assertThat(PREV_VERSION).isEqualTo(event.getPrevVersion());
351         assertThat(ARTIFACT_UUID).isEqualTo(event.getPrevArtifactUUID());
352         assertThat(INVARIANT_UUID).isEqualTo(event.getInvariantUUID());
353         assertThat(ARTIFACT_DATA).isEqualTo(event.getArtifactData());
354         assertThat(RESOURCE_NAME).isEqualTo(event.getResourceName());
355         assertThat(RESOURCE_TYPE).isEqualTo(event.getResourceType());
356         verifyTimestamp(event.getTimestamp1());
357         assertThat(TOSCA_NODE_TYPE).isEqualTo( event.getToscaNodeType());
358     }
359
360     private void verifyDistributionNotificationEvent(DistributionNotificationEvent event) {
361         assertThat(CURR_STATE).isEqualTo(event.getCurrState());
362         assertThat(CURR_VERSION).isEqualTo(event.getCurrVersion());
363         assertThat(TOPIC_NAME).isEqualTo(event.getTopicName());
364         assertThat(DISTRIBUTION_ID).isEqualTo(event.getDid());
365         assertThat(ENV_ID).isEqualTo(event.getEnvId());
366         assertThat(VNF_WORKLOAD_CONTEXT).isEqualTo(event.getVnfWorkloadContext());
367         assertThat(TENANT).isEqualTo(event.getTenant());
368         verifyTimestamp(event.getTimestamp1());
369     }
370
371 }