2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.model.operations.impl;
23 import static org.junit.Assert.assertNotNull;
24 import static org.junit.Assert.assertTrue;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.when;
29 import fj.data.Either;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
34 import org.apache.commons.lang3.StringUtils;
35 import org.apache.commons.lang3.tuple.ImmutablePair;
36 import org.junit.Assert;
37 import org.junit.jupiter.api.BeforeAll;
38 import org.junit.jupiter.api.BeforeEach;
39 import org.junit.jupiter.api.Test;
40 import org.mockito.InjectMocks;
41 import org.mockito.Mockito;
42 import org.mockito.MockitoAnnotations;
43 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
44 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
45 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
46 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
47 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
48 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
49 import org.openecomp.sdc.be.datatypes.components.ComponentMetadataDataDefinition;
50 import org.openecomp.sdc.be.datatypes.enums.ModelTypeEnum;
51 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
52 import org.openecomp.sdc.be.model.InterfaceDefinition;
53 import org.openecomp.sdc.be.model.ModelTestBase;
54 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
55 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
56 import org.openecomp.sdc.be.resources.data.InterfaceData;
57 import org.openecomp.sdc.be.resources.data.ModelData;
58 import org.openecomp.sdc.be.resources.data.OperationData;
59 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
60 import org.openecomp.sdc.be.resources.data.UserData;
61 import org.openecomp.sdc.be.resources.data.category.CategoryData;
62 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
64 @SpringJUnitConfig(locations = "classpath:application-context-test.xml")
65 public class InterfaceLifecycleOperationTest {
67 private static String USER_ID = "muUserId";
68 private static String CATEGORY_NAME = "category/mycategory";
69 private static String MODEL_NAME = "Test";
70 private static String INTERFACE_TYPE = "tosca.interfaces.standard";
72 JanusGraphGenericDao janusGraphGenericDao = Mockito.mock(JanusGraphGenericDao.class);
74 private InterfaceLifecycleOperation interfaceLifecycleOperation = new InterfaceLifecycleOperation();
77 public static void setupBeforeClass() {
82 public void createUserAndCategory() {
83 MockitoAnnotations.initMocks(this);
84 CategoryData categoryData = new CategoryData(NodeTypeEnum.ResourceCategory);
85 when(janusGraphGenericDao.createNode(any(), any())).thenReturn(Either.left(categoryData));
86 deleteAndCreateCategory(CATEGORY_NAME);
87 deleteAndCreateUser(USER_ID, "first_" + USER_ID, "last_" + USER_ID);
91 public void testDummy() {
92 assertNotNull(interfaceLifecycleOperation);
95 private InterfaceDefinition buildInterfaceDefinition() {
96 InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
97 interfaceDefinition.setType(INTERFACE_TYPE);
98 interfaceDefinition.setCreationDate(101232L);
99 interfaceDefinition.setModel(MODEL_NAME);
100 return interfaceDefinition;
103 private void deleteAndCreateCategory(String category) {
104 String[] names = category.split("/");
105 OperationTestsUtil.deleteAndCreateResourceCategory(names[0], names[1], janusGraphGenericDao);
108 private UserData deleteAndCreateUser(String userId, String firstName, String lastName) {
109 UserData userData = new UserData();
110 userData.setUserId(userId);
111 userData.setFirstName(firstName);
112 userData.setLastName(lastName);
114 janusGraphGenericDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId,
116 janusGraphGenericDao.createNode(userData, UserData.class);
117 janusGraphGenericDao.commit();
123 public void createInterfaceOnResourceTest() {
124 when(janusGraphGenericDao.getChildrenNodes(any(), any(), any(), any(), eq(InterfaceData.class))).thenReturn(
125 Either.right(JanusGraphOperationStatus.GRAPH_IS_NOT_AVAILABLE));
126 when(janusGraphGenericDao.getChild(any(), any(), any(), eq(NodeTypeEnum.Resource), eq(ResourceMetadataData.class))).thenReturn(
127 Either.right(JanusGraphOperationStatus.NOT_FOUND));
128 when(janusGraphGenericDao.getNode(any(), any(), eq(InterfaceData.class))).thenReturn(Either.right(JanusGraphOperationStatus.ALREADY_EXIST));
129 when(janusGraphGenericDao.createNode(any(), eq(InterfaceData.class))).thenReturn(Either.right(JanusGraphOperationStatus.ALREADY_EXIST));
130 when(janusGraphGenericDao.createRelation(any(), any(), eq(GraphEdgeLabels.INTERFACE), any())).thenReturn(
131 Either.right(JanusGraphOperationStatus.OK));
132 Assert.assertTrue(interfaceLifecycleOperation.createInterfaceOnResource(buildInterfaceDefinition(), "", "", false, false).isRight());
133 when(janusGraphGenericDao.createRelation(any(), any(), eq(GraphEdgeLabels.INTERFACE), any())).thenReturn(
134 Either.left(Mockito.mock(GraphRelation.class)));
135 Assert.assertTrue(interfaceLifecycleOperation.createInterfaceOnResource(buildInterfaceDefinition(), "", "", false, false).isRight());
139 public void getAllInterfacesOfResourceTest() {
140 assertTrue(interfaceLifecycleOperation.getAllInterfacesOfResource(null, true).isRight());
141 when(janusGraphGenericDao.getChildrenNodes(any(), any(), any(), any(), eq(InterfaceData.class))).thenReturn(
142 Either.right(JanusGraphOperationStatus.GRAPH_IS_NOT_AVAILABLE));
143 when(janusGraphGenericDao.getChild(any(), any(), any(), eq(NodeTypeEnum.Resource), eq(ResourceMetadataData.class))).thenReturn(
144 Either.right(JanusGraphOperationStatus.NOT_FOUND));
145 assertTrue(interfaceLifecycleOperation.getAllInterfacesOfResource("null", true).isLeft());
147 when(janusGraphGenericDao.getChild(any(), any(), any(), eq(NodeTypeEnum.Resource), eq(ResourceMetadataData.class))).thenReturn(
148 Either.right(JanusGraphOperationStatus.ALREADY_EXIST));
149 assertTrue(interfaceLifecycleOperation.getAllInterfacesOfResource("null", true).isRight());
151 ResourceMetadataData key = Mockito.mock(ResourceMetadataData.class);
152 ComponentMetadataDataDefinition def = Mockito.mock(ComponentMetadataDataDefinition.class);
153 when(def.getUniqueId()).thenReturn("UNIIIIIIQUE IDDDD");
154 when(key.getMetadataDataDefinition()).thenReturn(def);
155 ImmutablePair<ResourceMetadataData, GraphEdge> pair = new ImmutablePair<>(key, Mockito.mock(GraphEdge.class));
156 when(janusGraphGenericDao.getChild(any(), any(), any(), eq(NodeTypeEnum.Resource), eq(ResourceMetadataData.class)))
157 .thenReturn(Either.left(pair))
158 .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
159 assertTrue(interfaceLifecycleOperation.getAllInterfacesOfResource("null", true).isLeft());
163 public void testGetAllInterfaceLifecycleTypes_TypesNotFound() {
164 when(janusGraphGenericDao.getByCriteriaForModel(NodeTypeEnum.Interface, Collections.emptyMap(), StringUtils.EMPTY,
165 InterfaceData.class)).thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
166 Either<Map<String, InterfaceDefinition>, StorageOperationStatus> types = interfaceLifecycleOperation.getAllInterfaceLifecycleTypes(
168 Assert.assertEquals(types.isRight(), Boolean.TRUE);
172 public void testGetAllInterfaceLifecycleTypes_Success() {
173 final String UNIQUE_ID = "UNIQUE_ID";
174 final String TYPE = "UNIQUE_ID";
175 InterfaceData interfaceData = new InterfaceData();
176 interfaceData.getInterfaceDataDefinition().setUniqueId(UNIQUE_ID);
177 interfaceData.getInterfaceDataDefinition().setType(TYPE);
178 List<InterfaceData> interfaceDataList = new ArrayList<>();
179 interfaceDataList.add(interfaceData);
180 Either<List<InterfaceData>, JanusGraphOperationStatus> allInterfaceTypes = Either.left(interfaceDataList);
181 when(janusGraphGenericDao
182 .getByCriteriaForModel(NodeTypeEnum.Interface, Collections.emptyMap(), StringUtils.EMPTY, InterfaceData.class)).thenReturn(
185 List<ImmutablePair<OperationData, GraphEdge>> list = new ArrayList<>();
186 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> childrenNodes = Either.left(list);
187 when(janusGraphGenericDao.getChildrenNodes(interfaceData.getUniqueIdKey(), interfaceData.getUniqueId(), GraphEdgeLabels.INTERFACE_OPERATION,
188 NodeTypeEnum.InterfaceOperation, OperationData.class)).thenReturn(childrenNodes);
189 when(janusGraphGenericDao.getParentNode(any(), any(), any(), any(), any()))
190 .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
191 Either<Map<String, InterfaceDefinition>, StorageOperationStatus> types = interfaceLifecycleOperation.getAllInterfaceLifecycleTypes(
193 Assert.assertEquals(types.left().value().size(), 1);
197 public void testGetAllInterfaceLifecycleTypesWithModel() {
198 final var uid = UniqueIdBuilder.buildInterfaceTypeUid(MODEL_NAME, INTERFACE_TYPE);
199 final var modelData = new ModelData(MODEL_NAME, uid, ModelTypeEnum.NORMATIVE);
200 final ImmutablePair<GraphNode, GraphEdge> modelNode = new ImmutablePair<>(modelData, Mockito.mock(GraphEdge.class));
202 final InterfaceData interfaceData = new InterfaceData();
203 interfaceData.getInterfaceDataDefinition().setUniqueId(uid);
204 interfaceData.getInterfaceDataDefinition().setType(INTERFACE_TYPE);
206 final List<InterfaceData> interfaceTypes = new ArrayList<InterfaceData>();
207 interfaceTypes.add(interfaceData);
209 when(janusGraphGenericDao.getParentNode(any(), any(), any(), any(), any()))
210 .thenReturn(Either.left(modelNode));
211 when(janusGraphGenericDao
212 .getByCriteriaForModel(NodeTypeEnum.Interface, Collections.emptyMap(), MODEL_NAME, InterfaceData.class)).thenReturn(
213 Either.left(interfaceTypes));
214 when(janusGraphGenericDao.getChildrenNodes(interfaceData.getUniqueIdKey(), interfaceData.getUniqueId(), GraphEdgeLabels.INTERFACE_OPERATION,
215 NodeTypeEnum.InterfaceOperation, OperationData.class)).thenReturn(Either.left(Collections.emptyList()));
217 Assert.assertEquals(1, interfaceLifecycleOperation.getAllInterfaceLifecycleTypes(MODEL_NAME).left().value().size());