3e871f1fa0c36e25ea319cb6c886344f12e97866
[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.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27
28 import java.util.ArrayList;
29 import java.util.HashMap;
30 import java.util.Iterator;
31 import java.util.List;
32 import java.util.Map;
33
34 import org.apache.tinkerpop.gremlin.structure.Vertex;
35 import org.junit.Before;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 import org.openecomp.sdc.be.config.ConfigurationManager;
40 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
41 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
42 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
43 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
44 import org.openecomp.sdc.be.model.ArtifactDefinition;
45 import org.openecomp.sdc.be.model.InterfaceDefinition;
46 import org.openecomp.sdc.be.model.LifecycleStateEnum;
47 import org.openecomp.sdc.be.model.ModelTestBase;
48 import org.openecomp.sdc.be.model.Operation;
49 import org.openecomp.sdc.be.model.Point;
50 import org.openecomp.sdc.be.model.PropertyConstraint;
51 import org.openecomp.sdc.be.model.PropertyDefinition;
52 import org.openecomp.sdc.be.model.Resource;
53 import org.openecomp.sdc.be.model.operations.api.IAdditionalInformationOperation;
54 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
55 import org.openecomp.sdc.be.model.operations.impl.ResourceOperation;
56 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
57 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
58 import org.openecomp.sdc.be.model.tosca.ToscaType;
59 import org.openecomp.sdc.be.model.tosca.constraints.GreaterThanConstraint;
60 import org.openecomp.sdc.be.model.tosca.constraints.InRangeConstraint;
61 import org.openecomp.sdc.be.model.tosca.constraints.LessOrEqualConstraint;
62 import org.openecomp.sdc.be.resources.data.UserData;
63 import org.openecomp.sdc.exception.DeleteReferencedObjectException;
64 import org.springframework.test.context.ContextConfiguration;
65 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
66
67 import com.google.gson.Gson;
68 import com.google.gson.GsonBuilder;
69 import com.thinkaurelius.titan.core.TitanGraph;
70 //import com.tinkerpop.blueprints.Vertex;
71 import com.thinkaurelius.titan.core.TitanVertex;
72
73 import fj.data.Either;
74
75 @RunWith(SpringJUnit4ClassRunner.class)
76 @ContextConfiguration("classpath:application-context-test.xml")
77 public class AdditionalInformationOperationTest extends ModelTestBase {
78
79         private Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
80
81         private static String USER_ID = "muuserid";
82         private static String CATEGORY_NAME = "category/mycategory";
83
84         @javax.annotation.Resource(name = "titan-generic-dao")
85         private TitanGenericDao titanDao;
86
87         @javax.annotation.Resource(name = "resource-operation")
88         private ResourceOperation resourceOperation;
89
90         @javax.annotation.Resource(name = "additional-information-operation")
91         private IAdditionalInformationOperation additionalInformationOperation;
92
93         @Before
94         public void createUserAndCategory() {
95                 deleteAndCreateCategory(CATEGORY_NAME);
96                 deleteAndCreateUser(USER_ID, "first_" + USER_ID, "last_" + USER_ID);
97
98         }
99
100         @BeforeClass
101         public static void setupBeforeClass() {
102
103                 ModelTestBase.init();
104
105         }
106
107         @Test
108         public void testDummy() {
109
110                 assertTrue(additionalInformationOperation != null);
111
112         }
113
114         private int getNumberOfVerticesOnGraph() {
115                 Either<TitanGraph, TitanOperationStatus> graphResult = titanDao.getGraph();
116                 TitanGraph graph = graphResult.left().value();
117
118                 int i = 0;
119                 Iterable<TitanVertex> vertices = graph.query().vertices();
120                 if (vertices != null) {
121                         Iterator<TitanVertex> iterator = vertices.iterator();
122                         while (iterator.hasNext()) {
123                                 TitanVertex vertex = iterator.next();
124                                 i++;
125                         }
126
127                 }
128
129                 titanDao.commit();
130
131                 return i;
132         }
133
134         @Test
135         public void testCreateAndDeleteResource() {
136
137                 int before = getNumberOfVerticesOnGraph();
138
139                 Resource newResource = createResource(USER_ID, CATEGORY_NAME, "testCreateAndDeleteResource", "0.1", null, false,
140                                 true);
141                 String resourceId = newResource.getUniqueId();
142
143                 Either<Resource, StorageOperationStatus> deleteResource = resourceOperation.deleteResource(resourceId);
144                 assertTrue(deleteResource.isLeft());
145
146                 int after = getNumberOfVerticesOnGraph();
147
148                 assertEquals("check number of vertices not changed", before, after);
149         }
150
151         private Resource buildResourceMetadata(String userId, String category, String resourceName,
152                         String resourceVersion) {
153
154                 Resource resource = new Resource();
155                 resource.setName(resourceName);
156                 resource.setVersion(resourceVersion);
157                 ;
158                 resource.setDescription("description 1");
159                 resource.setAbstract(false);
160                 resource.setCreatorUserId(userId);
161                 resource.setContactId("contactId@sdc.com");
162                 resource.setVendorName("vendor 1");
163                 resource.setVendorRelease("1.0.0");
164                 String[] categoryArr = category.split("/");
165                 resource.addCategory(categoryArr[0], categoryArr[1]);
166                 resource.setIcon("images/my.png");
167                 // List<String> tags = new ArrayList<String>();
168                 // tags.add("TAG1");
169                 // tags.add("TAG2");
170                 // resource.setTags(tags);
171                 return resource;
172         }
173
174         private UserData deleteAndCreateUser(String userId, String firstName, String lastName) {
175                 UserData userData = new UserData();
176                 userData.setUserId(userId);
177                 userData.setFirstName(firstName);
178                 userData.setLastName(lastName);
179
180                 titanDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class);
181                 titanDao.createNode(userData, UserData.class);
182                 titanDao.commit();
183
184                 return userData;
185         }
186
187         private void deleteAndCreateCategory(String category) {
188                 String[] names = category.split("/");
189                 OperationTestsUtil.deleteAndCreateResourceCategory(names[0], names[1], titanDao);
190         }
191
192         public Resource createResource(String userId, String category, String resourceName, String resourceVersion,
193                         String parentResourceName, boolean isAbstract, boolean isHighestVersion) {
194
195                 List<String> derivedFrom = new ArrayList<String>();
196                 if (parentResourceName != null) {
197                         derivedFrom.add(parentResourceName);
198                 }
199                 Resource resource = buildResourceMetadata(userId, category, resourceName, resourceVersion);
200
201                 resource.setAbstract(isAbstract);
202                 resource.setHighestVersion(isHighestVersion);
203
204                 Either<Resource, StorageOperationStatus> result = resourceOperation.createResource(resource, true);
205
206                 assertTrue(result.isLeft());
207                 Resource resultResource = result.left().value();
208
209                 assertEquals("check resource state", LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT,
210                                 resultResource.getLifecycleState());
211
212                 return resultResource;
213
214         }
215
216 }