8ed75c87e360bcf13aa868586df010f1884befd1
[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.ci.tests.execute.externalapi;
22
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;
42
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;
49 import java.util.Map;
50
51 import static org.testng.AssertJUnit.*;
52
53 public class DownloadArtifactsTest extends ComponentBaseTest {
54         @Rule
55         public static TestName name = new TestName();
56
57         Gson gson = new Gson();
58
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");
68
69         @BeforeMethod(alwaysRun = true)
70         public void before() throws Exception {
71                 init();
72                 createComponents();
73         }
74
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);
81         }
82
83         public void init() {
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());
104         }
105
106         @Test
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));
115                         }
116                 }
117         }
118
119         @Test
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));
125                 }
126
127         }
128
129         private Service createServiceWithArtifacts() throws Exception {
130
131                 ArtifactReqDetails otherArtifactDetails = ElementFactory
132                                 .getDefaultDeploymentArtifactForType(ArtifactTypeEnum.OTHER.getType());
133
134                 RestResponse addInformationalArtifactToService = ArtifactRestUtils.addInformationalArtifactToService(
135                                 otherArtifactDetails, sdncDesignerDetails, serviceDetails_01.getUniqueId());
136                 assertTrue(
137                                 "response code is not BaseRestUtils.STATUS_CODE_SUCCESS, returned :"
138                                                 + addInformationalArtifactToService.getErrorCode(),
139                                 addInformationalArtifactToService.getErrorCode() == BaseRestUtils.STATUS_CODE_SUCCESS);
140
141                 ArtifactReqDetails yangXmlArtifactDetails = ElementFactory
142                                 .getDefaultDeploymentArtifactForType(ArtifactTypeEnum.YANG_XML.getType());
143
144                 addInformationalArtifactToService = ArtifactRestUtils.addInformationalArtifactToService(yangXmlArtifactDetails,
145                                 sdncDesignerDetails, serviceDetails_01.getUniqueId());
146                 assertTrue(
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());
152         }
153
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);
166                 }
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) {
172                         return null;
173                 }
174                 return response;
175         }
176
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);
188                 }
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) {
194                         return null;
195                 }
196                 return response;
197
198         }
199
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);
209                 }
210
211                 HttpRequest http = new HttpRequest();
212                 RestResponse response = http.httpSendPost(url,
213                                 "{\"consumerName\":\"test\",\"consumerPassword\":\"0a0dc557c3bf594b1a48030e3e99227580168b21f44e285c69740b8d5b13e33b\",\"consumerSalt\":\"2a1f887d607d4515d4066fe0f5452a50\"}",
214                                 headersMap);
215                 if (response.getErrorCode() != 201) {
216                         return null;
217                 }
218                 return response;
219         }
220
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);
231
232                 return ResponseParser.convertServiceResponseToJavaObject(updateServiceResp.getResponse());
233         }
234
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);
245         }
246
247         private Component getComponentAndValidateRIs(ComponentReqDetails componentDetails, int numberOfRIs,
248                         int numberOfRelations) throws IOException, Exception {
249
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);
261                 } else {
262                         Assert.fail("Unsupported type of componentDetails - " + componentDetails.getClass().getSimpleName());
263                 }
264                 ResourceRestUtils.checkSuccess(getResponse);
265                 int numberOfActualRIs = component.getComponentInstances() != null ? component.getComponentInstances().size()
266                                 : 0;
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);
272
273                 return component;
274         }
275
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);
282         }
283
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);
288         }
289
290         private RestResponse createVFInstance(ServiceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails,
291                         User modifier) throws Exception {
292                 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE,
293                                 true);
294         }
295
296         private RestResponse createAtomicInstanceForService(ServiceReqDetails containerDetails,
297                         ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
298                 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE,
299                                 true);
300         }
301
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;
310         }
311
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);
316         }
317
318         private void createAtomicResource(ResourceReqDetails resourceDetails) throws Exception {
319                 RestResponse createResourceResponse = ResourceRestUtils.createResource(resourceDetails, sdncDesignerDetails);
320                 ResourceRestUtils.checkCreateResponse(createResourceResponse);
321
322         }
323
324         private void createVF(ResourceReqDetails resourceDetails) throws Exception {
325                 createVF(resourceDetails, sdncDesignerDetails);
326
327         }
328
329         private void createVF(ResourceReqDetails resourceDetails, User sdncModifier) throws Exception {
330                 RestResponse createVfResponse = ResourceRestUtils.createResource(resourceDetails, sdncModifier);
331                 ResourceRestUtils.checkCreateResponse(createVfResponse);
332         }
333
334         private void createService(ServiceReqDetails serviceDetails) throws Exception {
335                 createService(serviceDetails, sdncDesignerDetails);
336         }
337
338         private void createService(ServiceReqDetails serviceDetails, User sdncModifier) throws Exception {
339                 RestResponse createServiceResponse = ServiceRestUtils.createService(serviceDetails, sdncModifier);
340                 ResourceRestUtils.checkCreateResponse(createServiceResponse);
341         }
342
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);
349
350                 resourceDetailsVF_01.setPayloadName(payloadName);
351                 resourceDetailsVF_01.setResourceType(ResourceTypeEnum.VF.name());
352                 RestResponse createResource = ResourceRestUtils.createResource(resourceDetailsVF_01, sdncDesignerDetails);
353                 BaseRestUtils.checkCreateResponse(createResource);
354         }
355
356 }