Support TOSCA functions in Node Filters
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / jsonjanusgraph / operations / NodeFilterOperationTest.java
1 /*
2  * -
3  *  ============LICENSE_START=======================================================
4  *  Copyright (C) 2022 Nordix Foundation.
5  *  ================================================================================
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
22
23 import fj.data.Either;
24 import java.util.List;
25 import java.util.Map;
26 import org.janusgraph.core.JanusGraphVertex;
27 import org.junit.jupiter.api.BeforeEach;
28 import org.junit.jupiter.api.Test;
29 import org.mockito.Mock;
30 import org.mockito.MockitoAnnotations;
31 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
32 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
33 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
34 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
35 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
36 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
37 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
38 import org.openecomp.sdc.be.datatypes.elements.PropertyFilterConstraintDataDefinition;
39 import org.openecomp.sdc.be.datatypes.elements.PropertyFilterDataDefinition;
40 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
41 import org.openecomp.sdc.be.datatypes.enums.FilterValueType;
42 import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType;
43 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
44
45 import java.util.Arrays;
46 import java.util.HashMap;
47
48 import static org.junit.jupiter.api.Assertions.assertEquals;
49 import static org.junit.jupiter.api.Assertions.assertTrue;
50 import static org.mockito.ArgumentMatchers.any;
51 import static org.mockito.ArgumentMatchers.eq;
52 import static org.mockito.ArgumentMatchers.nullable;
53 import static org.mockito.Mockito.mock;
54 import static org.mockito.Mockito.when;
55
56 class NodeFilterOperationTest {
57
58     private final NodeFilterOperation nodeFilterOperation = new NodeFilterOperation();
59
60     @Mock
61     private JanusGraphDao janusGraphDao;
62
63     @BeforeEach
64     void setUp() {
65         MockitoAnnotations.openMocks(this);
66         nodeFilterOperation.setJanusGraphDao(janusGraphDao);
67     }
68
69     @Test
70     void addOrUpdateNodeFilterData() {
71         CINodeFilterDataDefinition nodeFilterDataDefinition = new CINodeFilterDataDefinition();
72         nodeFilterDataDefinition.setName("new node filter name");
73         String prop1 = "property1";
74         String prop2 = "property2";
75         final var propertyFilterDataDefinition = new PropertyFilterDataDefinition();
76         propertyFilterDataDefinition.setName("Name1");
77         final var propertyFilterConstraint1 = new PropertyFilterConstraintDataDefinition();
78         propertyFilterConstraint1.setPropertyName("mem_size");
79         propertyFilterConstraint1.setOperator(ConstraintType.EQUAL);
80         propertyFilterConstraint1.setValue(Map.of("get_property", List.of(prop1, "size")));
81         propertyFilterConstraint1.setValueType(FilterValueType.GET_PROPERTY);
82         propertyFilterConstraint1.setTargetType(PropertyFilterTargetType.PROPERTY);
83         propertyFilterDataDefinition.setConstraints(List.of(propertyFilterConstraint1));
84
85         final var propertyFilterDataDefinition2 = new PropertyFilterDataDefinition();
86         propertyFilterDataDefinition2.setName("Name2");
87         final var propertyFilterConstraint2 = new PropertyFilterConstraintDataDefinition();
88         propertyFilterConstraint2.setPropertyName("mem_size");
89         propertyFilterConstraint2.setOperator(ConstraintType.EQUAL);
90         propertyFilterConstraint2.setValue(Map.of("get_property", List.of("SELF", prop2)));
91         propertyFilterConstraint2.setValueType(FilterValueType.GET_PROPERTY);
92         propertyFilterConstraint2.setTargetType(PropertyFilterTargetType.PROPERTY);
93         propertyFilterDataDefinition2.setConstraints(List.of(propertyFilterConstraint2));
94
95         ListDataDefinition<PropertyFilterDataDefinition> listDataDefinition =
96                 new ListDataDefinition<>(Arrays.asList(
97                     propertyFilterDataDefinition,
98                     propertyFilterDataDefinition2));
99         nodeFilterDataDefinition.setProperties(listDataDefinition);
100
101         String componentId = "componentId";
102         final GraphVertex serviceVertexMock = mock(GraphVertex.class);
103         final JanusGraphVertex serviceJanusVertex = mock(JanusGraphVertex.class);
104         when(serviceVertexMock.getVertex()).thenReturn(serviceJanusVertex);
105         when(serviceVertexMock.getUniqueId()).thenReturn("componentId");
106         when(janusGraphDao.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(serviceVertexMock));
107         when(janusGraphDao.getChildVertex(serviceVertexMock, EdgeLabelEnum.NODE_FILTER_TEMPLATE, JsonParseFlagEnum.ParseJson))
108                 .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
109         when(janusGraphDao.createVertex(any())).thenReturn(Either.left(new GraphVertex()));
110         when(janusGraphDao.createEdge(eq(serviceJanusVertex), nullable(JanusGraphVertex.class), eq(EdgeLabelEnum.NODE_FILTER_TEMPLATE), eq(new HashMap<>())))
111                 .thenReturn(JanusGraphOperationStatus.OK);
112         final Either<CINodeFilterDataDefinition, StorageOperationStatus> expectedNodeFilterEither = nodeFilterOperation.updateNodeFilter(
113                 componentId, "componentInstanceId", nodeFilterDataDefinition);
114         assertTrue(expectedNodeFilterEither.isLeft());
115         final CINodeFilterDataDefinition expectedNodeFilter = expectedNodeFilterEither.left().value();
116         assertEquals("new node filter name", expectedNodeFilter.getName());
117         assertEquals(listDataDefinition, expectedNodeFilter.getProperties());
118     }
119 }