/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ package org.onap.sdc.backend.ci.tests.api; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; import com.aventstack.extentreports.ExtentTest; import com.aventstack.extentreports.Status; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import org.apache.commons.collections.CollectionUtils; import org.onap.sdc.backend.ci.tests.config.Config; import org.onap.sdc.backend.ci.tests.datatypes.ResourceReqDetails; import org.onap.sdc.backend.ci.tests.datatypes.enums.UserRoleEnum; import org.onap.sdc.backend.ci.tests.datatypes.http.RestResponse; import org.onap.sdc.backend.ci.tests.utils.Utils; import org.onap.sdc.backend.ci.tests.utils.general.AtomicOperationUtils; import org.onap.sdc.backend.ci.tests.utils.general.ElementFactory; import org.onap.sdc.backend.ci.tests.utils.general.FileHandling; import org.onap.sdc.backend.ci.tests.utils.rest.BaseRestUtils; import org.onap.sdc.backend.ci.tests.utils.rest.CatalogRestUtils; import org.onap.sdc.backend.ci.tests.utils.rest.ProductRestUtils; import org.onap.sdc.backend.ci.tests.utils.rest.ResourceRestUtils; import org.onap.sdc.backend.ci.tests.utils.rest.ResponseParser; import org.onap.sdc.backend.ci.tests.utils.rest.ServiceRestUtils; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; import org.openecomp.sdc.be.model.Component; import org.openecomp.sdc.be.model.Product; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.Service; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeSuite; public abstract class ComponentBaseTest { protected static Logger logger = LoggerFactory.getLogger(ComponentBaseTest.class); protected static final String REPORT_FOLDER = "target" + File.separator + "ExtentReport" + File.separator + "API" + File.separator; private static final String REPORT_FILE_NAME = "SDC_CI_Extent_Report.html"; public static Config config; protected static ITestContext myContext; /**************** METHODS ****************/ public static ExtentTest getExtendTest() { SomeInterface testManager = new ExtentTestManager(); return testManager.getTest(); } public enum ComponentOperationEnum { CREATE_COMPONENT, UPDATE_COMPONENT, GET_COMPONENT, DELETE_COMPONENT, CHANGE_STATE_CHECKIN, CHANGE_STATE_CHECKOUT, CHANGE_STATE_UNDO_CHECKOUT } public ComponentBaseTest() { LoggerContext lc = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory(); lc.getLogger("com.thinkaurelius").setLevel(Level.INFO); lc.getLogger("com.datastax").setLevel(Level.INFO); lc.getLogger("io.netty").setLevel(Level.INFO); lc.getLogger("c.d").setLevel(Level.INFO); } public static String getReportFolder() { return REPORT_FOLDER; } @BeforeSuite(alwaysRun = true) public void setupBeforeSuite(ITestContext context) throws Exception { config = Utils.getConfig(); myContext = context; ExtentManager.initReporter(getReportFolder(), REPORT_FILE_NAME, context); AtomicOperationUtils.createDefaultConsumer(true); performClean(); } @BeforeMethod(alwaysRun = true) public void setupBeforeTest(java.lang.reflect.Method method, ITestContext context) throws Exception { if (!"onboardVNFShotFlow".equals(method.getName()) && !"onboardPNFFlow".equals(method.getName())) { logger.info("ExtentReport instance started from BeforeMethod..."); ExtentTestManager.startTest(method.getName()); ExtentTestManager.assignCategory(this.getClass()); } else { logger.debug("ExtentReport instance started from Test..."); } } @AfterMethod(alwaysRun = true) public void quitAfterTest(ITestResult result, ITestContext context) throws Exception { int status = result.getStatus(); switch (status) { case ITestResult.SUCCESS: getExtendTest().log(Status.PASS, "Test Result : Success"); break; case ITestResult.FAILURE: getExtendTest().log(Status.ERROR, "ERROR - The following exepction occured"); getExtendTest().log(Status.ERROR, result.getThrowable()); getExtendTest().log(Status.FAIL, "Failure"); break; case ITestResult.SKIP: getExtendTest().log(Status.SKIP, "SKIP - The following exepction occured"); break; default: break; } ExtentTestManager.endTest(); } @AfterSuite(alwaysRun = true) public static void shutdownJanusGraph() throws Exception { performClean(); } public void setLog(String fromDataProvider) { ExtentTestManager .startTest(Thread.currentThread().getStackTrace()[2].getMethodName() + "      " + fromDataProvider); ExtentTestManager.assignCategory(this.getClass()); } protected static void performClean() throws Exception { if (!config.isSystemUnderDebug()) { deleteCreatedComponents(getCatalogAsMap()); FileHandling.overWriteExistindDir("target/outputCsar"); } else { System.out.println( "Accordindig to configuration components will not be deleted, in case to unable option to delete, please change systemUnderDebug parameter value to false ..."); } } private static void deleteCreatedComponents(Map> convertCatalogResponseToJavaObject) throws IOException { final String userId = UserRoleEnum.DESIGNER.getUserId(); List resourcesArrayList = convertCatalogResponseToJavaObject.get(ComponentTypeEnum.RESOURCE_PARAM_NAME); if (!CollectionUtils.isEmpty(resourcesArrayList)) { List collect = buildCollectionUniqueId(resourcesArrayList); for (String uId : collect) { ResourceRestUtils.markResourceToDelete(uId, userId); } ResourceRestUtils.deleteMarkedResources(userId); } resourcesArrayList = convertCatalogResponseToJavaObject.get(ComponentTypeEnum.SERVICE_PARAM_NAME); if (resourcesArrayList.size() > 0) { List collect = buildCollectionUniqueId(resourcesArrayList); for (String uId : collect) { ServiceRestUtils.markServiceToDelete(uId, userId); } ServiceRestUtils.deleteMarkedServices(userId); } } protected static List buildCollectionUniqueId(List resourcesArrayList) { List genericCollection = new ArrayList<>(); if (resourcesArrayList.get(0) != null) { ComponentTypeEnum componentTypeEnum = resourcesArrayList.get(0).getComponentType(); resourcesArrayList.stream().filter(Objects::nonNull). filter(s -> s.getName().toLowerCase().startsWith("ci") && !s.getName().toLowerCase().equals("cindervolume")). filter(f -> f.getUniqueId() != null). map(Component::getUniqueId). collect(Collectors.toList()). forEach((i) -> buildCollectionBaseOnComponentType(componentTypeEnum, genericCollection, i)); } return genericCollection; } public static void buildCollectionBaseOnComponentType(ComponentTypeEnum componentTypeEnum, List genericCollection, String i) { try { switch (componentTypeEnum) { case RESOURCE: RestResponse resource = ResourceRestUtils.getResource(i); Resource convertResourceResponseToJavaObject = ResponseParser.convertResourceResponseToJavaObject(resource.getResponse()); Map allVersions = convertResourceResponseToJavaObject.getAllVersions(); Collection values = allVersions.values(); genericCollection.addAll(values); break; case SERVICE: RestResponse service = ServiceRestUtils.getService(i); Service convertServiceResponseToJavaObject = ResponseParser.convertServiceResponseToJavaObject(service.getResponse()); allVersions = convertServiceResponseToJavaObject.getAllVersions(); values = allVersions.values(); genericCollection.addAll(values); break; case PRODUCT: RestResponse product = ProductRestUtils.getProduct(i); Product convertProductResponseToJavaObject = ResponseParser.convertProductResponseToJavaObject(product.getResponse()); allVersions = convertProductResponseToJavaObject.getAllVersions(); values = allVersions.values(); genericCollection.addAll(values); break; } } catch (Exception e1) { e1.printStackTrace(); } } protected static Map> getCatalogAsMap() throws Exception { RestResponse catalog = CatalogRestUtils.getCatalog(UserRoleEnum.DESIGNER.getUserId()); return ResponseParser.convertCatalogResponseToJavaObject(catalog.getResponse()); } protected Resource createVfFromCSAR(User sdncModifierDetails, String csarId) throws Exception { // create new resource from Csar ResourceReqDetails resourceDetails = ElementFactory.getDefaultResource(); resourceDetails.setCsarUUID(csarId); resourceDetails.setResourceType(ResourceTypeEnum.VF.name()); RestResponse createResource = ResourceRestUtils.createResource(resourceDetails, sdncModifierDetails); BaseRestUtils.checkCreateResponse(createResource); return ResponseParser.convertResourceResponseToJavaObject(createResource.getResponse()); } }