[SDC] 1710 rebase
[sdc.git] / ui-ci / src / main / java / org / openecomp / sdc / ci / tests / execute / sanity / OnboardViaApis.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.ci.tests.execute.sanity;
22
23 import static org.testng.AssertJUnit.assertEquals;
24
25 import java.awt.AWTException;
26 import java.io.File;
27 import java.io.FileOutputStream;
28 import java.nio.charset.StandardCharsets;
29 import java.sql.Timestamp;
30 import java.util.ArrayList;
31 import java.util.HashMap;
32 import java.util.Iterator;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.UUID;
36
37 import org.bouncycastle.util.encoders.Base64;
38 import org.openecomp.sdc.be.model.ComponentInstance;
39 import org.openecomp.sdc.be.model.Resource;
40 import org.openecomp.sdc.be.model.Service;
41 import org.openecomp.sdc.be.model.User;
42 import org.openecomp.sdc.ci.tests.datatypes.AmdocsLicenseMembers;
43 import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
44 import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum;
45 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
46 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
47 import org.openecomp.sdc.ci.tests.utilities.FileHandling;
48 import org.openecomp.sdc.ci.tests.utilities.OnboardingUtils;
49 import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils;
50 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
51 import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
52 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
53 import org.slf4j.LoggerFactory;
54 import org.testng.annotations.BeforeMethod;
55 import org.testng.annotations.DataProvider;
56 import org.testng.annotations.Test;
57
58 import com.clearspring.analytics.util.Pair;
59 import com.google.gson.Gson;
60
61 import ch.qos.logback.classic.Level;
62 import ch.qos.logback.classic.LoggerContext;
63 import fj.data.Either;
64
65 public class OnboardViaApis{
66         
67
68         private static final String FULL_PATH = "C://tmp//CSARs//";
69         
70         public static Object[][] provideData(Object[] fileNamesFromFolder, String filepath) {
71                 Object[][] arObject = new Object[fileNamesFromFolder.length][];
72
73                 int index = 0;
74                 for (Object obj : fileNamesFromFolder) {
75                         arObject[index++] = new Object[] { filepath, obj };
76                 }
77                 return arObject;
78         }
79
80         @DataProvider(name = "VNF_List" , parallel = false)
81         private static final Object[][] VnfList() throws Exception {
82                 String filepath = FileHandling.getVnfRepositoryPath();
83                 
84                 Object[] fileNamesFromFolder = FileHandling.getZipFileNamesFromFolder(filepath);
85                 System.out.println(String.format("There are %s zip file(s) to test", fileNamesFromFolder.length));
86                 return provideData(fileNamesFromFolder, filepath);
87         }
88
89         
90 //-------------------------------------------------------------------------------------------------------
91         User sdncDesignerDetails1 = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
92         ResourceReqDetails resourceDetails;
93         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
94         
95         
96         @BeforeMethod
97         public void before(){
98                 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
99                 lc.getLogger("org.apache").setLevel(Level.OFF);
100                 lc.getLogger("org.*").setLevel(Level.OFF);
101                 lc.getLogger("org.openecomp.sdc.ci.tests.datatypes.http.HttpRequest").setLevel(Level.OFF);
102                 resourceDetails = ElementFactory.getDefaultResource();
103         }
104                 
105         @Test(dataProvider = "VNF_List")
106         public void onboardVNFTestViaApis(String filepath, String vnfFile) throws Exception, Throwable {
107                 Service service = null;
108                 String fullFileName = FULL_PATH + vnfFile + ".csar";
109                 Timestamp timestamp = new Timestamp(System.currentTimeMillis());
110                 System.err.println(timestamp + " Starting test with VNF: " + vnfFile);
111                 service = runOnboardViaApisOnly(filepath, vnfFile);
112                 timestamp = new Timestamp(System.currentTimeMillis());
113                 System.err.println(timestamp + " Finished test with VNF: " + vnfFile);
114                 timestamp = new Timestamp(System.currentTimeMillis());
115                 System.err.println(timestamp + " Starting download service csar file: " + vnfFile);
116                 File file = new File(fullFileName);
117                 downloadToscaCsarToDirectory(service, file);
118                 timestamp = new Timestamp(System.currentTimeMillis());
119                 System.err.println(timestamp + " Finished download service csar file: " + vnfFile);
120                 System.out.println("end");
121                 
122         }
123         
124         
125         @Test
126         public void onboardingAndParser() throws Exception {
127                 Service service = null;
128                 String filepath = getFilePath();
129                 Object[] fileNamesFromFolder = FileHandling.getZipFileNamesFromFolder(filepath);
130                 String vnfFile = fileNamesFromFolder[7].toString();
131                 System.err.println(timestamp + " Starting test with VNF: " + vnfFile);
132                 service = runOnboardViaApisOnly(filepath, vnfFile);
133                 
134 //              AtomicOperationUtils.getServiceObjectByNameAndVersion(sdncModifierDetails, serviceName, serviceVersion);
135 //        RestResponse distributeService = AtomicOperationUtils.distributeService(service, true);
136 //        Map<Long, ServiceDistributionStatus> convertServiceDistributionStatusToObject = ResponseParser.convertServiceDistributionStatusToObject(distributeService.getResponse());
137 //        convertServiceDistributionStatusToObject.
138         }
139         
140         public static String getFilePath() {
141                 String filepath = System.getProperty("filepath");
142                 if (filepath == null && System.getProperty("os.name").contains("Windows")) {
143                         filepath = FileHandling.getResourcesFilesPath() +"VNFs";
144                 }
145                 
146                 else if(filepath.isEmpty() && !System.getProperty("os.name").contains("Windows")){
147                                 filepath = FileHandling.getBasePath() + File.separator + "Files" + File.separator +"VNFs";
148                 }
149                 return filepath;
150         }
151         
152         public static void downloadToscaCsarToDirectory(Service service, File file) {
153                 try {
154                         Either<String,RestResponse> serviceToscaArtifactPayload = AtomicOperationUtils.getServiceToscaArtifactPayload(service, "assettoscacsar");
155                         if(serviceToscaArtifactPayload.left().value() != null){
156                                 Gson gson = new Gson();
157                                 @SuppressWarnings("unchecked")
158                                 Map<String, String> fromJson = gson.fromJson(serviceToscaArtifactPayload.left().value(), Map.class);
159                                 String string = fromJson.get("base64Contents").toString();
160                                 byte[] byteArray = Base64.decode(string.getBytes(StandardCharsets.UTF_8));
161                                 File downloadedFile = new File(file.getAbsolutePath());
162                                 FileOutputStream fos = new FileOutputStream(downloadedFile);
163                                 fos.write(byteArray);
164                                 fos.flush();
165                                 fos.close();
166                         }
167                         
168                 } catch (Exception e) {
169                         // TODO Auto-generated catch block
170                         e.printStackTrace();
171                 }
172                 
173         }
174         
175         public Service runOnboardViaApisOnly(String filepath, String vnfFile) throws Exception, AWTException {
176                 Timestamp timestamp = new Timestamp(System.currentTimeMillis());
177                 System.err.println(timestamp + " Starting onboard VNF: " + vnfFile);
178                 Pair<String,Map<String,String>> onboardAndValidate = onboardAndValidateViaApi(filepath, vnfFile, sdncDesignerDetails1);
179                 String vspName = onboardAndValidate.left;
180                 timestamp = new Timestamp(System.currentTimeMillis());
181                 System.err.println(timestamp + " Finished onboard VNF: " + vnfFile);
182                 Resource resource = AtomicOperationUtils.getResourceObject(resourceDetails.getUniqueId());
183                 
184                 AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true);
185                 resource = AtomicOperationUtils.getResourceObject(resource.getUniqueId());
186                 // create service
187                 
188                 Service service = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true).left().value();
189                 Either<ComponentInstance,RestResponse> addComponentInstanceToComponentContainer = AtomicOperationUtils.addComponentInstanceToComponentContainer(resource, service, UserRoleEnum.DESIGNER, true);
190                 service = (Service) AtomicOperationUtils.changeComponentState(service, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
191                 return service;
192         }       
193         
194         
195         
196         public Pair<String, Map<String, String>> onboardAndValidateViaApi(String filepath, String vnfFile, User user) throws Exception {
197         
198                 AmdocsLicenseMembers amdocsLicenseMembers = createVendorLicense(user);
199                 Pair<String, Map<String, String>> createVendorSoftwareProduct = createVendorSoftwareProduct(vnfFile, filepath, user, amdocsLicenseMembers);
200                 String vspName = createVendorSoftwareProduct.left;
201                 List<String> tags = new ArrayList<>();
202                 tags.add(vspName);
203                 Map<String, String> map = createVendorSoftwareProduct.right;
204                 
205                 resourceDetails.setCsarUUID(map.get("vspId"));
206                 resourceDetails.setCsarVersion("1.0");
207                 resourceDetails.setName(vspName);
208                 resourceDetails.setTags(tags);
209                 resourceDetails.setResourceType(map.get("componentType"));
210                 resourceDetails.setVendorName(map.get("vendorName"));
211                 resourceDetails.setVendorRelease("1.0");
212                 resourceDetails.setResourceType("VF");
213                 RestResponse createResource = ResourceRestUtils.createResource(resourceDetails, sdncDesignerDetails1);
214                 
215                 return createVendorSoftwareProduct;
216         }
217         
218         public static Pair<String, Map<String, String>> createVendorSoftwareProduct(String HeatFileName, String filepath, User user, AmdocsLicenseMembers amdocsLicenseMembers)
219                         throws Exception {
220                 Pair<String, Map<String, String>> pair = createVSP(HeatFileName, filepath, user, amdocsLicenseMembers);
221                 
222                 String vspid = pair.right.get("vspId");
223                                 
224                 prepareVspForUse(user, vspid);
225                 
226                 return pair;
227         }
228         
229         public static void prepareVspForUse(User user, String vspid) throws Exception {
230                 RestResponse checkin = OnboardingUtils.checkinVendorSoftwareProduct(vspid, user);
231                 assertEquals("did not succeed to checking new VSP", 200, checkin.getErrorCode().intValue());
232
233                 RestResponse submit = OnboardingUtils.submitVendorSoftwareProduct(vspid, user);
234                 assertEquals("did not succeed to submit new VSP", 200, submit.getErrorCode().intValue());
235
236                 RestResponse createPackage = OnboardingUtils.createPackageOfVendorSoftwareProduct(vspid, user);
237                 assertEquals("did not succeed to create package of new VSP ", 200, createPackage.getErrorCode().intValue());
238
239         }
240         public static AmdocsLicenseMembers createVendorLicense(User user) throws Exception {
241                 
242                 AmdocsLicenseMembers amdocsLicenseMembers;
243                 String vendorLicenseName = "ciLicense" + UUID.randomUUID().toString().split("-")[0];
244                 RestResponse vendorLicenseResponse = OnboardingUtils.createVendorLicenseModels_1(vendorLicenseName, user);
245                 assertEquals("did not succeed to create vendor license model", 200, vendorLicenseResponse.getErrorCode().intValue());
246                 String vendorId = ResponseParser.getValueFromJsonResponse(vendorLicenseResponse.getResponse(), "value");
247
248                 RestResponse vendorKeyGroupsResponse = OnboardingUtils.createVendorKeyGroups_2(vendorId, user);
249                 assertEquals("did not succeed to create vendor key groups", 200, vendorKeyGroupsResponse.getErrorCode().intValue());
250                 String keyGroupId = ResponseParser.getValueFromJsonResponse(vendorKeyGroupsResponse.getResponse(), "value");
251
252                 RestResponse vendorEntitlementPool = OnboardingUtils.createVendorEntitlementPool_3(vendorId, user);
253                 assertEquals("did not succeed to create vendor entitlement pool", 200, vendorEntitlementPool.getErrorCode().intValue());
254                 String entitlementPoolId = ResponseParser.getValueFromJsonResponse(vendorEntitlementPool.getResponse(), "value");
255
256                 RestResponse vendorLicenseFeatureGroups = OnboardingUtils.createVendorLicenseFeatureGroups_4(vendorId, keyGroupId, entitlementPoolId, user);
257                 assertEquals("did not succeed to create vendor license feature groups", 200, vendorLicenseFeatureGroups.getErrorCode().intValue());
258                 String featureGroupId = ResponseParser.getValueFromJsonResponse(vendorLicenseFeatureGroups.getResponse(), "value");
259
260                 RestResponse vendorLicenseAgreement = OnboardingUtils.createVendorLicenseAgreement_5(vendorId, featureGroupId, user);
261                 assertEquals("did not succeed to create vendor license agreement", 200, vendorLicenseAgreement.getErrorCode().intValue());
262                 String vendorLicenseAgreementId = ResponseParser.getValueFromJsonResponse(vendorLicenseAgreement.getResponse(), "value");
263
264                 RestResponse checkinVendorLicense = OnboardingUtils.checkinVendorLicense(vendorId, user);
265                 assertEquals("did not succeed to checkin vendor license", 200, checkinVendorLicense.getErrorCode().intValue());
266
267                 RestResponse submitVendorLicense = OnboardingUtils.submitVendorLicense(vendorId, user);
268                 assertEquals("did not succeed to submit vendor license", 200, submitVendorLicense.getErrorCode().intValue());
269
270                 amdocsLicenseMembers = new AmdocsLicenseMembers(vendorId, vendorLicenseName, vendorLicenseAgreementId, featureGroupId);
271                 
272                 return amdocsLicenseMembers;
273         }
274         
275         
276         public static Pair<String, Map<String, String>> createVSP(String HeatFileName, String filepath, User user, AmdocsLicenseMembers amdocsLicenseMembers) throws Exception {
277                 String vspName = OnboardingUtils.handleFilename(HeatFileName);
278                 
279                 Pair<RestResponse, Map<String, String>> createNewVspPair = OnboardingUtils.createNewVendorSoftwareProduct(vspName, amdocsLicenseMembers, user);
280                 RestResponse createNewVendorSoftwareProduct = createNewVspPair.left;
281                 assertEquals("did not succeed to create new VSP", 200,createNewVendorSoftwareProduct.getErrorCode().intValue());
282                 String vspid = ResponseParser.getValueFromJsonResponse(createNewVendorSoftwareProduct.getResponse(), "vspId");
283                 String componentId = ResponseParser.getValueFromJsonResponse(createNewVendorSoftwareProduct.getResponse(), "componentId");
284                 
285                 Map<String, String> vspMeta = createNewVspPair.right;
286                 Map<String, String> vspObject = new HashMap<String, String>();
287                 Iterator<String> iterator = vspMeta.keySet().iterator();
288                 while(iterator.hasNext()){
289                         Object key = iterator.next();
290                         Object value = vspMeta.get(key);
291                         vspObject.put(key.toString(), value.toString());
292                 }
293                 vspObject.put("vspId", vspid);
294                 vspObject.put("componentId", componentId);
295                 vspObject.put("vendorName", amdocsLicenseMembers.getVendorLicenseName());
296                 vspObject.put("attContact", user.getUserId());
297                 
298                 RestResponse uploadHeatPackage = OnboardingUtils.uploadHeatPackage(filepath, HeatFileName, vspid, user);
299                 assertEquals("did not succeed to upload HEAT package", 200, uploadHeatPackage.getErrorCode().intValue());
300                 
301                 RestResponse validateUpload = OnboardingUtils.validateUpload(vspid, user);
302                 assertEquals("did not succeed to validate upload process", 200, validateUpload.getErrorCode().intValue());
303                 
304                 Pair<String, Map<String, String>> pair = new Pair<String, Map<String, String>>(vspName, vspObject);
305                 
306                 return pair;
307         }
308
309         
310         
311         
312         
313         
314         
315         
316         
317 //      ----------------------------------------------------------------------------------------------------------------------------------------
318         
319         
320         
321         
322
323
324 }