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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
23 import fj.data.Either;
24 import org.janusgraph.core.JanusGraphVertex;
25 import org.junit.jupiter.api.BeforeEach;
26 import org.junit.jupiter.api.Test;
27 import org.mockito.Mock;
28 import org.mockito.MockitoAnnotations;
29 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
30 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
31 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
32 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
33 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
34 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
35 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
36 import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterPropertyDataDefinition;
37 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
39 import java.util.Arrays;
40 import java.util.HashMap;
42 import static org.junit.jupiter.api.Assertions.assertEquals;
43 import static org.junit.jupiter.api.Assertions.assertTrue;
44 import static org.mockito.ArgumentMatchers.any;
45 import static org.mockito.ArgumentMatchers.eq;
46 import static org.mockito.ArgumentMatchers.nullable;
47 import static org.mockito.Mockito.mock;
48 import static org.mockito.Mockito.when;
50 class NodeFilterOperationTest {
52 private final NodeFilterOperation nodeFilterOperation = new NodeFilterOperation();
55 private JanusGraphDao janusGraphDao;
59 MockitoAnnotations.openMocks(this);
60 nodeFilterOperation.setJanusGraphDao(janusGraphDao);
64 void addOrUpdateNodeFilterData() {
65 CINodeFilterDataDefinition nodeFilterDataDefinition = new CINodeFilterDataDefinition();
66 nodeFilterDataDefinition.setName("new node filter name");
67 String prop1 = "property1";
68 String prop2 = "property2";
69 RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition = new RequirementNodeFilterPropertyDataDefinition();
70 requirementNodeFilterPropertyDataDefinition.setName("Name1");
71 requirementNodeFilterPropertyDataDefinition
72 .setConstraints(Arrays.asList("mem_size:\n" + " equal: { get_property : [" + prop1 + ", size]}\n"));
73 RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition2 = new RequirementNodeFilterPropertyDataDefinition();
74 requirementNodeFilterPropertyDataDefinition2.setName("Name2");
75 requirementNodeFilterPropertyDataDefinition2
76 .setConstraints(Arrays.asList("mem_size:\n {equal: { get_property : [SELF, " + prop2 + "]}}\n"));
78 ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> listDataDefinition =
79 new ListDataDefinition<>(Arrays.asList(
80 requirementNodeFilterPropertyDataDefinition,
81 requirementNodeFilterPropertyDataDefinition2));
82 nodeFilterDataDefinition.setProperties(listDataDefinition);
84 String componentId = "componentId";
85 final GraphVertex serviceVertexMock = mock(GraphVertex.class);
86 final JanusGraphVertex serviceJanusVertex = mock(JanusGraphVertex.class);
87 when(serviceVertexMock.getVertex()).thenReturn(serviceJanusVertex);
88 when(serviceVertexMock.getUniqueId()).thenReturn("componentId");
89 when(janusGraphDao.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(serviceVertexMock));
90 when(janusGraphDao.getChildVertex(serviceVertexMock, EdgeLabelEnum.NODE_FILTER_TEMPLATE, JsonParseFlagEnum.ParseJson))
91 .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
92 when(janusGraphDao.createVertex(any())).thenReturn(Either.left(new GraphVertex()));
93 when(janusGraphDao.createEdge(eq(serviceJanusVertex), nullable(JanusGraphVertex.class), eq(EdgeLabelEnum.NODE_FILTER_TEMPLATE), eq(new HashMap<>())))
94 .thenReturn(JanusGraphOperationStatus.OK);
95 final Either<CINodeFilterDataDefinition, StorageOperationStatus> expectedNodeFilterEither = nodeFilterOperation.updateNodeFilter(
96 componentId, "componentInstanceId", nodeFilterDataDefinition);
97 assertTrue(expectedNodeFilterEither.isLeft());
98 final CINodeFilterDataDefinition expectedNodeFilter = expectedNodeFilterEither.left().value();
99 assertEquals("new node filter name", expectedNodeFilter.getName());
100 assertEquals(listDataDefinition, expectedNodeFilter.getProperties());