Add models imports endpoint and persistence structure
[sdc.git] / catalog-dao / src / test / java / org / openecomp / sdc / be / dao / cassandra / ToscaModelImportCassandraDaoTest.java
1 /*
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
8  *
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.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.openecomp.sdc.be.dao.cassandra;
21
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;
30
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;
47
48 class ToscaModelImportCassandraDaoTest {
49
50     @Mock
51     private CassandraClient cassandraClient;
52
53     @InjectMocks
54     private ToscaModelImportCassandraDao toscaModelImportCassandraDao;
55
56     @BeforeEach
57     public void setUp() throws Exception {
58         MockitoAnnotations.openMocks(this);
59     }
60
61     @Test
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);
69
70         final Result<ToscaImportByModel> result = mock(Result.class);
71         when(result.all()).thenReturn(expectedImportModelList);
72         when(toscaImportByModelAccessorMock.findAllByModel(modelId)).thenReturn(result);
73
74         final List<ToscaImportByModel> actualImportModelList = toscaModelImportCassandraDao.findAllByModel(modelId);
75         assertEquals(expectedImportModelList.size(), actualImportModelList.size());
76         assertTrue(actualImportModelList.contains(toscaImportByModel1));
77         assertTrue(actualImportModelList.contains(toscaImportByModel2));
78     }
79
80     @Test
81     void importAllTest() {
82         final var toscaImportByModelAccessorMock = mock(ToscaImportByModelAccessor.class);
83         final Mapper<ToscaImportByModel> toscaImportByModelMapperMock = mock(Mapper.class);
84         toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(toscaImportByModelAccessorMock, toscaImportByModelMapperMock);
85
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);
92
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);
97
98         toscaModelImportCassandraDao.importAll(modelId, importModelList);
99
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());
109     }
110
111     @Test
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);
122     }
123
124     @Test
125     void initTest_clientNotConnected() {
126         toscaModelImportCassandraDao = new ToscaModelImportCassandraDao(cassandraClient);
127         when(cassandraClient.isConnected()).thenReturn(false);
128         toscaModelImportCassandraDao.init();
129         verify(cassandraClient, never()).connect(anyString());
130     }
131
132     @Test
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));
138
139         final CassandraDaoInitException actualException = assertThrows(CassandraDaoInitException.class, () -> toscaModelImportCassandraDao.init());
140
141         final CassandraDaoInitException expectedException = CassandraDaoInitExceptionProvider
142             .keySpaceConnectError(AuditingTypesConstants.ARTIFACT_KEYSPACE, CassandraOperationStatus.KEYSPACE_NOT_CONNECTED).get();
143         assertEquals(expectedException.getMessage(), actualException.getMessage());
144     }
145
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;
151     }
152 }