You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2022/08/17 17:19:28 UTC
[cxf] branch 3.5.x-fixes updated: Attempt to fix flaky JaxRsServiceTest tests (CXF-8750 post merge): split into separate test cases (#986)
This is an automated email from the ASF dual-hosted git repository.
reta pushed a commit to branch 3.5.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/3.5.x-fixes by this push:
new adf31081a8 Attempt to fix flaky JaxRsServiceTest tests (CXF-8750 post merge): split into separate test cases (#986)
adf31081a8 is described below
commit adf31081a8ecc3b4750dad0480b5cf41f2df3596
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Wed Aug 17 13:19:22 2022 -0400
Attempt to fix flaky JaxRsServiceTest tests (CXF-8750 post merge): split into separate test cases (#986)
---
.../apache/cxf/osgi/itests/jaxrs/BookStore.java | 49 ----------
.../cxf/osgi/itests/jaxrs/JaxRsServiceTest.java | 46 +---------
.../cxf/osgi/itests/jaxrs/JaxRsTestActivator.java | 10 --
.../cxf/osgi/itests/jaxrs/OpenApiBookStore.java | 101 +++++++++++++++++++++
...xRsServiceTest.java => OpenApiServiceTest.java} | 81 ++---------------
...estActivator.java => OpenApiTestActivator.java} | 6 +-
6 files changed, 114 insertions(+), 179 deletions(-)
diff --git a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/BookStore.java b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/BookStore.java
index 6b15968659..09d60d9f5b 100644
--- a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/BookStore.java
+++ b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/BookStore.java
@@ -50,14 +50,7 @@ import org.apache.cxf.validation.BeanValidationProvider;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.HibernateValidatorConfiguration;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.media.Content;
-import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.tags.Tag;
-
@Path("/bookstore")
-@Tag(name = "BookStore")
@Produces("application/xml")
public class BookStore {
private Map<Long, Book> books = new HashMap<>();
@@ -80,15 +73,6 @@ public class BookStore {
@GET
@Path("/books/{id}")
- @Operation(
- summary = "Get book by ID",
- description = "Get operation with path parameter",
- responses = {
- @ApiResponse(content = @Content(schema = @Schema(implementation = Book.class)),
- description = "Book found", responseCode = "200"),
- @ApiResponse(description = "Book not found", responseCode = "404")
- }
- )
public Response getBookRoot(@PathParam("id") Long id) {
assertInjections();
Book b = books.get(id);
@@ -98,14 +82,6 @@ public class BookStore {
return Response.ok(b).build();
}
- @Operation(
- summary = "Update book by ID",
- description = "Put operation with path parameter",
- responses = {
- @ApiResponse(description = "Book found and updated", responseCode = "200"),
- @ApiResponse(description = "Book not found", responseCode = "404")
- }
- )
@PUT
@Path("/books/{id}")
public Response updateBook(@PathParam("id") Long id, Book book) {
@@ -118,14 +94,6 @@ public class BookStore {
return Response.ok().build();
}
- @Operation(
- summary = "Create a book with validation",
- description = "Post operation with entity in body and validation",
- responses = {
- @ApiResponse(description = "Book created", responseCode = "201"),
- @ApiResponse(description = "Validation failed", responseCode = "400")
- }
- )
@POST
@Path("/books-validate")
public Response createBookValidate(Book book) {
@@ -155,15 +123,6 @@ public class BookStore {
return createBook(book);
}
-
- @Operation(
- summary = "Create new book",
- description = "Post operation with entity in body",
- responses = {
- @ApiResponse(description = "Book created", responseCode = "201"),
- @ApiResponse(description = "Book with given ID already exists", responseCode = "409")
- }
- )
@POST
@Path("/books")
public Response createBook(Book book) {
@@ -178,14 +137,6 @@ public class BookStore {
return Response.created(createdURI).build();
}
- @Operation(
- summary = "Delete a book",
- description = "Delete operation with path param",
- responses = {
- @ApiResponse(description = "Book deleted", responseCode = "200"),
- @ApiResponse(description = "Book not found", responseCode = "404")
- }
- )
@DELETE
@Path("/books/{id}")
public Response removeBook(@PathParam("id") Long id) {
diff --git a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java
index d0cf69b34a..8c48a2e08d 100644
--- a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java
+++ b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java
@@ -26,10 +26,6 @@ import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
import org.apache.cxf.helpers.JavaUtils;
import org.apache.cxf.osgi.itests.AbstractServerActivator;
import org.apache.cxf.osgi.itests.CXFOSGiTestSupport;
@@ -48,9 +44,6 @@ import org.ops4j.pax.tinybundles.core.TinyBundles;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.provision;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
@@ -62,13 +55,8 @@ public class JaxRsServiceTest extends CXFOSGiTestSupport {
private static final String BASE_URL = "http://localhost:" + PORT + "/cxf/jaxrs/";
private static final String BOOKSTORE_PATH = "bookstore";
- private static final String SWAGGER_PATH = "api-docs";
- private static final String OPEN_API_FILE_PATH = "openapi.json";
- private final WebTarget wt = ClientBuilder
- .newClient()
- .register(JacksonJsonProvider.class)
- .target(BASE_URL);
+ private final WebTarget wt = ClientBuilder.newClient().target(BASE_URL);
@Test
public void testJaxRsGet() throws Exception {
@@ -130,34 +118,6 @@ public class JaxRsServiceTest extends CXFOSGiTestSupport {
assertStatus(Status.OK, response);
}
- @Test
- public void testGetSwaggerUi() {
- WebTarget swaggerWt = wt.path(SWAGGER_PATH).queryParam("url", "/cxf/jaxrs/openapi.json");
- Response response = swaggerWt.request().get();
- String swaggerFileHtml = response.readEntity(String.class);
-
- assertStatus(Status.OK, response);
- assertTrue(swaggerFileHtml.contains("<html"));
- assertTrue(swaggerFileHtml.contains("<head>"));
- assertTrue(swaggerFileHtml.contains("<title>Swagger UI</title>"));
- assertTrue(swaggerFileHtml.contains("</html>"));
- }
-
- @Test
- public void testGetOpenApiJsonFile() {
- WebTarget openApiWt = wt.path(OPEN_API_FILE_PATH);
- Response response = openApiWt.request().get();
- String openApiJson = response.readEntity(String.class);
-
- assertStatus(Status.OK, response);
- try {
- new ObjectMapper().readValue(openApiJson, Object.class);
- assertTrue(openApiJson.contains("/bookstore/"));
- } catch (JsonProcessingException e) {
- fail();
- }
- }
-
private static void assertStatus(Status expectedStatus, Response response) {
assertEquals(expectedStatus.getStatusCode(), response.getStatus());
}
@@ -166,9 +126,7 @@ public class JaxRsServiceTest extends CXFOSGiTestSupport {
public Option[] config() {
return OptionUtils.combine(
cxfBaseConfig(),
- features(cxfUrl, "cxf-core", "cxf-wsdl", "cxf-jaxrs", "cxf-bean-validation-core", "cxf-bean-validation",
- "cxf-rs-description-openapi-v3"),
- mavenBundle("org.webjars", "swagger-ui").versionAsInProject(),
+ features(cxfUrl, "cxf-core", "cxf-wsdl", "cxf-jaxrs", "cxf-bean-validation-core", "cxf-bean-validation"),
logLevel(LogLevel.INFO),
testUtils(),
provision(serviceBundle())
diff --git a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java
index b7176ba039..42eec4eada 100644
--- a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java
+++ b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java
@@ -22,8 +22,6 @@ import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
-import org.apache.cxf.jaxrs.openapi.OpenApiFeature;
-import org.apache.cxf.jaxrs.swagger.ui.SwaggerUiConfig;
import org.apache.cxf.osgi.itests.AbstractServerActivator;
public class JaxRsTestActivator extends AbstractServerActivator {
@@ -35,14 +33,6 @@ public class JaxRsTestActivator extends AbstractServerActivator {
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setBus(bus);
sf.setResourceClasses(BookStore.class);
-
- OpenApiFeature openApiFeature = new OpenApiFeature();
- openApiFeature.setScan(false);
- SwaggerUiConfig swaggerUiConfig = new SwaggerUiConfig();
- swaggerUiConfig.setUrl("/cxf/jaxrs/openapi.json");
- openApiFeature.setSwaggerUiConfig(swaggerUiConfig);
-
- sf.getFeatures().add(openApiFeature);
sf.setAddress("/jaxrs");
return sf.create();
}
diff --git a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiBookStore.java b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiBookStore.java
new file mode 100644
index 0000000000..8567dd373a
--- /dev/null
+++ b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiBookStore.java
@@ -0,0 +1,101 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.cxf.osgi.itests.jaxrs;
+
+
+import javax.ws.rs.DELETE;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+@Tag(name = "BookStore")
+public class OpenApiBookStore extends BookStore {
+ @Operation(
+ summary = "Get book by ID",
+ description = "Get operation with path parameter",
+ responses = {
+ @ApiResponse(content = @Content(schema = @Schema(implementation = Book.class)),
+ description = "Book found", responseCode = "200"),
+ @ApiResponse(description = "Book not found", responseCode = "404")
+ }
+ )
+ public Response getBookRoot(@PathParam("id") Long id) {
+ return super.getBookRoot(id);
+ }
+
+ @Operation(
+ summary = "Update book by ID",
+ description = "Put operation with path parameter",
+ responses = {
+ @ApiResponse(description = "Book found and updated", responseCode = "200"),
+ @ApiResponse(description = "Book not found", responseCode = "404")
+ }
+ )
+ public Response updateBook(@PathParam("id") Long id, Book book) {
+ return super.updateBook(id, book);
+ }
+
+ @Operation(
+ summary = "Create a book with validation",
+ description = "Post operation with entity in body and validation",
+ responses = {
+ @ApiResponse(description = "Book created", responseCode = "201"),
+ @ApiResponse(description = "Validation failed", responseCode = "400")
+ }
+ )
+ public Response createBookValidate(Book book) {
+ return super.createBookValidate(book);
+ }
+
+
+ @Operation(
+ summary = "Create new book",
+ description = "Post operation with entity in body",
+ responses = {
+ @ApiResponse(description = "Book created", responseCode = "201"),
+ @ApiResponse(description = "Book with given ID already exists", responseCode = "409")
+ }
+ )
+ public Response createBook(Book book) {
+ return super.createBook(book);
+ }
+
+ @Operation(
+ summary = "Delete a book",
+ description = "Delete operation with path param",
+ responses = {
+ @ApiResponse(description = "Book deleted", responseCode = "200"),
+ @ApiResponse(description = "Book not found", responseCode = "404")
+ }
+ )
+ @DELETE
+ @Path("/books/{id}")
+ public Response removeBook(@PathParam("id") Long id) {
+ return super.removeBook(id);
+ }
+}
+
+
diff --git a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiServiceTest.java
similarity index 65%
copy from osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java
copy to osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiServiceTest.java
index d0cf69b34a..91b5a4fb7d 100644
--- a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsServiceTest.java
+++ b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiServiceTest.java
@@ -21,14 +21,12 @@ package org.apache.cxf.osgi.itests.jaxrs;
import java.io.InputStream;
import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import org.apache.cxf.helpers.JavaUtils;
import org.apache.cxf.osgi.itests.AbstractServerActivator;
@@ -47,7 +45,6 @@ import org.ops4j.pax.exam.spi.reactors.PerClass;
import org.ops4j.pax.tinybundles.core.TinyBundles;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
@@ -58,77 +55,13 @@ import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
-public class JaxRsServiceTest extends CXFOSGiTestSupport {
+public class OpenApiServiceTest extends CXFOSGiTestSupport {
private static final String BASE_URL = "http://localhost:" + PORT + "/cxf/jaxrs/";
- private static final String BOOKSTORE_PATH = "bookstore";
private static final String SWAGGER_PATH = "api-docs";
private static final String OPEN_API_FILE_PATH = "openapi.json";
- private final WebTarget wt = ClientBuilder
- .newClient()
- .register(JacksonJsonProvider.class)
- .target(BASE_URL);
-
- @Test
- public void testJaxRsGet() throws Exception {
- Book book = wt.path(BOOKSTORE_PATH)
- .path("/books/123")
- .request("application/xml")
- .get(Book.class);
- assertNotNull(book);
- }
-
- @Test
- public void testJaxRsPost() throws Exception {
- Book book = new Book("New Book", 321);
- Response response = wt.path(BOOKSTORE_PATH)
- .path("/books/")
- .request("application/xml")
- .post(Entity.xml(book));
- assertStatus(Status.CREATED, response);
- assertNotNull(response.getLocation());
- }
-
- @Test
- public void postWithValidationError() throws Exception {
- Book book = new Book(null, -1);
- final Response response = wt.path(BOOKSTORE_PATH)
- .path("/books-validate/")
- .request("application/xml")
- .post(Entity.xml(book));
- assertStatus(Status.BAD_REQUEST, response);
- }
-
- @Test
- public void postWithValidation() throws Exception {
- Book book = new Book("A Book", 3212);
- Response response = wt.path(BOOKSTORE_PATH)
- .path("/books-validate/")
- .request("application/xml")
- .post(Entity.xml(book));
- assertStatus(Status.CREATED, response);
- assertNotNull(response.getLocation());
- }
-
- @Test
- public void testJaxRsDelete() throws Exception {
- Response response = wt.path(BOOKSTORE_PATH)
- .path("/books/123")
- .request("application/xml")
- .delete();
- assertStatus(Status.OK, response);
- }
-
- @Test
- public void testJaxRsPut() throws Exception {
- Book book = new Book("Updated Book", 123);
- Response response = wt.path(BOOKSTORE_PATH)
- .path("/books/123")
- .request("application/xml")
- .put(Entity.xml(book));
- assertStatus(Status.OK, response);
- }
+ private final WebTarget wt = ClientBuilder.newClient().target(BASE_URL);
@Test
public void testGetSwaggerUi() {
@@ -179,19 +112,21 @@ public class JaxRsServiceTest extends CXFOSGiTestSupport {
if (JavaUtils.isJava11Compatible()) {
return TinyBundles.bundle()
.add(AbstractServerActivator.class)
- .add(JaxRsTestActivator.class)
+ .add(OpenApiTestActivator.class)
.add(Book.class)
.add(BookStore.class)
- .set(Constants.BUNDLE_ACTIVATOR, JaxRsTestActivator.class.getName())
+ .add(OpenApiBookStore.class)
+ .set(Constants.BUNDLE_ACTIVATOR, OpenApiTestActivator.class.getName())
.set("Require-Capability", "osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version=11))\"")
.build(TinyBundles.withBnd());
} else {
return TinyBundles.bundle()
- .add(AbstractServerActivator.class)
+ .add(OpenApiTestActivator.class)
.add(JaxRsTestActivator.class)
.add(Book.class)
.add(BookStore.class)
- .set(Constants.BUNDLE_ACTIVATOR, JaxRsTestActivator.class.getName())
+ .add(OpenApiBookStore.class)
+ .set(Constants.BUNDLE_ACTIVATOR, OpenApiTestActivator.class.getName())
.build(TinyBundles.withBnd());
}
}
diff --git a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiTestActivator.java
similarity index 89%
copy from osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java
copy to osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiTestActivator.java
index b7176ba039..aafc17fe39 100644
--- a/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/JaxRsTestActivator.java
+++ b/osgi/itests/src/test/java/org/apache/cxf/osgi/itests/jaxrs/OpenApiTestActivator.java
@@ -26,15 +26,15 @@ import org.apache.cxf.jaxrs.openapi.OpenApiFeature;
import org.apache.cxf.jaxrs.swagger.ui.SwaggerUiConfig;
import org.apache.cxf.osgi.itests.AbstractServerActivator;
-public class JaxRsTestActivator extends AbstractServerActivator {
+public class OpenApiTestActivator extends AbstractServerActivator {
@Override
protected Server createServer() {
Bus bus = BusFactory.newInstance().createBus();
- bus.setExtension(JaxRsTestActivator.class.getClassLoader(), ClassLoader.class);
+ bus.setExtension(OpenApiTestActivator.class.getClassLoader(), ClassLoader.class);
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setBus(bus);
- sf.setResourceClasses(BookStore.class);
+ sf.setResourceClasses(OpenApiBookStore.class);
OpenApiFeature openApiFeature = new OpenApiFeature();
openApiFeature.setScan(false);