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.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
28 import fj.data.Either;
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
33 import org.junit.jupiter.api.BeforeAll;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.junit.jupiter.api.Test;
36 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
37 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
38 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
39 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
40 import org.openecomp.sdc.be.dao.neo4j.GraphEdgePropertiesDictionary;
41 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
42 import org.openecomp.sdc.be.model.ArtifactDefinition;
43 import org.openecomp.sdc.be.model.HeatParameterDefinition;
44 import org.openecomp.sdc.be.model.ModelTestBase;
45 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
46 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
47 import org.openecomp.sdc.be.resources.data.ArtifactData;
48 import org.openecomp.sdc.be.resources.data.HeatParameterData;
49 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
50 import org.openecomp.sdc.be.resources.data.UniqueIdData;
51 import org.openecomp.sdc.be.resources.data.UserData;
52 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
53 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
55 @SpringJUnitConfig(locations = "classpath:application-context-test.xml")
56 public class ArtifactOperationTest extends ModelTestBase {
58 private static final String ARTIFACT_NAME = "myHeatArtifact";
59 private static final String RESOURCE_ID = "resourceId";
60 private static final String RESOURCE_ID_2 = "resourceId2";
61 private static final String USER_ID = "muUserId";
62 @javax.annotation.Resource(name = "janusgraph-generic-dao")
63 private JanusGraphGenericDao janusGraphDao;
64 @javax.annotation.Resource
65 private ArtifactOperation artifactOperation;
68 public static void setupBeforeClass() {
73 public void createUserAndCategory() {
74 String CATEGORY_NAME = "category/mycategory";
75 deleteAndCreateCategory(CATEGORY_NAME);
76 deleteAndCreateUser();
80 public void testCreateDeleteArtifactWithHeatParams() {
81 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
83 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
84 assertNotNull(heatParameters);
85 assertEquals(1, heatParameters.size());
86 HeatParameterDefinition parameter = heatParameters.get(0);
87 HeatParameterData parameterData = new HeatParameterData(parameter);
88 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
89 parameterData.getUniqueId(), HeatParameterData.class);
90 assertTrue(parameterNode.isLeft());
92 Either<ArtifactDefinition, StorageOperationStatus> removeArifact = artifactOperation.removeArifactFromResource(RESOURCE_ID,
93 artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
94 assertTrue(removeArifact.isLeft());
96 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
97 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterDelete = janusGraphDao.getNode(artifactData.getUniqueIdKey(),
98 artifactData.getUniqueId(), ArtifactData.class);
99 assertTrue(artifactAfterDelete.isRight());
101 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
102 parameterData.getUniqueId(), HeatParameterData.class);
103 assertTrue(parameterNodeAfterDelete.isRight());
105 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
109 public void testUpdateArtifactWithHeatParams() {
110 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
112 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
113 assertNotNull(heatParameters);
114 assertEquals(1, heatParameters.size());
115 HeatParameterDefinition parameter = heatParameters.get(0);
116 HeatParameterData parameterData = new HeatParameterData(parameter);
117 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
118 parameterData.getUniqueId(), HeatParameterData.class);
119 assertTrue(parameterNode.isLeft());
121 // update to artifact without params
122 ArtifactDefinition artifactNoParams = createArtifactDefinition();
123 artifactNoParams.setUniqueId(artifactWithHeat.getUniqueId());
124 artifactNoParams.setArtifactType("HEAT");
125 artifactNoParams.setArtifactVersion("2");
126 artifactNoParams.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
128 Either<ArtifactDefinition, StorageOperationStatus> updateArifact = artifactOperation.updateArifactOnResource(artifactNoParams, RESOURCE_ID,
129 artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, false);
130 assertTrue(updateArifact.isLeft());
132 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
133 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterUpdate = janusGraphDao.getNode(artifactData.getUniqueIdKey(),
134 artifactData.getUniqueId(), ArtifactData.class);
135 assertTrue(artifactAfterUpdate.isLeft());
136 ArtifactData artifactAfterUpdateValue = artifactAfterUpdate.left().value();
137 assertEquals(artifactNoParams.getArtifactVersion(), artifactAfterUpdateValue.getArtifactDataDefinition()
138 .getArtifactVersion());
140 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
141 parameterData.getUniqueId(), HeatParameterData.class);
142 assertTrue(parameterNodeAfterDelete.isRight());
144 artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
145 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
146 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID_2), ResourceMetadataData.class);
150 public void testUpdateArtifactMetadataWithHeatParams() {
152 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
154 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
155 assertNotNull(heatParameters);
156 assertEquals(1, heatParameters.size());
157 HeatParameterDefinition parameter = heatParameters.get(0);
158 HeatParameterData parameterData = new HeatParameterData(parameter);
159 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
160 parameterData.getUniqueId(), HeatParameterData.class);
161 assertTrue(parameterNode.isLeft());
163 // update to artifact without params
164 artifactWithHeat.setArtifactVersion("2");
165 artifactWithHeat.setArtifactChecksum(null);
166 artifactWithHeat.setPayloadData(null);
168 Either<ArtifactDefinition, StorageOperationStatus> updateArifact = artifactOperation.updateArifactOnResource(artifactWithHeat, RESOURCE_ID,
169 artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, false);
170 assertTrue(updateArifact.isLeft());
172 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
173 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterUpdate = janusGraphDao.getNode(artifactData.getUniqueIdKey(),
174 artifactData.getUniqueId(), ArtifactData.class);
175 assertTrue(artifactAfterUpdate.isLeft());
176 ArtifactData artifactAfterUpdateValue = artifactAfterUpdate.left().value();
177 assertEquals(artifactWithHeat.getArtifactVersion(), artifactAfterUpdateValue.getArtifactDataDefinition()
178 .getArtifactVersion());
180 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
181 parameterData.getUniqueId(), HeatParameterData.class);
182 assertTrue(parameterNodeAfterDelete.isLeft());
184 artifactOperation.removeArifactFromResource(RESOURCE_ID_2, artifactAfterUpdateValue.getUniqueId(), NodeTypeEnum.Resource, true, false);
185 artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
186 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
187 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID_2), ResourceMetadataData.class);
191 public void updateHeatArtifactWithTwoResources() {
192 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
194 ResourceMetadataData resource2 = createResource(RESOURCE_ID_2);
195 Map<String, Object> props = new HashMap<>();
196 props.put(GraphEdgePropertiesDictionary.NAME.getProperty(), ArtifactGroupTypeEnum.DEPLOYMENT.name());
197 Either<GraphRelation, JanusGraphOperationStatus> createRelation = janusGraphDao.createRelation(resource2, new ArtifactData(artifactWithHeat),
198 GraphEdgeLabels.ARTIFACT_REF, props);
199 assertTrue(createRelation.isLeft());
201 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
202 assertNotNull(heatParameters);
203 assertEquals(1, heatParameters.size());
204 HeatParameterDefinition parameter = heatParameters.get(0);
205 HeatParameterData parameterData = new HeatParameterData(parameter);
206 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
207 parameterData.getUniqueId(), HeatParameterData.class);
208 assertTrue(parameterNode.isLeft());
210 ArtifactDefinition atifactToUpdate = new ArtifactDefinition(artifactWithHeat);
212 // update to artifact without params
213 atifactToUpdate.setArtifactVersion("2");
214 atifactToUpdate.setArtifactChecksum(null);
215 atifactToUpdate.setPayloadData(null);
217 HeatParameterDefinition heatParamUpdate = new HeatParameterDefinition(parameter);
218 List<HeatParameterDefinition> heatParametersUpdated = new ArrayList<>();
219 heatParamUpdate.setCurrentValue("55");
220 heatParametersUpdated.add(heatParamUpdate);
221 atifactToUpdate.setListHeatParameters(heatParametersUpdated);
223 Either<ArtifactDefinition, StorageOperationStatus> updateArifact = artifactOperation.updateArifactOnResource(atifactToUpdate, RESOURCE_ID_2,
224 atifactToUpdate.getUniqueId(), NodeTypeEnum.Resource, false);
225 assertTrue(updateArifact.isLeft());
227 // verify old artifact and parameter still exist
228 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
229 Either<ArtifactData, JanusGraphOperationStatus> origArtifact = janusGraphDao.getNode(artifactData.getUniqueIdKey(),
230 artifactData.getUniqueId(), ArtifactData.class);
231 assertTrue(origArtifact.isLeft());
232 ArtifactData origArtifactData = origArtifact.left().value();
233 assertEquals(artifactWithHeat.getArtifactVersion(), origArtifactData.getArtifactDataDefinition()
234 .getArtifactVersion());
236 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(),
237 parameterData.getUniqueId(), HeatParameterData.class);
238 assertTrue(parameterNodeAfterDelete.isLeft());
240 // verify new artifact and new parameter
241 ArtifactDefinition artifactDefinitionUpdated = updateArifact.left().value();
242 ArtifactData artifactDataUpdated = new ArtifactData(artifactDefinitionUpdated);
243 Either<ArtifactData, JanusGraphOperationStatus> updatedArtifact = janusGraphDao.getNode(artifactDataUpdated.getUniqueIdKey(),
244 artifactDataUpdated.getUniqueId(), ArtifactData.class);
245 assertTrue(updatedArtifact.isLeft());
246 ArtifactData updatedArtifactData = updatedArtifact.left().value();
247 assertEquals(atifactToUpdate.getArtifactVersion(), updatedArtifactData.getArtifactDataDefinition()
248 .getArtifactVersion());
249 assertFalse(updatedArtifactData.getUniqueId().equalsIgnoreCase(origArtifactData.getUniqueId()));
251 List<HeatParameterDefinition> heatParametersAfterUpdate = artifactDefinitionUpdated.getListHeatParameters();
252 assertNotNull(heatParametersAfterUpdate);
253 assertEquals(1, heatParametersAfterUpdate.size());
254 HeatParameterDefinition UpdatedHeatParameter = heatParametersAfterUpdate.get(0);
255 assertFalse(UpdatedHeatParameter.getUniqueId().equalsIgnoreCase(parameterData.getUniqueId()));
256 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterUpdate = janusGraphDao.getNode(
257 new HeatParameterData(UpdatedHeatParameter).getUniqueIdKey(), UpdatedHeatParameter.getUniqueId(), HeatParameterData.class);
258 assertTrue(parameterNodeAfterUpdate.isLeft());
260 // delete new artifact
261 Either<ArtifactDefinition, StorageOperationStatus> removeArifact = artifactOperation.removeArifactFromResource(RESOURCE_ID_2,
262 artifactDefinitionUpdated.getUniqueId(), NodeTypeEnum.Resource, true, false);
263 assertTrue(removeArifact.isLeft());
265 // verify old artifact and parameter still exist
266 origArtifact = janusGraphDao.getNode(artifactData.getUniqueIdKey(), artifactData.getUniqueId(), ArtifactData.class);
267 assertTrue(origArtifact.isLeft());
268 origArtifactData = origArtifact.left().value();
269 assertEquals(artifactWithHeat.getArtifactVersion(), origArtifactData.getArtifactDataDefinition()
270 .getArtifactVersion());
272 parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
273 assertTrue(parameterNodeAfterDelete.isLeft());
275 // verify new artifact is deleted
276 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterDelete = janusGraphDao.getNode(artifactDataUpdated.getUniqueIdKey(),
277 artifactDataUpdated.getUniqueId(), ArtifactData.class);
278 assertTrue(artifactAfterDelete.isRight());
280 parameterNodeAfterDelete = janusGraphDao.getNode(new HeatParameterData(UpdatedHeatParameter).getUniqueIdKey(),
281 new HeatParameterData(UpdatedHeatParameter).getUniqueId(), HeatParameterData.class);
282 assertTrue(parameterNodeAfterDelete.isRight());
284 artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
285 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
286 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID_2), ResourceMetadataData.class);
289 private ArtifactDefinition createResourceWithHeat() {
290 createResource(RESOURCE_ID);
291 ArtifactDefinition artifactDefinition = createArtifactDefinition();
292 artifactDefinition.setArtifactType("HEAT");
293 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
295 List<HeatParameterDefinition> heatParams = new ArrayList<>();
296 HeatParameterDefinition heatParam = new HeatParameterDefinition();
297 heatParam.setCurrentValue("11");
298 heatParam.setDefaultValue("22");
299 heatParam.setDescription("desc");
300 heatParam.setName("myParam");
301 heatParam.setType("number");
302 heatParams.add(heatParam);
303 artifactDefinition.setListHeatParameters(heatParams);
305 Either<ArtifactDefinition, StorageOperationStatus> artifact = artifactOperation.addArifactToComponent(artifactDefinition, RESOURCE_ID,
306 NodeTypeEnum.Resource, true, false);
307 assertTrue(artifact.isLeft());
308 return artifact.left().value();
311 private ArtifactDefinition createArtifactDefinition() {
312 ArtifactDefinition artifactInfo = new ArtifactDefinition();
314 artifactInfo.setArtifactName(ArtifactOperationTest.ARTIFACT_NAME + ".sh");
315 artifactInfo.setArtifactType("SHELL");
316 artifactInfo.setDescription("hdkfhskdfgh");
317 artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
319 artifactInfo.setUserIdCreator(ArtifactOperationTest.USER_ID);
320 String fullName = "Jim H";
321 artifactInfo.setUpdaterFullName(fullName);
322 long time = System.currentTimeMillis();
323 artifactInfo.setCreatorFullName(fullName);
324 artifactInfo.setCreationDate(time);
325 artifactInfo.setLastUpdateDate(time);
326 artifactInfo.setUserIdLastUpdater(ArtifactOperationTest.USER_ID);
327 artifactInfo.setArtifactLabel(ArtifactOperationTest.ARTIFACT_NAME);
328 artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(ArtifactOperationTest.RESOURCE_ID, artifactInfo.getArtifactLabel()));
332 private void deleteAndCreateCategory(String category) {
333 String[] names = category.split("/");
334 OperationTestsUtil.deleteAndCreateServiceCategory(category, janusGraphDao);
335 OperationTestsUtil.deleteAndCreateResourceCategory(names[0], names[1], janusGraphDao);
338 private void deleteAndCreateUser() {
339 UserData userData = new UserData();
340 userData.setUserId(ArtifactOperationTest.USER_ID);
341 userData.setFirstName("first_muUserId");
342 userData.setLastName("last_muUserId");
343 userData.setRole("ADMIN");
345 janusGraphDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), ArtifactOperationTest.USER_ID, UserData.class);
346 janusGraphDao.createNode(userData, UserData.class);
347 janusGraphDao.commit();
350 public ResourceMetadataData createResource(String resourceName) {
352 ResourceMetadataData serviceData1 = new ResourceMetadataData();
353 serviceData1.getMetadataDataDefinition().setUniqueId(resourceName);
354 Either<ResourceMetadataData, JanusGraphOperationStatus> createNode = janusGraphDao.createNode(serviceData1, ResourceMetadataData.class);
356 assertTrue("check resource created", createNode.isLeft());
357 return createNode.left().value();