diff options
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java')
-rw-r--r-- | openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java | 319 |
1 files changed, 190 insertions, 129 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java index 1ce89b6748..7e8e98837e 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java @@ -19,179 +19,240 @@ package org.openecomp.sdcrests.externaltesting.rest.services; - -import org.openecomp.core.externaltesting.api.*; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import javax.inject.Named; +import javax.ws.rs.core.Response; +import org.apache.commons.io.IOUtils; +import org.apache.cxf.jaxrs.ext.multipart.Attachment; +import org.openecomp.core.externaltesting.api.ClientConfiguration; +import org.openecomp.core.externaltesting.api.ExternalTestingManager; +import org.openecomp.core.externaltesting.api.RemoteTestingEndpointDefinition; +import org.openecomp.core.externaltesting.api.TestErrorBody; +import org.openecomp.core.externaltesting.api.VtpTestExecutionOutput; +import org.openecomp.core.externaltesting.api.VtpTestExecutionRequest; +import org.openecomp.core.externaltesting.api.VtpTestExecutionResponse; import org.openecomp.core.externaltesting.errors.ExternalTestingException; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; +import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager; +import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory; import org.openecomp.sdcrests.externaltesting.rest.ExternalTesting; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import javax.inject.Named; -import javax.ws.rs.core.Response; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - @SuppressWarnings("unused") @Named @Service("externaltesting") @Scope(value = "prototype") public class ExternalTestingImpl implements ExternalTesting { - private final ExternalTestingManager testingManager; - - private static final Logger logger = - LoggerFactory.getLogger(ExternalTestingImpl.class); + private final ExternalTestingManager testingManager; + private static final int REQUEST_ID_LENGTH = 8; + private static final String TESTING_INTERNAL_ERROR = "SDC-TEST-005"; + private final VendorSoftwareProductManager vendorSoftwareProductManager = + VspManagerFactory.getInstance().createInterface(); + private static final Logger logger = LoggerFactory.getLogger(ExternalTestingImpl.class); - public ExternalTestingImpl(@Autowired ExternalTestingManager testingManager) { - this.testingManager = testingManager; - } - - /** - * Return the configuration of the feature to the client. - * @return JSON response content. - */ - @Override - public Response getConfig() { - try { - return Response.ok(testingManager.getConfig()).build(); - } - catch (ExternalTestingException e) { - return convertTestingException(e); + public ExternalTestingImpl(@Autowired ExternalTestingManager testingManager) { + this.testingManager = testingManager; } - } - /** - * To enable automated functional testing, allow - * a put for the client configuration. - * @return JSON response content. - */ - @Override - public Response setConfig(ClientConfiguration config) { - try { - return Response.ok(testingManager.setConfig(config)).build(); + /** + * Return the configuration of the feature to the client. + * + * @return JSON response content. + */ + @Override + public Response getConfig() { + try { + return Response.ok(testingManager.getConfig()).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - catch (ExternalTestingException e) { - return convertTestingException(e); + + /** + * To enable automated functional testing, allow + * a put for the client configuration. + * + * @return JSON response content. + */ + @Override + public Response setConfig(ClientConfiguration config) { + try { + return Response.ok(testingManager.setConfig(config)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - } - /** - * Return the test tree structure created by the testing manager. - * @return JSON response content. - */ - @Override - public Response getTestCasesAsTree() { - try { - return Response.ok(testingManager.getTestCasesAsTree()).build(); + /** + * Return the test tree structure created by the testing manager. + * + * @return JSON response content. + */ + @Override + public Response getTestCasesAsTree() { + try { + return Response.ok(testingManager.getTestCasesAsTree()).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - catch (ExternalTestingException e) { - return convertTestingException(e); - } - } - @Override - public Response getEndpoints() { - try { - return Response.ok(testingManager.getEndpoints()).build(); + @Override + public Response getEndpoints() { + try { + return Response.ok(testingManager.getEndpoints()).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - catch (ExternalTestingException e) { - return convertTestingException(e); + + /** + * To enable automated functional testing, allow a put of the endpoints. + * + * @return JSON response content. + */ + @Override + public Response setEndpoints(List<RemoteTestingEndpointDefinition> endpoints) { + try { + return Response.ok(testingManager.setEndpoints(endpoints)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - } - /** - * To enable automated functional testing, allow a put of the endpoints. - * @return JSON response content. - */ - @Override - public Response setEndpoints(List<RemoteTestingEndpointDefinition> endpoints) { - try { - return Response.ok(testingManager.setEndpoints(endpoints)).build(); + @Override + public Response getScenarios(String endpoint) { + try { + return Response.ok(testingManager.getScenarios(endpoint)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } + } - catch (ExternalTestingException e) { - return convertTestingException(e); + + @Override + public Response getTestsuites(String endpoint, String scenario) { + try { + return Response.ok(testingManager.getTestSuites(endpoint, scenario)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - } - @Override - public Response getScenarios(String endpoint) { - try { - return Response.ok(testingManager.getScenarios(endpoint)).build(); + @Override + public Response getTestcases(String endpoint, String scenario) { + try { + return Response.ok(testingManager.getTestCases(endpoint, scenario)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - catch (ExternalTestingException e) { - return convertTestingException(e); + + @Override + public Response getTestcase(String endpoint, String scenario, String testsuite, String testcase) { + try { + return Response.ok(testingManager.getTestCase(endpoint, scenario, testsuite, testcase)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - } + @Override + public Response execute(String vspId, String vspVersionId, String requestId, List<Attachment> files, + String testDataString) { + try { + List<VtpTestExecutionRequest> req = getVtpTestExecutionRequestObj(testDataString); + Map<String, byte[]> fileMap = getFileMap(files); + List<VtpTestExecutionResponse> vtpTestExecutionResponses = + testingManager.execute(req, vspId, vspVersionId, requestId, fileMap); + return Response.status(HttpStatus.OK.value()).entity(vtpTestExecutionResponses).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } - @Override - public Response getTestsuites(String endpoint, String scenario) { - try { - return Response.ok(testingManager.getTestSuites(endpoint, scenario)).build(); - } - catch (ExternalTestingException e) { - return convertTestingException(e); } - } - @Override - public Response getTestcases(String endpoint, String scenario) { - try { - return Response.ok(testingManager.getTestCases(endpoint, scenario)).build(); - } - catch (ExternalTestingException e) { - return convertTestingException(e); + @Override + public Response getValidationResult(String requestId, List<String> endPoints) { + try { + List<VtpTestExecutionResponse> resultsFromVtp = new ArrayList<>(); + for (String endPoint : endPoints) { + List<VtpTestExecutionOutput> vtpTestExecutionOutput = + testingManager.getExecutionIds(endPoint, requestId); + List<String> execIds = vtpTestExecutionOutput.stream().map(VtpTestExecutionOutput::getExecutionId) + .collect(Collectors.toList()); + List<VtpTestExecutionResponse> resultFromVtp = getVtpResultbyExecutionId(execIds, endPoint); + resultsFromVtp.addAll(resultFromVtp); + } + return Response.status(HttpStatus.OK.value()).entity(resultsFromVtp).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - } - @Override - public Response getTestcase(String endpoint, String scenario, String testsuite, String testcase) { - try { - return Response.ok(testingManager.getTestCase(endpoint, scenario, testsuite, testcase)).build(); - } - catch (ExternalTestingException e) { - return convertTestingException(e); - } - } + private List<VtpTestExecutionRequest> getVtpTestExecutionRequestObj(String testDataString) { + try { + return new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true).reader() + .forType(new TypeReference<List<VtpTestExecutionRequest>>() { }).readValue(testDataString); + } catch (IOException e) { + throw new ExternalTestingException(TESTING_INTERNAL_ERROR, 500, e.getMessage(), e); - @Override - public Response execute(List<VtpTestExecutionRequest> req, String requestId) { - try { - List<VtpTestExecutionResponse> responses = testingManager.execute(req, requestId); - List<Integer> statuses = responses.stream().map(r-> Optional.ofNullable(r.getHttpStatus()).orElse(HttpStatus.OK.value())).distinct().collect(Collectors.toList()); - if (statuses.size() == 1) { - return Response.status(HttpStatus.OK.value()).entity(responses).build(); - } - else { - return Response.status(HttpStatus.MULTI_STATUS.value()).entity(responses).build(); - } + } } - catch (ExternalTestingException e) { - return convertTestingException(e); + + private List<VtpTestExecutionResponse> getVtpResultbyExecutionId(List<String> executionIds, String endPoint) { + List<VtpTestExecutionResponse> vtpTestExecutionResponses = new ArrayList<>(); + executionIds.stream().forEach(executionId -> { + VtpTestExecutionResponse executionResult = testingManager.getExecution(endPoint, executionId); + vtpTestExecutionResponses.add(executionResult); + }); + return vtpTestExecutionResponses; } - } - @Override - public Response getExecution(String endpoint, String executionId) { - try { - return Response.ok(testingManager.getExecution(endpoint, executionId)).build(); + + @Override + public Response getExecution(String endpoint, String executionId) { + try { + return Response.ok(testingManager.getExecution(endpoint, executionId)).build(); + } catch (ExternalTestingException e) { + return convertTestingException(e); + } } - catch (ExternalTestingException e) { - return convertTestingException(e); + + private Map<String, byte[]> getFileMap(List<Attachment> files) { + if (files != null && !files.isEmpty()) { + + return files.stream().collect( + Collectors.toMap(attachment -> attachment.getDataHandler().getName(), attachment -> { + try { + return IOUtils.toByteArray(attachment.getDataHandler().getInputStream()); + } catch (IOException e) { + throw new ExternalTestingException(TESTING_INTERNAL_ERROR, 500, e.getMessage(), e); + } + })); + } + + return null; } - } - private Response convertTestingException(ExternalTestingException e) { - if (logger.isErrorEnabled()) { - logger.error("testing exception {} {} {}", e.getMessageCode(), e.getHttpStatus(), e.getDetail(), e); + private Response convertTestingException(ExternalTestingException e) { + if (logger.isErrorEnabled()) { + logger.error("testing exception {} {} {}", e.getMessageCode(), e.getHttpStatus(), e.getDetail(), e); + } + TestErrorBody body = new TestErrorBody(e.getMessageCode(), e.getHttpStatus(), e.getDetail()); + return Response.status(e.getHttpStatus()).entity(body).build(); } - TestErrorBody body = new TestErrorBody(e.getMessageCode(), e.getHttpStatus(), e.getDetail()); - return Response.status(e.getHttpStatus()).entity(body).build(); - } } |