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.CompositionEntityDataManager;
11 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
12 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
18 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
19 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
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;
33 import static org.mockito.Matchers.anyObject;
34 import static org.mockito.Mockito.doReturn;
35 import static org.mockito.Mockito.verify;
37 public class DeploymentFlavorManagerImplTest {
38 private static final String VSP_ID = "VSP_ID";
39 private static final Version VERSION = new Version("version_id");
40 private static final String COMPONENT_ID = "COMPONENT_ID";
41 private static final String DF1_ID = "df1";
42 private static final String DF2_ID = "df2";
43 private static final String FG_ID = "FG_ID";
44 private static final List<String> fgs = Collections.singletonList(FG_ID);
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 tearDown() {
67 deploymentFlavorManager = null;
71 public void testListWhenNone() {
72 final Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
73 deploymentFlavorManager.listDeploymentFlavors(VSP_ID, VERSION);
74 Assert.assertEquals(deploymentFlavorEntities.size(), 0);
78 public void testCreateOnNotManual_negative() {
80 testCreate_negative(new DeploymentFlavorEntity(VSP_ID, VERSION, null),
81 VendorSoftwareProductErrorCodes.CREATE_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
85 public void testCreateManualDepFlavor() {
86 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
87 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
89 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
90 vspDetails.setFeatureGroups(fgs);
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 testCreateManualDepFlavorWithNoFGNInDFAndInVSP() {
150 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
151 final DeploymentFlavor deploymentFlavor =
152 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
153 deploymentFlavor.setFeatureGroupId(null);
154 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
156 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
158 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
159 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
160 deploymentFlavorManager.createDeploymentFlavor(expected);
161 verify(compositionEntityDataManagerMock).createDeploymentFlavor(expected);
165 public void testCreateManualDepFlavorWithNullCompInAssociation() {
166 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
167 final DeploymentFlavor deploymentFlavor =
168 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
169 ComponentComputeAssociation association = new ComponentComputeAssociation();
170 association.setComponentId(null);
171 association.setComputeFlavorId("CF1");
172 List<ComponentComputeAssociation> list = new ArrayList<>();
173 list.add(association);
174 deploymentFlavor.setComponentComputeAssociations(list);
175 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
177 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
179 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
180 vspDetails.setFeatureGroups(fgs);
181 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
184 deploymentFlavorManager.createDeploymentFlavor(expected);
185 } catch (CoreException ex) {
186 Assert.assertEquals(VendorSoftwareProductErrorCodes.INVALID_COMPONENT_COMPUTE_ASSOCIATION,
189 "Invalid request,for valid association please provide ComponentId for Compute Flavor",
195 public void testCreateManualDepFlavorWithInvalidComputeInAssociation() {
196 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
197 final DeploymentFlavor deploymentFlavor =
198 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
199 ComponentComputeAssociation association = new ComponentComputeAssociation();
200 association.setComponentId(COMPONENT_ID);
201 association.setComputeFlavorId("CF1");
202 List<ComponentComputeAssociation> list = new ArrayList<>();
203 list.add(association);
204 deploymentFlavor.setComponentComputeAssociations(list);
205 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
207 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
209 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
210 vspDetails.setFeatureGroups(fgs);
211 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
213 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, null);
214 doReturn(component).when(componentDaoMock).get(anyObject());
216 doReturn(null).when(computeDaoMock).get(anyObject());
219 deploymentFlavorManager.createDeploymentFlavor(expected);
220 } catch (CoreException ex) {
221 Assert.assertEquals(VendorSoftwareProductErrorCodes.INVALID_COMPUTE_FLAVOR_ID,
227 public void testCreateManualDepFlavorWithDuplicateVfcAssociation() {
228 DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
229 final DeploymentFlavor deploymentFlavor =
230 JsonUtil.json2Object(expected.getCompositionData(), DeploymentFlavor.class);
231 ComponentComputeAssociation association = new ComponentComputeAssociation();
232 association.setComponentId(COMPONENT_ID);
233 association.setComputeFlavorId("CF1");
234 List<ComponentComputeAssociation> list = new ArrayList<>();
235 list.add(association);
236 list.add(association);
237 deploymentFlavor.setComponentComputeAssociations(list);
238 expected.setCompositionData(JsonUtil.object2Json(deploymentFlavor));
240 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
242 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
243 vspDetails.setFeatureGroups(fgs);
244 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
246 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, null);
247 doReturn(component).when(componentDaoMock).get(anyObject());
249 ComputeEntity computeEntity = new ComputeEntity(VSP_ID, VERSION, COMPONENT_ID, "CF1");
250 doReturn(computeEntity).when(computeDaoMock).get(anyObject());
253 deploymentFlavorManager.createDeploymentFlavor(expected);
254 } catch (CoreException ex) {
256 VendorSoftwareProductErrorCodes.SAME_VFC_ASSOCIATION_MORE_THAN_ONCE_NOT_ALLOWED,
262 public void testList() {
264 doReturn(Arrays.asList(
265 createDeploymentFlavor(VSP_ID, VERSION, DF1_ID),
266 createDeploymentFlavor(VSP_ID, VERSION, DF2_ID)))
267 .when(deploymentFlavorDaoMock).list(anyObject());
270 final Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
271 deploymentFlavorManager.listDeploymentFlavors(VSP_ID, VERSION);
272 Assert.assertEquals(deploymentFlavorEntities.size(), 2);
273 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
274 Assert.assertEquals(deploymentFlavorEntity.getDeploymentFlavorCompositionData().getModel()
275 , DF1_ID.equals(deploymentFlavorEntity.getId()) ? DF1_ID + "name" : DF2_ID + "name");
280 public void testUpdateHeatDepFlavor() {
281 testUpdate_negative(VSP_ID, VERSION, DF1_ID,
282 VendorSoftwareProductErrorCodes.EDIT_DEPLOYMENT_FLAVOR_NOT_ALLOWED_IN_HEAT_ONBOARDING);
286 public void testUpdateNonExistingManualDepFlavorId_negative() {
287 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
288 testUpdate_negative(VSP_ID, VERSION, DF1_ID,
289 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
293 public void testManualUpdateDepFlavor() {
294 doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
296 doReturn(createDeploymentFlavor(VSP_ID, VERSION, DF1_ID))
297 .when(deploymentFlavorDaoMock).get(anyObject());
299 doReturn(new CompositionEntityValidationData(CompositionEntityType.image, DF1_ID))
300 .when(compositionEntityDataManagerMock)
301 .validateEntity(anyObject(), anyObject(), anyObject());
303 VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
304 doReturn(vspDetails).when(vspInfoDao).get(anyObject());
306 DeploymentFlavorEntity deploymentFlavorEntity =
307 new DeploymentFlavorEntity(VSP_ID, VERSION, DF1_ID);
308 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
309 deploymentFlavor.setModel(DF1_ID + "_name");
310 deploymentFlavor.setDescription(DF1_ID + " desc updated");
311 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
313 CompositionEntityValidationData validationData =
314 deploymentFlavorManager.updateDeploymentFlavor(deploymentFlavorEntity);
315 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
316 verify(deploymentFlavorDaoMock).update(deploymentFlavorEntity);
320 public void testGetNonExistingDepFlavorId_negative() {
321 testGet_negative(VSP_ID, VERSION,
322 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
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");
377 deploymentFlavor.setFeatureGroupId(FG_ID);
379 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
380 return deploymentFlavorEntity;
383 private void testUpdate_negative(String vspId, Version version, String deploymentFlavorId,
384 String expectedErrorCode) {
386 DeploymentFlavorEntity deploymentFlavorEntity =
387 new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
388 DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
389 deploymentFlavor.setModel("Name");
390 deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
391 deploymentFlavorManager
392 .updateDeploymentFlavor(new DeploymentFlavorEntity(vspId, version, deploymentFlavorId));
394 } catch (CoreException exception) {
395 Assert.assertEquals(exception.code().id(), expectedErrorCode);
399 private void testGet_negative(String vspId, Version version,
400 String expectedErrorCode) {
402 deploymentFlavorManager.getDeploymentFlavor(vspId, version, "non existing image id");
404 } catch (CoreException exception) {
405 Assert.assertEquals(exception.code().id(), expectedErrorCode);