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.externalapi;
23 import com.google.gson.Gson;
24 import org.apache.commons.codec.binary.Base64;
25 import org.junit.Rule;
26 import org.junit.rules.TestName;
27 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
28 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
29 import org.openecomp.sdc.be.model.*;
30 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
31 import org.openecomp.sdc.ci.tests.api.Urls;
32 import org.openecomp.sdc.ci.tests.datatypes.*;
33 import org.openecomp.sdc.ci.tests.datatypes.enums.*;
34 import org.openecomp.sdc.ci.tests.datatypes.http.HttpHeaderEnum;
35 import org.openecomp.sdc.ci.tests.datatypes.http.HttpRequest;
36 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
37 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
38 import org.openecomp.sdc.ci.tests.utils.rest.*;
39 import org.testng.Assert;
40 import org.testng.annotations.BeforeMethod;
41 import org.testng.annotations.Test;
43 import java.io.IOException;
44 import java.nio.file.Files;
45 import java.nio.file.Path;
46 import java.nio.file.Paths;
47 import java.util.HashMap;
48 import java.util.List;
51 import static org.testng.AssertJUnit.*;
53 public class DownloadArtifactsTest extends ComponentBaseTest {
55 public static TestName name = new TestName();
57 Gson gson = new Gson();
59 private User sdncDesignerDetails;
60 private User sdncAdminDetails;
61 private ImportReqDetails resourceDetailsVF_01;
62 private ResourceReqDetails resourceDetailsVF_02;
63 private ResourceReqDetails resourceDetailsVF_03;
64 private ResourceReqDetails resourceDetailsCP_01;
65 private ServiceReqDetails serviceDetails_01;
66 private ServiceReqDetails serviceDetails_02;
67 public static String rootPath = System.getProperty("user.dir");
69 @BeforeMethod(alwaysRun = true)
70 public void before() throws Exception {
75 private void createComponents() throws Exception {
76 createAtomicResource(resourceDetailsCP_01);
77 importVfWithArtifacts(resourceDetailsVF_01);
78 createVF(resourceDetailsVF_03);
79 createVF(resourceDetailsVF_02);
80 createService(serviceDetails_01);
84 sdncDesignerDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
85 sdncAdminDetails = ElementFactory.getDefaultUser(UserRoleEnum.ADMIN);
86 resourceDetailsVF_01 = ElementFactory.getDefaultImportResourceByType("VF100", NormativeTypesEnum.ROOT,
87 ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, sdncDesignerDetails.getUserId(),
88 ResourceTypeEnum.VF.toString());
89 resourceDetailsVF_02 = ElementFactory.getDefaultResourceByType("VF200", NormativeTypesEnum.ROOT,
90 ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, sdncDesignerDetails.getUserId(),
91 ResourceTypeEnum.VF.toString());
92 resourceDetailsVF_03 = ElementFactory.getDefaultResourceByType("VF300", NormativeTypesEnum.ROOT,
93 ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, sdncDesignerDetails.getUserId(),
94 ResourceTypeEnum.VF.toString());
95 resourceDetailsCP_01 = ElementFactory.getDefaultResourceByType("CP100", NormativeTypesEnum.PORT,
96 ResourceCategoryEnum.GENERIC_NETWORK_ELEMENTS, sdncDesignerDetails.getUserId(),
97 ResourceTypeEnum.CP.toString());
98 serviceDetails_01 = ElementFactory.getDefaultService("newtestservice1", ServiceCategoriesEnum.MOBILITY,
99 sdncDesignerDetails.getUserId(),
100 ServiceInstantiationType.A_LA_CARTE.getValue());
101 serviceDetails_02 = ElementFactory.getDefaultService("newtestservice2", ServiceCategoriesEnum.MOBILITY,
102 sdncDesignerDetails.getUserId(),
103 ServiceInstantiationType.A_LA_CARTE.getValue());
107 public void downloadResourceInstanceArtifactsFromServiceTest() throws Exception {
108 Service service = createServiceWithRIsWithArtifacts();
109 Map<String, ArtifactDefinition> deploymentArtifacts;
110 List<ComponentInstance> resourceInstances = service.getComponentInstances();
111 for (ComponentInstance ri : resourceInstances) {
112 deploymentArtifacts = ri.getDeploymentArtifacts();
113 for (ArtifactDefinition artifact : deploymentArtifacts.values()) {
114 assertNotNull(downloadResourceInstanceArtifact(service, ri, artifact));
120 public void downloadServiceArtifactsTest() throws Exception {
121 Service service = createServiceWithArtifacts();
122 Map<String, ArtifactDefinition> deploymentArtifacts = service.getDeploymentArtifacts();
123 for (ArtifactDefinition artifact : deploymentArtifacts.values()) {
124 assertNotNull(downloadServiceArtifact(service, artifact));
129 private Service createServiceWithArtifacts() throws Exception {
131 ArtifactReqDetails otherArtifactDetails = ElementFactory
132 .getDefaultDeploymentArtifactForType(ArtifactTypeEnum.OTHER.getType());
134 RestResponse addInformationalArtifactToService = ArtifactRestUtils.addInformationalArtifactToService(
135 otherArtifactDetails, sdncDesignerDetails, serviceDetails_01.getUniqueId());
137 "response code is not BaseRestUtils.STATUS_CODE_SUCCESS, returned :"
138 + addInformationalArtifactToService.getErrorCode(),
139 addInformationalArtifactToService.getErrorCode() == BaseRestUtils.STATUS_CODE_SUCCESS);
141 ArtifactReqDetails yangXmlArtifactDetails = ElementFactory
142 .getDefaultDeploymentArtifactForType(ArtifactTypeEnum.YANG_XML.getType());
144 addInformationalArtifactToService = ArtifactRestUtils.addInformationalArtifactToService(yangXmlArtifactDetails,
145 sdncDesignerDetails, serviceDetails_01.getUniqueId());
147 "response code is not BaseRestUtils.STATUS_CODE_SUCCESS, returned :"
148 + addInformationalArtifactToService.getErrorCode(),
149 addInformationalArtifactToService.getErrorCode() == BaseRestUtils.STATUS_CODE_SUCCESS);
150 RestResponse createServiceResponse = ServiceRestUtils.getService(serviceDetails_01, sdncDesignerDetails);
151 return ResponseParser.convertServiceResponseToJavaObject(createServiceResponse.getResponse());
154 private RestResponse downloadResourceInstanceArtifact(Service service, ComponentInstance ri,
155 ArtifactDefinition artifact) throws Exception {
156 String url = String.format(Urls.GET_DOWNLOAD_SERVICE_RI_ARTIFACT, "localhost", "8080", service.getUUID(),
157 ri.getUniqueId(), artifact.getArtifactUUID());
158 String userId = sdncDesignerDetails.getUserId();
159 Map<String, String> headersMap = new HashMap<String, String>();
160 headersMap.put(HttpHeaderEnum.CONTENT_TYPE.getValue(), "application/json");
161 headersMap.put(HttpHeaderEnum.CACHE_CONTROL.getValue(), "no-cache");
162 headersMap.put(HttpHeaderEnum.AUTHORIZATION.getValue(), "Basic dGVzdDoxMjM0NTY=");
163 headersMap.put("X-ECOMP-InstanceID", "test");
164 if (userId != null) {
165 headersMap.put(HttpHeaderEnum.USER_ID.getValue(), userId);
167 sendAuthorizationRequest();
168 HttpRequest http = new HttpRequest();
169 RestResponse response = http.httpSendGet(url, headersMap);
170 if (response.getErrorCode() != 200 && response.getResponse().getBytes() == null
171 && response.getResponse().getBytes().length == 0) {
177 private RestResponse downloadServiceArtifact(Service service, ArtifactDefinition artifact) throws Exception {
178 String url = String.format(Urls.GET_DOWNLOAD_SERVICE_ARTIFACT, "localhost", "8080", service.getUUID(),
179 artifact.getArtifactUUID());
180 String userId = sdncDesignerDetails.getUserId();
181 Map<String, String> headersMap = new HashMap<String, String>();
182 headersMap.put(HttpHeaderEnum.CONTENT_TYPE.getValue(), "application/json");
183 headersMap.put(HttpHeaderEnum.CACHE_CONTROL.getValue(), "no-cache");
184 headersMap.put(HttpHeaderEnum.AUTHORIZATION.getValue(), "Basic dGVzdDoxMjM0NTY=");
185 headersMap.put("X-ECOMP-InstanceID", "test");
186 if (userId != null) {
187 headersMap.put(HttpHeaderEnum.USER_ID.getValue(), userId);
189 sendAuthorizationRequest();
190 HttpRequest http = new HttpRequest();
191 RestResponse response = http.httpSendGet(url, headersMap);
192 if (response.getErrorCode() != 200 && response.getResponse().getBytes() == null
193 && response.getResponse().getBytes().length == 0) {
200 private RestResponse sendAuthorizationRequest() throws IOException {
201 String url = String.format(Urls.POST_AUTHORIZATION, "localhost", "8080");
202 String userId = sdncAdminDetails.getUserId();
203 Map<String, String> headersMap = new HashMap<String, String>();
204 headersMap.put(HttpHeaderEnum.CONTENT_TYPE.getValue(), "application/json");
205 headersMap.put(HttpHeaderEnum.ACCEPT.getValue(), "application/json");
206 headersMap.put(HttpHeaderEnum.CACHE_CONTROL.getValue(), "no-cache");
207 if (userId != null) {
208 headersMap.put(HttpHeaderEnum.USER_ID.getValue(), userId);
211 HttpRequest http = new HttpRequest();
212 RestResponse response = http.httpSendPost(url,
213 "{\"consumerName\":\"test\",\"consumerPassword\":\"0a0dc557c3bf594b1a48030e3e99227580168b21f44e285c69740b8d5b13e33b\",\"consumerSalt\":\"2a1f887d607d4515d4066fe0f5452a50\"}",
215 if (response.getErrorCode() != 201) {
221 private Service createServiceWithRIsWithArtifacts() throws Exception {
222 serviceDetails_02.setUniqueId(serviceDetails_01.getUniqueId());
223 createTreeCheckedinVFInstances();
224 LifecycleRestUtils.changeResourceState(resourceDetailsCP_01, sdncDesignerDetails, "0.1",
225 LifeCycleStatesEnum.CHECKIN);
226 createVFInstanceAndAtomicResourceInstanceWithoutCheckin(resourceDetailsVF_01, resourceDetailsCP_01,
227 sdncDesignerDetails);
228 RestResponse updateServiceResp = ServiceRestUtils.updateService(serviceDetails_02, sdncDesignerDetails);
229 ServiceRestUtils.checkSuccess(updateServiceResp);
230 getComponentAndValidateRIs(serviceDetails_01, 5, 0);
232 return ResponseParser.convertServiceResponseToJavaObject(updateServiceResp.getResponse());
235 private void createTreeCheckedinVFInstances() throws Exception {
236 RestResponse createFirstVFInstResp = createCheckedinVFInstance(serviceDetails_01, resourceDetailsVF_01,
237 sdncDesignerDetails);
238 ResourceRestUtils.checkCreateResponse(createFirstVFInstResp);
239 RestResponse createSecondVFInstResp = createCheckedinVFInstance(serviceDetails_01, resourceDetailsVF_02,
240 sdncDesignerDetails);
241 ResourceRestUtils.checkCreateResponse(createSecondVFInstResp);
242 RestResponse createThirdVFInstResp = createCheckedinVFInstance(serviceDetails_01, resourceDetailsVF_03,
243 sdncDesignerDetails);
244 ResourceRestUtils.checkCreateResponse(createThirdVFInstResp);
247 private Component getComponentAndValidateRIs(ComponentReqDetails componentDetails, int numberOfRIs,
248 int numberOfRelations) throws IOException, Exception {
250 RestResponse getResponse = null;
251 Component component = null;
252 if (componentDetails instanceof ResourceReqDetails) {
253 getResponse = ResourceRestUtils.getResource(sdncAdminDetails, componentDetails.getUniqueId());
254 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Resource.class);
255 } else if (componentDetails instanceof ServiceReqDetails) {
256 getResponse = ServiceRestUtils.getService((ServiceReqDetails) componentDetails, sdncAdminDetails);
257 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Service.class);
258 } else if (componentDetails instanceof ProductReqDetails) {
259 getResponse = ProductRestUtils.getProduct(componentDetails.getUniqueId(), sdncAdminDetails.getUserId());
260 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Product.class);
262 Assert.fail("Unsupported type of componentDetails - " + componentDetails.getClass().getSimpleName());
264 ResourceRestUtils.checkSuccess(getResponse);
265 int numberOfActualRIs = component.getComponentInstances() != null ? component.getComponentInstances().size()
267 int numberOfActualRelations = component.getComponentInstancesRelations() != null
268 ? component.getComponentInstancesRelations().size() : 0;
269 assertEquals("Check number of RIs meet the expected number", numberOfRIs, numberOfActualRIs);
270 assertEquals("Check number of RI relations meet the expected number", numberOfRelations,
271 numberOfActualRelations);
276 private void createVFInstanceAndAtomicResourceInstanceWithoutCheckin(ResourceReqDetails vf,
277 ResourceReqDetails atomicResource, User user) throws Exception {
278 RestResponse createVFInstance = createVFInstance(serviceDetails_01, vf, user);
279 ResourceRestUtils.checkCreateResponse(createVFInstance);
280 RestResponse atomicInstanceForService = createAtomicInstanceForService(serviceDetails_01, atomicResource, user);
281 ResourceRestUtils.checkCreateResponse(atomicInstanceForService);
284 private RestResponse createCheckedinVFInstance(ServiceReqDetails containerDetails,
285 ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
286 changeResourceLifecycleState(compInstOriginDetails, modifier.getUserId(), LifeCycleStatesEnum.CHECKIN);
287 return createVFInstance(containerDetails, compInstOriginDetails, modifier);
290 private RestResponse createVFInstance(ServiceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails,
291 User modifier) throws Exception {
292 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE,
296 private RestResponse createAtomicInstanceForService(ServiceReqDetails containerDetails,
297 ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
298 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE,
302 private RestResponse createComponentInstance(ComponentReqDetails containerDetails,
303 ComponentReqDetails compInstOriginDetails, User modifier, ComponentTypeEnum containerComponentTypeEnum,
304 boolean isHighestLevel) throws IOException, Exception {
305 ComponentInstanceReqDetails resourceInstanceReqDetails = ElementFactory
306 .getComponentResourceInstance(compInstOriginDetails);
307 RestResponse createResourceInstanceResponse = ComponentInstanceRestUtils.createComponentInstance(
308 resourceInstanceReqDetails, modifier, containerDetails.getUniqueId(), containerComponentTypeEnum);
309 return createResourceInstanceResponse;
312 private void changeResourceLifecycleState(ResourceReqDetails resourceDetails, String userUserId,
313 LifeCycleStatesEnum lifeCycleStates) throws Exception {
314 RestResponse response = LifecycleRestUtils.changeResourceState(resourceDetails, userUserId, lifeCycleStates);
315 LifecycleRestUtils.checkLCS_Response(response);
318 private void createAtomicResource(ResourceReqDetails resourceDetails) throws Exception {
319 RestResponse createResourceResponse = ResourceRestUtils.createResource(resourceDetails, sdncDesignerDetails);
320 ResourceRestUtils.checkCreateResponse(createResourceResponse);
324 private void createVF(ResourceReqDetails resourceDetails) throws Exception {
325 createVF(resourceDetails, sdncDesignerDetails);
329 private void createVF(ResourceReqDetails resourceDetails, User sdncModifier) throws Exception {
330 RestResponse createVfResponse = ResourceRestUtils.createResource(resourceDetails, sdncModifier);
331 ResourceRestUtils.checkCreateResponse(createVfResponse);
334 private void createService(ServiceReqDetails serviceDetails) throws Exception {
335 createService(serviceDetails, sdncDesignerDetails);
338 private void createService(ServiceReqDetails serviceDetails, User sdncModifier) throws Exception {
339 RestResponse createServiceResponse = ServiceRestUtils.createService(serviceDetails, sdncModifier);
340 ResourceRestUtils.checkCreateResponse(createServiceResponse);
343 private void importVfWithArtifacts(ImportReqDetails resourceDetailsVF_01) throws Exception {
344 String payloadName = "VF_RI2_G4_withArtifacts.csar";
345 Path path = Paths.get(rootPath + "/src/main/resources/ci/VF_RI2_G4_withArtifacts.csar");
346 byte[] data = Files.readAllBytes(path);
347 String payloadData = Base64.encodeBase64String(data);
348 resourceDetailsVF_01.setPayloadData(payloadData);
350 resourceDetailsVF_01.setPayloadName(payloadName);
351 resourceDetailsVF_01.setResourceType(ResourceTypeEnum.VF.name());
352 RestResponse createResource = ResourceRestUtils.createResource(resourceDetailsVF_01, sdncDesignerDetails);
353 BaseRestUtils.checkCreateResponse(createResource);