1 package org.openecomp.sdc.vendorsoftwareproduct.impl;
4 import org.mockito.InjectMocks;
5 import org.mockito.Mock;
6 import org.mockito.MockitoAnnotations;
7 import org.mockito.Spy;
8 import org.openecomp.sdc.common.errors.CoreException;
9 import org.openecomp.sdc.vendorsoftwareproduct.CompositionEntityDataManager;
10 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
11 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
12 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
13 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
14 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
15 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
16 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
17 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
18 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
19 import org.openecomp.sdc.versioning.dao.types.Version;
20 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
21 import org.testng.Assert;
22 import org.testng.annotations.AfterMethod;
23 import org.testng.annotations.BeforeMethod;
24 import org.testng.annotations.Test;
26 import java.util.Arrays;
27 import java.util.Collection;
29 import static org.mockito.Matchers.anyObject;
30 import static org.mockito.Mockito.*;
32 public class ImageManagerImplTest {
34 private static final String IMAGE_NOT_EXIST_MSG =
35 "Vendor Software Product Image with Id image1 does not exist for Vendor Software Product with" +
36 " id VSP_ID and version 0.1";
38 private static final String VSP_ID = "VSP_ID";
39 private static final Version VERSION = new Version(0, 1);
40 private static final String COMPONENT_ID = "COMPONENT_ID";
41 private static final String IMAGE1_ID = "image1";
42 private static final String IMAGE2_ID = "image2";
45 private ImageDao imageDao;
47 private CompositionEntityDataManager compositionEntityDataManagerMock;
49 private VendorSoftwareProductInfoDao vspInfoDao;
52 private ImageManagerImpl imageManager;
55 public void setUp() throws Exception {
56 MockitoAnnotations.initMocks(this);
60 public void tearDown() {
66 public void testListWhenNone() {
67 final Collection<ImageEntity> imageEntities =
68 imageManager.listImages(VSP_ID, VERSION, COMPONENT_ID);
69 Assert.assertEquals(imageEntities.size(), 0);
73 public void testList() {
75 doReturn(Arrays.asList(
76 createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID),
77 createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE2_ID)))
78 .when(imageDao).list(anyObject());
81 final Collection<ImageEntity> images =
82 imageManager.listImages(VSP_ID, VERSION, COMPONENT_ID);
83 Assert.assertEquals(images.size(), 2);
84 for (ImageEntity image : images) {
85 Assert.assertEquals(image.getImageCompositionData().getFileName(),
86 IMAGE1_ID.equals(image.getId()) ? IMAGE1_ID + "_name" : IMAGE2_ID + "_name");
91 public void testCreateOnNotManualImage_negative() {
93 testCreate_negative(new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, null),
94 VendorSoftwareProductErrorCodes.ADD_IMAGE_NOT_ALLOWED_IN_HEAT_ONBOARDING);
98 public void testCreateManualImage() {
99 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
100 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
101 imageManager.createImage(expected);
102 verify(compositionEntityDataManagerMock).createImage(expected);
103 verify(compositionEntityDataManagerMock).createImage(expected);
107 public void testCreateManualImageWithDuplicateName() {
108 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
109 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
111 ImageEntity expectedDiffName = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
112 Image image = expectedDiffName.getImageCompositionData();
113 image.setFileName(IMAGE1_ID + "_Name");
114 expectedDiffName.setImageCompositionData(image);
115 List<ImageEntity> vfcImageList = new ArrayList<>();
116 vfcImageList.add(expectedDiffName);
117 doReturn(vfcImageList).when(imageDao).list(anyObject());
119 imageManager.createImage(expected);
121 } catch (CoreException ex) {
122 Assert.assertEquals(VendorSoftwareProductErrorCodes.DUPLICATE_IMAGE_NAME_NOT_ALLOWED,
128 public void testUpdateNonExistingImageId_negative() {
129 testUpdate_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID,
130 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
134 public void testUpdateImage() {
135 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
136 .when(imageDao).get(anyObject());
138 doReturn(new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID))
139 .when(compositionEntityDataManagerMock)
140 .validateEntity(anyObject(), anyObject(), anyObject());
142 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
143 Image imageData = new Image();
144 imageData.setFileName(IMAGE1_ID + "_name");
145 imageData.setDescription(IMAGE1_ID + " desc updated");
146 imageEntity.setImageCompositionData(imageData);
148 CompositionEntityValidationData validationData =
149 imageManager.updateImage(imageEntity);
150 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
151 verify(imageDao).update(imageEntity);
155 public void testIllegalImageUpdate() {
156 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
157 .when(imageDao).get(anyObject());
159 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
161 CompositionEntityValidationData toBeReturned =
162 new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID);
163 toBeReturned.setErrors(Arrays.asList("error1", "error2"));
164 doReturn(toBeReturned)
165 .when(compositionEntityDataManagerMock)
166 .validateEntity(anyObject(), anyObject(), anyObject());
168 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
169 Image imageData = new Image();
170 imageData.setFileName(IMAGE1_ID + "_name_updated");
171 imageData.setDescription(IMAGE1_ID + " desc updated");
172 imageEntity.setImageCompositionData(imageData);
174 CompositionEntityValidationData validationData = imageManager.updateImage(imageEntity);
175 Assert.assertNotNull(validationData);
176 Assert.assertEquals(validationData.getErrors().size(), 2);
178 verify(imageDao, never()).update(imageEntity);
182 public void testUpdateHEATImageFileName() throws Exception {
183 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
184 .when(imageDao).get(anyObject());
186 String updatedName = IMAGE1_ID +" name updated";
187 CompositionEntityValidationData toBeReturned =
188 new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID);
190 toBeReturned.setErrors(Arrays.asList("#/name: "+updatedName+" is not a valid value."+
191 IMAGE1_ID+"is the only possible value for this field"));
192 doReturn(toBeReturned).when(compositionEntityDataManagerMock).validateEntity(anyObject(),anyObject(),anyObject());
194 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
195 Image imageData = new Image();
196 imageData.setFileName(updatedName);
197 imageData.setDescription(IMAGE1_ID + " desc updated");
198 imageEntity.setImageCompositionData(imageData);
200 CompositionEntityValidationData output = imageManager.updateImage(imageEntity);
201 Assert.assertEquals(output.getErrors(), toBeReturned.getErrors());
206 public void testGetNonExistingImageId_negative() {
207 testGet_negative(VSP_ID, VERSION, COMPONENT_ID, "non existing image id",
208 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
212 public void testGet() {
213 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
214 doReturn(expected).when(imageDao).get(anyObject());
215 String compositionSchema = "schema string";
216 doReturn(compositionSchema).when(imageManager).getImageCompositionSchema(anyObject());
218 CompositionEntityResponse<Image> response =
219 imageManager.getImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
220 Assert.assertEquals(response.getId(), expected.getId());
221 Assert.assertEquals(response.getData().getFileName(), expected.getImageCompositionData().
223 Assert.assertEquals(response.getData().getDescription(), expected.getImageCompositionData().
225 Assert.assertEquals(response.getSchema(), compositionSchema);
229 public void testDeleteOnNotManualImage() {
230 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
231 doReturn(expected).when(imageDao).get(anyObject());
232 testDelete_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID,
233 VendorSoftwareProductErrorCodes.DELETE_IMAGE_NOT_ALLOWED);
237 public void testDeleteOnNotExistImage() {
238 testDelete_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID,
239 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
243 public void testDeleteOnManualImage() {
244 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
245 doReturn(expected).when(imageDao).get(anyObject());
246 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
247 imageManager.deleteImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
248 verify(imageDao).delete(anyObject());
252 public void testGetQuestionnaire() throws Exception {
253 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
254 image.setQuestionnaireData("{}");
255 doReturn(image).when(imageDao).getQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
257 String schema = "schema string";
258 doReturn(schema).when(imageManager).getImageQuestionnaireSchema(anyObject());
260 QuestionnaireResponse questionnaire =
261 imageManager.getImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
262 Assert.assertNotNull(questionnaire);
263 Assert.assertEquals(questionnaire.getData(), image.getQuestionnaireData());
264 Assert.assertEquals(questionnaire.getSchema(), schema);
265 Assert.assertNull(questionnaire.getErrorMessage());
269 public void testUpdateManualImageQuestionnaire() throws Exception {
270 String json = "{\"md5\" :\"FFDSD33SS\"}";
271 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
272 doReturn(new ImageEntity()).when(imageDao).get(anyObject());
274 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json);
275 verify(imageDao).updateQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json);
280 public void testUpdateManDupImageVerQuestionnaire() throws Exception {
282 String json = "{\"md5\" :\"FFDSD33SS\", \"version\" :\"1.0\"}";
283 ImageEntity imageEntity = new ImageEntity();
284 imageEntity.setId(IMAGE2_ID);
285 imageEntity.setQuestionnaireData(json);
286 List<ImageEntity> imageEntities = new ArrayList(){{
290 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
291 doReturn(imageEntity).when(imageDao).get(anyObject());
292 doReturn(imageEntities).when(imageDao).list(anyObject());
293 doReturn(imageEntities.get(0)).when(imageDao).getQuestionnaireData(anyObject(), anyObject(), anyObject(), anyObject());
295 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json);
297 } catch (CoreException exception) {
298 Assert.assertEquals(exception.code().id(), VendorSoftwareProductErrorCodes.DUPLICATE_IMAGE_VERSION_NOT_ALLOWED);
308 public void testUpdateHEATImageQuestionnaireWithFormat() throws Exception {
309 String json = "{\"format\" :\"qcow2\"}";
310 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
311 image.setQuestionnaireData(json);
312 doReturn(image).when(imageDao).get(anyObject());
314 doReturn(false).when(vspInfoDao).isManual(anyObject(), anyObject());
315 doReturn(image).when(imageDao).getQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
317 String updJson = "{\"format\" :\"aki\"}";
319 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, updJson);
321 } catch (CoreException ex) {
322 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED);
329 public void testUpdateHEATImageQuestionnaireWithInvalidFormat() throws Exception {
330 String json = "{\"format\" :\"qcow2\"}";
331 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
332 image.setQuestionnaireData(json);
333 doReturn(image).when(imageDao).get(anyObject());
335 String updJson = "{\"format\" :\"a22\"}";
337 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, updJson);
339 } catch (CoreException ex) {
340 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.VFC_IMAGE_INVALID_FORMAT);
344 private void testCreate_negative(ImageEntity image, String expectedErrorCode) {
346 imageManager.createImage(image);
348 } catch (CoreException exception) {
349 Assert.assertEquals(exception.code().id(), expectedErrorCode);
353 private void testDelete_negative(String vspId, Version version, String componentId, String nicId,
354 String expectedErrorCode) {
356 imageManager.deleteImage(vspId, version, componentId, nicId);
358 } catch (CoreException exception) {
359 Assert.assertEquals(exception.code().id(), expectedErrorCode);
363 private static ImageEntity createImage(String vspId, Version version, String compId,
365 ImageEntity imageEntity = new ImageEntity(vspId, version, compId, imageId);
366 Image imageData = new Image();
367 imageData.setFileName(imageId + "_name");
368 imageData.setDescription(imageId + " desc");
369 imageEntity.setImageCompositionData(imageData);
373 private void testUpdate_negative(String vspId, Version version, String componentId,
374 String imageId, String expectedErrorCode) {
376 imageManager.updateImage(new ImageEntity(vspId, version, componentId, imageId));
378 } catch (CoreException exception) {
379 Assert.assertEquals(exception.code().id(), expectedErrorCode);
383 private void testGet_negative(String vspId, Version version, String componentId, String imageId,
384 String expectedErrorCode) {
386 imageManager.getImage(vspId, version, componentId, imageId);
388 } catch (CoreException exception) {
389 Assert.assertEquals(exception.code().id(), expectedErrorCode);