3 * Copyright © 2017-2018 European Support Limited
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
11 * * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 package org.openecomp.sdc.action.impl;
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Matchers;
26 import org.mockito.Mock;
27 import org.mockito.Mockito;
28 import org.mockito.MockitoAnnotations;
29 import org.mockito.runners.MockitoJUnitRunner;
30 import org.openecomp.sdc.action.ActionConstants;
31 import org.openecomp.sdc.action.dao.ActionArtifactDao;
32 import org.openecomp.sdc.action.dao.ActionDao;
33 import org.openecomp.sdc.action.dao.types.ActionArtifactEntity;
34 import org.openecomp.sdc.action.dao.types.ActionEntity;
35 import org.openecomp.sdc.action.errors.ActionException;
36 import org.openecomp.sdc.action.types.Action;
37 import org.openecomp.sdc.action.types.ActionArtifact;
38 import org.openecomp.sdc.action.types.ActionArtifactProtection;
39 import org.openecomp.sdc.action.types.ActionStatus;
40 import org.openecomp.sdc.action.types.OpenEcompComponent;
41 import org.openecomp.sdc.common.errors.CoreException;
42 import org.openecomp.sdc.common.errors.ErrorCode;
43 import org.openecomp.sdc.versioning.ActionVersioningManager;
44 import org.openecomp.sdc.versioning.dao.VersionInfoDao;
45 import org.openecomp.sdc.versioning.dao.types.UserCandidateVersion;
46 import org.openecomp.sdc.versioning.dao.types.Version;
47 import org.openecomp.sdc.versioning.dao.types.VersionInfoEntity;
48 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
49 import org.openecomp.sdc.versioning.types.VersionInfo;
51 import java.util.ArrayList;
52 import java.util.Date;
53 import java.util.HashMap;
54 import java.util.List;
57 import static org.mockito.Matchers.any;
58 import static org.mockito.Matchers.anyInt;
59 import static org.mockito.Matchers.anyString;
60 import static org.mockito.Mockito.times;
61 import static org.mockito.Mockito.when;
63 @RunWith(MockitoJUnitRunner.class)
64 public class ActionManagerImplTest {
67 private ActionDao actionDao;
69 private ActionVersioningManager versioningManager;
71 private ActionArtifactDao actionArtifactDao;
73 private VersionInfoDao versionInfoDao;
75 private ActionManagerImpl actionManager;
80 MockitoAnnotations.initMocks(this);
81 actionManager = new ActionManagerImpl(actionDao, versioningManager, actionArtifactDao, versionInfoDao);
85 public void testGetActionsByActionInvariantUuIdShouldPass() {
86 String invariantId = "invariantId";
87 Mockito.when(actionDao.getActionsByActionInvariantUuId(invariantId.toUpperCase())).thenReturn(mockActionsToReturn());
88 List<Action> actions = actionManager.getActionsByActionInvariantUuId(invariantId);
89 Assert.assertEquals(1, actions.size());
92 @Test(expected = ActionException.class)
93 public void testGetActionsByActionInvariantUuIdShouldThrowExceptionWhenReturnedActionsOrEmptyOrNull() {
94 String invariantId = "invariantId";
95 Mockito.when(actionDao.getActionsByActionInvariantUuId(invariantId.toUpperCase())).thenReturn(new ArrayList<>());
96 actionManager.getActionsByActionInvariantUuId(invariantId);
101 public void testGetFilteredActionsShouldPassForFilterTypeName() {
102 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
103 .thenReturn(mockActionsToReturn());
104 List<Action> actions = actionManager.getFilteredActions("NAME", ActionConstants.FILTER_TYPE_NAME );
105 Assert.assertEquals(1, actions.size());
108 @Test(expected = ActionException.class)
109 public void testGetFilteredActionsShouldThrowExceptionForFilterTypeNameWhenReturnedActionsOrEmptyOrNull() {
110 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
111 .thenReturn(new ArrayList<>());
112 actionManager.getFilteredActions("NAME", ActionConstants.FILTER_TYPE_NAME );
116 public void testGetFilteredActionsByMajorMinorVersionShouldPassWithActiveVersion() {
117 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
118 .thenReturn(mockActionsToReturn());
120 Map<String, VersionInfo> actionVersionMap = new HashMap<>();
121 VersionInfo versionInfo = createVersionInfo();
122 actionVersionMap.put("uuid", versionInfo);
124 Mockito.when(versioningManager.listEntitiesVersionInfo(Matchers.anyString(),
125 Matchers.anyString(), Matchers.any())).thenReturn(actionVersionMap);
126 List<Action> actions = actionManager.getFilteredActions("type", ActionConstants.FILTER_TYPE_NAME );
127 Assert.assertEquals(1, actions.size());
131 public void testGetFilteredActionsByMajorMinorVersionShouldPassWithLatestFinalVersion() {
132 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
133 .thenReturn(mockActionsToReturn());
135 Map<String, VersionInfo> actionVersionMap = new HashMap<>();
136 VersionInfo versionInfo = createVersionInfo();
137 actionVersionMap.put("uuid", versionInfo);
139 Mockito.when(versioningManager.listEntitiesVersionInfo(Matchers.anyString(),
140 Matchers.anyString(), Matchers.any())).thenReturn(actionVersionMap);
141 List<Action> actions = actionManager.getFilteredActions("type", ActionConstants.FILTER_TYPE_NAME );
142 Assert.assertEquals(1, actions.size());
146 public void testGetActionsByActionUuIdShouldPassIfReturnedActionsAreNotNull() {
147 String actionUuId = "actionUuId";
148 Mockito.when(actionDao.getActionsByActionUuId(actionUuId.toUpperCase()))
149 .thenReturn(new Action());
150 Assert.assertNotNull(actionManager.getActionsByActionUuId(actionUuId));
153 @Test(expected = ActionException.class)
154 public void testGetActionsByActionUuIdShouldThrowExceptionIfReturnedActionsAreNull() {
155 String actionUuId = "actionUuId";
156 Mockito.when(actionDao.getActionsByActionUuId(actionUuId.toUpperCase()))
158 actionManager.getActionsByActionUuId(actionUuId);
162 public void testGetOpenEcompComponents() {
163 ArrayList<OpenEcompComponent> ecompComponents = new ArrayList<>();
164 ecompComponents.add(new OpenEcompComponent());
165 Mockito.when(actionDao.getOpenEcompComponents())
166 .thenReturn(ecompComponents);
167 Assert.assertEquals(1, actionManager.getOpenEcompComponents().size());
171 public void testDeleteActionShouldPassIfDeleteMethodGeCallsOneTime() {
172 String actionInvariantUuId = "actionInvariantUuId";
173 String user = "user";
175 actionManager.deleteAction(actionInvariantUuId, user);
177 Mockito.verify(versioningManager, times(1)).delete(anyString(), anyString(), anyString());
178 Mockito.verify(actionDao, times(1)).deleteAction(anyString());
182 public void testUpdateActionShouldUpdateActionSuccessfully() {
183 Action action = new Action();
184 action.setActionInvariantUuId("actionInvId");
185 action.setName("actionToupdate");
186 action.setData("{actionInvariantUuId : actionInvariantUuId, name : actionToupdate}");
187 VersionInfo versionInfo = createVersionInfo();
188 Version activeVersion = new Version("2.1");
190 versionInfo.setActiveVersion(activeVersion);
191 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
192 .thenReturn(versionInfo);
194 ActionEntity actionEntity = createActionEntity();
196 when(actionDao.get(any())).thenReturn(actionEntity);
197 actionManager.updateAction(action, "user");
198 Mockito.verify(actionDao, times(1)).updateAction(any());
201 @Test(expected = ActionException.class)
202 public void testUpdateActionShouldThrowExceptionIfToUpdateAndExistingActionNameIsNotSame() {
203 Action action = createAction();
204 VersionInfo versionInfo = createVersionInfo();
205 Version activeVersion = new Version("2.1");
207 versionInfo.setActiveVersion(activeVersion);
208 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
209 .thenReturn(versionInfo);
210 actionManager.updateAction(action, "user");
214 public void testCheckoutShouldPassSuccessFully() {
215 String invariantUuId = "invariantUuId";
216 ActionEntity actionEntity = createActionEntity();
217 when(actionDao.get(any())).thenReturn(actionEntity);
218 Mockito.when(versioningManager.checkout(anyString(), anyString(),anyString())).thenReturn(createVersion());
219 Action action = actionManager.checkout(invariantUuId, "user");
220 Assert.assertNotNull(action);
221 Mockito.verify(actionDao, times(1)).update(Matchers.any(ActionEntity.class));
225 @Test(expected = ActionException.class)
226 public void testCheckoutShouldFailInCaseOfException() {
227 String invariantUuId = "invariantUuId";
228 Mockito.when(versioningManager.checkout(anyString(), anyString(),anyString()))
229 .thenThrow(new CoreException(new ErrorCode.ErrorCodeBuilder()
230 .withId(VersioningErrorCodes.CHECKOT_ON_LOCKED_ENTITY).build()));
231 VersionInfoEntity versionInfoEntity = createVersionInfoEntity();
232 when(versionInfoDao.get(any(VersionInfoEntity.class))).thenReturn(versionInfoEntity);
233 actionManager.checkout(invariantUuId, "user");
238 public void testUndoCheckoutShouldPass() {
239 VersionInfoEntity versionInfoEntity = createVersionInfoEntity();
240 when(versionInfoDao.get(any(VersionInfoEntity.class))).thenReturn(versionInfoEntity);
241 when(versioningManager.undoCheckout(anyString(), anyString(), anyString())).thenReturn(createVersion());
242 ActionEntity actionEntity = createActionEntity();
244 when(actionDao.get(any(ActionEntity.class))).thenReturn(actionEntity);
246 actionManager.undoCheckout("invariantUuid", "user");
247 Mockito.verify(actionArtifactDao, times(1)).delete(any(ActionArtifactEntity.class));
250 @Test(expected = ActionException.class)
251 public void testUndoCheckoutShouldThrowExceptionIfVersionInfoEntityIsNull() {
252 when(versionInfoDao.get(any(VersionInfoEntity.class))).thenReturn(null);
253 actionManager.undoCheckout("invariantUuid", "user");
258 public void testCheckinShouldPassForHappyScenario() {
259 when(versioningManager.checkin(anyString(), anyString(), anyString(), Matchers.any()))
260 .thenReturn(createVersion());
261 when(actionDao.get(any(ActionEntity.class))).thenReturn(createActionEntity());
262 Assert.assertNotNull(actionManager.checkin("invariantUuid", "user"));
263 Mockito.verify(actionDao, times(1)).update(Matchers.any(ActionEntity.class));
266 @Test(expected = ActionException.class)
267 public void testCheckinShouldShouldThrowExceptionInCaseOfAnyException() {
268 when(versioningManager.checkin(anyString(), anyString(), anyString(), Matchers.any()))
269 .thenThrow((new CoreException(new ErrorCode.ErrorCodeBuilder()
270 .withId(VersioningErrorCodes.CHECKIN_ON_UNLOCKED_ENTITY).build())));
271 actionManager.checkin("invariantUuid", "user");
275 public void testSubmitShouldPassForHappyScenario() {
276 when(versioningManager.submit(anyString(), anyString(), anyString(), Matchers.any()))
277 .thenReturn(createVersion());
278 when(actionDao.get(any(ActionEntity.class))).thenReturn(createActionEntity());
280 Assert.assertNotNull( actionManager.submit("invariantUuid", "user"));
282 Mockito.verify(actionDao, times(1)).update(Matchers.any(ActionEntity.class));
285 @Test(expected = ActionException.class)
286 public void testSubmitShouldThrowExceptionForAnyException() {
287 when(versioningManager.submit(anyString(), anyString(), anyString(), Matchers.any()))
288 .thenThrow((new CoreException(new ErrorCode.ErrorCodeBuilder()
289 .withId(VersioningErrorCodes.SUBMIT_FINALIZED_ENTITY_NOT_ALLOWED).build())));
290 actionManager.submit("invariantUuid", "user");
295 public void testDownloadArtifactShouldPassForHappyScenario() {
296 Action action = createAction();
297 action.setVersion("2.1");
298 when(actionDao.getActionsByActionUuId(anyString())).thenReturn(action);
299 when(actionArtifactDao.downloadArtifact(anyInt(), anyString())).thenReturn(new ActionArtifact());
300 Assert.assertNotNull(actionManager.downloadArtifact("actionUuId", "artifactUuId"));
303 @Test(expected = ActionException.class)
304 public void testDownloadArtifactShouldThrowExceptionIfActionIsNull() {
306 when(actionDao.getActionsByActionUuId(anyString())).thenReturn(null);
307 actionManager.downloadArtifact("actionUuId", "artifactUuId");
311 public void testUploadArtifactShouldPassForHappyScenario() {
312 ActionArtifact artifact = createActionArtifact();
313 artifact.setArtifactName("artifactNameToUpload");
314 VersionInfo versionInfo = createVersionInfo();
315 Version activeVersion = new Version("2.1");
316 versionInfo.setActiveVersion(activeVersion);
317 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
318 .thenReturn(versionInfo);
319 when(actionDao.get(any())).thenReturn(createActionEntity());
320 Assert.assertNotNull(actionManager.uploadArtifact(artifact, "actionInvariantUuId", "user"));
322 Mockito.verify(actionArtifactDao, times(1)).uploadArtifact(any(ActionArtifact.class));
323 Mockito.verify(actionDao, times(1)).updateAction(any(Action.class));
327 @Test(expected = ActionException.class)
328 public void testUploadArtifactShouldThrowExceptionIfArtifactAlreadyExist() {
329 ActionArtifact artifact = createActionArtifact();
330 VersionInfo versionInfo = createVersionInfo();
331 Version activeVersion = new Version("2.1");
332 versionInfo.setActiveVersion(activeVersion);
333 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
334 .thenReturn(versionInfo);
335 when(actionDao.get(any())).thenReturn(createActionEntity());
336 actionManager.uploadArtifact(artifact, "actionInvariantUuId", "user");
341 public void testDeleteArtifactShouldPassForHappyScenario() {
342 Action action = createAction();
343 action.setVersion("2.1");
344 action.getArtifacts().forEach(actionArtifact -> {
345 actionArtifact.setArtifactUuId("86B2B1049CC13B4E9275414DBB29485C");
346 actionArtifact.setArtifactProtection(ActionArtifactProtection.readWrite.name());
348 when(actionDao.getLockedAction(anyString(), anyString())).thenReturn(action);
349 actionManager.deleteArtifact("actionInvariantUuId", "86B2B1049CC13B4E9275414DBB29485C", "user" );
350 Mockito.verify(actionDao, times(1)).update(any(ActionEntity.class));
351 Mockito.verify(actionArtifactDao, times(1)).delete(any(ActionArtifactEntity.class));
354 @Test(expected = ActionException.class)
355 public void testDeleteArtifactShouldThrowExceptionIfArtifactMetaDataIsNull() {
356 when(actionDao.getLockedAction(anyString(), anyString())).thenReturn(createAction());
357 actionManager.deleteArtifact("actionInvariantUuId", "86B2B1049CC13B4E9275414DBB29485C", "user" );
361 public void testUpdateArtifactShouldPassForHappyScenario() {
362 ActionArtifact artifact = createActionArtifact();
363 VersionInfo versionInfo = createVersionInfo();
364 Version activeVersion = new Version("2.1");
365 versionInfo.setActiveVersion(activeVersion);
366 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
367 .thenReturn(versionInfo);
368 when(actionDao.get(any())).thenReturn(createActionEntity());
369 actionManager.updateArtifact(artifact, "actionInvariantUuId", "user");
370 Mockito.verify(actionArtifactDao, times(1)).updateArtifact(any(ActionArtifact.class));
373 @Test(expected = ActionException.class)
374 public void testUpdateArtifactShouldThrowExceptionIfArtifactNotExist() {
375 ActionArtifact artifact = createActionArtifact();
376 artifact.setArtifactUuId("Uuid");
377 VersionInfo versionInfo = createVersionInfo();
378 Version activeVersion = new Version("2.1");
379 versionInfo.setActiveVersion(activeVersion);
380 when(actionDao.get(any())).thenReturn(createActionEntity());
381 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
382 .thenReturn(versionInfo);
383 actionManager.updateArtifact(artifact, "actionInvariantUuId", "user");
386 private ActionArtifact createActionArtifact() {
387 ActionArtifact artifact = new ActionArtifact();
388 artifact.setArtifactUuId("artifactUuId");
389 artifact.setArtifactName("artifactName");
390 artifact.setArtifact(new byte[0]);
394 private List<Action> mockActionsToReturn() {
395 List<Action> actionList = new ArrayList<>();
396 Action action = new Action();
397 action.setActionInvariantUuId("uuid");
398 action.setVersion("1.1");
399 action.setStatus(ActionStatus.Available);
400 action.setData("action data");
401 actionList.add(action);
405 private VersionInfo createVersionInfo() {
406 VersionInfo versionInfo = new VersionInfo();
407 Version version = createVersion();
408 versionInfo.setActiveVersion(version);
409 versionInfo.setLatestFinalVersion(version);
413 private Version createVersion() {
414 Version version = new Version();
420 private ActionEntity createActionEntity() {
421 ActionEntity actionEntity = new ActionEntity();
422 actionEntity.setData("{actionUuId : actionUuId, actionInvariantUuId : actionInvariantUuId," +
423 " name : actionToupdate,version: 2.1 ," +
424 " artifacts : [{artifactUuId: artifactUuId ,artifactName : artifactName," +
425 "artifactLabel: artifactLabel, artifactProtection : readWrite, artifactCategory : artifactCategory," +
426 "artifactDescription: artifactDescription}] }");
427 actionEntity.setUser("user");
428 actionEntity.setTimestamp(new Date());
432 private Action createAction() {
433 Action action = new Action();
434 action.setActionUuId("uid");
435 action.setActionInvariantUuId("uuid");
436 action.setName("actionToupdate2");
437 action.setData("{actionInvariantUuId : actionInvariantUuId," +
438 " name : actionToupdate, artifacts : [{artifactName : artifactName}] }");
440 List<ActionArtifact> actionArtifacts = new ArrayList<>();
441 ActionArtifact actionArtifact = new ActionArtifact();
442 actionArtifact.setArtifactName("artifactName");
443 actionArtifact.setArtifactUuId("artifactUuId");
444 actionArtifacts.add(actionArtifact);
445 action.setArtifacts(actionArtifacts);
450 private VersionInfoEntity createVersionInfoEntity() {
451 VersionInfoEntity versionInfoEntity = new VersionInfoEntity();
452 UserCandidateVersion userCandidateVersion = new UserCandidateVersion();
453 userCandidateVersion.setUser("user");
454 userCandidateVersion.setVersion(createVersion());
455 versionInfoEntity.setCandidate(userCandidateVersion);
456 return versionInfoEntity;