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