2 * Copyright © 2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * ================================================================================
11 * Modifications Copyright (c) 2019 Samsung
12 * ================================================================================
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 package org.openecomp.sdc.vendorsoftwareproduct.impl;
23 import org.junit.After;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.ArgumentCaptor;
28 import org.mockito.Captor;
29 import org.mockito.InjectMocks;
30 import org.mockito.Mock;
31 import org.mockito.MockitoAnnotations;
32 import org.mockito.Spy;
33 import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
34 import org.openecomp.sdc.common.errors.CoreException;
35 import org.openecomp.sdc.common.errors.ErrorCategory;
36 import org.openecomp.sdc.common.errors.ErrorCode;
37 import org.openecomp.sdc.vendorsoftwareproduct.dao.ProcessDao;
38 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
39 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessType;
40 import org.openecomp.sdc.versioning.dao.types.Version;
41 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
43 import java.io.ByteArrayInputStream;
45 import java.nio.ByteBuffer;
46 import java.util.Arrays;
47 import java.util.Collection;
49 import static org.mockito.ArgumentMatchers.any;
50 import static org.mockito.ArgumentMatchers.eq;
51 import static org.mockito.Mockito.doNothing;
52 import static org.mockito.Mockito.doReturn;
53 import static org.mockito.Mockito.doThrow;
54 import static org.mockito.Mockito.never;
55 import static org.mockito.Mockito.verify;
57 public class ProcessManagerImplTest {
59 private static final String USER1 = "processesTestUser";
60 private static final String VSP_ID = "vsp";
61 private static final Version VERSION = new Version(0, 1);
62 private static final String COMPONENT_ID = "component";
63 private static final String PROCESS1_ID = "process1";
64 private static final String PROCESS2_ID = "process2";
65 private static final String ARTIFACT_NAME = "artifact.sh";
68 private ProcessDao processDaoMock;
72 private ProcessManagerImpl processManager;
74 private ArgumentCaptor<ActivityLogEntity> activityLogEntityArg;
77 public void setUp() throws Exception {
78 MockitoAnnotations.openMocks(this);
82 public void tearDown() {
83 processManager = null;
88 public void testListWhenNone() {
89 Collection<ProcessEntity> processes =
90 processManager.listProcesses(VSP_ID, VERSION, COMPONENT_ID);
91 Assert.assertEquals(processes.size(), 0);
95 public void testList() {
96 doReturn(Arrays.asList(
97 createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID),
98 createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS2_ID)))
99 .when(processDaoMock).list(any(ProcessEntity.class));
101 Collection<ProcessEntity> actual =
102 processManager.listProcesses(VSP_ID, VERSION, COMPONENT_ID);
103 Assert.assertEquals(actual.size(), 2);
107 public void testDeleteListWhenNone() {
108 processManager.deleteProcesses(VSP_ID, VERSION, COMPONENT_ID);
109 verify(processDaoMock, never()).delete(any(ProcessEntity.class));
113 public void testDeleteList() {
114 ProcessEntity process1 = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
115 ProcessEntity process2 = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS2_ID);
116 doReturn(Arrays.asList(process1, process2))
117 .when(processDaoMock).list(any(ProcessEntity.class));
118 doNothing().when(processManager)
119 .deleteUniqueValue(VSP_ID, VERSION, COMPONENT_ID, process1.getName());
120 doNothing().when(processManager)
121 .deleteUniqueValue(VSP_ID, VERSION, COMPONENT_ID, process2.getName());
123 processManager.deleteProcesses(VSP_ID, VERSION, COMPONENT_ID);
125 verify(processDaoMock).deleteAll(eq(new ProcessEntity(VSP_ID, VERSION, COMPONENT_ID, null)));
126 verify(processManager)
127 .deleteUniqueValue(VSP_ID, VERSION, COMPONENT_ID, process1.getName());
128 verify(processManager)
129 .deleteUniqueValue(VSP_ID, VERSION, COMPONENT_ID, process2.getName());
133 public void testCreate() {
134 ProcessEntity processToCreate = createProcess(VSP_ID, VERSION, COMPONENT_ID, null);
135 processToCreate.setName("proc name");
137 doNothing().when(processManager)
138 .validateUniqueName(VSP_ID, VERSION, COMPONENT_ID, processToCreate.getName());
139 doNothing().when(processManager)
140 .createUniqueName(VSP_ID, VERSION, COMPONENT_ID, processToCreate.getName());
142 ProcessEntity process = processManager.createProcess(processToCreate);
143 Assert.assertNotNull(process);
144 process.setId(process.getId());
146 Assert.assertEquals(process, processToCreate);
149 @Test(expected = CoreException.class)
150 public void testCreateWithExistingName_negative() {
151 ProcessEntity process = createProcess(VSP_ID, VERSION, COMPONENT_ID, null);
152 process.setName("p1 name");
154 doThrow(new CoreException(
155 new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION).build()))
156 .when(processManager).validateUniqueName(VSP_ID, VERSION, COMPONENT_ID, process.getName());
158 processManager.createProcess(process);
162 public void testUpdateNonExistingProcessId_negative() {
163 doReturn(null).when(processDaoMock).get(any(ProcessEntity.class));
165 testUpdate_negative(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID, USER1,
166 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
169 @Test(expected = CoreException.class)
170 public void testUpdateWithExistingName_negative() {
171 ProcessEntity existingProcess = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
172 doReturn(existingProcess).when(processDaoMock).get(any(ProcessEntity.class));
174 ProcessEntity processToUpdate = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
175 doThrow(new CoreException(
176 new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION).build()))
177 .when(processManager)
178 .updateUniqueName(VSP_ID, VERSION, COMPONENT_ID, existingProcess.getName(),
179 processToUpdate.getName());
181 processManager.updateProcess(processToUpdate);
185 public void testUpdate() {
186 ProcessEntity existingProcess = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
187 doReturn(existingProcess).when(processDaoMock).get(any(ProcessEntity.class));
189 ProcessEntity processToUpdate = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
190 doNothing().when(processManager)
191 .updateUniqueName(VSP_ID, VERSION, COMPONENT_ID, existingProcess.getName(),
192 processToUpdate.getName());
194 processManager.updateProcess(processToUpdate);
195 verify(processDaoMock).update(processToUpdate);
200 public void testGetNonExistingProcessId_negative() {
201 testGet_negative(VSP_ID, VERSION, COMPONENT_ID, "non existing process id", USER1,
202 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
206 public void testGet() {
207 ProcessEntity process = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
208 doReturn(process).when(processDaoMock).get(any(ProcessEntity.class));
209 ProcessEntity actual =
210 processManager.getProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
211 Assert.assertEquals(actual, process);
212 Assert.assertNull(actual.getArtifactName());
216 public void testGetAfterUploadArtifact() {
217 ProcessEntity process = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
218 process.setArtifactName(ARTIFACT_NAME);
219 doReturn(process).when(processDaoMock).get(any(ProcessEntity.class));
220 ProcessEntity actual =
221 processManager.getProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
222 Assert.assertEquals(actual, process);
223 Assert.assertEquals(actual.getArtifactName(), ARTIFACT_NAME);
226 @Test(expected = CoreException.class)
227 public void testDeleteNonExistingProcessId_negative() {
228 processManager.deleteProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
232 public void testDelete() {
233 ProcessEntity processToDelete = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
234 doReturn(processToDelete).when(processDaoMock)
235 .get(any(ProcessEntity.class));
236 doNothing().when(processManager).deleteUniqueValue(VSP_ID, VERSION, COMPONENT_ID,
237 processToDelete.getName());
239 processManager.deleteProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
240 verify(processDaoMock).delete(any(ProcessEntity.class));
241 verify(processManager)
242 .deleteUniqueValue(VSP_ID, VERSION, COMPONENT_ID, processToDelete.getName());
246 public void testUploadArtifactNonExistingProcessId_negative() {
247 testUploadArtifact_negative(VSP_ID, VERSION, COMPONENT_ID, "non existing process id", USER1,
248 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
252 public void testUploadArtifact() {
253 ProcessEntity process = createProcess(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
254 doReturn(process).when(processDaoMock).get(any(ProcessEntity.class));
256 byte[] artifactBytes = "bla bla".getBytes();
258 .uploadProcessArtifact(new ByteArrayInputStream(artifactBytes), ARTIFACT_NAME,
259 VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
260 verify(processDaoMock).uploadArtifact(any(ProcessEntity.class));
264 public void testGetArtifactWhenNone_negative() {
265 testGetFile_negative(VSP_ID, VERSION, COMPONENT_ID, PROCESS2_ID, USER1,
266 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
270 public void testGetArtifactNonExistingProcessId_negative() {
271 testGetFile_negative(VSP_ID, VERSION, COMPONENT_ID, "non existing process id", USER1,
272 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
276 public void testGetArtifact() {
277 ProcessEntity processArtifact =
278 new ProcessEntity(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
279 processArtifact.setArtifact(ByteBuffer.wrap("bla bla".getBytes()));
280 doReturn(processArtifact).when(processDaoMock)
281 .getArtifact(any(ProcessEntity.class));
284 processManager.getProcessArtifact(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
285 Assert.assertNotNull(actual);
290 public void testDeleteArtifactWhenNone_negative() {
291 testDeleteArtifact_negative(VSP_ID, COMPONENT_ID, PROCESS2_ID, USER1,
292 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
296 public void testDeleteArtifactNonExistingProcessId_negative() {
297 testDeleteArtifact_negative(VSP_ID, COMPONENT_ID, "non existing process id", USER1,
298 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
302 public void testDeleteArtifact() {
303 ProcessEntity processArtifact =
304 new ProcessEntity(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
305 processArtifact.setArtifact(ByteBuffer.wrap("bla bla".getBytes()));
306 doReturn(processArtifact).when(processDaoMock)
307 .getArtifact(any(ProcessEntity.class));
309 processManager.deleteProcessArtifact(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);
310 verify(processDaoMock)
311 .deleteArtifact(any(ProcessEntity.class));
315 private ProcessEntity createProcess(String vspId, Version version, String componentId,
317 ProcessEntity process = new ProcessEntity(vspId, version, componentId, processId);
318 process.setName(processId + " name");
319 process.setDescription(processId + " desc");
320 process.setType(ProcessType.Other);
324 private void testGet_negative(String vspId, Version version, String componentId, String processId,
325 String user, String expectedErrorCode) {
327 processManager.getProcess(vspId, version, componentId, processId);
329 } catch (CoreException exception) {
330 Assert.assertEquals(exception.code().id(), expectedErrorCode);
334 private void testUpdate_negative(String vspId, Version version, String componentId,
335 String processId, String user,
336 String expectedErrorCode) {
339 .updateProcess(new ProcessEntity(vspId, version, componentId, processId));
341 } catch (CoreException exception) {
342 Assert.assertEquals(exception.code().id(), expectedErrorCode);
346 private void testGetFile_negative(String vspId, Version version, String componentId,
347 String processId, String user, String expectedErrorCode) {
349 processManager.getProcessArtifact(vspId, version, componentId, processId);
351 } catch (CoreException exception) {
352 Assert.assertEquals(exception.code().id(), expectedErrorCode);
356 private void testUploadArtifact_negative(String vspId, Version version, String componentId,
357 String processId, String user,
358 String expectedErrorCode) {
361 .uploadProcessArtifact(new ByteArrayInputStream("bla bla".getBytes()), "artifact.sh",
362 vspId, version, componentId, processId);
364 } catch (CoreException exception) {
365 Assert.assertEquals(exception.code().id(), expectedErrorCode);
369 private void testDeleteArtifact_negative(String vspId, String componentId, String processId,
370 String user, String expectedErrorCode) {
372 processManager.deleteProcessArtifact(vspId, VERSION, componentId, processId);
374 } catch (CoreException exception) {
375 Assert.assertEquals(exception.code().id(), expectedErrorCode);
379 @Test(expected = CoreException.class)
380 public void shouldReturnCoreException() {
381 processManager.getProcessArtifact(VSP_ID, VERSION, COMPONENT_ID, PROCESS1_ID);