1 package org.openecomp.sdc.vendorsoftwareproduct.impl;
4 import static org.mockito.Matchers.anyObject;
5 import static org.mockito.Mockito.doReturn;
7 import org.mockito.InjectMocks;
8 import org.mockito.Mock;
9 import org.mockito.MockitoAnnotations;
10 import org.mockito.Spy;
11 import org.openecomp.sdc.common.errors.CoreException;
12 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
16 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
17 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
18 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
19 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
20 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
21 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
22 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
23 import org.openecomp.sdc.versioning.dao.types.Version;
24 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
25 import org.testng.Assert;
26 import org.testng.annotations.BeforeMethod;
27 import org.testng.annotations.Test;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.List;
34 import static org.mockito.Mockito.never;
35 import static org.mockito.Mockito.verify;
37 public class ImageManagerImplTest {
39 private static final String IMAGE_NOT_EXIST_MSG =
40 "Vendor Software Product Image with Id image1 does not exist for Vendor Software Product with" +
42 "id VSP_ID and version 0.1";
44 private static final String USER = "imageTestUser";
45 private static final String VSP_ID = "VSP_ID";
46 private static final Version VERSION = new Version(0, 1);
47 private static final String COMPONENT_ID = "COMPONENT_ID";
48 private static final String IMAGE1_ID = "image1";
49 private static final String IMAGE2_ID = "image2";
52 private ImageDao imageDao;
54 private CompositionEntityDataManager compositionEntityDataManagerMock;
56 private VendorSoftwareProductInfoDao vspInfoDao;
59 private ImageManagerImpl imageManager;
62 public void setUp() throws Exception {
63 MockitoAnnotations.initMocks(this);
67 public void testListWhenNone() {
68 final Collection<ImageEntity> imageEntities =
69 imageManager.listImages(VSP_ID, VERSION, COMPONENT_ID, USER);
70 Assert.assertEquals(imageEntities.size(), 0);
74 public void testList() {
76 doReturn(Arrays.asList(
77 createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID),
78 createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE2_ID)))
79 .when(imageDao).list(anyObject());
82 final Collection<ImageEntity> images =
83 imageManager.listImages(VSP_ID, VERSION, COMPONENT_ID, USER);
84 Assert.assertEquals(images.size(), 2);
85 for (ImageEntity image : images) {
86 Assert.assertEquals(image.getImageCompositionData().getFileName(),
87 IMAGE1_ID.equals(image.getId()) ? IMAGE1_ID+" name" : IMAGE2_ID+" name" );
92 public void testCreateOnNotManualImage_negative() {
94 testCreate_negative(new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, null), USER,
95 VendorSoftwareProductErrorCodes.ADD_IMAGE_NOT_ALLOWED_IN_HEAT_ONBOARDING);
99 public void testCreateManualImage() {
100 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
101 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
102 imageManager.createImage(expected, USER);
103 verify(compositionEntityDataManagerMock).createImage(expected);
104 verify(compositionEntityDataManagerMock).createImage(expected);
108 public void testCreateManualImageWithDuplicateName() {
109 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
110 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
112 ImageEntity expectedDiffName = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
113 Image image = expectedDiffName.getImageCompositionData();
114 image.setFileName(IMAGE1_ID + " Name");
115 expectedDiffName.setImageCompositionData(image);
116 List<ImageEntity> vfcImageList = new ArrayList<ImageEntity>();
117 vfcImageList.add(expectedDiffName);
118 doReturn(vfcImageList).when(imageDao).list(anyObject());
120 imageManager.createImage(expected, USER);
123 catch (CoreException ex) {
124 Assert.assertEquals(VendorSoftwareProductErrorCodes.DUPLICATE_IMAGE_NAME_NOT_ALLOWED,
130 public void testUpdateNonExistingImageId_negative() {
131 testUpdate_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER,
132 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
136 public void testUpdateImage() {
137 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
138 .when(imageDao).get(anyObject());
140 doReturn(new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID))
141 .when(compositionEntityDataManagerMock)
142 .validateEntity(anyObject(), anyObject(), anyObject());
144 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
145 Image imageData = new Image();
146 imageData.setFileName(IMAGE1_ID + " name");
147 imageData.setDescription(IMAGE1_ID + " desc updated");
148 imageEntity.setImageCompositionData(imageData);
150 CompositionEntityValidationData validationData =
151 imageManager.updateImage(imageEntity, USER);
152 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
153 verify(imageDao).update(imageEntity);
157 public void testIllegalImageUpdate() {
158 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
159 .when(imageDao).get(anyObject());
161 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
163 CompositionEntityValidationData toBeReturned =
164 new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID);
165 toBeReturned.setErrors(Arrays.asList("error1", "error2"));
166 doReturn(toBeReturned)
167 .when(compositionEntityDataManagerMock)
168 .validateEntity(anyObject(), anyObject(), anyObject());
170 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
171 Image imageData = new Image();
172 imageData.setFileName(IMAGE1_ID + " name updated");
173 imageData.setDescription(IMAGE1_ID + " desc updated");
174 imageEntity.setImageCompositionData(imageData);
176 CompositionEntityValidationData validationData = imageManager.updateImage(imageEntity, USER);
177 Assert.assertNotNull(validationData);
178 Assert.assertEquals(validationData.getErrors().size(), 2);
180 verify(imageDao, never()).update(imageEntity);
184 public void testUpdateHEATImageFileName() throws Exception {
185 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
186 .when(imageDao).get(anyObject());
187 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
188 Image imageData = new Image();
189 imageData.setFileName(IMAGE1_ID + " name updated");
190 imageData.setDescription(IMAGE1_ID + " desc updated");
191 imageEntity.setImageCompositionData(imageData);
194 imageManager.updateImage(imageEntity, USER);
196 catch (CoreException ex) {
197 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED);
203 public void testGetNonExistingImageId_negative() {
204 testGet_negative(VSP_ID, VERSION, COMPONENT_ID, "non existing image id", USER,
205 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
209 public void testGet() {
210 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
211 doReturn(expected).when(imageDao).get(anyObject());
212 String compositionSchema = "schema string";
213 doReturn(compositionSchema).when(imageManager).getImageCompositionSchema(anyObject());
215 CompositionEntityResponse<Image> response =
216 imageManager.getImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER);
217 Assert.assertEquals(response.getId(), expected.getId());
218 Assert.assertEquals(response.getData().getFileName(), expected.getImageCompositionData().
220 Assert.assertEquals(response.getData().getDescription(), expected.getImageCompositionData().
222 Assert.assertEquals(response.getSchema(), compositionSchema);
226 public void testDeleteOnNotManualImage() {
227 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
228 doReturn(expected).when(imageDao).get(anyObject());
229 testDelete_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER,
230 VendorSoftwareProductErrorCodes.DELETE_IMAGE_NOT_ALLOWED);
234 public void testDeleteOnNotExistImage() {
235 testDelete_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER,
236 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
240 public void testDeleteOnManualImage() {
241 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
242 doReturn(expected).when(imageDao).get(anyObject());
243 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
244 imageManager.deleteImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER);
245 verify(imageDao).delete(anyObject());
249 public void testGetQuestionnaire() throws Exception {
250 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
251 image.setQuestionnaireData("{}");
252 doReturn(image).when(imageDao).getQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
254 String schema = "schema string";
255 doReturn(schema).when(imageManager).getImageQuestionnaireSchema(anyObject());
257 QuestionnaireResponse questionnaire =
258 imageManager.getImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER);
259 Assert.assertNotNull(questionnaire);
260 Assert.assertEquals(questionnaire.getData(), image.getQuestionnaireData());
261 Assert.assertEquals(questionnaire.getSchema(), schema);
262 Assert.assertNull(questionnaire.getErrorMessage());
266 public void testUpdateManualImageQuestionnaire() throws Exception {
267 String json = "{\"md5\" :\"FFDSD33SS\"}";
268 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
269 doReturn(new ImageEntity()).when(imageDao).get(anyObject());
271 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json, USER);
272 verify(imageDao).updateQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json);
276 public void testUpdateHEATImageQuestionnaireWithFormat() throws Exception {
277 String json = "{\"format\" :\"qcow2\"}";
278 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
279 image.setQuestionnaireData(json);
280 doReturn(image).when(imageDao).get(anyObject());
282 doReturn(false).when(vspInfoDao).isManual(anyObject(), anyObject());
283 doReturn(image).when(imageDao).getQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
285 String updJson = "{\"format\" :\"aki\"}";
287 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, updJson,
291 catch(CoreException ex) {
292 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED);
297 public void testUpdateHEATImageQuestionnaireWithInvalidFormat() throws Exception {
298 String json = "{\"format\" :\"qcow2\"}";
299 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
300 image.setQuestionnaireData(json);
301 doReturn(image).when(imageDao).get(anyObject());
303 String updJson = "{\"format\" :\"a22\"}";
305 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, updJson,
309 catch(CoreException ex) {
310 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.VFC_IMAGE_INVALID_FORMAT);
314 private void testList_negative(String vspId, Version version, String componentId, String user,
315 String expectedErrorCode, String expectedErrorMsg) {
317 imageManager.listImages(vspId, version, componentId, user);
319 } catch (CoreException exception) {
320 Assert.assertEquals(exception.code().id(), expectedErrorCode);
321 Assert.assertEquals(exception.getMessage(), expectedErrorMsg);
325 private void testCreate_negative(ImageEntity image, String user, String expectedErrorCode) {
327 imageManager.createImage(image, user);
329 } catch (CoreException exception) {
330 Assert.assertEquals(exception.code().id(), expectedErrorCode);
334 private void testDelete_negative(String vspId, Version version, String componentId, String nicId,
336 String expectedErrorCode) {
338 imageManager.deleteImage(vspId, version, componentId, nicId, user);
340 } catch (CoreException exception) {
341 Assert.assertEquals(exception.code().id(), expectedErrorCode);
345 static ImageEntity createImage(String vspId, Version version, String compId, String imageId) {
346 ImageEntity imageEntity = new ImageEntity(vspId, version, compId, imageId);
347 Image imageData = new Image();
348 imageData.setFileName(imageId + " name");
349 imageData.setDescription(imageId + " desc");
350 imageEntity.setImageCompositionData(imageData);
354 private void testUpdate_negative(String vspId, Version version, String componentId, String
355 imageId, String user, String expectedErrorCode) {
357 imageManager.updateImage(new ImageEntity(vspId, version, componentId, imageId), user);
359 } catch (CoreException exception) {
360 Assert.assertEquals(exception.code().id(), expectedErrorCode);
364 private void testGet_negative(String vspId, Version version, String componentId, String imageId,
365 String user, String expectedErrorCode) {
367 imageManager.getImage(vspId, version, componentId, imageId, user);
369 } catch (CoreException exception) {
370 Assert.assertEquals(exception.code().id(), expectedErrorCode);