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.core.utilities.json.JsonUtil;
9 import org.openecomp.sdc.common.errors.CoreException;
10 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
11 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
12 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
18 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
19 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
20 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
21 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
22 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
23 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
24 import org.openecomp.sdc.versioning.dao.types.Version;
25 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
26 import org.testng.Assert;
27 import org.testng.annotations.BeforeMethod;
28 import org.testng.annotations.Test;
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.Collection;
33 import java.util.List;
35 import static org.mockito.Matchers.anyObject;
36 import static org.mockito.Mockito.doReturn;
37 import static org.mockito.Mockito.verify;
39 public class DeploymentFlavorManagerImplTest {
40 private static final String VSP_ID = "VSP_ID";
41 private static final Version VERSION = new Version("version_id");
42 private static final String COMPONENT_ID = "COMPONENT_ID";
43 private static final String DF1_ID = "df1";
44 private static final String DF2_ID = "df2";
47 private CompositionEntityDataManager compositionEntityDataManagerMock;
49 private VendorSoftwareProductInfoDao vspInfoDao;
51 private DeploymentFlavorDao deploymentFlavorDaoMock;
53 private ComponentDao componentDaoMock;
55 private ComputeDao computeDaoMock;
58 private DeploymentFlavorManagerImpl deploymentFlavorManager;
61 public void setUp() throws Exception {
62 MockitoAnnotations.initMocks(this);
66 public void testListWhenNone() {
67 final Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
68 deploymentFlavorManager.listDeploymentFlavors(VSP_ID, VERSION);
69 Assert.assertEquals(deploymentFlavorEntities.size(), 0);
73 public void testCreateOnNotManual_negative() {
75 testCreate_negative(new DeploymentFlavorEntity(VSP_ID, VERSION, null),
76 VendorSoftwareProductErrorCodes.CREATE_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
80 public void testCreateManualDepFlavor() {
81 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
82 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
84 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
85 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
87 deploymentFlavorManager.createDeploymentFlavor(expected);
88 verify(compositionEntityDataManagerMock).createDeploymentFlavor(expected);
92 public void testCreateManualDepFlavorWithDuplicateName() {
93 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
94 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
96 DeploymentFlavorEntity expectedDiffName = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
97 DeploymentFlavor deploymentFlavor = expectedDiffName.getDeploymentFlavorCompositionData();
98 deploymentFlavor.setModel(DF1_ID + "Name");
99 expectedDiffName.setDeploymentFlavorCompositionData(deploymentFlavor);
100 List<DeploymentFlavorEntity> list = new ArrayList<>();
101 list.add(expectedDiffName);
102 doReturn(list).when(deploymentFlavorDaoMock).list(anyObject());
105 deploymentFlavorManager.createDeploymentFlavor(expected);
107 } catch (CoreException ex) {
109 VendorSoftwareProductErrorCodes.DUPLICATE_DEPLOYMENT_FLAVOR_MODEL_NOT_ALLOWED,
115 public void testCreateManualDepFlavorWithFGNotInVSP() {
116 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
117 final DeploymentFlavor deploymentFlavor =
118 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
119 deploymentFlavor.setFeatureGroupId("fg3");
120 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
122 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
124 List<String> featureGrps = new ArrayList<>();
125 featureGrps.add("fg1");
126 featureGrps.add("fg2");
128 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
129 vspDetails.setFeatureGroups(featureGrps);
130 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
134 deploymentFlavorManager.createDeploymentFlavor(expected);
136 } catch (CoreException ex) {
137 Assert.assertEquals(VendorSoftwareProductErrorCodes.FEATURE_GROUP_NOT_EXIST_FOR_VSP,
143 public void testCreateManualDepFlavorWithNullCompInAssociation() {
144 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
145 final DeploymentFlavor deploymentFlavor =
146 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
147 ComponentComputeAssociation association = new ComponentComputeAssociation();
148 association.setComponentId(null);
149 association.setComputeFlavorId("CF1");
150 List<ComponentComputeAssociation> list = new ArrayList<>();
151 list.add(association);
152 deploymentFlavor.setComponentComputeAssociations(list);
153 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
155 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
157 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
158 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
161 deploymentFlavorManager.createDeploymentFlavor(expected);
162 } catch (CoreException ex) {
163 Assert.assertEquals(VendorSoftwareProductErrorCodes.INVALID_COMPONENT_COMPUTE_ASSOCIATION,
166 "Invalid request,for valid association please provide ComponentId for Compute Flavor",
172 public void testCreateManualDepFlavorWithInvalidComputeInAssociation() {
173 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
174 final DeploymentFlavor deploymentFlavor =
175 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
176 ComponentComputeAssociation association = new ComponentComputeAssociation();
177 association.setComponentId(COMPONENT_ID);
178 association.setComputeFlavorId("CF1");
179 List<ComponentComputeAssociation> list = new ArrayList<>();
180 list.add(association);
181 deploymentFlavor.setComponentComputeAssociations(list);
182 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
184 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
186 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
187 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
189 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, null);
190 doReturn(component).when(componentDaoMock).get(anyObject());
192 doReturn(null).when(computeDaoMock).get(anyObject());
195 deploymentFlavorManager.createDeploymentFlavor(expected);
196 } catch (CoreException ex) {
197 Assert.assertEquals(VendorSoftwareProductErrorCodes.INVALID_COMPUTE_FLAVOR_ID,
203 public void testCreateManualDepFlavorWithDuplicateVfcAssociation() {
204 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
205 final DeploymentFlavor deploymentFlavor =
206 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
207 ComponentComputeAssociation association = new ComponentComputeAssociation();
208 association.setComponentId(COMPONENT_ID);
209 association.setComputeFlavorId("CF1");
210 List<ComponentComputeAssociation> list = new ArrayList<>();
211 list.add(association);
212 list.add(association);
213 deploymentFlavor.setComponentComputeAssociations(list);
214 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
216 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
218 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
219 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
221 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, null);
222 doReturn(component).when(componentDaoMock).get(anyObject());
224 ComputeEntity computeEntity = new ComputeEntity(VSP_ID, VERSION, COMPONENT_ID, "CF1");
225 doReturn(computeEntity).when(computeDaoMock).get(anyObject());
228 deploymentFlavorManager.createDeploymentFlavor(expected);
229 } catch (CoreException ex) {
231 VendorSoftwareProductErrorCodes.SAME_VFC_ASSOCIATION_MORE_THAN_ONCE_NOT_ALLOWED,
237 public void testList() {
239 doReturn(Arrays.asList(
240 createDeploymentFlavor(VSP_ID, VERSION, DF1_ID),
241 createDeploymentFlavor(VSP_ID, VERSION, DF2_ID)))
242 .when(deploymentFlavorDaoMock).list(anyObject());
245 final Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
246 deploymentFlavorManager.listDeploymentFlavors(VSP_ID, VERSION);
247 Assert.assertEquals(deploymentFlavorEntities.size(), 2);
248 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
249 Assert.assertEquals(deploymentFlavorEntity.getDeploymentFlavorCompositionData().getModel()
250 , DF1_ID.equals(deploymentFlavorEntity.getId()) ? DF1_ID + "name" : DF2_ID + "name");
255 public void testUpdateHeatDepFlavor() {
256 testUpdate_negative(VSP_ID, VERSION, DF1_ID,
257 VendorSoftwareProductErrorCodes.EDIT_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
261 public void testUpdateNonExistingManualDepFlavorId_negative() {
262 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
263 testUpdate_negative(VSP_ID, VERSION, DF1_ID,
264 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
268 public void testManualUpdateDepFlavor() {
269 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
271 doReturn(createDeploymentFlavor(VSP_ID, VERSION, DF1_ID))
272 .when(deploymentFlavorDaoMock).get(anyObject());
274 doReturn(new CompositionEntityValidationData(CompositionEntityType.image, DF1_ID))
275 .when(compositionEntityDataManagerMock)
276 .validateEntity(anyObject(), anyObject(), anyObject());
278 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
279 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
281 DeploymentFlavorEntity deploymentFlavorEntity =
282 new DeploymentFlavorEntity(VSP_ID, VERSION, DF1_ID);
283 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
284 deploymentFlavor.setModel(DF1_ID + "_name");
285 deploymentFlavor.setDescription(DF1_ID + " desc updated");
286 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
288 CompositionEntityValidationData validationData =
289 deploymentFlavorManager.updateDeploymentFlavor(deploymentFlavorEntity);
290 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
291 verify(deploymentFlavorDaoMock).update(deploymentFlavorEntity);
295 public void testGetNonExistingDepFlavorId_negative() {
296 testGet_negative(VSP_ID, VERSION, "non existing image id",
297 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
302 public void testGet() {
303 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
304 doReturn(expected).when(deploymentFlavorDaoMock).get(anyObject());
306 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
307 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
309 CompositionEntityResponse<DeploymentFlavor> response =
310 deploymentFlavorManager.getDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
311 Assert.assertEquals(response.getId(), expected.getId());
313 .assertEquals(response.getData().getModel(), expected.getDeploymentFlavorCompositionData().
315 Assert.assertEquals(response.getData().getDescription(),
316 expected.getDeploymentFlavorCompositionData().
321 public void testDeleteDepFlavorOnHEAT() {
322 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
323 doReturn(expected).when(deploymentFlavorDaoMock).get(anyObject());
324 testDelete_negative(VSP_ID, VERSION, DF1_ID,
325 VendorSoftwareProductErrorCodes.DELETE_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
329 public void testDeleteOnNotExistImage() {
330 testDelete_negative(VSP_ID, VERSION, DF1_ID,
331 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
335 public void testDeleteOnManualImage() {
336 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
337 doReturn(expected).when(deploymentFlavorDaoMock).get(anyObject());
338 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
339 deploymentFlavorManager.deleteDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
340 verify(deploymentFlavorDaoMock).delete(anyObject());
343 private void testCreate_negative(DeploymentFlavorEntity deploymentFlavorEntity,
344 String expectedErrorCode) {
346 deploymentFlavorManager.createDeploymentFlavor(deploymentFlavorEntity);
348 } catch (CoreException exception) {
349 Assert.assertEquals(exception.code().id(), expectedErrorCode);
353 private void testDelete_negative(String vspId, Version version, String deploymentFlavorId,
354 String expectedErrorCode) {
356 deploymentFlavorManager.deleteDeploymentFlavor(vspId, version, deploymentFlavorId);
358 } catch (CoreException exception) {
359 Assert.assertEquals(exception.code().id(), expectedErrorCode);
363 private static DeploymentFlavorEntity createDeploymentFlavor(String vspId, Version version,
364 String deploymentFlavorId) {
366 DeploymentFlavorEntity deploymentFlavorEntity =
367 new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
368 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
369 deploymentFlavor.setModel(deploymentFlavorId + "name");
370 deploymentFlavor.setDescription(deploymentFlavorId + " desc");
372 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
373 return deploymentFlavorEntity;
376 private void testUpdate_negative(String vspId, Version version, String deploymentFlavorId,
377 String expectedErrorCode) {
379 DeploymentFlavorEntity deploymentFlavorEntity =
380 new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
381 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
382 deploymentFlavor.setModel("Name");
383 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
384 deploymentFlavorManager
385 .updateDeploymentFlavor(new DeploymentFlavorEntity(vspId, version, deploymentFlavorId));
387 } catch (CoreException exception) {
388 Assert.assertEquals(exception.code().id(), expectedErrorCode);
392 private void testGet_negative(String vspId, Version version, String deploymentFlavorId,
393 String expectedErrorCode) {
395 deploymentFlavorManager.getDeploymentFlavor(vspId, version, deploymentFlavorId);
397 } catch (CoreException exception) {
398 Assert.assertEquals(exception.code().id(), expectedErrorCode);