2 * ============LICENSE_START=======================================================
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
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=========================================================
23 * Copyright (c) 2018 AT&T Intellectual Property.
27 * Licensed under the Apache License, Version 2.0 (the "License");
29 * you may not use this file except in compliance with the License.
31 * You may obtain a copy of the License at
35 * http://www.apache.org/licenses/LICENSE-2.0
39 * Unless required by applicable law or agreed to in writing, software
41 * distributed under the License is distributed on an "AS IS" BASIS,
43 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
45 * See the License for the specific language governing permissions and
47 * limitations under the License.
50 package org.openecomp.sdc.asdctool.impl;
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;
62 import java.io.IOException;
63 import java.text.SimpleDateFormat;
64 import java.util.Date;
65 import java.util.HashMap;
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.*;
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";
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";
105 private final static String dateFormatPattern = "yyyy-MM-dd HH:mm:ss.SSS z";
107 private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormatPattern);
109 private static ArtifactCassandraDao artifactCassandraDao = mock(ArtifactCassandraDao.class);
111 private static AuditCassandraDao auditCassandraDaoMock = mock(AuditCassandraDao.class);
113 private static DataMigration dataMigration = new DataMigration(auditCassandraDaoMock, artifactCassandraDao);
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\"}";
126 private String timestampStr;
128 private HashMap<AuditingFieldsKey, String> dataMap = new HashMap<>();
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);
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);
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);
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);
196 public void createEventWhenSomeFieldValuesNotSet() {
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();
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);
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);
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);
233 public void createEventFromEsFailedWhenActionDoesNotExist() throws IOException {
234 dataMigration.createAuditRecordForCassandra(String.format(ES_STRING, AuditingActionEnum.IMPORT_RESOURCE.getName(), timestampStr),
235 Table.CONSUMER_EVENT);
238 @Test(expected = NullPointerException.class)
239 public void createRecordWhenJsonIsEmpty() throws IOException{
240 dataMigration.createAuditRecordForCassandra("{}",
241 Table.CONSUMER_EVENT);
245 public void createEventFromUEBCluster() throws IOException
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);
254 public void createEventFromDistEngine() throws IOException
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);
263 public void createEventFromDistStatus() throws IOException
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);
272 public void createEventFromCategory() throws IOException
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);
281 public void createFromCategoryHierarchy() throws IOException
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);
290 public void createEventFromUserAccess() throws IOException
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);
299 public void createEventFromDistDwnld() throws IOException
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);
308 public void createEventFromDistDeploy() throws IOException
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);
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());
322 assertThat(event.getServiceInstanceId()).isNull();
324 assertThat(DESCRIPTION).isEqualTo(event.getDesc());
325 assertThat(REQUEST_ID).isEqualTo(event.getRequestId());
328 private void verifyUserAdminEvent(UserAdminEvent event) {
329 assertThat(USER_AFTER).isEqualTo(event.getUserAfter());
330 assertThat(USER_BEFORE).isEqualTo(event.getUserBefore());
331 verifyTimestamp(event.getTimestamp1());
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());
341 private void verifyTimestamp(Date date) {
342 assertThat(timestampStr).isEqualTo(simpleDateFormat.format(date));
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());
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());