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.ci.tests.execute.artifacts;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
26 import java.io.ByteArrayInputStream;
27 import java.io.InputStream;
28 import java.util.List;
31 import org.apache.commons.codec.binary.Base64;
32 import org.junit.Rule;
33 import org.junit.rules.TestName;
34 import org.openecomp.sdc.be.model.ArtifactDefinition;
35 import org.openecomp.sdc.be.model.ArtifactUiDownloadData;
36 import org.openecomp.sdc.be.model.ComponentInstance;
37 import org.openecomp.sdc.be.model.HeatParameterDefinition;
38 import org.openecomp.sdc.be.model.Resource;
39 import org.openecomp.sdc.be.model.Service;
40 import org.openecomp.sdc.be.model.User;
41 import org.openecomp.sdc.be.model.heat.HeatParameterType;
42 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
43 import org.openecomp.sdc.ci.tests.datatypes.ComponentInstanceReqDetails;
44 import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
45 import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum;
46 import org.openecomp.sdc.ci.tests.datatypes.enums.ServiceCategoriesEnum;
47 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
48 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
49 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
50 import org.openecomp.sdc.ci.tests.utils.rest.ArtifactRestUtils;
51 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
52 import org.openecomp.sdc.ci.tests.utils.rest.ComponentInstanceRestUtils;
53 import org.openecomp.sdc.ci.tests.utils.rest.LifecycleRestUtils;
54 import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
55 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
56 import org.openecomp.sdc.ci.tests.utils.rest.ServiceRestUtils;
57 import org.testng.annotations.DataProvider;
58 import org.testng.annotations.Test;
59 import org.yaml.snakeyaml.Yaml;
61 import com.google.gson.Gson;
63 public class HeatEnvArtifact extends ComponentBaseTest {
66 public static TestName name = new TestName();
68 public HeatEnvArtifact() {
69 super(name, HeatEnvArtifact.class.getName());
73 public void heatEnvOnResourceFormatTest() throws Exception {
75 User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
77 Resource createdResource = createVfFromCSAR(sdncModifierDetails, "csarHeatEnv.csar");
78 assertNotNull(createdResource);
80 RestResponse certifyState = LifecycleRestUtils.changeComponentState(createdResource, sdncModifierDetails, LifeCycleStatesEnum.CHECKIN);
81 BaseRestUtils.checkSuccess(certifyState);
83 Resource certifiedResource = ResponseParser.parseToObjectUsingMapper(certifyState.getResponse(), Resource.class);
85 ServiceReqDetails serviceDetails = ElementFactory.getDefaultService("ciNewtestservice1", ServiceCategoriesEnum.MOBILITY, sdncModifierDetails.getUserId());
88 RestResponse createServiceResponse = ServiceRestUtils.createService(serviceDetails, sdncModifierDetails);
89 ResourceRestUtils.checkCreateResponse(createServiceResponse);
90 Service service = ResponseParser.parseToObjectUsingMapper(createServiceResponse.getResponse(), Service.class);
92 // 3 create vf instance in service
93 ComponentInstanceReqDetails componentInstanceDetails = ElementFactory.getComponentInstance(certifiedResource);
94 RestResponse createComponentInstance = ComponentInstanceRestUtils.createComponentInstance(componentInstanceDetails, sdncModifierDetails, service);
95 ResourceRestUtils.checkCreateResponse(createComponentInstance);
97 RestResponse getService = ServiceRestUtils.getService(service.getUniqueId());
98 BaseRestUtils.checkSuccess(getService);
99 service = ResponseParser.parseToObjectUsingMapper(getService.getResponse(), Service.class);
101 List<ComponentInstance> componentInstances = service.getComponentInstances();
102 assertNotNull(componentInstances);
103 assertEquals(1, componentInstances.size());
105 ComponentInstance vfi = componentInstances.get(0);
106 Map<String, ArtifactDefinition> deploymentArtifacts = vfi.getDeploymentArtifacts();
107 assertNotNull(deploymentArtifacts);
108 assertEquals(4, deploymentArtifacts.size());
109 ArtifactDefinition heatEnv = deploymentArtifacts.get("heat0env");
110 assertNotNull(heatEnv);
112 Map<String, Object> yaml = downloadComponentInstanceYamlFile(service.getUniqueId(), vfi.getUniqueId(), sdncModifierDetails, heatEnv.getUniqueId());
114 Map<String, Object> paramters = (Map<String, Object>) yaml.get("parameters");
115 assertNotNull(paramters);
116 assertEquals(8, paramters.size());
117 assertEquals(null, paramters.get("param8"));
118 List<HeatParameterDefinition> heatParameters = heatEnv.getListHeatParameters();
119 heatParameters.forEach(p -> {
120 assertEquals(p.getCurrentValue(), paramters.get(p.getName()));
124 @Test(enabled = true)
125 public void noHeatEnvOnResourceFormatTest() throws Exception {
126 User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
128 Resource createdResource = createVfFromCSAR(sdncModifierDetails, "csarHeatNoEnv.csar");
129 assertNotNull(createdResource);
131 RestResponse certifyState = LifecycleRestUtils.changeComponentState(createdResource, sdncModifierDetails, LifeCycleStatesEnum.CHECKIN);
132 BaseRestUtils.checkSuccess(certifyState);
134 Resource certifiedResource = ResponseParser.parseToObjectUsingMapper(certifyState.getResponse(), Resource.class);
136 ServiceReqDetails serviceDetails = ElementFactory.getDefaultService("ciNewtestservice1", ServiceCategoriesEnum.MOBILITY, sdncModifierDetails.getUserId());
139 RestResponse createServiceResponse = ServiceRestUtils.createService(serviceDetails, sdncModifierDetails);
140 ResourceRestUtils.checkCreateResponse(createServiceResponse);
141 Service service = ResponseParser.parseToObjectUsingMapper(createServiceResponse.getResponse(), Service.class);
143 // 3 create vf instance in service
144 ComponentInstanceReqDetails componentInstanceDetails = ElementFactory.getComponentInstance(certifiedResource);
145 RestResponse createComponentInstance = ComponentInstanceRestUtils.createComponentInstance(componentInstanceDetails, sdncModifierDetails, service);
146 ResourceRestUtils.checkCreateResponse(createComponentInstance);
148 RestResponse getService = ServiceRestUtils.getService(service.getUniqueId());
149 BaseRestUtils.checkSuccess(getService);
150 service = ResponseParser.parseToObjectUsingMapper(getService.getResponse(), Service.class);
152 List<ComponentInstance> componentInstances = service.getComponentInstances();
153 assertNotNull(componentInstances);
154 assertEquals(1, componentInstances.size());
156 ComponentInstance vfi = componentInstances.get(0);
157 Map<String, ArtifactDefinition> deploymentArtifacts = vfi.getDeploymentArtifacts();
158 assertNotNull(deploymentArtifacts);
159 assertEquals(4, deploymentArtifacts.size());
160 ArtifactDefinition heatEnv = deploymentArtifacts.get("heat0env");
161 assertNotNull(heatEnv);
163 Map<String, Object> yaml = downloadComponentInstanceYamlFile(service.getUniqueId(), vfi.getUniqueId(), sdncModifierDetails, heatEnv.getUniqueId());
165 Map<String, Object> paramters = (Map<String, Object>) yaml.get("parameters");
166 assertNotNull(paramters);
167 assertEquals(8, paramters.size());
168 assertEquals(null, paramters.get("param1"));
169 assertEquals(null, paramters.get("param2"));
170 assertEquals(null, paramters.get("param4"));
171 assertEquals(null, paramters.get("param5"));
172 assertEquals(null, paramters.get("param7"));
173 assertEquals(null, paramters.get("param8"));
174 List<HeatParameterDefinition> heatParameters = heatEnv.getListHeatParameters();
175 heatParameters.forEach(p -> {
176 assertEquals(p.getCurrentValue(), paramters.get(p.getName()));
181 @DataProvider(name = "vfModuleCsar")
182 public static Object[][] csarNames() {
183 return new Object[][] { { "VSPPackage" }, { "csar_1" }, { "csarHeatEnv.csar" } };
186 @Test(dataProvider = "vfModuleCsar")
187 public void heatEnvOnVfDownloadNoChangesTest(String vfName) throws Exception {
188 User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
190 System.out.println("Run for vf " + vfName);
191 Resource createdResource = createVfFromCSAR(sdncModifierDetails, vfName);
192 assertNotNull(createdResource);
193 Map<String, ArtifactDefinition> deploymentArtifacts = createdResource.getDeploymentArtifacts();
194 assertNotNull(deploymentArtifacts);
196 for (ArtifactDefinition artifact : deploymentArtifacts.values()) {
197 if (artifact.getArtifactType().equals("HEAT")) {
199 ArtifactDefinition heatArtifact = artifact;
200 assertNotNull(heatArtifact);
202 ArtifactDefinition heatEnvArtifact = deploymentArtifacts.get(artifact.getArtifactLabel() + "env");
203 assertNotNull(heatEnvArtifact);
205 String heatEnvId = heatEnvArtifact.getUniqueId();
206 downloadHeatEnvAndValidate(sdncModifierDetails, createdResource, heatArtifact, heatEnvId);
209 System.out.println("Finished for vf " + vfName);
213 private void downloadHeatEnvAndValidate(User sdncModifierDetails, Resource createdResource, ArtifactDefinition heatArtifact, String heatEnvId) throws Exception {
214 RestResponse downloadResult = ArtifactRestUtils.downloadResourceArtifactInternalApi(createdResource.getUniqueId(), sdncModifierDetails, heatEnvId);
215 BaseRestUtils.checkSuccess(downloadResult);
217 ArtifactUiDownloadData artifactUiDownloadData = ResponseParser.parseToObject(downloadResult.getResponse(), ArtifactUiDownloadData.class);
218 byte[] fromUiDownload = artifactUiDownloadData.getBase64Contents().getBytes();
219 byte[] decodeBase64 = Base64.decodeBase64(fromUiDownload);
220 Yaml yaml = new Yaml();
222 InputStream inputStream = new ByteArrayInputStream(decodeBase64);
224 Map<String, Object> load = (Map<String, Object>) yaml.load(inputStream);
225 Map<String, Object> paramters = (Map<String, Object>) load.get("parameters");
226 assertNotNull(paramters);
228 List<HeatParameterDefinition> heatParameters = heatArtifact.getListHeatParameters();
229 assertNotNull(heatParameters);
230 assertEquals("Validate heat parameters size", heatParameters.size(), paramters.size());
231 Gson gson = new Gson();
232 heatParameters.forEach(hpInResource -> {
233 Object valueInFile = paramters.get(hpInResource.getName());
234 Object valueInResource;
235 if (hpInResource.getCurrentValue() == null) {
236 valueInResource = hpInResource.getDefaultValue();
238 valueInResource = hpInResource.getCurrentValue();
240 if (valueInResource == null) {
241 assertEquals("Validate null value for parameter " + hpInResource.getName(), valueInResource, valueInFile);
243 HeatParameterType type = HeatParameterType.isValidType(hpInResource.getType());
244 // if (type != null && (HeatParameterType.JSON == type || HeatParameterType.COMMA_DELIMITED_LIST == type)){
245 // String jsonValue = gson.toJson(valueInFile).toString();
247 // assertEquals("Validate value as json string for parameter " +hpInResource.getName() ,valueInResource, jsonValue);
249 assertEquals("Validate value for parameter " + hpInResource.getName(), valueInResource, valueInFile.toString());
255 @Test(enabled = true)
256 public void heatEnvOnVfFailedTest() throws Exception {
257 User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
259 Resource createdResource = createVfFromCSAR(sdncModifierDetails, "csar_1");
260 assertNotNull(createdResource);
261 Map<String, ArtifactDefinition> deploymentArtifacts = createdResource.getDeploymentArtifacts();
262 assertNotNull(deploymentArtifacts);
263 String heatEnvId = "wrongId";
264 RestResponse downloadResult = ArtifactRestUtils.downloadResourceArtifactInternalApi(createdResource.getUniqueId(), sdncModifierDetails, heatEnvId);
266 assertEquals("Validate error code", 404, downloadResult.getErrorCode().intValue());
268 // BaseRestUtils.checkErrorResponse(downloadResult, ActionStatus.ARTIFACT_NOT_FOUND);
272 @Test(dataProvider = "vfModuleCsar")
273 public void heatEnvOnVfDownloadChangeParamTest(String vfName) throws Exception {
274 User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
276 Resource createdResource = createVfFromCSAR(sdncModifierDetails, vfName);
277 assertNotNull(createdResource);
278 Map<String, ArtifactDefinition> deploymentArtifacts = createdResource.getDeploymentArtifacts();
279 assertNotNull(deploymentArtifacts);
281 ArtifactDefinition heatArt = deploymentArtifacts.get("heat0");
282 assertNotNull(heatArt);
284 List<HeatParameterDefinition> heatParameters = heatArt.getListHeatParameters();
285 assertNotNull(heatParameters);
286 HeatParameterDefinition paramForChange = null;
287 for (HeatParameterDefinition hp : heatParameters) {
288 if (hp.getType().equals("string")) {
293 assertNotNull(paramForChange);
294 paramForChange.setCurrentValue("newValueForTest");
295 RestResponse updateResult = ArtifactRestUtils.updateDeploymentArtifactToResource(heatArt, sdncModifierDetails, createdResource.getUniqueId());
296 BaseRestUtils.checkSuccess(updateResult);
298 RestResponse getResourceResult = ResourceRestUtils.getResource(createdResource.getUniqueId());
299 BaseRestUtils.checkSuccess(getResourceResult);
301 Resource resource = ResponseParser.convertResourceResponseToJavaObject(getResourceResult.getResponse());
302 assertNotNull(resource);
303 deploymentArtifacts = resource.getDeploymentArtifacts();
304 assertNotNull(deploymentArtifacts);
306 heatArt = deploymentArtifacts.get("heat0");
307 assertNotNull(heatArt);
308 ArtifactDefinition heatEnvArt = deploymentArtifacts.get("heat0env");
309 assertNotNull(heatEnvArt);
311 downloadHeatEnvAndValidate(sdncModifierDetails, createdResource, heatArt, heatEnvArt.getUniqueId());
315 // ****************************************
316 private Map<String, Object> downloadComponentInstanceYamlFile(String serviceUniqueId, String resourceInstanceId, User user, String artifactUniqeId) throws Exception {
317 RestResponse heatEnvDownloadResponse = ArtifactRestUtils.downloadResourceInstanceArtifact(serviceUniqueId, resourceInstanceId, user, artifactUniqeId);
318 BaseRestUtils.checkSuccess(heatEnvDownloadResponse);
320 ArtifactUiDownloadData artifactUiDownloadData = ResponseParser.parseToObject(heatEnvDownloadResponse.getResponse(), ArtifactUiDownloadData.class);
321 byte[] fromUiDownload = artifactUiDownloadData.getBase64Contents().getBytes();
322 byte[] decodeBase64 = Base64.decodeBase64(fromUiDownload);
323 Yaml yaml = new Yaml();
325 InputStream inputStream = new ByteArrayInputStream(decodeBase64);
327 Map<String, Object> load = (Map<String, Object>) yaml.load(inputStream);