Initial OpenECOMP SDC commit
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / operations / impl / RequirementOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.operations.impl;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
26
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Map.Entry;
32
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;
68
69 import com.google.gson.Gson;
70 import com.google.gson.GsonBuilder;
71
72 import fj.data.Either;
73
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();
79
80         private static String USER_ID = "muserId";
81         private static String CATEGORY_NAME = "category/mycategory";
82
83         private static ConfigurationManager configurationManager;
84
85         @javax.annotation.Resource(name = "titan-generic-dao")
86         private TitanGenericDao titanDao;
87
88         @javax.annotation.Resource(name = "requirement-operation")
89         private RequirementOperation requirementOperation;
90
91         @javax.annotation.Resource(name = "resource-operation")
92         private ResourceOperation resourceOperation;
93
94         @javax.annotation.Resource(name = "property-operation")
95         private PropertyOperation propertyOperation;
96
97         @javax.annotation.Resource(name = "capability-operation")
98         private CapabilityOperation capabilityOperation;
99
100         @javax.annotation.Resource(name = "capability-type-operation")
101         private CapabilityTypeOperation capabilityTypeOperation;
102
103         @BeforeClass
104         public static void setupBeforeClass() {
105
106                 // configurationManager = new ConfigurationManager(
107                 // new ConfigurationSource() {
108                 //
109                 // @Override
110                 // public <T> T getAndWatchConfiguration(Class<T> className,
111                 // ConfigurationListener configurationListener) {
112                 // // TODO Auto-generated method stub
113                 // return null;
114                 // }
115                 //
116                 // @Override
117                 // public <T> void addWatchConfiguration(Class<T> className,
118                 // ConfigurationListener configurationListener) {
119                 // // TODO Auto-generated method stub
120                 //
121                 // }
122                 // });
123                 //
124                 // Configuration configuration = new Configuration();
125                 // configuration.setTitanInMemoryGraph(true);
126                 //
127                 // configurationManager.setConfiguration(configuration);
128                 ModelTestBase.init();
129         }
130
131         @Test
132         public void testDummy() {
133
134                 assertTrue(requirementOperation != null);
135
136         }
137
138         @Test
139         public void testAddRequirementNotExistCapability() {
140
141                 String reqName = "host";
142                 RequirementDefinition reqDefinition = new RequirementDefinition();
143                 reqDefinition.setNode("tosca.nodes.Compute");
144                 reqDefinition.setRelationship("myrelationship");
145                 reqDefinition.setCapability("mycapability___2");
146
147                 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
148                 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
149
150                 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", "0.1", null,
151                                 true, true);
152
153                 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation
154                                 .addRequirementToResource(reqName, reqDefinition, resource.getUniqueId());
155                 assertEquals("check error", StorageOperationStatus.INVALID_ID, addRequirementToResource.right().value());
156
157         }
158
159         @Before
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);
164         }
165
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);
171
172                 titanDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class);
173                 titanDao.createNode(userData, UserData.class);
174                 titanDao.commit();
175
176                 return userData;
177         }
178         
179         @Test
180         public void testAddRequirementWithCapability() {
181
182                 String capabilityTypeName = "tosca.nodes.Container";
183
184                 String reqName = "host";
185                 RequirementDefinition reqDefinition = new RequirementDefinition();
186                 reqDefinition.setNode("tosca.nodes.Compute");
187                 reqDefinition.setRelationship("myrelationship");
188                 reqDefinition.setCapability(capabilityTypeName);
189
190                 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
191                 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
192
193                 capabilityTypeOperationTest.createCapability(capabilityTypeName);
194
195                 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
196                 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
197
198                 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", "2.0", null,
199                                 true, true);
200
201                 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation
202                                 .addRequirementToResource(reqName, reqDefinition, resource.getUniqueId());
203
204                 assertEquals("check requirement was added", true, addRequirementToResource.isLeft());
205
206                 Either<Resource, StorageOperationStatus> resource2 = resourceOperation.getResource(resource.getUniqueId());
207                 String json = prettyGson.toJson(resource2);
208                 log.debug(json);
209         }
210         
211         private void compareProperties(Map<String, PropertyDefinition> capabilityProperties,
212                         CapabiltyInstance capabiltyInstance, Map<String, String> actual) {
213
214                 Map<String, String> properties = capabiltyInstance.getProperties();
215
216                 for (Entry<String, PropertyDefinition> entry : capabilityProperties.entrySet()) {
217                         String paramName = entry.getKey();
218                         PropertyDefinition propertyDefinition = entry.getValue();
219                         String defaultValue = propertyDefinition.getDefaultValue();
220
221                         String value = properties.get(paramName);
222
223                         String actualValue = null;
224                         if (actual != null) {
225                                 actualValue = actual.get(paramName);
226                         }
227                         if (actualValue != null) {
228                                 assertEquals("check property value of key " + paramName, value, actualValue);
229                         } else {
230                                 assertEquals("check property value of key " + paramName, value, defaultValue);
231                         }
232                 }
233
234         }
235
236 }