1 package org.openecomp.sdc.vendorsoftwareproduct.impl;
3 import org.mockito.InjectMocks;
4 import org.mockito.Mock;
5 import org.mockito.Mockito;
6 import org.mockito.MockitoAnnotations;
7 import org.mockito.Spy;
8 import org.openecomp.sdc.common.errors.CoreException;
9 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
10 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
11 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
12 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
14 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
15 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
16 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
17 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
18 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
19 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
20 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
21 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
22 import org.openecomp.sdc.versioning.dao.types.Version;
23 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
24 import org.testng.Assert;
25 import org.testng.annotations.BeforeMethod;
26 import org.testng.annotations.Test;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Collection;
32 import static org.mockito.Matchers.anyObject;
33 import static org.mockito.Mockito.doReturn;
34 import static org.mockito.Mockito.never;
35 import static org.mockito.Mockito.verify;
37 public class ComponentManagerImplTest {
38 private static final String COMP_NOT_EXIST_MSG =
39 "Vendor Software Product Component with Id 1 does not exist for Vendor Software Product with id VSP_ID and version 0.1";
40 private static final String USER = "componentsTestUser";
41 private static final String VSP_ID = "VSP_ID";
42 private static final Version VERSION = new Version(0, 1);
43 private static final String COMP1_ID = "1";
44 private static final String COMP2_ID = "2";
47 private ComponentDao componentDaoMock;
49 private CompositionEntityDataManager compositionEntityDataManagerMock;
51 private NicManager nicManagerMock;
53 private VendorSoftwareProductInfoDao vspInfoDao;
56 private ComponentManagerImpl componentManager;
59 public void setUp() throws Exception {
60 MockitoAnnotations.initMocks(this);
64 public void testListWhenNone() {
65 Collection<ComponentEntity> components =
66 componentManager.listComponents(VSP_ID, VERSION, USER);
67 Assert.assertEquals(components.size(), 0);
70 @Test(expectedExceptions = CoreException.class,
71 expectedExceptionsMessageRegExp = "Vendor Software Product Component with Id dummyComponentId " +
72 "does not exist for Vendor Software Product with id dummyVsp and version 1.0")
73 public void validateExceptionWhenTryingToRetriveNotExistingComponentEntity() {
74 Version version = Mockito.mock(Version.class);
75 doReturn("1.0").when(version).toString();
76 doReturn(null).when(componentDaoMock).get(anyObject());
77 componentManager.validateComponentExistence("dummyVsp", version, "dummyComponentId",
82 public void testList() {
83 doReturn(Arrays.asList(
84 createComponent(VSP_ID, VERSION, COMP1_ID),
85 createComponent(VSP_ID, VERSION, COMP2_ID)))
86 .when(componentDaoMock).list(anyObject());
88 Collection<ComponentEntity> actual =
89 componentManager.listComponents(VSP_ID, VERSION, USER);
90 Assert.assertEquals(actual.size(), 2);
94 public void testDeleteListOnUploadVsp_negative() {
95 testDeleteList_negative(VSP_ID, VERSION, USER,
96 VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
100 public void testCreate() {
101 COMP1_ID = testCreate(VSP_ID);
104 public void testCreate() {
105 ComponentEntity expected = new ComponentEntity(VSP_ID, null, null);
106 ComponentData compData = new ComponentData();
107 compData.setName("comp1 name");
108 compData.setDescription("comp1 desc");
109 expected.setComponentCompositionData(compData);
111 doReturn(true).when(vspInfoDao).isManual(anyObject(),anyObject());
112 Collection<ComponentEntity> vspComponentList = new ArrayList<>();
113 doReturn(vspComponentList).when(componentDaoMock).list(anyObject());
114 doReturn(expected).when(compositionEntityDataManagerMock).createComponent(anyObject());
116 ComponentEntity created = componentManager.createComponent(expected, USER);
117 Assert.assertNotNull(created);
118 //expected.setId(created.getId());
119 //expected.setVersion(VERSION);
121 //ComponentEntity actual = componentDaoMock.getComponent(VSP_ID, VERSION, created.getId());
123 //Assert.assertEquals(actual, expected);
124 //return created.getId();
128 public void testCreateWithVspCompListMoreThanOne() {
129 ComponentEntity expected = new ComponentEntity(VSP_ID, null, null);
130 ComponentData compData = new ComponentData();
131 compData.setName("comp1 name");
132 compData.setDescription("comp1 desc");
133 expected.setComponentCompositionData(compData);
135 doReturn(true).when(vspInfoDao).isManual(anyObject(),anyObject());
136 Collection<ComponentEntity> vspComponentList = new ArrayList<>();
137 vspComponentList.add(expected);
138 doReturn(vspComponentList).when(componentDaoMock).list(anyObject());
141 ComponentEntity created = componentManager.createComponent(expected, USER);
142 } catch (CoreException exception) {
143 Assert.assertEquals("Creation of only one VFC per VSP allowed.", exception.code().message());
144 Assert.assertEquals(VendorSoftwareProductErrorCodes.VSP_VFC_COUNT_EXCEED,
145 exception.code().id());
150 public void testUpdateComp() {
151 ComponentEntity expected = new ComponentEntity(VSP_ID, null, COMP1_ID);
152 ComponentData compData = new ComponentData();
153 compData.setName("comp1 name");
154 compData.setDescription("comp1 desc");
155 expected.setComponentCompositionData(compData);
157 doReturn(expected).when(componentDaoMock).get(anyObject());
158 doReturn(true).when(vspInfoDao).isManual(anyObject(),anyObject());
159 Collection<ComponentEntity> vspComponentList = new ArrayList<>();
160 vspComponentList.add(expected);
161 doReturn(vspComponentList).when(componentDaoMock).list(anyObject());
162 doReturn(new CompositionEntityValidationData(null,null)).when(compositionEntityDataManagerMock)
163 .validateEntity(anyObject(),anyObject(),anyObject());
165 CompositionEntityValidationData created = componentManager.updateComponent(expected, USER);
166 Assert.assertNotNull(created);
170 public void testUpdateCompWithSameVfcDisplayName() {
171 ComponentEntity expected = new ComponentEntity(VSP_ID, null, COMP1_ID);
172 ComponentData compData = new ComponentData();
173 compData.setName("comp1 name");
174 compData.setDescription("comp1 desc");
175 compData.setDisplayName("comp1 displayname");
176 expected.setComponentCompositionData(compData);
178 doReturn(expected).when(componentDaoMock).get(anyObject());
179 doReturn(true).when(vspInfoDao).isManual(anyObject(),anyObject());
180 Collection<ComponentEntity> vspComponentList = new ArrayList<>();
181 vspComponentList.add(expected);
182 ComponentEntity expected2 = new ComponentEntity(VSP_ID+"2", null, COMP1_ID+"2");
183 expected2.setComponentCompositionData(compData);
184 vspComponentList.add(expected2);
185 doReturn(vspComponentList).when(componentDaoMock).list(anyObject());
186 doReturn(new CompositionEntityValidationData(null,null)).when(compositionEntityDataManagerMock)
187 .validateEntity(anyObject(),anyObject(),anyObject());
190 CompositionEntityValidationData created = componentManager.updateComponent(expected, USER);
191 } catch (CoreException exception) {
192 Assert.assertEquals("VFC with specified name already present in given VSP.",
193 exception.code().message());
194 Assert.assertEquals(VendorSoftwareProductErrorCodes.VSP_VFC_DUPLICATE_NAME,
195 exception.code().id());
200 public void testCreateWithExistingName_negative() {
201 ComponentEntity component = new ComponentEntity(VSP_ID, null, null);
202 ComponentData compData = new ComponentData();
203 compData.setName("comp1 name");
204 compData.setDescription("comp1 desc");
205 component.setComponentCompositionData(compData);
206 testCreate_negative(component, USER, UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
210 public void testCreateWithExistingNameUnderOtherVsp() {
215 public void testCreateOnUploadVsp_negative() {
216 testCreate_negative(new ComponentEntity(VSP_ID, VERSION, null), USER,
217 VendorSoftwareProductErrorCodes.VFC_ADD_NOT_ALLOWED_IN_HEAT_ONBOARDING);
221 public void testUpdateNonExistingComponentId_negative() {
222 String componentId = "non existing component id";
223 doReturn(null).when(componentDaoMock).get(anyObject());
225 testUpdate_negative(VSP_ID, VERSION, componentId, USER,
226 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
230 public void testUpdateOnUploadVsp() {
231 doReturn(createComponent(VSP_ID, VERSION, COMP1_ID)).when(componentDaoMock)
234 doReturn(new CompositionEntityValidationData(CompositionEntityType.component, COMP1_ID))
235 .when(compositionEntityDataManagerMock)
236 .validateEntity(anyObject(), anyObject(), anyObject());
238 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, COMP1_ID);
239 ComponentData compData = new ComponentData();
240 compData.setName(COMP1_ID + " name"); // no change
241 compData.setDisplayName(COMP1_ID + " display name"); // no change
242 compData.setVfcCode(COMP1_ID + " display name"); // no change
243 compData.setNfcCode(COMP1_ID + " display name"); // no change
244 compData.setNfcFunction(COMP1_ID + " display name"); // no change
245 compData.setDescription(COMP1_ID + " desc updated"); // allowed change
246 component.setComponentCompositionData(compData);
249 CompositionEntityValidationData validationData =
250 componentManager.updateComponent(component, USER);
251 Assert.assertTrue(validationData == null || validationData.getErrors() == null);
252 verify(componentDaoMock).update(component);
256 public void testIllegalUpdateOnUploadVsp() {
257 doReturn(createComponent(VSP_ID, VERSION, COMP1_ID))
258 .when(componentDaoMock).get(anyObject());
260 CompositionEntityValidationData toBeReturned =
261 new CompositionEntityValidationData(CompositionEntityType.component, COMP1_ID);
262 toBeReturned.setErrors(Arrays.asList("error1", "error2"));
263 doReturn(toBeReturned)
264 .when(compositionEntityDataManagerMock)
265 .validateEntity(anyObject(), anyObject(), anyObject());
267 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, COMP1_ID);
268 ComponentData compData = new ComponentData();
269 compData.setName("comp1 name updated");// not allowed: changed name + omitted display name
270 component.setComponentCompositionData(compData);
272 CompositionEntityValidationData validationData =
273 componentManager.updateComponent(component, USER);
274 Assert.assertNotNull(validationData);
275 Assert.assertEquals(validationData.getErrors().size(), 2);
277 verify(componentDaoMock, never()).update(component);
281 public void testGetNonExistingComponentId_negative() {
282 String componentId = "non existing component id";
283 doReturn(null).when(componentDaoMock).get(anyObject());
285 testGet_negative(VSP_ID, VERSION, componentId, USER,
286 VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
290 public void testGet() {
291 ComponentEntity expected = createComponent(VSP_ID, VERSION, COMP1_ID);
292 doReturn(expected).when(componentDaoMock).get(anyObject());
294 doReturn("schema string").when(componentManager).getComponentCompositionSchema(anyObject());
296 testGet(VSP_ID, VERSION, COMP1_ID, USER, expected);
303 @Test(dependsOnMethods = {"testUpdateOnUploadVsp", "testList"})
304 public void testCreateWithERemovedName() {
308 @Test(dependsOnMethods = "testList")
309 public void testDeleteNonExistingComponentId_negative() {
310 testDelete_negative(VSP_ID, "non existing component id", USER, VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
316 @Test(dependsOnMethods = "testList")
317 public void testDelete() {
318 componentManager.deleteComponent(VSP_ID, COMP1_ID, USER);
319 ComponentEntity actual = componentDaoMock.getComponent(VSP_ID, VERSION, COMP1_ID);
320 Assert.assertNull(actual);
324 public void testDeleteOnUploadVsp_negative() {
325 testDelete_negative(VSP_ID, VERSION, COMP1_ID, USER,
326 VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
329 @Test(expectedExceptions = CoreException.class,
330 expectedExceptionsMessageRegExp = COMP_NOT_EXIST_MSG)
331 public void testGetNonExistingComponentQuestionnaire() throws Exception {
332 componentManager.getQuestionnaire(VSP_ID, VERSION, COMP1_ID, USER);
336 public void testComponentNullQuestionnaire() throws Exception {
337 doReturn(new ComponentEntity(VSP_ID, VERSION, COMP1_ID)).when(componentDaoMock)
338 .getQuestionnaireData(VSP_ID, VERSION, COMP1_ID);
339 String schema = "schema string";
340 doReturn(schema).when(componentManager).getComponentQuestionnaireSchema(anyObject());
342 QuestionnaireResponse questionnaire =
343 componentManager.getQuestionnaire(VSP_ID, VERSION, COMP1_ID, USER);
344 Assert.assertNotNull(questionnaire);
345 Assert.assertEquals(questionnaire.getData(), null);
346 Assert.assertEquals(questionnaire.getSchema(), schema);
347 Assert.assertNull(questionnaire.getErrorMessage());
352 public void testGetQuestionnaire() throws Exception {
353 ComponentEntity component = new ComponentEntity(VSP_ID, VERSION, COMP1_ID);
354 component.setQuestionnaireData("{}");
355 doReturn(component).when(componentDaoMock).getQuestionnaireData(VSP_ID, VERSION, COMP1_ID);
357 NicEntity nicEntity1 = new NicEntity();
358 Nic nic1 = new Nic();
359 nic1.setName("nic1");
360 nicEntity1.setNicCompositionData(nic1);
362 NicEntity nicEntity2 = new NicEntity();
363 Nic nic2 = new Nic();
364 nic2.setName("nic2");
365 nicEntity2.setNicCompositionData(nic2);
367 doReturn(Arrays.asList(nicEntity1, nicEntity2))
368 .when(nicManagerMock).listNics(VSP_ID, VERSION, COMP1_ID, USER);
370 String schema = "schema string";
371 doReturn(schema).when(componentManager).getComponentQuestionnaireSchema(anyObject());
373 QuestionnaireResponse questionnaire =
374 componentManager.getQuestionnaire(VSP_ID, VERSION, COMP1_ID, USER);
375 Assert.assertNotNull(questionnaire);
376 Assert.assertEquals(questionnaire.getData(), component.getQuestionnaireData());
377 Assert.assertEquals(questionnaire.getSchema(), schema);
378 Assert.assertNull(questionnaire.getErrorMessage());
381 @Test(expectedExceptions = CoreException.class,
382 expectedExceptionsMessageRegExp = COMP_NOT_EXIST_MSG)
383 public void testUpdateNonExistingComponentQuestionnaire() throws Exception {
384 doReturn(null).when(componentDaoMock).get(anyObject());
385 componentManager.updateQuestionnaire(VSP_ID, VERSION, COMP1_ID, "questionnaire data", USER);
389 public void testUpdateQuestionnaire() throws Exception {
390 ComponentEntity component = createComponent(VSP_ID, VERSION, COMP1_ID);
391 doReturn(component).when(componentDaoMock).get(anyObject());
393 componentManager.updateQuestionnaire(VSP_ID, VERSION, COMP1_ID, "questionnaire data", USER);
395 verify(componentDaoMock)
396 .updateQuestionnaireData(VSP_ID, VERSION, COMP1_ID, "questionnaire data");
400 @Test(dependsOnMethods = "testDelete")
401 public void testDeleteList() {
402 ComponentEntity comp3 = new ComponentEntity(VSP_ID, null, null);
403 comp3.setName("comp3 name");
404 comp3.setDescription("comp3 desc");
405 componentManager.createComponent(comp3, USER);
407 componentManager.deleteComponents(VSP_ID, USER);
409 Collection<ComponentEntity> actual = componentManager.listComponents(VSP_ID, null, USER);
410 Assert.assertEquals(actual.size(), 0);
413 private void testGet(String vspId, Version version, String componentId, String user,
414 ComponentEntity expected) {
416 CompositionEntityResponse<ComponentData>
417 response = componentManager.getComponent(vspId, version, componentId, user);
418 Assert.assertEquals(response.getId(), expected.getId());
419 Assert.assertEquals(response.getData(), expected.getComponentCompositionData());
420 Assert.assertNotNull(response.getSchema());
423 private void testCreate_negative(ComponentEntity component, String user,
424 String expectedErrorCode) {
426 componentManager.createComponent(component, user);
428 } catch (CoreException exception) {
429 Assert.assertEquals(exception.code().id(), expectedErrorCode);
433 private void testGet_negative(String vspId, Version version, String componentId, String user,
434 String expectedErrorCode) {
436 componentManager.getComponent(vspId, version, componentId, user);
438 } catch (CoreException exception) {
439 Assert.assertEquals(exception.code().id(), expectedErrorCode);
443 private void testUpdate_negative(String vspId, Version version, String componentId, String user,
444 String expectedErrorCode) {
447 .updateComponent(new ComponentEntity(vspId, version, componentId), user);
449 } catch (CoreException exception) {
450 Assert.assertEquals(exception.code().id(), expectedErrorCode);
454 private void testList_negative(String vspId, Version version, String user,
455 String expectedErrorCode) {
457 componentManager.listComponents(vspId, version, user);
459 } catch (CoreException exception) {
460 Assert.assertEquals(exception.code().id(), expectedErrorCode);
464 private void testDeleteList_negative(String vspId, Version version, String user,
465 String expectedErrorCode) {
467 componentManager.deleteComponents(vspId, version, user);
469 } catch (CoreException exception) {
470 Assert.assertEquals(exception.code().id(), expectedErrorCode);
474 private void testDelete_negative(String vspId, Version version, String componentId, String user,
475 String expectedErrorCode) {
477 componentManager.deleteComponent(vspId, version, componentId, user);
479 } catch (CoreException exception) {
480 Assert.assertEquals(exception.code().id(), expectedErrorCode);
485 public static ComponentEntity createComponent(String vspId, Version version, String compId) {
486 ComponentEntity componentEntity = new ComponentEntity(vspId, version, compId);
487 ComponentData compData = new ComponentData();
488 compData.setName(compId + " name");
489 compData.setDisplayName(compId + " display name");
490 compData.setVfcCode(compId + " display name");
491 compData.setDescription(compId + " desc");
492 componentEntity.setComponentCompositionData(compData);
493 componentEntity.setQuestionnaireData("{}");
494 return componentEntity;