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.AfterMethod;
28 import org.testng.annotations.BeforeMethod;
29 import org.testng.annotations.Test;
31 import java.util.ArrayList;
32 import java.util.Arrays;
33 import java.util.Collection;
34 import java.util.List;
36 import static org.mockito.Matchers.anyObject;
37 import static org.mockito.Mockito.doReturn;
38 import static org.mockito.Mockito.verify;
40 public class DeploymentFlavorManagerImplTest {
41 private static final String VSP_ID = "VSP_ID";
42 private static final Version VERSION = new Version("version_id");
43 private static final String COMPONENT_ID = "COMPONENT_ID";
44 private static final String DF1_ID = "df1";
45 private static final String DF2_ID = "df2";
48 private CompositionEntityDataManager compositionEntityDataManagerMock;
50 private VendorSoftwareProductInfoDao vspInfoDao;
52 private DeploymentFlavorDao deploymentFlavorDaoMock;
54 private ComponentDao componentDaoMock;
56 private ComputeDao computeDaoMock;
59 private DeploymentFlavorManagerImpl deploymentFlavorManager;
62 public void setUp() throws Exception {
63 MockitoAnnotations.initMocks(this);
67 public void tearDown() {
68 deploymentFlavorManager = null;
72 public void testListWhenNone() {
73 final Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
74 deploymentFlavorManager.listDeploymentFlavors(VSP_ID, VERSION);
75 Assert.assertEquals(deploymentFlavorEntities.size(), 0);
79 public void testCreateOnNotManual_negative() {
81 testCreate_negative(new DeploymentFlavorEntity(VSP_ID, VERSION, null),
82 VendorSoftwareProductErrorCodes.CREATE_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
86 public void testCreateManualDepFlavor() {
87 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
88 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
90 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
91 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
93 deploymentFlavorManager.createDeploymentFlavor(expected);
94 verify(compositionEntityDataManagerMock).createDeploymentFlavor(expected);
98 public void testCreateManualDepFlavorWithDuplicateName() {
99 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
100 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
102 DeploymentFlavorEntity expectedDiffName = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
103 DeploymentFlavor deploymentFlavor = expectedDiffName.getDeploymentFlavorCompositionData();
104 deploymentFlavor.setModel(DF1_ID + "Name");
105 expectedDiffName.setDeploymentFlavorCompositionData(deploymentFlavor);
106 List<DeploymentFlavorEntity> list = new ArrayList<>();
107 list.add(expectedDiffName);
108 doReturn(list).when(deploymentFlavorDaoMock).list(anyObject());
111 deploymentFlavorManager.createDeploymentFlavor(expected);
113 } catch (CoreException ex) {
115 VendorSoftwareProductErrorCodes.DUPLICATE_DEPLOYMENT_FLAVOR_MODEL_NOT_ALLOWED,
121 public void testCreateManualDepFlavorWithFGNotInVSP() {
122 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
123 final DeploymentFlavor deploymentFlavor =
124 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
125 deploymentFlavor.setFeatureGroupId("fg3");
126 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
128 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
130 List<String> featureGrps = new ArrayList<>();
131 featureGrps.add("fg1");
132 featureGrps.add("fg2");
134 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
135 vspDetails.setFeatureGroups(featureGrps);
136 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
140 deploymentFlavorManager.createDeploymentFlavor(expected);
142 } catch (CoreException ex) {
143 Assert.assertEquals(VendorSoftwareProductErrorCodes.FEATURE_GROUP_NOT_EXIST_FOR_VSP,
149 public void testCreateManualDepFlavorWithNullCompInAssociation() {
150 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
151 final DeploymentFlavor deploymentFlavor =
152 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
153 ComponentComputeAssociation association = new ComponentComputeAssociation();
154 association.setComponentId(null);
155 association.setComputeFlavorId("CF1");
156 List<ComponentComputeAssociation> list = new ArrayList<>();
157 list.add(association);
158 deploymentFlavor.setComponentComputeAssociations(list);
159 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
161 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
163 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
164 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
167 deploymentFlavorManager.createDeploymentFlavor(expected);
168 } catch (CoreException ex) {
169 Assert.assertEquals(VendorSoftwareProductErrorCodes.INVALID_COMPONENT_COMPUTE_ASSOCIATION,
172 "Invalid request,for valid association please provide ComponentId for Compute Flavor",
178 public void testCreateManualDepFlavorWithInvalidComputeInAssociation() {
179 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
180 final DeploymentFlavor deploymentFlavor =
181 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
182 ComponentComputeAssociation association = new ComponentComputeAssociation();
183 association.setComponentId(COMPONENT_ID);
184 association.setComputeFlavorId("CF1");
185 List<ComponentComputeAssociation> list = new ArrayList<>();
186 list.add(association);
187 deploymentFlavor.setComponentComputeAssociations(list);
188 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
190 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
192 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
193 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
195 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, null);
196 doReturn(component).when(componentDaoMock).get(anyObject());
198 doReturn(null).when(computeDaoMock).get(anyObject());
201 deploymentFlavorManager.createDeploymentFlavor(expected);
202 } catch (CoreException ex) {
203 Assert.assertEquals(VendorSoftwareProductErrorCodes.INVALID_COMPUTE_FLAVOR_ID,
209 public void testCreateManualDepFlavorWithDuplicateVfcAssociation() {
210 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
211 final DeploymentFlavor deploymentFlavor =
212 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
213 ComponentComputeAssociation association = new ComponentComputeAssociation();
214 association.setComponentId(COMPONENT_ID);
215 association.setComputeFlavorId("CF1");
216 List<ComponentComputeAssociation> list = new ArrayList<>();
217 list.add(association);
218 list.add(association);
219 deploymentFlavor.setComponentComputeAssociations(list);
220 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
222 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
224 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
225 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
227 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, null);
228 doReturn(component).when(componentDaoMock).get(anyObject());
230 ComputeEntity computeEntity = new ComputeEntity(VSP_ID, VERSION, COMPONENT_ID, "CF1");
231 doReturn(computeEntity).when(computeDaoMock).get(anyObject());
234 deploymentFlavorManager.createDeploymentFlavor(expected);
235 } catch (CoreException ex) {
237 VendorSoftwareProductErrorCodes.SAME_VFC_ASSOCIATION_MORE_THAN_ONCE_NOT_ALLOWED,
243 public void testList() {
245 doReturn(Arrays.asList(
246 createDeploymentFlavor(VSP_ID, VERSION, DF1_ID),
247 createDeploymentFlavor(VSP_ID, VERSION, DF2_ID)))
248 .when(deploymentFlavorDaoMock).list(anyObject());
251 final Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
252 deploymentFlavorManager.listDeploymentFlavors(VSP_ID, VERSION);
253 Assert.assertEquals(deploymentFlavorEntities.size(), 2);
254 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
255 Assert.assertEquals(deploymentFlavorEntity.getDeploymentFlavorCompositionData().getModel()
256 , DF1_ID.equals(deploymentFlavorEntity.getId()) ? DF1_ID + "name" : DF2_ID + "name");
261 public void testUpdateHeatDepFlavor() {
262 testUpdate_negative(VSP_ID, VERSION, DF1_ID,
263 VendorSoftwareProductErrorCodes.EDIT_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
267 public void testUpdateNonExistingManualDepFlavorId_negative() {
268 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
269 testUpdate_negative(VSP_ID, VERSION, DF1_ID,
270 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
274 public void testManualUpdateDepFlavor() {
275 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
277 doReturn(createDeploymentFlavor(VSP_ID, VERSION, DF1_ID))
278 .when(deploymentFlavorDaoMock).get(anyObject());
280 doReturn(new CompositionEntityValidationData(CompositionEntityType.image, DF1_ID))
281 .when(compositionEntityDataManagerMock)
282 .validateEntity(anyObject(), anyObject(), anyObject());
284 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
285 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
287 DeploymentFlavorEntity deploymentFlavorEntity =
288 new DeploymentFlavorEntity(VSP_ID, VERSION, DF1_ID);
289 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
290 deploymentFlavor.setModel(DF1_ID + "_name");
291 deploymentFlavor.setDescription(DF1_ID + " desc updated");
292 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
294 CompositionEntityValidationData validationData =
295 deploymentFlavorManager.updateDeploymentFlavor(deploymentFlavorEntity);
296 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
297 verify(deploymentFlavorDaoMock).update(deploymentFlavorEntity);
301 public void testGetNonExistingDepFlavorId_negative() {
302 testGet_negative(VSP_ID, VERSION, "non existing image id",
303 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
308 public void testGet() {
309 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
310 doReturn(expected).when(deploymentFlavorDaoMock).get(anyObject());
312 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
313 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
315 CompositionEntityResponse<DeploymentFlavor> response =
316 deploymentFlavorManager.getDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
317 Assert.assertEquals(response.getId(), expected.getId());
319 .assertEquals(response.getData().getModel(), expected.getDeploymentFlavorCompositionData().
321 Assert.assertEquals(response.getData().getDescription(),
322 expected.getDeploymentFlavorCompositionData().
327 public void testDeleteDepFlavorOnHEAT() {
328 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
329 doReturn(expected).when(deploymentFlavorDaoMock).get(anyObject());
330 testDelete_negative(VSP_ID, VERSION, DF1_ID,
331 VendorSoftwareProductErrorCodes.DELETE_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
335 public void testDeleteOnNotExistImage() {
336 testDelete_negative(VSP_ID, VERSION, DF1_ID,
337 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
341 public void testDeleteOnManualImage() {
342 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
343 doReturn(expected).when(deploymentFlavorDaoMock).get(anyObject());
344 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
345 deploymentFlavorManager.deleteDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
346 verify(deploymentFlavorDaoMock).delete(anyObject());
349 private void testCreate_negative(DeploymentFlavorEntity deploymentFlavorEntity,
350 String expectedErrorCode) {
352 deploymentFlavorManager.createDeploymentFlavor(deploymentFlavorEntity);
354 } catch (CoreException exception) {
355 Assert.assertEquals(exception.code().id(), expectedErrorCode);
359 private void testDelete_negative(String vspId, Version version, String deploymentFlavorId,
360 String expectedErrorCode) {
362 deploymentFlavorManager.deleteDeploymentFlavor(vspId, version, deploymentFlavorId);
364 } catch (CoreException exception) {
365 Assert.assertEquals(exception.code().id(), expectedErrorCode);
369 private static DeploymentFlavorEntity createDeploymentFlavor(String vspId, Version version,
370 String deploymentFlavorId) {
372 DeploymentFlavorEntity deploymentFlavorEntity =
373 new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
374 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
375 deploymentFlavor.setModel(deploymentFlavorId + "name");
376 deploymentFlavor.setDescription(deploymentFlavorId + " desc");
378 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
379 return deploymentFlavorEntity;
382 private void testUpdate_negative(String vspId, Version version, String deploymentFlavorId,
383 String expectedErrorCode) {
385 DeploymentFlavorEntity deploymentFlavorEntity =
386 new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
387 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
388 deploymentFlavor.setModel("Name");
389 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
390 deploymentFlavorManager
391 .updateDeploymentFlavor(new DeploymentFlavorEntity(vspId, version, deploymentFlavorId));
393 } catch (CoreException exception) {
394 Assert.assertEquals(exception.code().id(), expectedErrorCode);
398 private void testGet_negative(String vspId, Version version, String deploymentFlavorId,
399 String expectedErrorCode) {
401 deploymentFlavorManager.getDeploymentFlavor(vspId, version, deploymentFlavorId);
403 } catch (CoreException exception) {
404 Assert.assertEquals(exception.code().id(), expectedErrorCode);