Added oparent to sdc main
[sdc.git] / test-apis-ci / src / main / java / org / openecomp / sdc / ci / tests / utils / general / VendorSoftwareProductRestUtils.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 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.utils.general;
22
23 import com.aventstack.extentreports.Status;
24 import com.clearspring.analytics.util.Pair;
25 import com.google.gson.Gson;
26 import org.apache.commons.io.IOUtils;
27 import org.apache.http.HttpEntity;
28 import org.apache.http.client.methods.CloseableHttpResponse;
29 import org.apache.http.client.methods.HttpPost;
30 import org.apache.http.entity.mime.MultipartEntityBuilder;
31 import org.apache.http.entity.mime.content.FileBody;
32 import org.apache.http.impl.client.CloseableHttpClient;
33 import org.apache.http.impl.client.HttpClients;
34 import org.json.simple.JSONArray;
35 import org.json.simple.JSONValue;
36 import org.openecomp.sdc.be.model.User;
37 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
38 import org.openecomp.sdc.ci.tests.api.Urls;
39 import org.openecomp.sdc.ci.tests.config.Config;
40 import org.openecomp.sdc.ci.tests.datatypes.*;
41 import org.openecomp.sdc.ci.tests.datatypes.enums.CvfcTypeEnum;
42 import org.openecomp.sdc.ci.tests.datatypes.enums.ResourceCategoryEnum;
43 import org.openecomp.sdc.ci.tests.datatypes.http.HttpHeaderEnum;
44 import org.openecomp.sdc.ci.tests.datatypes.http.HttpRequest;
45 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
46 import org.openecomp.sdc.ci.tests.utils.Utils;
47 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
48 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
49
50 import java.io.File;
51 import java.io.IOException;
52 import java.io.InputStream;
53 import java.io.StringWriter;
54 import java.nio.file.FileSystems;
55 import java.util.Arrays;
56 import java.util.HashMap;
57 import java.util.Iterator;
58 import java.util.Map;
59
60 import static org.testng.AssertJUnit.assertEquals;
61
62 public class VendorSoftwareProductRestUtils {
63
64     public static VendorSoftwareProductObject createVendorSoftwareProduct(ResourceReqDetails resourceReqDetails, String heatFileName, String filepath, User user, AmdocsLicenseMembers amdocsLicenseMembers, Map<CvfcTypeEnum, String> cvfcArtifacts)
65             throws Exception {
66
67         VendorSoftwareProductObject vendorSoftwareProductObject = createVSP(resourceReqDetails, heatFileName, filepath, user, amdocsLicenseMembers);
68         if(cvfcArtifacts != null && ! cvfcArtifacts.isEmpty()){
69             addCvfcArtifacts(cvfcArtifacts, user, vendorSoftwareProductObject);
70         }
71         prepareVspForUse(user, vendorSoftwareProductObject, true);
72         return vendorSoftwareProductObject;
73     }
74
75     public static VendorSoftwareProductObject createVendorSoftwareProduct(ResourceReqDetails resourceReqDetails, String heatFileName, String filepath, User user, AmdocsLicenseMembers amdocsLicenseMembers)
76             throws Exception {
77
78         Map<CvfcTypeEnum, String> cvfcArtifacts = new HashMap<>();
79         return createVendorSoftwareProduct(resourceReqDetails, heatFileName, filepath, user, amdocsLicenseMembers, cvfcArtifacts);
80     }
81
82     /**
83      * @param user user
84      * @param vendorSoftwareProductObject vendorSoftwareProductObject
85      * @param isVspUpdated - in case isVspUpdated = false the commit API should not be issued
86      * the method do commit, submit and create package
87      * @throws Exception
88      */
89     public static void prepareVspForUse(User user, VendorSoftwareProductObject vendorSoftwareProductObject, Boolean isVspUpdated) throws Exception {
90
91         if(isVspUpdated) {
92             RestResponse commit = commitVendorSoftwareProduct(vendorSoftwareProductObject, user);
93             assertEquals("did not succeed to commit new VSP", 200, commit.getErrorCode().intValue());
94         }
95         RestResponse submit = submitVendorSoftwareProduct(vendorSoftwareProductObject.getVspId(), user, vendorSoftwareProductObject.getComponentId());
96         assertEquals("did not succeed to submit new VSP", 200, submit.getErrorCode().intValue());
97
98         RestResponse createPackage = createPackageOfVendorSoftwareProduct(vendorSoftwareProductObject.getVspId(), user, vendorSoftwareProductObject.getComponentId());
99         assertEquals("did not succeed to create package of new VSP ", 200, createPackage.getErrorCode().intValue());
100
101     }
102
103     public static VendorSoftwareProductObject createAndFillVendorSoftwareProduct(ResourceReqDetails resourceReqDetails, String heatFileName, String filePath, User user, AmdocsLicenseMembers amdocsLicenseMembers, Map<CvfcTypeEnum, String> cvfcArtifacts)
104             throws Exception {
105
106         VendorSoftwareProductObject createVendorSoftwareProduct = createVendorSoftwareProduct(resourceReqDetails, heatFileName, filePath, user, amdocsLicenseMembers, cvfcArtifacts);
107         VendorSoftwareProductObject vendorSoftwareProductObject = fillVendorSoftwareProductObjectWithMetaData(heatFileName, createVendorSoftwareProduct);
108         return vendorSoftwareProductObject;
109
110     }
111
112
113     public static VendorSoftwareProductObject createVSP(ResourceReqDetails resourceReqDetails, String heatFileName, String filepath, User user, AmdocsLicenseMembers amdocsLicenseMembers) throws Exception {
114         String vspName = handleFilename(heatFileName);
115
116         if(ComponentBaseTest.getExtendTest() != null){
117             ComponentBaseTest.getExtendTest().log(Status.INFO, "Starting to create the vendor software product");
118         }
119
120         Pair<RestResponse, VendorSoftwareProductObject> createNewVspPair = createNewVendorSoftwareProduct(resourceReqDetails, vspName, amdocsLicenseMembers, user);
121         assertEquals("did not succeed to create new VSP", 200,createNewVspPair.left.getErrorCode().intValue());
122
123         RestResponse uploadHeatPackage = uploadHeatPackage(filepath, heatFileName,  createNewVspPair.right, user);
124         assertEquals("did not succeed to upload HEAT package", 200, uploadHeatPackage.getErrorCode().intValue());
125
126         RestResponse validateUpload = validateUpload(createNewVspPair.right, user);
127         assertEquals("did not succeed to validate upload process, reason: " + validateUpload.getResponse(), 200, validateUpload.getErrorCode().intValue());
128
129         return createNewVspPair.right;
130     }
131
132     public static void updateVspWithVfcArtifacts(String filepath, String updatedSnmpPoll, String updatedSnmpTrap, String componentInstanceId, User user, VendorSoftwareProductObject vendorSoftwareProductObject) throws Exception{
133         RestResponse checkout = creationMethodVendorSoftwareProduct(vendorSoftwareProductObject, user);
134         assertEquals("did not succeed to checkout new VSP", 200, checkout.getErrorCode().intValue());
135 //              ExtentTestActions.log(Status.INFO, "Deleting SNMP POLL");
136         deleteArtifactByType(componentInstanceId, vendorSoftwareProductObject, user, CvfcTypeEnum.SNMP_POLL);
137 //              ExtentTestActions.log(Status.INFO, "Deleting SNMP TRAP");
138         deleteArtifactByType(componentInstanceId, vendorSoftwareProductObject, user, CvfcTypeEnum.SNMP_TRAP);
139         addVFCArtifacts(filepath, updatedSnmpPoll, updatedSnmpTrap, vendorSoftwareProductObject, user, componentInstanceId);
140         prepareVspForUse(user, vendorSoftwareProductObject, true);
141     }
142
143     private static RestResponse deleteArtifactByType(String componentInstanceId, VendorSoftwareProductObject vendorSoftwareProductObject, User user, CvfcTypeEnum snmpType) throws Exception
144     {
145         Config config = Utils.getConfig();
146         String url = String.format(Urls.DELETE_AMDOCS_ARTIFACT_BY_TYPE, config.getOnboardingBeHost(), config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId(), componentInstanceId, snmpType.getValue());
147         String userId = user.getUserId();
148         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
149
150         HttpRequest http = new HttpRequest();
151         RestResponse response = http.httpSendDelete(url, headersMap);
152         return response;
153     }
154
155     public static void updateVendorSoftwareProductToNextVersion(VendorSoftwareProductObject vendorSoftwareProductObject, User user, Boolean isVspUpdated) throws Throwable {
156
157         RestResponse createMethod = creationMethodVendorSoftwareProduct(vendorSoftwareProductObject, user);
158         assertEquals("did not succeed to createMethod for new VSP", 200, createMethod.getErrorCode().intValue());
159         prepareVspForUse(user,vendorSoftwareProductObject, isVspUpdated);
160
161     }
162
163     public static String handleFilename(String heatFileName) {
164         final String namePrefix = String.format("%sVF%s", ElementFactory.getResourcePrefix(), "Onboarded-");
165         final String nameSuffix = "-" + OnboardingUtils.getShortUUID();
166
167         String subHeatFileName = heatFileName.substring(0, heatFileName.lastIndexOf("."));
168
169         if ((namePrefix + subHeatFileName + nameSuffix).length() >= 50) {
170             subHeatFileName = subHeatFileName.substring(0, 50 - namePrefix.length() - nameSuffix.length());
171         }
172
173         if (subHeatFileName.contains("(") || subHeatFileName.contains(")")) {
174             subHeatFileName = subHeatFileName.replace("(", "-");
175             subHeatFileName = subHeatFileName.replace(")", "-");
176         }
177
178         String vnfName = namePrefix + subHeatFileName + nameSuffix;
179         return vnfName;
180     }
181
182     public static String addVFCArtifacts(String filepath, String snmpPoll, String snmpTrap, VendorSoftwareProductObject vendorSoftwareProductObject, User user, String componentInstanceId) throws Exception{
183         componentInstanceId = (componentInstanceId == null) ? getVspComponentId(vendorSoftwareProductObject, user) : componentInstanceId;
184         if (componentInstanceId != null){
185             if (snmpPoll != null){
186 //                              ExtentTestActions.log(Status.INFO, "Adding VFC artifact of type SNMP POLL with the file " + snmpPoll);
187                 RestResponse uploadSnmpPollArtifact = uploadSnmpPollArtifact(filepath, snmpPoll, vendorSoftwareProductObject, user, componentInstanceId);
188                 assertEquals("Did not succeed to add SNMP POLL", 200, uploadSnmpPollArtifact.getErrorCode().intValue());
189             }
190             if (snmpTrap != null){
191 //                              ExtentTestActions.log(Status.INFO, "Adding VFC artifact of type SNMP TRAP with the file " + snmpTrap);
192                 RestResponse uploadSnmpTrapArtifact = uploadSnmpTrapArtifact(filepath, snmpTrap, vendorSoftwareProductObject, user, componentInstanceId);
193                 assertEquals("Did not succeed to add SNMP TRAP", 200, uploadSnmpTrapArtifact.getErrorCode().intValue());
194             }
195         }
196
197         return componentInstanceId;
198     }
199
200     public static String addCvfcArtifacts(Map<CvfcTypeEnum, String> componentVfcArtifacts, User user, VendorSoftwareProductObject vendorSoftwareProductObject) throws Exception{
201         String componentInstanceId = getVspComponentId(vendorSoftwareProductObject, user);
202         if (componentInstanceId != null){
203             for(Map.Entry<CvfcTypeEnum, String> entry : componentVfcArtifacts.entrySet()){
204 //                              ExtentTestActions.log(Status.INFO, "Adding VFC artifact of type " + entry.getKey().getValue() + " with the file " + entry.getValue());
205                 RestResponse uploadSnmpPollArtifact = uploadCvfcArtifact(entry.getValue(), entry.getKey().getValue(), user, vendorSoftwareProductObject, componentInstanceId);
206                 assertEquals("Did not succeed to add " + entry.getKey().getValue(), BaseRestUtils.STATUS_CODE_SUCCESS, uploadSnmpPollArtifact.getErrorCode().intValue());
207             }
208         }
209         return componentInstanceId;
210     }
211
212     public static String addVFCArtifacts(String filepath, String snmpPoll, String snmpTrap, VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception{
213         return addVFCArtifacts(filepath, snmpPoll, snmpTrap, vendorSoftwareProductObject, user, null);
214     }
215
216     public static RestResponse uploadCvfcArtifact(String filepath, String cvfcType, User user, VendorSoftwareProductObject vendorSoftwareProductObject, String componentInstanceId) throws IOException {
217         Config config = Utils.getConfig();
218         String snmpPollUrl = String.format(Urls.UPLOAD_AMDOCS_ARTIFACT, config.getOnboardingBeHost(),config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId(), componentInstanceId, cvfcType);
219         return uploadFile(filepath, null, snmpPollUrl, user);
220     }
221
222
223     private static RestResponse uploadSnmpPollArtifact(String filepath, String zipArtifact, VendorSoftwareProductObject vendorSoftwareProductObject, User user, String componentInstanceId) throws IOException {
224         Config config = Utils.getConfig();
225         String snmpPollUrl = String.format(Urls.UPLOAD_SNMP_POLL_ARTIFACT, config.getOnboardingBeHost(),config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId(), componentInstanceId);
226         return uploadFile(filepath, zipArtifact, snmpPollUrl, user);
227     }
228
229     private static RestResponse uploadSnmpTrapArtifact(String filepath, String zipArtifact, VendorSoftwareProductObject vendorSoftwareProductObject, User user, String vspComponentId) throws IOException {
230         Config config = Utils.getConfig();
231         String snmpTrapUrl = String.format(Urls.UPLOAD_SNMP_POLL_ARTIFACT, config.getOnboardingBeHost(),config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId(), vspComponentId);
232         return uploadFile(filepath, zipArtifact, snmpTrapUrl, user);
233     }
234
235     private static RestResponse deleteSnmpArtifact(String componentId, String vspId, User user, SnmpTypeEnum snmpType) throws Exception
236     {
237         Config config = Utils.getConfig();
238         String url = String.format(Urls.DELETE_AMDOCS_ARTIFACT_BY_TYPE, config.getOnboardingBeHost(),config.getOnboardingBePort(), vspId, componentId, snmpType.getValue());
239         String userId = user.getUserId();
240
241         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
242
243         HttpRequest http = new HttpRequest();
244         RestResponse response = http.httpSendDelete(url, headersMap);
245         return response;
246     }
247
248
249     /**
250      * @param vendorSoftwareProductObject VendorSoftwareProductObject
251      * @param user user object
252      * @return return first found component instance Id from list
253      * @throws Exception Exception
254      */
255     private static String getVspComponentId(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
256         RestResponse componentList = getVSPComponents(vendorSoftwareProductObject, user);
257         String response = componentList.getResponse();
258         Map<String, Object> responseMap = (Map<String, Object>) JSONValue.parse(response);
259         JSONArray results = (JSONArray)responseMap.get("results");
260         for (Object res : results){
261             Map<String, Object> componentMap = (Map<String, Object>) JSONValue.parse(res.toString());
262             String componentInstanceId = componentMap.get("id").toString();
263             return componentInstanceId;
264         }
265         return null;
266     }
267
268     private static RestResponse getVSPComponents(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception{
269         Config config = Utils.getConfig();
270         String url = String.format(Urls.GET_VSP_COMPONENTS, config.getOnboardingBeHost(),config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
271         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(user.getUserId());
272
273         HttpRequest http = new HttpRequest();
274         RestResponse response = http.httpSendGet(url, headersMap);
275         return response;
276     }
277
278
279
280     public static boolean validateVspExist(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
281         RestResponse restResponse = getVSPComponentByVersion(vendorSoftwareProductObject, user);
282         assertEquals(String.format("Vsp version not updated, reponse message: %s", restResponse.getResponse()),restResponse.getErrorCode().intValue(),200);
283         return (restResponse.getErrorCode()==200);
284     }
285
286
287     private static RestResponse getVSPComponentByVersion(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception{
288         Config config = Utils.getConfig();
289         String url = String.format(Urls.GET_VSP_COMPONENT_BY_VERSION, config.getOnboardingBeHost(),config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
290         String userId = user.getUserId();
291
292         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
293
294         HttpRequest http = new HttpRequest();
295         RestResponse response = http.httpSendGet(url, headersMap);
296         return response;
297     }
298
299     private static RestResponse actionOnComponent(String vspid, String body, String onboardComponent, User user, String componentVersion) throws Exception {
300         Config config = Utils.getConfig();
301         String url = String.format(Urls.ACTION_ON_COMPONENT, config.getOnboardingBeHost(), config.getOnboardingBePort(), onboardComponent, vspid, componentVersion);
302         String userId = user.getUserId();
303         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
304
305         HttpRequest http = new HttpRequest();
306         RestResponse response = http.httpSendPut(url, body, headersMap);
307         return response;
308     }
309
310 //    TODO to check if for onboard API ACTION_ARCHIVE_RESTORE_COMPONENT format was added version parameter
311 //    if yes remove this method and use general actionOnComponent method
312     private static RestResponse actionOnComponent(String vspid, String body, String onboardComponent, User user) throws Exception {
313         Config config = Utils.getConfig();
314         String url = String.format(Urls.ACTION_ARCHIVE_RESTORE_COMPONENT, config.getCatalogBeHost(), config.getCatalogBePort(), onboardComponent, vspid);
315         String userId = user.getUserId();
316         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
317
318         HttpRequest http = new HttpRequest();
319         RestResponse response = http.httpSendPut(url, body, headersMap);
320         return response;
321     }
322
323     public static Pair<RestResponse, VendorSoftwareProductObject> createNewVendorSoftwareProduct(ResourceReqDetails resourceReqDetails, String vspName, AmdocsLicenseMembers amdocsLicenseMembers, User user) throws Exception {
324
325         Config config = Utils.getConfig();
326         String url = String.format(Urls.CREATE_VENDOR_SOFTWARE_PRODUCT, config.getOnboardingBeHost(), config.getOnboardingBePort());
327         String userId = user.getUserId();
328         VendorSoftwareProductObject vendorSoftwareProductObject = new VendorSoftwareProductObject();
329         LicensingData licensingData = new LicensingData(amdocsLicenseMembers.getVendorLicenseAgreementId(), Arrays.asList(amdocsLicenseMembers.getFeatureGroupId()));
330         ResourceCategoryEnum resourceCategoryEnum = ResourceCategoryEnum.findEnumNameByValues(resourceReqDetails.getCategories().get(0).getName(), resourceReqDetails.getCategories().get(0).getSubcategories().get(0).getName());
331
332         vendorSoftwareProductObject.setName(vspName);
333         vendorSoftwareProductObject.setDescription(resourceReqDetails.getDescription());
334         vendorSoftwareProductObject.setCategory(resourceCategoryEnum.getCategoryUniqeId());
335         vendorSoftwareProductObject.setSubCategory(resourceCategoryEnum.getSubCategoryUniqeId());
336         vendorSoftwareProductObject.setOnboardingMethod("NetworkPackage");
337         vendorSoftwareProductObject.setVendorName(amdocsLicenseMembers.getVendorLicenseName());
338         vendorSoftwareProductObject.setVendorId(amdocsLicenseMembers.getVendorId());
339         vendorSoftwareProductObject.setIcon("icon");
340         vendorSoftwareProductObject.setLicensingData(licensingData);
341         vendorSoftwareProductObject.setLicensingVersion(amdocsLicenseMembers.getVersion());
342
343         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
344         HttpRequest http = new HttpRequest();
345         Gson gson = new Gson();
346         String body = gson.toJson(vendorSoftwareProductObject);
347
348         RestResponse response = http.httpSendPost(url, body, headersMap);
349
350         vendorSoftwareProductObject.setVspId(ResponseParser.getValueFromJsonResponse(response.getResponse(), "itemId"));
351         vendorSoftwareProductObject.setComponentId(ResponseParser.getValueFromJsonResponse(response.getResponse(), "version:id"));
352 //              vendorSoftwareProductObject.setVersion(ResponseParser.getValueFromJsonResponse(response.getResponse(), "version:name"));
353         vendorSoftwareProductObject.setAttContact(user.getUserId());
354
355         return new Pair<>(response, vendorSoftwareProductObject);
356     }
357
358     public static RestResponse validateUpload(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
359         Config config = Utils.getConfig();
360         String url = String.format(Urls.VALIDATE_UPLOAD, config.getOnboardingBeHost(), config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
361         String userId = user.getUserId();
362
363         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
364         HttpRequest http = new HttpRequest();
365         RestResponse response = http.httpSendPut(url, null, headersMap);
366
367         return response;
368     }
369
370     public static RestResponse uploadHeatPackage(String filepath, String filename, VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
371         Config config = Utils.getConfig();
372         String url = String.format(Urls.UPLOAD_HEAT_PACKAGE, config.getOnboardingBeHost(), config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
373         return uploadFile(filepath, filename, url, user);
374     }
375
376     private static RestResponse uploadFile(String filepath, String filename, String url, User user) throws IOException{
377         CloseableHttpResponse response = null;
378
379         MultipartEntityBuilder mpBuilder = MultipartEntityBuilder.create();
380         mpBuilder.addPart("upload", new FileBody(getTestZipFile(filepath, filename)));
381
382         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(user.getUserId());
383         headersMap.put(HttpHeaderEnum.CONTENT_TYPE.getValue(), "multipart/form-data");
384
385         CloseableHttpClient client = HttpClients.createDefault();
386         try {
387             HttpPost httpPost = new HttpPost(url);
388             RestResponse restResponse = new RestResponse();
389
390             Iterator<String> iterator = headersMap.keySet().iterator();
391             while (iterator.hasNext()) {
392                 String key = iterator.next();
393                 String value = headersMap.get(key);
394                 httpPost.addHeader(key, value);
395             }
396             httpPost.setEntity(mpBuilder.build());
397             response = client.execute(httpPost);
398             HttpEntity entity = response.getEntity();
399             String responseBody = null;
400             if (entity != null) {
401                 InputStream instream = entity.getContent();
402                 try {
403                     StringWriter writer = new StringWriter();
404                     IOUtils.copy(instream, writer);
405                     responseBody = writer.toString();
406                 } finally {
407                     instream.close();
408                 }
409             }
410
411             restResponse.setErrorCode(response.getStatusLine().getStatusCode());
412             restResponse.setResponse(responseBody);
413
414             return restResponse;
415
416         } finally {
417             closeResponse(response);
418             closeHttpClient(client);
419
420         }
421     }
422
423     private static void closeResponse(CloseableHttpResponse response) {
424         try {
425             if (response != null) {
426                 response.close();
427             }
428         } catch (IOException e) {
429             System.out.println(String.format("failed to close client or response: %s", e.getMessage()));
430         }
431     }
432
433     private static void closeHttpClient(CloseableHttpClient client) {
434         try {
435             if (client != null) {
436                 client.close();
437             }
438         } catch (IOException e) {
439             System.out.println(String.format("failed to close client or response: %s", e.getMessage()));
440         }
441     }
442
443     private static File getTestZipFile(String filepath, String filename) throws IOException {
444         Config config = Utils.getConfig();
445         String sourceDir = config.getImportResourceTestsConfigDir();
446         java.nio.file.Path filePath;
447         if(filename == null){
448             filePath = FileSystems.getDefault().getPath(filepath);
449         }else{
450             filePath = FileSystems.getDefault().getPath(filepath + File.separator + filename);
451         }
452         return filePath.toFile();
453     }
454
455     public static RestResponse checkinVendorSoftwareProduct(User user, VendorSoftwareProductObject vendorSoftwareProductObject) throws Exception {
456         Config config = Utils.getConfig();
457         String url = String.format(Urls.UPDATE_VSP, config.getOnboardingBeHost(), config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
458
459         String userId = user.getUserId();
460         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
461 //              unset vspId, componentId, attContact, onboardingMethod
462         String vspId = vendorSoftwareProductObject.getVspId();
463         String componentId = vendorSoftwareProductObject.getComponentId();
464         String attContact = vendorSoftwareProductObject.getAttContact();
465         String onboardingMethod = vendorSoftwareProductObject.getOnboardingMethod();
466         vendorSoftwareProductObject.setVspId(null);
467         vendorSoftwareProductObject.setComponentId(null);
468         vendorSoftwareProductObject.setAttContact(null);
469         vendorSoftwareProductObject.setOnboardingMethod(null);
470         Gson gson = new Gson();
471         String body = gson.toJson(vendorSoftwareProductObject);
472         HttpRequest http = new HttpRequest();
473         RestResponse response = http.httpSendPut(url, body, headersMap);
474 //              set back vspId, componentId, attContact, onboardingMethod
475         vendorSoftwareProductObject.setVspId(vspId);
476         vendorSoftwareProductObject.setComponentId(componentId);
477         vendorSoftwareProductObject.setAttContact(attContact);
478         vendorSoftwareProductObject.setOnboardingMethod(onboardingMethod);
479
480         return response;
481     }
482
483     public static RestResponse commitVendorSoftwareProduct(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
484         String messageBody = "{\"action\":\"Commit\",\"commitRequest\":{\"message\":\"commit\"}}";
485         return actionOnComponent(vendorSoftwareProductObject.getVspId(), messageBody, "items", user, vendorSoftwareProductObject.getComponentId());
486     }
487
488     public static RestResponse submitVendorSoftwareProduct(String vspid, User user, String componentId) throws Exception {
489         return actionOnComponent(vspid, "{\"action\":\"Submit\"}", "vendor-software-products", user, componentId);
490     }
491
492     public static RestResponse createPackageOfVendorSoftwareProduct(String vspid, User user, String componentId) throws Exception {
493         return actionOnComponent(vspid, "{\"action\":\"Create_Package\"}", "vendor-software-products", user, componentId);
494     }
495
496     public static RestResponse creationMethodVendorSoftwareProduct(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
497         String messageBody = "{\"description\":\"2.0\",\"creationMethod\":\"major\"}";
498         return createMethodVendorSoftwareProduct(vendorSoftwareProductObject, messageBody, "items", user);
499     }
500
501     private static RestResponse createMethodVendorSoftwareProduct(VendorSoftwareProductObject vendorSoftwareProductObject, String body, String onboardComponent, User user) throws Exception {
502         Config config = Utils.getConfig();
503         String url = String.format(Urls.CREATE_METHOD, config.getOnboardingBeHost(), config.getOnboardingBePort(), onboardComponent, vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
504         String userId = user.getUserId();
505         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
506
507         HttpRequest http = new HttpRequest();
508         RestResponse response = http.httpSendPost(url, body, headersMap);
509         if(response.getErrorCode().intValue() == 200) {
510             vendorSoftwareProductObject.setComponentId(ResponseParser.getValueFromJsonResponse(response.getResponse(), "id"));
511         }
512         return response;
513     }
514
515     public static VendorSoftwareProductObject updateVSPWithNewVLMParameters(VendorSoftwareProductObject vendorSoftwareProductObject, AmdocsLicenseMembers amdocsLicenseMembers, User user) throws Exception {
516
517         RestResponse createMethod = creationMethodVendorSoftwareProduct(vendorSoftwareProductObject, user);
518         assertEquals("did not succeed to checkout new VSP", 200, createMethod.getErrorCode().intValue());
519 //        vendorSoftwareProductObject.setComponentId(ResponseParser.getValueFromJsonResponse(createMethod.getResponse(), "id"));
520
521         String licensingVersion = amdocsLicenseMembers.getVersion();
522         LicensingData licensingData = new LicensingData(amdocsLicenseMembers.getVendorLicenseAgreementId(), Arrays.asList(amdocsLicenseMembers.getFeatureGroupId()));
523         vendorSoftwareProductObject.setVendorId(amdocsLicenseMembers.getVendorId());
524         vendorSoftwareProductObject.setVendorName(amdocsLicenseMembers.getVendorLicenseName());
525         vendorSoftwareProductObject.setLicensingVersion(licensingVersion);
526         vendorSoftwareProductObject.setLicensingData(licensingData);
527
528         VendorSoftwareProductObjectReqDetails vendorSoftwareProductObjectReqDetails = new VendorSoftwareProductObjectReqDetails(
529                 vendorSoftwareProductObject.getName(), vendorSoftwareProductObject.getDescription(), vendorSoftwareProductObject.getCategory(),
530                 vendorSoftwareProductObject.getSubCategory(), vendorSoftwareProductObject.getVendorId(), vendorSoftwareProductObject.getVendorName(),
531                 vendorSoftwareProductObject.getLicensingVersion(), vendorSoftwareProductObject.getLicensingData(),
532                 null, null, null, vendorSoftwareProductObject.getIcon() );
533
534         Gson gson = new Gson();
535         String body = gson.toJson(vendorSoftwareProductObjectReqDetails);
536         RestResponse updateResponse = updateVendorSoftwareProduct(vendorSoftwareProductObject, body, user);
537         assertEquals("did not succeed to update VSP", 200, updateResponse.getErrorCode().intValue());
538
539         prepareVspForUse(user, vendorSoftwareProductObject, true);
540
541         return vendorSoftwareProductObject;
542     }
543
544     public static RestResponse updateVendorSoftwareProduct(VendorSoftwareProductObject vendorSoftwareProductObject, String body, User user) throws Exception {
545
546         Config config = Utils.getConfig();
547         String url = String.format(Urls.UPDATE_VSP, config.getOnboardingBeHost(), config.getOnboardingBePort(), vendorSoftwareProductObject.getVspId(), vendorSoftwareProductObject.getComponentId());
548         String userId = user.getUserId();
549
550         Map<String, String> headersMap = OnboardingUtils.prepareHeadersMap(userId);
551         HttpRequest http = new HttpRequest();
552
553         RestResponse response = http.httpSendPut(url, body, headersMap);
554         return response;
555     }
556
557 //      private static void importUpdateVSP(Pair<String, Map<String, String>> vsp, boolean isUpdate) throws Exception{
558 //              String vspName = vsp.left;
559 //              Map<String, String> vspMetadata = vsp.right;
560 //              boolean vspFound = HomePage.searchForVSP(vspName);
561 //
562 //              if (vspFound){
563 //
564 //                      List<WebElement> elemenetsFromTable = HomePage.getElemenetsFromTable();
565 ////                    WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 30);
566 ////                    WebElement findElement = wait.until(ExpectedConditions.visibilityOf(elemenetsFromTable.get(1)));
567 ////                    findElement.click();
568 //                      elemenetsFromTable.get(1).click();
569 //                      GeneralUIUtils.waitForLoader();
570 //
571 //                      if (isUpdate){
572 //                              GeneralUIUtils.clickOnElementByTestId(DataTestIdEnum.ImportVfRepository.UPDATE_VSP.getValue());
573 //
574 //                      }
575 //                      else{
576 //                              GeneralUIUtils.clickOnElementByTestId(DataTestIdEnum.ImportVfRepository.IMPORT_VSP.getValue());
577 //                      }
578 //
579 //                      String lifeCycleState = ResourceGeneralPage.getLifeCycleState();
580 //                      boolean needCheckout = lifeCycleState.equals(LifeCycleStateEnum.CHECKIN.getValue()) || lifeCycleState.equals(LifeCycleStateEnum.CERTIFIED.getValue());
581 //                      if (needCheckout)
582 //                      {
583 //                              try {
584 //                                      ResourceGeneralPage.clickCheckoutButton();
585 //                                      Assert.assertTrue(ResourceGeneralPage.getLifeCycleState().equals(LifeCycleStateEnum.CHECKOUT.getValue()), "Did not succeed to checkout");
586 //
587 //                              } catch (Exception e) {
588 //                                      ExtentTestActions.log(Status.ERROR, "Did not succeed to checkout");
589 //                                      e.printStackTrace();
590 //                              }
591 //                              GeneralUIUtils.waitForLoader();
592 //                      }
593 //
594 //                      //Metadata verification
595 //                      VfVerificator.verifyOnboardedVnfMetadata(vspName, vspMetadata);
596 //
597 //                      ExtentTestActions.log(Status.INFO, "Clicking create/update VNF");
598 //                      String duration = GeneralUIUtils.getActionDuration(() -> waitUntilVnfCreated());
599 //                  ExtentTestActions.log(Status.INFO, "Succeeded in importing/updating " + vspName, duration);
600 //              }
601 //              else{
602 //                      Assert.fail("Did not find VSP named " + vspName);
603 //              }
604 //      }
605
606 //      private static void waitUntilVnfCreated() {
607 //              GeneralUIUtils.clickOnElementByTestIdWithoutWait(DataTestIdEnum.GeneralElementsEnum.CREATE_BUTTON.getValue());
608 //              GeneralUIUtils.waitForLoader(60*10);
609 //              GeneralUIUtils.waitForAngular();
610 //              GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.GeneralElementsEnum.CHECKIN_BUTTON.getValue());
611 //      }
612 //
613 //      public static void updateVSP(Pair<String, Map<String, String>> vsp) throws Exception{
614 //              ExtentTestActions.log(Status.INFO, "Updating VSP " + vsp.left);
615 //              importUpdateVSP(vsp, true);
616 //      }
617 //
618 //      public static void importVSP(Pair<String, Map<String, String>> vsp) throws Exception{
619 //              ExtentTestActions.log(Status.INFO, "Importing VSP " + vsp.left);
620 //              importUpdateVSP(vsp, false);
621 //      }
622 //
623 //      public static void updateVnfAndValidate(String filepath, Pair<String, Map<String, String>> vsp, String updatedVnfFile, User user) throws Exception, Throwable {
624 //              ExtentTestActions.log(Status.INFO, String.format("Going to update the VNF with %s......", updatedVnfFile));
625 //              System.out.println(String.format("Going to update the VNF with %s......", updatedVnfFile));
626 //
627 //              Map<String, String> vspMap = vsp.right;
628 //              String vspId = vspMap.get("vspId");
629 //
630 //              updateVendorSoftwareProduct(vspId, updatedVnfFile, filepath, user);
631 //              HomePage.showVspRepository();
632 //              updateVSP(vsp);
633 //              ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
634 //              DeploymentArtifactPage.verifyArtifactsExistInTable(filepath, updatedVnfFile);
635 //      }
636 //
637 //      public static Pair<String, Map<String, String>> onboardAndValidate(String filepath, String vnfFile, User user) throws Exception {
638 //              ExtentTestActions.log(Status.INFO, String.format("Going to onboard the VNF %s", vnfFile));
639 //              System.out.println(String.format("Going to onboard the VNF %s", vnfFile));
640 //
641 //              AmdocsLicenseMembers amdocsLicenseMembers = createVendorLicense(user);
642 //              Pair<String, Map<String, String>> createVendorSoftwareProduct = createVendorSoftwareProduct(vnfFile, filepath, user, amdocsLicenseMembers);
643 //              String vspName = createVendorSoftwareProduct.left;
644 //
645 //              DownloadManager.downloadCsarByNameFromVSPRepository(vspName, createVendorSoftwareProduct.right.get("vspId"));
646 //              File latestFilefromDir = FileHandling.getLastModifiedFileNameFromDir();
647 //
648 //              ExtentTestActions.log(Status.INFO, String.format("Searching for onboarded %s", vnfFile));
649 //              HomePage.showVspRepository();
650 //              ExtentTestActions.log(Status.INFO,String.format("Going to import %s", vnfFile.substring(0, vnfFile.indexOf("."))));
651 //              importVSP(createVendorSoftwareProduct);
652 //
653 //              ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
654 //
655 //              // Verify deployment artifacts
656 //              Map<String, Object> combinedMap = ArtifactFromCsar.combineHeatArtifacstWithFolderArtifacsToMap(latestFilefromDir.getAbsolutePath());
657 //
658 //              LinkedList<HeatMetaFirstLevelDefinition> deploymentArtifacts = ((LinkedList<HeatMetaFirstLevelDefinition>) combinedMap.get("Deployment"));
659 //              ArtifactsCorrelationManager.addVNFartifactDetails(vspName, deploymentArtifacts);
660 //
661 //              List<String> heatEnvFilesFromCSAR = deploymentArtifacts.stream().filter(e -> e.getType().equals("HEAT_ENV")).
662 //                                                                                                                                               map(e -> e.getFileName()).
663 //                                                                                                                                               collect(Collectors.toList());
664 //
665 //              validateDeploymentArtifactsVersion(deploymentArtifacts, heatEnvFilesFromCSAR);
666 //
667 //              DeploymentArtifactPage.verifyArtifactsExistInTable(filepath, vnfFile);
668 //              return createVendorSoftwareProduct;
669 //      }
670 //
671 //      public static void validateDeploymentArtifactsVersion(LinkedList<HeatMetaFirstLevelDefinition> deploymentArtifacts,
672 //                      List<String> heatEnvFilesFromCSAR) {
673 //              String artifactVersion;
674 //              String artifactName;
675 //
676 //              for(HeatMetaFirstLevelDefinition deploymentArtifact: deploymentArtifacts) {
677 //                      artifactVersion = "1";
678 //
679 //                      if(deploymentArtifact.getType().equals("HEAT_ENV")) {
680 //                              continue;
681 //                      } else if(deploymentArtifact.getFileName().contains(".")) {
682 //                              artifactName = deploymentArtifact.getFileName().trim().substring(0, deploymentArtifact.getFileName().lastIndexOf("."));
683 //                      } else {
684 //                              artifactName = deploymentArtifact.getFileName().trim();
685 //                      }
686 //
687 //                      if (heatEnvFilesFromCSAR.contains(artifactName + ".env")){
688 //                              artifactVersion = "2";
689 //                      }
690 //                      ArtifactUIUtils.validateArtifactNameVersionType(artifactName, artifactVersion, deploymentArtifact.getType());
691 //              }
692 //      }
693
694
695     private static VendorSoftwareProductObject fillVendorSoftwareProductObjectWithMetaData(String vnfFile, VendorSoftwareProductObject createVendorSoftwareProduct) {
696         VendorSoftwareProductObject vendorSoftwareProductObject = new VendorSoftwareProductObject();
697         vendorSoftwareProductObject.setAttContact(createVendorSoftwareProduct.getAttContact());
698         vendorSoftwareProductObject.setCategory(createVendorSoftwareProduct.getCategory());
699         vendorSoftwareProductObject.setComponentId(createVendorSoftwareProduct.getComponentId());
700         vendorSoftwareProductObject.setDescription(createVendorSoftwareProduct.getDescription());
701         vendorSoftwareProductObject.setSubCategory(createVendorSoftwareProduct.getSubCategory());
702         vendorSoftwareProductObject.setVendorName(createVendorSoftwareProduct.getVendorName());
703         vendorSoftwareProductObject.setVspId(createVendorSoftwareProduct.getVspId());
704         vendorSoftwareProductObject.setName(createVendorSoftwareProduct.getName());
705         String[] arrFileNameAndExtension = vnfFile.split("\\.");
706         vendorSoftwareProductObject.setOnboardingMethod("NetworkPackage");
707         vendorSoftwareProductObject.setNetworkPackageName(arrFileNameAndExtension[0]);
708         vendorSoftwareProductObject.setOnboardingOrigin(arrFileNameAndExtension[1]);
709
710         return vendorSoftwareProductObject;
711     }
712
713     public static void updateVendorSoftwareProductToNextVersion(VendorSoftwareProductObject vendorSoftwareProductObject, User user, String filepath, String heatFileName) throws Throwable {
714
715         RestResponse createMethod = creationMethodVendorSoftwareProduct(vendorSoftwareProductObject, user);
716         assertEquals("did not succeed to createMethod for new VSP", 200, createMethod.getErrorCode().intValue());
717
718         RestResponse uploadHeatPackage = uploadHeatPackage(filepath, heatFileName, vendorSoftwareProductObject, user);
719         assertEquals("did not succeed to upload HEAT package", 200, uploadHeatPackage.getErrorCode().intValue());
720
721         RestResponse validateUpload = validateUpload(vendorSoftwareProductObject, user);
722         assertEquals("did not succeed to validate upload process, reason: " + validateUpload.getResponse(), 200, validateUpload.getErrorCode().intValue());
723
724         prepareVspForUse(user,vendorSoftwareProductObject, true);
725     }
726
727     public static RestResponse archiveVendorSoftwareProduct(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
728         String messageBody = "{\"action\":\"ARCHIVE\"}";
729         return actionOnComponent(vendorSoftwareProductObject.getVspId(), messageBody, "items", user);
730     }
731
732     public static RestResponse restoreVendorSoftwareProduct(VendorSoftwareProductObject vendorSoftwareProductObject, User user) throws Exception {
733         String messageBody = "{\"action\":\"RESTORE\"}";
734         return actionOnComponent(vendorSoftwareProductObject.getVspId(), messageBody, "items", user);
735     }
736
737 }