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 fj.data.Either;
24 import org.junit.Before;
25 import org.junit.BeforeClass;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
29 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
30 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
31 import org.openecomp.sdc.be.dao.neo4j.GraphEdgePropertiesDictionary;
32 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
33 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
34 import org.openecomp.sdc.be.model.*;
35 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
36 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
37 import org.openecomp.sdc.be.resources.data.*;
38 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
39 import org.springframework.test.context.ContextConfiguration;
40 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
42 import java.util.ArrayList;
43 import java.util.HashMap;
44 import java.util.List;
47 import static org.junit.Assert.*;
49 @RunWith(SpringJUnit4ClassRunner.class)
50 @ContextConfiguration("classpath:application-context-test.xml")
51 public class ArtifactOperationTest extends ModelTestBase {
53 private static final String ARTIFACT_NAME = "myHeatArtifact";
55 @javax.annotation.Resource(name = "janusgraph-generic-dao")
56 private JanusGraphGenericDao janusGraphDao;
58 @javax.annotation.Resource
59 private ArtifactOperation artifactOperation;
61 private static final String RESOURCE_ID = "resourceId";
62 private static final String RESOURCE_ID_2 = "resourceId2";
64 private static final String USER_ID = "muUserId";
67 public static void setupBeforeClass() {
72 public void createUserAndCategory() {
73 String CATEGORY_NAME = "category/mycategory";
74 deleteAndCreateCategory(CATEGORY_NAME);
75 deleteAndCreateUser();
79 public void testCreateDeleteArtifactWithHeatParams() {
80 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
82 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
83 assertNotNull(heatParameters);
84 assertEquals(1, heatParameters.size());
85 HeatParameterDefinition parameter = heatParameters.get(0);
86 HeatParameterData parameterData = new HeatParameterData(parameter);
87 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
88 assertTrue(parameterNode.isLeft());
90 Either<ArtifactDefinition, StorageOperationStatus> removeArifact = artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
91 assertTrue(removeArifact.isLeft());
93 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
94 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterDelete = janusGraphDao.getNode(artifactData.getUniqueIdKey(), artifactData.getUniqueId(), ArtifactData.class);
95 assertTrue(artifactAfterDelete.isRight());
97 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
98 assertTrue(parameterNodeAfterDelete.isRight());
100 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
104 public void testUpdateArtifactWithHeatParams() {
105 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
107 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
108 assertNotNull(heatParameters);
109 assertEquals(1, heatParameters.size());
110 HeatParameterDefinition parameter = heatParameters.get(0);
111 HeatParameterData parameterData = new HeatParameterData(parameter);
112 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
113 assertTrue(parameterNode.isLeft());
115 // update to artifact without params
116 ArtifactDefinition artifactNoParams = createArtifactDefinition();
117 artifactNoParams.setUniqueId(artifactWithHeat.getUniqueId());
118 artifactNoParams.setArtifactType("HEAT");
119 artifactNoParams.setArtifactVersion("2");
120 artifactNoParams.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
122 Either<ArtifactDefinition, StorageOperationStatus> updateArifact = artifactOperation.updateArifactOnResource(artifactNoParams, RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, false);
123 assertTrue(updateArifact.isLeft());
125 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
126 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterUpdate = janusGraphDao.getNode(artifactData.getUniqueIdKey(), artifactData.getUniqueId(), ArtifactData.class);
127 assertTrue(artifactAfterUpdate.isLeft());
128 ArtifactData artifactAfterUpdateValue = artifactAfterUpdate.left().value();
129 assertEquals(artifactNoParams.getArtifactVersion(), artifactAfterUpdateValue.getArtifactDataDefinition()
130 .getArtifactVersion());
132 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
133 assertTrue(parameterNodeAfterDelete.isRight());
135 artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
136 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
137 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID_2), ResourceMetadataData.class);
141 public void testUpdateArtifactMetadataWithHeatParams() {
143 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
145 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
146 assertNotNull(heatParameters);
147 assertEquals(1, heatParameters.size());
148 HeatParameterDefinition parameter = heatParameters.get(0);
149 HeatParameterData parameterData = new HeatParameterData(parameter);
150 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
151 assertTrue(parameterNode.isLeft());
153 // update to artifact without params
154 artifactWithHeat.setArtifactVersion("2");
155 artifactWithHeat.setArtifactChecksum(null);
156 artifactWithHeat.setPayloadData(null);
158 Either<ArtifactDefinition, StorageOperationStatus> updateArifact = artifactOperation.updateArifactOnResource(artifactWithHeat, RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, false);
159 assertTrue(updateArifact.isLeft());
161 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
162 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterUpdate = janusGraphDao.getNode(artifactData.getUniqueIdKey(), artifactData.getUniqueId(), ArtifactData.class);
163 assertTrue(artifactAfterUpdate.isLeft());
164 ArtifactData artifactAfterUpdateValue = artifactAfterUpdate.left().value();
165 assertEquals(artifactWithHeat.getArtifactVersion(), artifactAfterUpdateValue.getArtifactDataDefinition()
166 .getArtifactVersion());
168 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
169 assertTrue(parameterNodeAfterDelete.isLeft());
171 artifactOperation.removeArifactFromResource(RESOURCE_ID_2, artifactAfterUpdateValue.getUniqueId(), NodeTypeEnum.Resource, true, false);
172 artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
173 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
174 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID_2), ResourceMetadataData.class);
178 public void updateHeatArtifactWithTwoResources() {
179 ArtifactDefinition artifactWithHeat = createResourceWithHeat();
181 ResourceMetadataData resource2 = createResource(RESOURCE_ID_2);
182 Map<String, Object> props = new HashMap<>();
183 props.put(GraphEdgePropertiesDictionary.NAME.getProperty(), ArtifactGroupTypeEnum.DEPLOYMENT.name());
184 Either<GraphRelation, JanusGraphOperationStatus> createRelation = janusGraphDao.createRelation(resource2, new ArtifactData(artifactWithHeat), GraphEdgeLabels.ARTIFACT_REF, props);
185 assertTrue(createRelation.isLeft());
187 List<HeatParameterDefinition> heatParameters = artifactWithHeat.getListHeatParameters();
188 assertNotNull(heatParameters);
189 assertEquals(1, heatParameters.size());
190 HeatParameterDefinition parameter = heatParameters.get(0);
191 HeatParameterData parameterData = new HeatParameterData(parameter);
192 Either<HeatParameterData, JanusGraphOperationStatus> parameterNode = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
193 assertTrue(parameterNode.isLeft());
195 ArtifactDefinition atifactToUpdate = new ArtifactDefinition(artifactWithHeat);
197 // update to artifact without params
198 atifactToUpdate.setArtifactVersion("2");
199 atifactToUpdate.setArtifactChecksum(null);
200 atifactToUpdate.setPayloadData(null);
202 HeatParameterDefinition heatParamUpdate = new HeatParameterDefinition(parameter);
203 List<HeatParameterDefinition> heatParametersUpdated = new ArrayList<>();
204 heatParamUpdate.setCurrentValue("55");
205 heatParametersUpdated.add(heatParamUpdate);
206 atifactToUpdate.setListHeatParameters(heatParametersUpdated);
208 Either<ArtifactDefinition, StorageOperationStatus> updateArifact = artifactOperation.updateArifactOnResource(atifactToUpdate, RESOURCE_ID_2, atifactToUpdate.getUniqueId(), NodeTypeEnum.Resource, false);
209 assertTrue(updateArifact.isLeft());
211 // verify old artifact and parameter still exist
212 ArtifactData artifactData = new ArtifactData(artifactWithHeat);
213 Either<ArtifactData, JanusGraphOperationStatus> origArtifact = janusGraphDao.getNode(artifactData.getUniqueIdKey(), artifactData.getUniqueId(), ArtifactData.class);
214 assertTrue(origArtifact.isLeft());
215 ArtifactData origArtifactData = origArtifact.left().value();
216 assertEquals(artifactWithHeat.getArtifactVersion(), origArtifactData.getArtifactDataDefinition()
217 .getArtifactVersion());
219 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
220 assertTrue(parameterNodeAfterDelete.isLeft());
222 // verify new artifact and new parameter
223 ArtifactDefinition artifactDefinitionUpdated = updateArifact.left().value();
224 ArtifactData artifactDataUpdated = new ArtifactData(artifactDefinitionUpdated);
225 Either<ArtifactData, JanusGraphOperationStatus> updatedArtifact = janusGraphDao.getNode(artifactDataUpdated.getUniqueIdKey(), artifactDataUpdated.getUniqueId(), ArtifactData.class);
226 assertTrue(updatedArtifact.isLeft());
227 ArtifactData updatedArtifactData = updatedArtifact.left().value();
228 assertEquals(atifactToUpdate.getArtifactVersion(), updatedArtifactData.getArtifactDataDefinition()
229 .getArtifactVersion());
230 assertFalse(updatedArtifactData.getUniqueId().equalsIgnoreCase(origArtifactData.getUniqueId()));
232 List<HeatParameterDefinition> heatParametersAfterUpdate = artifactDefinitionUpdated.getListHeatParameters();
233 assertNotNull(heatParametersAfterUpdate);
234 assertEquals(1, heatParametersAfterUpdate.size());
235 HeatParameterDefinition UpdatedHeatParameter = heatParametersAfterUpdate.get(0);
236 assertFalse(UpdatedHeatParameter.getUniqueId().equalsIgnoreCase(parameterData.getUniqueId()));
237 Either<HeatParameterData, JanusGraphOperationStatus> parameterNodeAfterUpdate = janusGraphDao.getNode(new HeatParameterData(UpdatedHeatParameter).getUniqueIdKey(), UpdatedHeatParameter.getUniqueId(), HeatParameterData.class);
238 assertTrue(parameterNodeAfterUpdate.isLeft());
240 // delete new artifact
241 Either<ArtifactDefinition, StorageOperationStatus> removeArifact = artifactOperation.removeArifactFromResource(RESOURCE_ID_2, artifactDefinitionUpdated.getUniqueId(), NodeTypeEnum.Resource, true, false);
242 assertTrue(removeArifact.isLeft());
244 // verify old artifact and parameter still exist
245 origArtifact = janusGraphDao.getNode(artifactData.getUniqueIdKey(), artifactData.getUniqueId(), ArtifactData.class);
246 assertTrue(origArtifact.isLeft());
247 origArtifactData = origArtifact.left().value();
248 assertEquals(artifactWithHeat.getArtifactVersion(), origArtifactData.getArtifactDataDefinition()
249 .getArtifactVersion());
251 parameterNodeAfterDelete = janusGraphDao.getNode(parameterData.getUniqueIdKey(), parameterData.getUniqueId(), HeatParameterData.class);
252 assertTrue(parameterNodeAfterDelete.isLeft());
254 // verify new artifact is deleted
255 Either<ArtifactData, JanusGraphOperationStatus> artifactAfterDelete = janusGraphDao.getNode(artifactDataUpdated.getUniqueIdKey(), artifactDataUpdated.getUniqueId(), ArtifactData.class);
256 assertTrue(artifactAfterDelete.isRight());
258 parameterNodeAfterDelete = janusGraphDao.getNode(new HeatParameterData(UpdatedHeatParameter).getUniqueIdKey(), new HeatParameterData(UpdatedHeatParameter).getUniqueId(), HeatParameterData.class);
259 assertTrue(parameterNodeAfterDelete.isRight());
261 artifactOperation.removeArifactFromResource(RESOURCE_ID, artifactWithHeat.getUniqueId(), NodeTypeEnum.Resource, true, false);
262 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID), ResourceMetadataData.class);
263 janusGraphDao.deleteNode(new UniqueIdData(NodeTypeEnum.Resource, RESOURCE_ID_2), ResourceMetadataData.class);
266 private ArtifactDefinition createResourceWithHeat() {
267 createResource(RESOURCE_ID);
268 ArtifactDefinition artifactDefinition = createArtifactDefinition();
269 artifactDefinition.setArtifactType("HEAT");
270 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
272 List<HeatParameterDefinition> heatParams = new ArrayList<>();
273 HeatParameterDefinition heatParam = new HeatParameterDefinition();
274 heatParam.setCurrentValue("11");
275 heatParam.setDefaultValue("22");
276 heatParam.setDescription("desc");
277 heatParam.setName("myParam");
278 heatParam.setType("number");
279 heatParams.add(heatParam);
280 artifactDefinition.setListHeatParameters(heatParams);
282 Either<ArtifactDefinition, StorageOperationStatus> artifact = artifactOperation.addArifactToComponent(artifactDefinition, RESOURCE_ID, NodeTypeEnum.Resource, true, false);
283 assertTrue(artifact.isLeft());
284 return artifact.left().value();
287 private ArtifactDefinition createArtifactDefinition() {
288 ArtifactDefinition artifactInfo = new ArtifactDefinition();
290 artifactInfo.setArtifactName(ArtifactOperationTest.ARTIFACT_NAME + ".sh");
291 artifactInfo.setArtifactType("SHELL");
292 artifactInfo.setDescription("hdkfhskdfgh");
293 artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
295 artifactInfo.setUserIdCreator(ArtifactOperationTest.USER_ID);
296 String fullName = "Jim H";
297 artifactInfo.setUpdaterFullName(fullName);
298 long time = System.currentTimeMillis();
299 artifactInfo.setCreatorFullName(fullName);
300 artifactInfo.setCreationDate(time);
301 artifactInfo.setLastUpdateDate(time);
302 artifactInfo.setUserIdLastUpdater(ArtifactOperationTest.USER_ID);
303 artifactInfo.setArtifactLabel(ArtifactOperationTest.ARTIFACT_NAME);
304 artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(ArtifactOperationTest.RESOURCE_ID, artifactInfo.getArtifactLabel()));
308 private void deleteAndCreateCategory(String category) {
309 String[] names = category.split("/");
310 OperationTestsUtil.deleteAndCreateServiceCategory(category, janusGraphDao);
311 OperationTestsUtil.deleteAndCreateResourceCategory(names[0], names[1], janusGraphDao);
314 private void deleteAndCreateUser() {
315 UserData userData = new UserData();
316 userData.setUserId(ArtifactOperationTest.USER_ID);
317 userData.setFirstName("first_muUserId");
318 userData.setLastName("last_muUserId");
319 userData.setRole("ADMIN");
321 janusGraphDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), ArtifactOperationTest.USER_ID, UserData.class);
322 janusGraphDao.createNode(userData, UserData.class);
323 janusGraphDao.commit();
326 public ResourceMetadataData createResource(String resourceName) {
328 ResourceMetadataData serviceData1 = new ResourceMetadataData();
329 serviceData1.getMetadataDataDefinition().setUniqueId(resourceName);
330 Either<ResourceMetadataData, JanusGraphOperationStatus> createNode = janusGraphDao.createNode(serviceData1, ResourceMetadataData.class);
332 assertTrue("check resource created", createNode.isLeft());
333 return createNode.left().value();