2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021 Nordix Foundation
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
20 package org.openecomp.sdc.be.dao.cassandra;
22 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25 import static org.mockito.ArgumentMatchers.anyString;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.never;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
31 import com.datastax.driver.core.Session;
32 import com.datastax.driver.mapping.Mapper;
33 import com.datastax.driver.mapping.MappingManager;
34 import com.datastax.driver.mapping.Result;
35 import fj.data.Either;
36 import java.util.List;
37 import org.apache.commons.lang3.tuple.ImmutablePair;
38 import org.junit.jupiter.api.BeforeEach;
39 import org.junit.jupiter.api.Test;
40 import org.mockito.InjectMocks;
41 import org.mockito.Mock;
42 import org.mockito.MockitoAnnotations;
43 import org.openecomp.sdc.be.dao.api.exception.CassandraDaoInitException;
44 import org.openecomp.sdc.be.dao.api.exception.CassandraDaoInitExceptionProvider;
45 import org.openecomp.sdc.be.data.model.ToscaImportByModel;
46 import org.openecomp.sdc.be.resources.data.auditing.AuditingTypesConstants;
48 class ToscaModelImportCassandraDaoTest {
51 private CassandraClient cassandraClient;
54 private ToscaModelImportCassandraDao toscaModelImportCassandraDao;
57 public void setUp() throws Exception {
58 MockitoAnnotations.openMocks(this);
62 void findAllByModelTest() {
63 final var toscaImportByModelAccessorMock = mock(ToscaImportByModelAccessor.class);
64 toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(toscaImportByModelAccessorMock, null);
65 final var modelId = "modelId";
66 final ToscaImportByModel toscaImportByModel1 = new ToscaImportByModel();
67 final ToscaImportByModel toscaImportByModel2 = new ToscaImportByModel();
68 final List<ToscaImportByModel> expectedImportModelList = List.of(toscaImportByModel1, toscaImportByModel2);
70 final Result<ToscaImportByModel> result = mock(Result.class);
71 when(result.all()).thenReturn(expectedImportModelList);
72 when(toscaImportByModelAccessorMock.findAllByModel(modelId)).thenReturn(result);
74 final List<ToscaImportByModel> actualImportModelList = toscaModelImportCassandraDao.findAllByModel(modelId);
75 assertEquals(expectedImportModelList.size(), actualImportModelList.size());
76 assertTrue(actualImportModelList.contains(toscaImportByModel1));
77 assertTrue(actualImportModelList.contains(toscaImportByModel2));
81 void importAllTest() {
82 final var toscaImportByModelAccessorMock = mock(ToscaImportByModelAccessor.class);
83 final Mapper<ToscaImportByModel> toscaImportByModelMapperMock = mock(Mapper.class);
84 toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(toscaImportByModelAccessorMock, toscaImportByModelMapperMock);
86 final var modelId = "modelId";
87 final var toscaImportByModel1 = createToscaModelByImport(modelId, "path/model/1");
88 final var toscaImportByModel2 = createToscaModelByImport(modelId, "path/model/2");
89 final var toscaImportByModel3 = createToscaModelByImport(modelId, "path/model/3");
90 final var toscaImportByModelWrongModel = createToscaModelByImport("otherModel", "path/wrong-model/1");
91 final var importModelList = List.of(toscaImportByModel1, toscaImportByModel2, toscaImportByModel3);
93 final var toscaImportByModelDatabase1 = createToscaModelByImport(modelId, "toscaImportByModelDatabase1");
94 final Result<ToscaImportByModel> findAllByModelResult = mock(Result.class);
95 when(findAllByModelResult.all()).thenReturn(List.of(toscaImportByModel1, toscaImportByModelDatabase1));
96 when(toscaImportByModelAccessorMock.findAllByModel(modelId)).thenReturn(findAllByModelResult);
98 toscaModelImportCassandraDao.importAll(modelId, importModelList);
100 verify(toscaImportByModelMapperMock).save(toscaImportByModel1);
101 verify(toscaImportByModelMapperMock).save(toscaImportByModel2);
102 verify(toscaImportByModelMapperMock).save(toscaImportByModel3);
103 verify(toscaImportByModelMapperMock, never()).save(toscaImportByModelWrongModel);
104 verify(toscaImportByModelMapperMock).delete(toscaImportByModelDatabase1.getModelId(), toscaImportByModelDatabase1.getFullPath());
105 verify(toscaImportByModelMapperMock, never()).delete(toscaImportByModel1.getModelId(), toscaImportByModel1.getFullPath());
106 verify(toscaImportByModelMapperMock, never()).delete(toscaImportByModel2.getModelId(), toscaImportByModel2.getFullPath());
107 verify(toscaImportByModelMapperMock, never()).delete(toscaImportByModel3.getModelId(), toscaImportByModel3.getFullPath());
108 verify(toscaImportByModelMapperMock, never()).delete(toscaImportByModelWrongModel.getModelId(), toscaImportByModelWrongModel.getFullPath());
112 void initSuccessTest() {
113 toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(cassandraClient);
114 when(cassandraClient.isConnected()).thenReturn(true);
115 final Session sessionMock = mock(Session.class);
116 final MappingManager mappingManagerMock = mock(MappingManager.class);
117 when(cassandraClient.connect(AuditingTypesConstants.ARTIFACT_KEYSPACE)).thenReturn(Either.left(new ImmutablePair<>(sessionMock, mappingManagerMock)));
118 toscaModelImportCassandraDao.init();
119 verify(cassandraClient).connect(AuditingTypesConstants.ARTIFACT_KEYSPACE);
120 verify(mappingManagerMock).mapper(ToscaImportByModel.class);
121 verify(mappingManagerMock).createAccessor(ToscaImportByModelAccessor.class);
125 void initTest_clientNotConnected() {
126 toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(cassandraClient);
127 when(cassandraClient.isConnected()).thenReturn(false);
128 toscaModelImportCassandraDao.init();
129 verify(cassandraClient, never()).connect(anyString());
133 void initTest_keyspaceConnectionFailure() {
134 toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(cassandraClient);
135 when(cassandraClient.isConnected()).thenReturn(true);
136 when(cassandraClient.connect(AuditingTypesConstants.ARTIFACT_KEYSPACE))
137 .thenReturn(Either.right(CassandraOperationStatus.KEYSPACE_NOT_CONNECTED));
139 final CassandraDaoInitException actualException = assertThrows(CassandraDaoInitException.class, () -> toscaModelImportCassandraDao.init());
141 final CassandraDaoInitException expectedException = CassandraDaoInitExceptionProvider
142 .keySpaceConnectError(AuditingTypesConstants.ARTIFACT_KEYSPACE, CassandraOperationStatus.KEYSPACE_NOT_CONNECTED).get();
143 assertEquals(expectedException.getMessage(), actualException.getMessage());
146 private ToscaImportByModel createToscaModelByImport(final String modelId, final String path) {
147 final var toscaImportByModel3 = new ToscaImportByModel();
148 toscaImportByModel3.setModelId(modelId);
149 toscaImportByModel3.setFullPath(path);
150 return toscaImportByModel3;