62e6adab7f7d477de318973eae90fc684eda5d89
[sdc.git] /
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.assertTrue;
25
26 import java.util.Map;
27 import java.util.Map.Entry;
28
29 import org.junit.Before;
30 import org.junit.BeforeClass;
31 import org.junit.Ignore;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
35 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
36 import org.openecomp.sdc.be.model.CapabiltyInstance;
37 import org.openecomp.sdc.be.model.ModelTestBase;
38 import org.openecomp.sdc.be.model.PropertyDefinition;
39 import org.openecomp.sdc.be.model.RequirementDefinition;
40 import org.openecomp.sdc.be.model.Resource;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
43 import org.openecomp.sdc.be.resources.data.UserData;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46 import org.springframework.test.context.ContextConfiguration;
47 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
48
49 import com.google.gson.Gson;
50 import com.google.gson.GsonBuilder;
51
52 import fj.data.Either;
53
54 @RunWith(SpringJUnit4ClassRunner.class)
55 @ContextConfiguration("classpath:application-context-test.xml")
56 public class RequirementOperationTest extends ModelTestBase {
57         private static Logger log = LoggerFactory.getLogger(RequirementOperationTest.class.getName());
58         private Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
59
60         private static String USER_ID = "muUserId";
61         private static String CATEGORY_NAME = "category/mycategory";
62
63         @javax.annotation.Resource(name = "titan-generic-dao")
64         private TitanGenericDao titanDao;
65
66         @javax.annotation.Resource(name = "requirement-operation")
67         private RequirementOperation requirementOperation;
68
69         @javax.annotation.Resource(name = "resource-operation")
70         private ResourceOperation resourceOperation;
71
72         @javax.annotation.Resource(name = "property-operation")
73         private PropertyOperation propertyOperation;
74
75         @javax.annotation.Resource(name = "capability-operation")
76         private CapabilityOperation capabilityOperation;
77
78         @javax.annotation.Resource(name = "capability-type-operation")
79         private CapabilityTypeOperation capabilityTypeOperation;
80
81         @BeforeClass
82         public static void setupBeforeClass() {
83
84                 // configurationManager = new ConfigurationManager(
85                 // new ConfigurationSource() {
86                 //
87                 // @Override
88                 // public <T> T getAndWatchConfiguration(Class<T> className,
89                 // ConfigurationListener configurationListener) {
90                 // // TODO Auto-generated method stub
91                 // return null;
92                 // }
93                 //
94                 // @Override
95                 // public <T> void addWatchConfiguration(Class<T> className,
96                 // ConfigurationListener configurationListener) {
97                 // // TODO Auto-generated method stub
98                 //
99                 // }
100                 // });
101                 //
102                 // Configuration configuration = new Configuration();
103                 // configuration.setTitanInMemoryGraph(true);
104                 //
105                 // configurationManager.setConfiguration(configuration);
106                 ModelTestBase.init();
107         }
108
109         @Test
110         public void testDummy() {
111
112                 assertTrue(requirementOperation != null);
113
114         }
115
116         @Test
117         public void testAddRequirementNotExistCapability() {
118
119                 String reqName = "host";
120                 RequirementDefinition reqDefinition = new RequirementDefinition();
121                 reqDefinition.setNode("tosca.nodes.Compute");
122                 reqDefinition.setRelationship("myrelationship");
123                 reqDefinition.setCapability("mycapability___2");
124
125                 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
126                 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
127
128                 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", "0.1", null, true, true);
129
130                 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation.addRequirementToResource(reqName, reqDefinition, resource.getUniqueId());
131                 assertEquals("check error", StorageOperationStatus.INVALID_ID, addRequirementToResource.right().value());
132
133         }
134
135         @Before
136         public void createUserAndCategory() {
137                 String[] category = CATEGORY_NAME.split("/");
138                 OperationTestsUtil.deleteAndCreateResourceCategory(category[0], category[1], titanDao);
139                 deleteAndCreateUser(USER_ID, "first_" + USER_ID, "last_" + USER_ID);
140         }
141
142         private UserData deleteAndCreateUser(String userId, String firstName, String lastName) {
143                 UserData userData = new UserData();
144                 userData.setUserId(userId);
145                 userData.setFirstName(firstName);
146                 userData.setLastName(lastName);
147
148                 titanDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class);
149                 titanDao.createNode(userData, UserData.class);
150                 titanDao.commit();
151
152                 return userData;
153         }
154
155         /*
156          * private void deleteAndCreateCategory(String category) { CategoryData categoryData = new CategoryData(); categoryData.setName(category);
157          * 
158          * titanDao.deleteNode(categoryData, CategoryData.class); Either<CategoryData, TitanOperationStatus> createNode = titanDao .createNode(categoryData, CategoryData.class); System.out.println("after creating caetgory " + createNode);
159          * 
160          * }
161          */
162
163         @Test
164         @Ignore
165         public void testAddRequirementWithCapability() {
166
167                 String capabilityTypeName = "tosca.nodes.Container";
168
169                 String reqName = "host";
170                 RequirementDefinition reqDefinition = new RequirementDefinition();
171                 reqDefinition.setNode("tosca.nodes.Compute");
172                 reqDefinition.setRelationship("myrelationship");
173                 reqDefinition.setCapability(capabilityTypeName);
174
175                 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
176                 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
177
178                 capabilityTypeOperationTest.createCapability(capabilityTypeName);
179
180                 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
181                 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
182
183                 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", "2.0", null, true, true);
184
185                 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation.addRequirementToResource(reqName, reqDefinition, resource.getUniqueId());
186
187                 assertEquals("check requirement was added", true, addRequirementToResource.isLeft());
188
189                 Either<Resource, StorageOperationStatus> resource2 = resourceOperation.getResource(resource.getUniqueId());
190                 String json = prettyGson.toJson(resource2);
191                 log.debug(json);
192         }
193
194         private void compareProperties(Map<String, PropertyDefinition> capabilityProperties, CapabiltyInstance capabiltyInstance, Map<String, String> actual) {
195
196                 Map<String, String> properties = capabiltyInstance.getProperties();
197
198                 for (Entry<String, PropertyDefinition> entry : capabilityProperties.entrySet()) {
199                         String paramName = entry.getKey();
200                         PropertyDefinition propertyDefinition = entry.getValue();
201                         String defaultValue = propertyDefinition.getDefaultValue();
202
203                         String value = properties.get(paramName);
204
205                         String actualValue = null;
206                         if (actual != null) {
207                                 actualValue = actual.get(paramName);
208                         }
209                         if (actualValue != null) {
210                                 assertEquals("check property value of key " + paramName, value, actualValue);
211                         } else {
212                                 assertEquals("check property value of key " + paramName, value, defaultValue);
213                         }
214                 }
215
216         }
217
218 }