1 package org.openecomp.sdc.vendorsoftwareproduct.impl;
4 import static org.mockito.Matchers.anyObject;
5 import static org.mockito.Mockito.doReturn;
6 import static org.mockito.Mockito.never;
7 import static org.mockito.Mockito.verify;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.MockitoAnnotations;
12 import org.mockito.Spy;
13 import org.openecomp.sdc.common.errors.CoreException;
14 import org.openecomp.sdc.logging.api.Logger;
15 import org.openecomp.sdc.logging.api.LoggerFactory;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
18 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
19 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
20 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
21 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
22 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
23 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
24 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
25 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
26 import org.openecomp.sdc.versioning.dao.types.Version;
27 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
28 import org.testng.Assert;
29 import org.testng.annotations.BeforeMethod;
30 import org.testng.annotations.Test;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.Collection;
35 import java.util.List;
37 public class ImageManagerImplTest {
39 private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
41 private static final String IMAGE_NOT_EXIST_MSG =
42 "Vendor Software Product Image with Id image1 does not exist for Vendor Software Product with" +
44 "id VSP_ID and version 0.1";
46 private static final String USER = "imageTestUser";
47 private static final String VSP_ID = "VSP_ID";
48 private static final Version VERSION = new Version(0, 1);
49 private static final String COMPONENT_ID = "COMPONENT_ID";
50 private static final String IMAGE1_ID = "image1";
51 private static final String IMAGE2_ID = "image2";
54 private ImageDao imageDao;
56 private CompositionEntityDataManager compositionEntityDataManagerMock;
58 private VendorSoftwareProductInfoDao vspInfoDao;
61 private ImageManagerImpl imageManager;
64 public void setUp() throws Exception {
65 MockitoAnnotations.initMocks(this);
69 public void testListWhenNone() {
70 final Collection<ImageEntity> imageEntities =
71 imageManager.listImages(VSP_ID, VERSION, COMPONENT_ID, USER);
72 Assert.assertEquals(imageEntities.size(), 0);
76 public void testList() {
78 doReturn(Arrays.asList(
79 createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID),
80 createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE2_ID)))
81 .when(imageDao).list(anyObject());
84 final Collection<ImageEntity> images =
85 imageManager.listImages(VSP_ID, VERSION, COMPONENT_ID, USER);
86 Assert.assertEquals(images.size(), 2);
87 for (ImageEntity image : images) {
88 Assert.assertEquals(image.getImageCompositionData().getFileName(),
89 IMAGE1_ID.equals(image.getId()) ? IMAGE1_ID+"_name" : IMAGE2_ID+"_name" );
94 public void testCreateOnNotManualImage_negative() {
96 testCreate_negative(new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, null), USER,
97 VendorSoftwareProductErrorCodes.ADD_IMAGE_NOT_ALLOWED_IN_HEAT_ONBOARDING);
101 public void testCreateManualImage() {
102 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
103 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
104 imageManager.createImage(expected, USER);
105 verify(compositionEntityDataManagerMock).createImage(expected);
106 verify(compositionEntityDataManagerMock).createImage(expected);
110 public void testCreateManualImageWithDuplicateName() {
111 ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
112 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
114 ImageEntity expectedDiffName = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
115 Image image = expectedDiffName.getImageCompositionData();
116 image.setFileName(IMAGE1_ID + "_Name");
117 expectedDiffName.setImageCompositionData(image);
118 List<ImageEntity> vfcImageList = new ArrayList<ImageEntity>();
119 vfcImageList.add(expectedDiffName);
120 doReturn(vfcImageList).when(imageDao).list(anyObject());
122 imageManager.createImage(expected, USER);
125 catch (CoreException ex) {
126 Assert.assertEquals(VendorSoftwareProductErrorCodes.DUPLICATE_IMAGE_NAME_NOT_ALLOWED,
132 public void testUpdateNonExistingImageId_negative() {
133 testUpdate_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER,
134 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
138 public void testUpdateImage() {
139 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
140 .when(imageDao).get(anyObject());
142 doReturn(new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID))
143 .when(compositionEntityDataManagerMock)
144 .validateEntity(anyObject(), anyObject(), anyObject());
146 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
147 Image imageData = new Image();
148 imageData.setFileName(IMAGE1_ID + "_name");
149 imageData.setDescription(IMAGE1_ID + " desc updated");
150 imageEntity.setImageCompositionData(imageData);
152 CompositionEntityValidationData validationData =
153 imageManager.updateImage(imageEntity, USER);
154 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
155 verify(imageDao).update(imageEntity);
159 public void testIllegalImageUpdate() {
160 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
161 .when(imageDao).get(anyObject());
163 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
165 CompositionEntityValidationData toBeReturned =
166 new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID);
167 toBeReturned.setErrors(Arrays.asList("error1", "error2"));
168 doReturn(toBeReturned)
169 .when(compositionEntityDataManagerMock)
170 .validateEntity(anyObject(), anyObject(), anyObject());
172 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
173 Image imageData = new Image();
174 imageData.setFileName(IMAGE1_ID + "_name_updated");
175 imageData.setDescription(IMAGE1_ID + " desc updated");
176 imageEntity.setImageCompositionData(imageData);
178 CompositionEntityValidationData validationData = imageManager.updateImage(imageEntity, USER);
179 Assert.assertNotNull(validationData);
180 Assert.assertEquals(validationData.getErrors().size(), 2);
182 verify(imageDao, never()).update(imageEntity);
186 public void testUpdateHEATImageFileName() throws Exception {
187 doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
188 .when(imageDao).get(anyObject());
189 ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
190 Image imageData = new Image();
191 imageData.setFileName(IMAGE1_ID + " name updated");
192 imageData.setDescription(IMAGE1_ID + " desc updated");
193 imageEntity.setImageCompositionData(imageData);
196 imageManager.updateImage(imageEntity, USER);
198 catch (CoreException ex) {
200 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED);
206 public void testGetNonExistingImageId_negative() {
207 testGet_negative(VSP_ID, VERSION, COMPONENT_ID, "non existing image id", USER,
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, USER);
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, USER,
233 VendorSoftwareProductErrorCodes.DELETE_IMAGE_NOT_ALLOWED);
237 public void testDeleteOnNotExistImage() {
238 testDelete_negative(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, USER,
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, USER);
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, USER);
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());
273 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json, USER);
274 verify(imageDao).updateQuestionnaireData(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json);
279 public void testUpdateManDupImageVerQuestionnaire() throws Exception {
281 String json = "{\"md5\" :\"FFDSD33SS\", \"version\" :\"1.0\"}";
282 ImageEntity imageEntity = new ImageEntity();
283 imageEntity.setId(IMAGE2_ID);
284 imageEntity.setQuestionnaireData(json);
285 List<ImageEntity> imageEntities = new ArrayList(){{
289 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
290 doReturn(imageEntity).when(imageDao).get(anyObject());
291 doReturn(imageEntities).when(imageDao).list(anyObject());
292 doReturn(imageEntities.get(0)).when(imageDao).getQuestionnaireData(anyObject(), anyObject(), anyObject(), anyObject());
294 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, json, USER);
296 } catch (CoreException exception) {
297 log.debug("",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,
323 catch(CoreException ex) {
325 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED);
332 public void testUpdateHEATImageQuestionnaireWithInvalidFormat() throws Exception {
333 String json = "{\"format\" :\"qcow2\"}";
334 ImageEntity image = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
335 image.setQuestionnaireData(json);
336 doReturn(image).when(imageDao).get(anyObject());
338 String updJson = "{\"format\" :\"a22\"}";
340 imageManager.updateImageQuestionnaire(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID, updJson,
344 catch(CoreException ex) {
346 Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.VFC_IMAGE_INVALID_FORMAT);
350 private void testList_negative(String vspId, Version version, String componentId, String user,
351 String expectedErrorCode, String expectedErrorMsg) {
353 imageManager.listImages(vspId, version, componentId, user);
355 } catch (CoreException exception) {
356 log.debug("",exception);
357 Assert.assertEquals(exception.code().id(), expectedErrorCode);
358 Assert.assertEquals(exception.getMessage(), expectedErrorMsg);
362 private void testCreate_negative(ImageEntity image, String user, String expectedErrorCode) {
364 imageManager.createImage(image, user);
366 } catch (CoreException exception) {
367 log.debug("",exception);
368 Assert.assertEquals(exception.code().id(), expectedErrorCode);
372 private void testDelete_negative(String vspId, Version version, String componentId, String nicId,
374 String expectedErrorCode) {
376 imageManager.deleteImage(vspId, version, componentId, nicId, user);
378 } catch (CoreException exception) {
379 log.debug("",exception);
380 Assert.assertEquals(exception.code().id(), expectedErrorCode);
384 static ImageEntity createImage(String vspId, Version version, String compId, String imageId) {
385 ImageEntity imageEntity = new ImageEntity(vspId, version, compId, imageId);
386 Image imageData = new Image();
387 imageData.setFileName(imageId + "_name");
388 imageData.setDescription(imageId + " desc");
389 imageEntity.setImageCompositionData(imageData);
393 private void testUpdate_negative(String vspId, Version version, String componentId, String
394 imageId, String user, String expectedErrorCode) {
396 imageManager.updateImage(new ImageEntity(vspId, version, componentId, imageId), user);
398 } catch (CoreException exception) {
399 log.debug("",exception);
400 Assert.assertEquals(exception.code().id(), expectedErrorCode);
404 private void testGet_negative(String vspId, Version version, String componentId, String imageId,
405 String user, String expectedErrorCode) {
407 imageManager.getImage(vspId, version, componentId, imageId, user);
409 } catch (CoreException exception) {
410 Assert.assertEquals(exception.code().id(), expectedErrorCode);