2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020 Nordix Foundation
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
20 package org.openecomp.sdc.be.components.impl;
22 import static java.util.Collections.singletonList;
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.jupiter.api.Assertions.assertNotNull;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27 import static org.junit.jupiter.api.Assertions.fail;
28 import static org.mockito.ArgumentMatchers.any;
29 import static org.mockito.ArgumentMatchers.anyList;
30 import static org.mockito.ArgumentMatchers.anyString;
31 import static org.mockito.Mockito.times;
32 import static org.mockito.Mockito.verify;
33 import static org.mockito.Mockito.when;
35 import fj.data.Either;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.Collections;
39 import java.util.HashMap;
40 import java.util.LinkedList;
41 import java.util.List;
43 import java.util.Optional;
44 import org.junit.jupiter.api.BeforeEach;
45 import org.junit.jupiter.api.Test;
46 import org.junit.jupiter.api.extension.ExtendWith;
47 import org.mockito.InjectMocks;
48 import org.mockito.Mock;
49 import org.mockito.MockitoAnnotations;
50 import org.mockito.junit.jupiter.MockitoExtension;
51 import org.openecomp.sdc.be.components.impl.exceptions.BusinessLogicException;
52 import org.openecomp.sdc.be.components.impl.utils.DirectivesEnum;
53 import org.openecomp.sdc.be.components.impl.utils.NodeFilterConstraintAction;
54 import org.openecomp.sdc.be.components.validation.NodeFilterValidator;
55 import org.openecomp.sdc.be.components.validation.UserValidations;
56 import org.openecomp.sdc.be.dao.api.ActionStatus;
57 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
58 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
59 import org.openecomp.sdc.be.datamodel.utils.ConstraintConvertor;
60 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
61 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
62 import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterCapabilityDataDefinition;
63 import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterPropertyDataDefinition;
64 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
65 import org.openecomp.sdc.be.datatypes.enums.NodeFilterConstraintType;
66 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
67 import org.openecomp.sdc.be.impl.ComponentsUtils;
68 import org.openecomp.sdc.be.model.ComponentInstance;
69 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
70 import org.openecomp.sdc.be.model.PropertyDefinition;
71 import org.openecomp.sdc.be.model.Resource;
72 import org.openecomp.sdc.be.model.User;
73 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeFilterOperation;
74 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
75 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
76 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
77 import org.openecomp.sdc.be.ui.model.UIConstraint;
78 import org.openecomp.sdc.be.user.Role;
80 @ExtendWith(MockitoExtension.class)
81 public class ComponentNodeFilterBusinessLogicTest extends BaseBusinessLogicMock {
83 private static final String servicePropertyName = "resourceType";
84 private static final String constraintOperator = "equal";
85 private static final String sourceType = "static";
86 private static final String sourceName = sourceType;
87 private static final String propertyValue = "resourceTypeValue";
88 private static final String componentId = "dac65869-dfb4-40d2-aa20-084324659ec1";
89 private static final String componentInstanceId = "dac65869-dfb4-40d2-aa20-084324659ec1.resource0";
92 private ComponentNodeFilterBusinessLogic componentNodeFilterBusinessLogic;
94 private NodeFilterValidator nodeFilterValidator;
96 private NodeFilterOperation nodeFilterOperation;
98 private ToscaOperationFacade toscaOperationFacade;
100 private GraphLockOperation graphLockOperation;
102 private JanusGraphDao janusGraphDao;
104 private JanusGraphGenericDao janusGraphGenericDao;
106 private ComponentsUtils componentsUtils;
108 private UserValidations userValidations;
110 private Resource resource;
111 private ComponentInstance componentInstance;
112 private CINodeFilterDataDefinition ciNodeFilterDataDefinition;
113 private RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition;
114 private String constraint;
118 MockitoAnnotations.initMocks(this);
119 componentNodeFilterBusinessLogic =
120 new ComponentNodeFilterBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
121 groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation,
122 nodeFilterOperation, nodeFilterValidator);
123 componentNodeFilterBusinessLogic.setToscaOperationFacade(toscaOperationFacade);
124 componentNodeFilterBusinessLogic.setGraphLockOperation(graphLockOperation);
125 componentNodeFilterBusinessLogic.setComponentsUtils(componentsUtils);
126 componentNodeFilterBusinessLogic.setUserValidations(userValidations);
127 componentNodeFilterBusinessLogic.setJanusGraphGenericDao(janusGraphGenericDao);
128 componentNodeFilterBusinessLogic.setJanusGraphDao(janusGraphDao);
134 public void createWhenNodeFilterExistsTest() throws BusinessLogicException {
135 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
137 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
139 final Optional<CINodeFilterDataDefinition> result = componentNodeFilterBusinessLogic
140 .createNodeFilterIfNotExist(componentId, componentInstanceId, true, ComponentTypeEnum.RESOURCE);
142 assertThat(result).isPresent();
143 assertThat(result.get().getProperties()).isEqualTo(ciNodeFilterDataDefinition.getProperties());
144 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
148 public void createNodeFilterFailTest() {
149 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
150 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
151 .thenReturn(StorageOperationStatus.OK);
152 when(componentsUtils.convertFromStorageResponse(any())).thenReturn(ActionStatus.GENERAL_ERROR);
153 when(nodeFilterOperation.createNodeFilter(componentId, componentInstanceId))
154 .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
155 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
156 .thenReturn(StorageOperationStatus.OK);
158 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
159 .createNodeFilterIfNotExist(componentId, componentInstanceId, true, ComponentTypeEnum.RESOURCE));
161 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
162 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
163 verify(nodeFilterOperation, times(1)).createNodeFilter(componentId, componentInstanceId);
164 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
168 public void createNodeFilterIfNotExist() throws BusinessLogicException {
169 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
170 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
171 .thenReturn(StorageOperationStatus.OK);
172 when(nodeFilterOperation.createNodeFilter(componentId, componentInstanceId))
173 .thenReturn(Either.left(ciNodeFilterDataDefinition));
174 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
175 .thenReturn(StorageOperationStatus.OK);
177 final Optional<CINodeFilterDataDefinition> result = componentNodeFilterBusinessLogic
178 .createNodeFilterIfNotExist(componentId, componentInstanceId, true, ComponentTypeEnum.RESOURCE);
180 assertThat(result).isPresent();
181 assertThat(result.get().getProperties()).isEqualTo(ciNodeFilterDataDefinition.getProperties());
183 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
184 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
185 verify(nodeFilterOperation, times(1)).createNodeFilter(componentId, componentInstanceId);
186 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
190 public void deleteNodeFilterIfExistsTest() throws BusinessLogicException {
191 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
192 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
193 .thenReturn(Either.left(true));
195 final Optional<String> result = componentNodeFilterBusinessLogic
196 .deleteNodeFilterIfExists(componentId, componentInstanceId, true, ComponentTypeEnum.RESOURCE);
198 assertThat(result).isPresent();
199 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
200 verify(nodeFilterValidator, times(1)).validateComponentInstanceExist(resource, componentInstanceId);
204 public void deleteWhenNodeFilterExistsTest() throws BusinessLogicException {
205 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
207 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
208 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
209 .thenReturn(StorageOperationStatus.OK);
210 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
211 .thenReturn(Either.left(true));
212 when(nodeFilterOperation.deleteNodeFilter(resource, componentInstanceId))
213 .thenReturn(Either.left(componentInstanceId));
214 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
215 .thenReturn(StorageOperationStatus.OK);
217 final Optional<String> result = componentNodeFilterBusinessLogic
218 .deleteNodeFilterIfExists(componentId, componentInstanceId, true, ComponentTypeEnum.RESOURCE);
220 assertThat(result).isPresent();
221 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
222 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
223 verify(nodeFilterValidator, times(1)).validateComponentInstanceExist(resource, componentInstanceId);
224 verify(nodeFilterOperation, times(1)).deleteNodeFilter(resource, componentInstanceId);
225 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
229 public void deleteNodeFilterIfExistsFailTest() {
230 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
232 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
233 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
234 .thenReturn(StorageOperationStatus.OK);
235 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
236 .thenReturn(Either.left(true));
237 when(nodeFilterOperation.deleteNodeFilter(resource, componentInstanceId))
238 .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
239 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
240 .thenReturn(StorageOperationStatus.OK);
242 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
243 .deleteNodeFilterIfExists(componentId, componentInstanceId, true, ComponentTypeEnum.RESOURCE));
245 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
246 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
247 verify(nodeFilterValidator, times(1)).validateComponentInstanceExist(resource, componentInstanceId);
248 verify(nodeFilterOperation, times(1)).deleteNodeFilter(resource, componentInstanceId);
249 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
253 public void addNodeFilterPropertiesTest() throws BusinessLogicException {
254 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
256 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
257 when(nodeFilterValidator
258 .validateFilter(resource, componentInstanceId,
259 requirementNodeFilterPropertyDataDefinition.getConstraints(),
260 NodeFilterConstraintAction.ADD)).thenReturn(Either.left(true));
261 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
262 .thenReturn(Either.left(true));
263 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
264 .thenReturn(StorageOperationStatus.OK);
265 when(nodeFilterOperation.addNewProperty(anyString(), anyString(), any(CINodeFilterDataDefinition.class),
266 any(RequirementNodeFilterPropertyDataDefinition.class))).thenReturn(Either.left(ciNodeFilterDataDefinition));
267 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
268 .thenReturn(StorageOperationStatus.OK);
270 final Optional<CINodeFilterDataDefinition> result = componentNodeFilterBusinessLogic
271 .addNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.ADD,
272 "MyPropertyName", constraint, true, ComponentTypeEnum.RESOURCE,
273 NodeFilterConstraintType.PROPERTIES);
275 assertThat(result).isPresent();
276 assertThat(result.get().getProperties().getListToscaDataDefinition()).hasSize(1);
277 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
278 verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
279 Collections.singletonList(constraint), NodeFilterConstraintAction.ADD);
280 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
281 verify(nodeFilterOperation, times(1))
282 .addNewProperty(anyString(), anyString(), any(CINodeFilterDataDefinition.class),
283 any(RequirementNodeFilterPropertyDataDefinition.class));
284 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
288 public void addNodeFilterCapabilitiesTest() throws BusinessLogicException {
289 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
291 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
292 when(nodeFilterValidator
293 .validateFilter(resource, componentInstanceId,
294 requirementNodeFilterPropertyDataDefinition.getConstraints(),
295 NodeFilterConstraintAction.ADD)).thenReturn(Either.left(true));
296 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
297 .thenReturn(Either.left(true));
298 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
299 .thenReturn(StorageOperationStatus.OK);
300 when(nodeFilterOperation.addNewCapabilities(anyString(), anyString(), any(CINodeFilterDataDefinition.class),
301 any(RequirementNodeFilterCapabilityDataDefinition.class))).thenReturn(Either.left(ciNodeFilterDataDefinition));
302 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
303 .thenReturn(StorageOperationStatus.OK);
305 final Optional<CINodeFilterDataDefinition> result = componentNodeFilterBusinessLogic
306 .addNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.ADD,
307 "MyPropertyName", constraint, true, ComponentTypeEnum.RESOURCE,
308 NodeFilterConstraintType.CAPABILITIES);
310 assertThat(result).isPresent();
311 assertThat(result.get().getProperties().getListToscaDataDefinition()).hasSize(1);
312 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
313 verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
314 Collections.singletonList(constraint), NodeFilterConstraintAction.ADD);
315 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
316 verify(nodeFilterOperation, times(1))
317 .addNewCapabilities(anyString(), anyString(), any(CINodeFilterDataDefinition.class),
318 any(RequirementNodeFilterCapabilityDataDefinition.class));
319 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
323 public void addNodeFilterFailTest() {
324 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
326 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
327 when(nodeFilterValidator
328 .validateFilter(resource, componentInstanceId,
329 requirementNodeFilterPropertyDataDefinition.getConstraints(),
330 NodeFilterConstraintAction.ADD)).thenReturn(Either.left(true));
331 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
332 .thenReturn(Either.left(true));
333 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
334 .thenReturn(StorageOperationStatus.OK);
335 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
336 .thenReturn(StorageOperationStatus.OK);
338 final List<String> constraints = requirementNodeFilterPropertyDataDefinition.getConstraints();
339 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
340 .addNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.ADD,
341 "MyPropertyName", constraint, true, ComponentTypeEnum.RESOURCE,
342 NodeFilterConstraintType.PROPERTIES));
344 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
345 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
346 verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
347 constraints, NodeFilterConstraintAction.ADD);
348 verify(nodeFilterOperation, times(0))
349 .addNewProperty(componentId, componentInstanceId, ciNodeFilterDataDefinition,
350 requirementNodeFilterPropertyDataDefinition);
351 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
355 public void addNodeFilterFailFetchComponentTest() {
356 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
358 when(toscaOperationFacade.getToscaElement(componentId))
359 .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
361 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
362 .addNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.ADD,
363 "MyPropertyName", constraint, true, ComponentTypeEnum.RESOURCE,
364 NodeFilterConstraintType.PROPERTIES));
368 public void deleteNodeFilterTest() throws BusinessLogicException {
369 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
371 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
372 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
373 .thenReturn(Either.left(true));
374 when(nodeFilterValidator.validateFilter(resource, componentInstanceId, singletonList(constraint),
375 NodeFilterConstraintAction.DELETE)).thenReturn(Either.left(true));
376 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
377 .thenReturn(StorageOperationStatus.OK);
379 when(nodeFilterOperation
380 .deleteConstraint(componentId, componentInstanceId, ciNodeFilterDataDefinition, 0,
381 NodeFilterConstraintType.PROPERTIES))
382 .thenReturn(Either.left(ciNodeFilterDataDefinition));
384 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
385 .thenReturn(StorageOperationStatus.OK);
387 final Optional<CINodeFilterDataDefinition> deleteNodeFilterResult = componentNodeFilterBusinessLogic
388 .deleteNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.DELETE, constraint,
389 0, true, ComponentTypeEnum.RESOURCE, NodeFilterConstraintType.PROPERTIES);
391 assertThat(deleteNodeFilterResult).isPresent();
393 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
394 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
395 verify(nodeFilterValidator, times(1))
396 .validateComponentInstanceExist(resource, componentInstanceId);
397 verify(nodeFilterValidator, times(1))
398 .validateFilter(resource, componentInstanceId, singletonList(constraint),
399 NodeFilterConstraintAction.DELETE);
400 verify(nodeFilterOperation, times(1))
401 .deleteConstraint(componentId, componentInstanceId, ciNodeFilterDataDefinition, 0,
402 NodeFilterConstraintType.PROPERTIES);
403 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
407 public void deleteNodeFilterFailTest() {
408 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
410 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
411 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
412 .thenReturn(Either.left(true));
413 when(nodeFilterValidator.validateFilter(resource, componentInstanceId, singletonList(constraint),
414 NodeFilterConstraintAction.DELETE)).thenReturn(Either.left(true));
415 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
416 .thenReturn(StorageOperationStatus.OK);
418 when(nodeFilterOperation
419 .deleteConstraint(componentId, componentInstanceId, ciNodeFilterDataDefinition, 0,
420 NodeFilterConstraintType.PROPERTIES))
421 .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
423 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
424 .thenReturn(StorageOperationStatus.OK);
426 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
427 .deleteNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.DELETE, constraint,
428 0, true, ComponentTypeEnum.RESOURCE, NodeFilterConstraintType.PROPERTIES));
430 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
431 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
432 verify(nodeFilterValidator, times(1))
433 .validateFilter(resource, componentInstanceId, singletonList(constraint),
434 NodeFilterConstraintAction.DELETE);
435 verify(nodeFilterValidator, times(1))
436 .validateComponentInstanceExist(resource, componentInstanceId);
437 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
441 public void deleteNodeFilterFailValidationTest() {
442 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
443 when(nodeFilterValidator.validateComponentInstanceExist(resource, componentInstanceId))
444 .thenReturn(Either.left(true));
445 when(nodeFilterValidator.validateFilter(resource, componentInstanceId, singletonList(constraint),
446 NodeFilterConstraintAction.DELETE)).thenReturn(Either.left(true));
448 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
449 .deleteNodeFilter(componentId, componentInstanceId, NodeFilterConstraintAction.DELETE, constraint,
450 0, true, ComponentTypeEnum.RESOURCE, NodeFilterConstraintType.PROPERTIES));
452 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
453 verify(nodeFilterValidator, times(1))
454 .validateFilter(resource, componentInstanceId, singletonList(constraint),
455 NodeFilterConstraintAction.DELETE);
456 verify(nodeFilterValidator, times(1))
457 .validateComponentInstanceExist(resource, componentInstanceId);
461 public void updateNodeFilterTest() throws BusinessLogicException {
462 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
464 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
465 when(nodeFilterValidator.validateFilter(resource, componentInstanceId,
466 Collections.singletonList(constraint), NodeFilterConstraintAction.UPDATE)).thenReturn(Either.left(true));
467 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
468 .thenReturn(StorageOperationStatus.OK);
469 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
470 .thenReturn(StorageOperationStatus.OK);
472 when(nodeFilterOperation.updateCapabilities(anyString(), anyString(),
473 any(CINodeFilterDataDefinition.class), anyList())).thenReturn(Either.left(ciNodeFilterDataDefinition));
475 final List<String> constraints = requirementNodeFilterPropertyDataDefinition.getConstraints();
476 final Optional<CINodeFilterDataDefinition> updateNodeFilterResult = componentNodeFilterBusinessLogic
477 .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE,
478 NodeFilterConstraintType.CAPABILITIES);
480 assertThat(updateNodeFilterResult).isPresent();
481 assertThat(updateNodeFilterResult.get().getProperties().getListToscaDataDefinition()).hasSize(1);
483 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
484 verify(graphLockOperation, times(1)).lockComponent(componentId, NodeTypeEnum.Resource);
485 verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
486 constraints, NodeFilterConstraintAction.UPDATE);
487 verify(graphLockOperation, times(1)).unlockComponent(componentId, NodeTypeEnum.Resource);
488 verify(nodeFilterOperation, times(1))
489 .updateCapabilities(anyString(), anyString(), any(CINodeFilterDataDefinition.class), anyList());
493 public void updateNodeFilterFailTest() {
494 componentInstance.setNodeFilter(ciNodeFilterDataDefinition);
496 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
497 when(nodeFilterValidator.validateFilter(resource, componentInstanceId,
498 Collections.singletonList(constraint), NodeFilterConstraintAction.UPDATE)).thenReturn(Either.left(true));
499 when(graphLockOperation.lockComponent(componentId, NodeTypeEnum.Resource))
500 .thenReturn(StorageOperationStatus.OK);
501 when(graphLockOperation.unlockComponent(componentId, NodeTypeEnum.Resource))
502 .thenReturn(StorageOperationStatus.OK);
504 final List<String> constraints = requirementNodeFilterPropertyDataDefinition.getConstraints();
505 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
506 .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE,
507 NodeFilterConstraintType.PROPERTIES));
509 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
510 verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
511 constraints, NodeFilterConstraintAction.UPDATE);
515 public void updateNodeFilterFailValidationTest() {
516 final List<String> constraints = requirementNodeFilterPropertyDataDefinition.getConstraints();
517 when(toscaOperationFacade.getToscaElement(componentId)).thenReturn(Either.left(resource));
518 when(nodeFilterValidator.validateFilter(resource, componentInstanceId,
519 constraints, NodeFilterConstraintAction.UPDATE)).thenReturn(Either.left(true));
521 assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
522 .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE,
523 NodeFilterConstraintType.PROPERTIES));
525 verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
526 verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
527 constraints, NodeFilterConstraintAction.UPDATE);
531 public void validateUserTes() {
532 final String USER_ID = "jh0003";
533 final User user = new User();
534 user.setUserId(USER_ID);
535 user.setRole(Role.ADMIN.name());
536 when(userValidations.validateUserExists(USER_ID)).thenReturn(user).thenReturn(user);
537 final User result = componentNodeFilterBusinessLogic.validateUser(USER_ID);
538 assertNotNull(result);
539 assertTrue(USER_ID.equalsIgnoreCase(result.getUserId()));
540 assertTrue(Role.ADMIN.name().equalsIgnoreCase(result.getRole()));
543 public void initResource() {
545 resource = new Resource();
546 resource.setName("MyResource");
547 resource.setUniqueId(componentId);
548 resource.setToscaResourceName("My_Resource_Tosca_Name");
549 resource.addCategory("Network Layer 2-3", "Router");
550 resource.setDescription("My short description");
552 componentInstance = new ComponentInstance();
553 componentInstance.setUniqueId(componentInstanceId);
554 componentInstance.setName("myComponentInstance");
555 componentInstance.setDirectives(new LinkedList<>(Arrays.asList(DirectivesEnum.SELECT.getValue())));
557 final UIConstraint uiConstraint =
558 new UIConstraint(servicePropertyName, constraintOperator, sourceType, sourceName, propertyValue);
559 constraint = new ConstraintConvertor().convert(uiConstraint);
561 requirementNodeFilterPropertyDataDefinition = new RequirementNodeFilterPropertyDataDefinition();
562 requirementNodeFilterPropertyDataDefinition.setName(uiConstraint.getServicePropertyName());
563 requirementNodeFilterPropertyDataDefinition.setConstraints(new LinkedList<>(Arrays.asList(constraint)));
565 final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> listDataDefinition =
566 new ListDataDefinition<>(new LinkedList<>(Arrays.asList(requirementNodeFilterPropertyDataDefinition)));
568 ciNodeFilterDataDefinition = new CINodeFilterDataDefinition();
569 ciNodeFilterDataDefinition.setProperties(listDataDefinition);
570 ciNodeFilterDataDefinition.setID("NODE_FILTER_UID");
572 resource.setComponentInstances(singletonList(componentInstance));
574 final PropertyDefinition property = new PropertyDefinition();
575 property.setName(uiConstraint.getServicePropertyName());
577 final List<ComponentInstanceProperty> origProperties = new ArrayList<>();
578 final ComponentInstanceProperty origProperty = new ComponentInstanceProperty();
579 origProperty.setName(uiConstraint.getServicePropertyName());
580 origProperty.setValue(propertyValue);
581 origProperty.setType(uiConstraint.getSourceType());
582 origProperties.add(origProperty);
584 final Map<String, List<ComponentInstanceProperty>> componentInstanceProps = new HashMap<>();
585 componentInstanceProps.put(componentInstanceId, origProperties);
587 resource.setComponentInstancesProperties(componentInstanceProps);
588 resource.setProperties(new LinkedList<>(Arrays.asList(property)));
589 } catch (final Exception e) {
590 fail(e.getMessage());