summaryrefslogtreecommitdiffstats
path: root/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src')
-rw-r--r--openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/ExternalTesting.java80
-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.java164
-rw-r--r--openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/java/org/openecomp/sdcrests/externaltesting/rest/services/ApiTests.java197
-rw-r--r--openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/resources/logback-test.xml30
4 files changed, 471 insertions, 0 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/ExternalTesting.java b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/ExternalTesting.java
new file mode 100644
index 0000000000..14c45fbdbe
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/ExternalTesting.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright © 2019 iconectiv
+ *
+ * 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.
+ */
+
+package org.openecomp.sdcrests.externaltesting.rest;
+
+import io.swagger.annotations.Api;
+import org.openecomp.core.externaltesting.api.VtpTestExecutionRequest;
+import org.springframework.validation.annotation.Validated;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+
+@Path("/v1.0/externaltesting")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "External-Testing")
+@Validated
+
+public interface ExternalTesting {
+
+ @GET
+ @Path("/config")
+ Response getConfig();
+
+ @GET
+ @Path("/testcasetree")
+ Response getTestCasesAsTree();
+
+ @GET
+ @Path("/endpoints")
+ Response getEndpoints();
+
+ @GET
+ @Path("/endpoints/{endpointId}/scenarios")
+ Response getScenarios(@PathParam("endpointId") String endpointId);
+
+ @GET
+ @Path("/endpoints/{endpointId}/scenarios/{scenario}/testsuites")
+ Response getTestsuites(@PathParam("endpointId") String endpointId, @PathParam("scenario") String scenario);
+
+ @GET
+ @Path("/endpoints/{endpointId}/scenarios/{scenario}/testcases")
+ Response getTestcases(@PathParam("endpointId") String endpointId,
+ @PathParam("scenario") String scenario);
+
+ @GET
+ @Path("/endpoints/{endpointId}/scenarios/{scenario}/testsuites/{testsuite}/testcases/{testcase}")
+ Response getTestcase(@PathParam("endpointId") String endpointId,
+ @PathParam("scenario") String scenario,
+ @PathParam("testsuite") String testsuite,
+ @PathParam("testcase") String testcase);
+
+ @POST
+ @Path("/endpoints/{endpointId}/executions/{executionId}")
+ Response getExecution(@PathParam("endpointId") String endpointId,
+ @PathParam("executionId") String executionId);
+
+
+ @POST
+ @Path("/executions")
+ Response execute(List<VtpTestExecutionRequest> req,
+ @QueryParam("requestId") String requestId);
+
+}
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
new file mode 100644
index 0000000000..206eb4986b
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/main/java/org/openecomp/sdcrests/externaltesting/rest/services/ExternalTestingImpl.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright © 2019 iconectiv
+ *
+ * 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.
+ */
+
+package org.openecomp.sdcrests.externaltesting.rest.services;
+
+
+import org.openecomp.core.externaltesting.api.*;
+import org.openecomp.core.externaltesting.errors.ExternalTestingException;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdcrests.externaltesting.rest.ExternalTesting;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+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 ExternalTestingManager testingManager;
+
+ 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);
+ }
+ }
+
+ /**
+ * 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);
+ }
+ }
+
+ @Override
+ public Response getEndpoints() {
+ try {
+ return Response.ok(testingManager.getEndpoints()).build();
+ }
+ catch (ExternalTestingException e) {
+ return convertTestingException(e);
+ }
+
+ }
+ @Override
+ public Response getScenarios(String endpoint) {
+ try {
+ return Response.ok(testingManager.getScenarios(endpoint)).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 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(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(200)).distinct().collect(Collectors.toList());
+ if (statuses.size() == 1) {
+ // 1 status so use it...
+ return Response.status(statuses.get(0)).entity(responses).build();
+ }
+ else {
+ return Response.status(207).entity(responses).build();
+ }
+ }
+ catch (ExternalTestingException e) {
+ return convertTestingException(e);
+ }
+ }
+
+ @Override
+ public Response getExecution(String endpoint, String executionId) {
+ try {
+ return Response.ok(testingManager.getExecution(endpoint, executionId)).build();
+ }
+ catch (ExternalTestingException e) {
+ return convertTestingException(e);
+ }
+ }
+
+ private Response convertTestingException(ExternalTestingException e) {
+ if (logger.isErrorEnabled()) {
+ logger.error("testing exception {} {} {}", e.getTitle(), e.getCode(), e.getDetail(), e);
+ }
+ TestErrorBody body = new TestErrorBody(e.getTitle(), e.getCode(), e.getDetail());
+ return Response.status(e.getCode()).entity(body).build();
+ }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/java/org/openecomp/sdcrests/externaltesting/rest/services/ApiTests.java b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/java/org/openecomp/sdcrests/externaltesting/rest/services/ApiTests.java
new file mode 100644
index 0000000000..d9da7e9006
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/java/org/openecomp/sdcrests/externaltesting/rest/services/ApiTests.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright © 2019 iconectiv
+ *
+ * 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.
+ */
+
+package org.openecomp.sdcrests.externaltesting.rest.services;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.core.externaltesting.api.*;
+import org.openecomp.core.externaltesting.errors.ExternalTestingException;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class ApiTests {
+
+ private static final String EP = "ep";
+ private static final String EXEC = "exec";
+ private static final String SC = "sc";
+ private static final String TS = "ts";
+ private static final String TC = "tc";
+ private static final String EXPECTED = "Expected";
+
+
+ @Mock
+ private ExternalTestingManager testingManager;
+
+ /**
+ * At the API level, test that the code does not throw
+ * exceptions but there's not much to test.
+ */
+ @Test
+ public void testApi() {
+ MockitoAnnotations.initMocks(this);
+
+ ExternalTestingImpl testing = new ExternalTestingImpl(testingManager);
+ Assert.assertNotNull(testing.getConfig());
+ Assert.assertNotNull(testing.getEndpoints());
+ Assert.assertNotNull(testing.getExecution(EP, EXEC));
+ Assert.assertNotNull(testing.getScenarios(EP));
+ Assert.assertNotNull(testing.getTestcase(EP, SC, TS, TC));
+ Assert.assertNotNull(testing.getTestcases(EP, SC));
+ Assert.assertNotNull(testing.getTestsuites(EP, SC));
+ Assert.assertNotNull(testing.getTestCasesAsTree());
+
+ List<VtpTestExecutionRequest> requests =
+ Arrays.asList(new VtpTestExecutionRequest(), new VtpTestExecutionRequest());
+ Assert.assertNotNull(testing.execute(requests, "requestId"));
+ }
+
+ class ApiTestExternalTestingManager implements ExternalTestingManager {
+ @Override
+ public String getConfig() {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public TestTreeNode getTestCasesAsTree() {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public List<VtpNameDescriptionPair> getEndpoints() {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public List<VtpNameDescriptionPair> getScenarios(String endpoint) {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public List<VtpNameDescriptionPair> getTestSuites(String endpoint, String scenario) {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public List<VtpTestCase> getTestCases(String endpoint, String scenario) {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public VtpTestCase getTestCase(String endpoint, String scenario, String testSuite, String testCaseName) {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public List<VtpTestExecutionResponse> execute(List<VtpTestExecutionRequest> requests, String requestId) {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+
+ @Override
+ public VtpTestExecutionResponse getExecution(String endpoint, String executionId) {
+ throw new ExternalTestingException(EXPECTED, 500, EXPECTED);
+ }
+ }
+
+ /**
+ * Test the exception handler logic for the cases when the
+ * testing manager throws an exception.
+ */
+ @Test
+ public void testExceptions() {
+ MockitoAnnotations.initMocks(this);
+
+ ExternalTestingManager m = new ApiTestExternalTestingManager();
+ ExternalTestingImpl testingF = new ExternalTestingImpl(m);
+
+ try {
+ testingF.getConfig();
+ }
+ catch (Exception ex) {
+ // expected.
+ }
+
+
+ try {
+ testingF.getEndpoints();
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+ try {
+ testingF.getExecution(EP, EXEC);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+ try {
+ testingF.getScenarios(EP);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+ try {
+ testingF.getTestcase(EP, SC, TS, TC);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+ try {
+ testingF.getTestcases(EP, SC);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+ try {
+ testingF.getTestsuites(EP, SC);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+ try {
+ testingF.getTestCasesAsTree();
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+ List<VtpTestExecutionRequest> requestsF =
+ Arrays.asList(new VtpTestExecutionRequest(), new VtpTestExecutionRequest());
+
+ try {
+ testingF.execute(requestsF, null);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+
+
+ try {
+ testingF.execute(requestsF, null);
+ }
+ catch (ExternalTestingException e) {
+ // expected.
+ }
+ }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/resources/logback-test.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..e0498971dc
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/externaltesting-rest/externaltesting-rest-services/src/test/resources/logback-test.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright © 2019 iconectiv
+ ~
+ ~ 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.
+ -->
+
+<configuration>
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <Pattern>%d{dd-MMM-yyyy HH:mm:ss:SSS} %-5level %logger{36}.%M\(%line\) - %msg%n</Pattern>
+ </encoder>
+ </appender>
+
+ <root level="DEBUG">
+ <appender-ref ref="STDOUT" />
+ </root>
+
+</configuration>