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.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
31 import java.util.Map.Entry;
33 import org.junit.Before;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.openecomp.sdc.be.config.Configuration;
38 import org.openecomp.sdc.be.config.ConfigurationManager;
39 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
40 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
41 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
42 import org.openecomp.sdc.be.model.CapabilityDefinition;
43 import org.openecomp.sdc.be.model.CapabilityTypeDefinition;
44 import org.openecomp.sdc.be.model.CapabiltyInstance;
45 import org.openecomp.sdc.be.model.LifecycleStateEnum;
46 import org.openecomp.sdc.be.model.ModelTestBase;
47 import org.openecomp.sdc.be.model.PropertyDefinition;
48 import org.openecomp.sdc.be.model.RequirementDefinition;
49 import org.openecomp.sdc.be.model.RequirementImplDef;
50 import org.openecomp.sdc.be.model.Resource;
51 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
52 import org.openecomp.sdc.be.model.operations.impl.CapabilityOperation;
53 import org.openecomp.sdc.be.model.operations.impl.CapabilityTypeOperation;
54 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
55 import org.openecomp.sdc.be.model.operations.impl.RequirementOperation;
56 import org.openecomp.sdc.be.model.operations.impl.ResourceOperation;
57 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
58 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
59 import org.openecomp.sdc.be.model.operations.impl.util.PrintGraph;
60 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
61 import org.openecomp.sdc.be.resources.data.UserData;
62 import org.openecomp.sdc.common.api.ConfigurationListener;
63 import org.openecomp.sdc.common.api.ConfigurationSource;
64 import org.slf4j.Logger;
65 import org.slf4j.LoggerFactory;
66 import org.springframework.test.context.ContextConfiguration;
67 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
69 import com.google.gson.Gson;
70 import com.google.gson.GsonBuilder;
72 import fj.data.Either;
74 @RunWith(SpringJUnit4ClassRunner.class)
75 @ContextConfiguration("classpath:application-context-test.xml")
76 public class RequirementOperationTest extends ModelTestBase {
77 private static Logger log = LoggerFactory.getLogger(RequirementOperationTest.class.getName());
78 private Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
80 private static String USER_ID = "muserId";
81 private static String CATEGORY_NAME = "category/mycategory";
83 private static ConfigurationManager configurationManager;
85 @javax.annotation.Resource(name = "titan-generic-dao")
86 private TitanGenericDao titanDao;
88 @javax.annotation.Resource(name = "requirement-operation")
89 private RequirementOperation requirementOperation;
91 @javax.annotation.Resource(name = "resource-operation")
92 private ResourceOperation resourceOperation;
94 @javax.annotation.Resource(name = "property-operation")
95 private PropertyOperation propertyOperation;
97 @javax.annotation.Resource(name = "capability-operation")
98 private CapabilityOperation capabilityOperation;
100 @javax.annotation.Resource(name = "capability-type-operation")
101 private CapabilityTypeOperation capabilityTypeOperation;
104 public static void setupBeforeClass() {
106 // configurationManager = new ConfigurationManager(
107 // new ConfigurationSource() {
110 // public <T> T getAndWatchConfiguration(Class<T> className,
111 // ConfigurationListener configurationListener) {
112 // // TODO Auto-generated method stub
117 // public <T> void addWatchConfiguration(Class<T> className,
118 // ConfigurationListener configurationListener) {
119 // // TODO Auto-generated method stub
124 // Configuration configuration = new Configuration();
125 // configuration.setTitanInMemoryGraph(true);
127 // configurationManager.setConfiguration(configuration);
128 ModelTestBase.init();
132 public void testDummy() {
134 assertTrue(requirementOperation != null);
139 public void testAddRequirementNotExistCapability() {
141 String reqName = "host";
142 RequirementDefinition reqDefinition = new RequirementDefinition();
143 reqDefinition.setNode("tosca.nodes.Compute");
144 reqDefinition.setRelationship("myrelationship");
145 reqDefinition.setCapability("mycapability___2");
147 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
148 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
150 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", "0.1", null,
153 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation
154 .addRequirementToResource(reqName, reqDefinition, resource.getUniqueId());
155 assertEquals("check error", StorageOperationStatus.INVALID_ID, addRequirementToResource.right().value());
160 public void createUserAndCategory() {
161 String[] category = CATEGORY_NAME.split("/");
162 OperationTestsUtil.deleteAndCreateResourceCategory(category[0], category[1], titanDao);
163 deleteAndCreateUser(USER_ID, "first_" + USER_ID, "last_" + USER_ID);
166 private UserData deleteAndCreateUser(String userId, String firstName, String lastName) {
167 UserData userData = new UserData();
168 userData.setUserId(userId);
169 userData.setFirstName(firstName);
170 userData.setLastName(lastName);
172 titanDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class);
173 titanDao.createNode(userData, UserData.class);
180 public void testAddRequirementWithCapability() {
182 String capabilityTypeName = "tosca.nodes.Container";
184 String reqName = "host";
185 RequirementDefinition reqDefinition = new RequirementDefinition();
186 reqDefinition.setNode("tosca.nodes.Compute");
187 reqDefinition.setRelationship("myrelationship");
188 reqDefinition.setCapability(capabilityTypeName);
190 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
191 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
193 capabilityTypeOperationTest.createCapability(capabilityTypeName);
195 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
196 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
198 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", "2.0", null,
201 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation
202 .addRequirementToResource(reqName, reqDefinition, resource.getUniqueId());
204 assertEquals("check requirement was added", true, addRequirementToResource.isLeft());
206 Either<Resource, StorageOperationStatus> resource2 = resourceOperation.getResource(resource.getUniqueId());
207 String json = prettyGson.toJson(resource2);
211 private void compareProperties(Map<String, PropertyDefinition> capabilityProperties,
212 CapabiltyInstance capabiltyInstance, Map<String, String> actual) {
214 Map<String, String> properties = capabiltyInstance.getProperties();
216 for (Entry<String, PropertyDefinition> entry : capabilityProperties.entrySet()) {
217 String paramName = entry.getKey();
218 PropertyDefinition propertyDefinition = entry.getValue();
219 String defaultValue = propertyDefinition.getDefaultValue();
221 String value = properties.get(paramName);
223 String actualValue = null;
224 if (actual != null) {
225 actualValue = actual.get(paramName);
227 if (actualValue != null) {
228 assertEquals("check property value of key " + paramName, value, actualValue);
230 assertEquals("check property value of key " + paramName, value, defaultValue);