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/11/10 17:48:58 UTC

[cxf] branch main updated: CXF-8792: Address tests failures due to Servlet 6.0 baseline in Spring Test (#1024)

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/main by this push:
     new a43799c833 CXF-8792: Address tests failures due to Servlet 6.0 baseline in Spring Test (#1024)
a43799c833 is described below

commit a43799c83305ad33905d757011cb9c7cce4ee6b3
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Thu Nov 10 12:48:50 2022 -0500

    CXF-8792: Address tests failures due to Servlet 6.0 baseline in Spring Test (#1024)
---
 rt/rs/sse/pom.xml                                  |  10 --
 .../cxf/jaxrs/sse/SseBroadcasterImplTest.java      |  15 +--
 .../jaxrs/sse/SseEventSinkContextProviderTest.java |  15 +--
 .../org/apache/cxf/jaxrs/sse/TestAsyncContext.java | 117 +++++++++++++++++++++
 4 files changed, 133 insertions(+), 24 deletions(-)

diff --git a/rt/rs/sse/pom.xml b/rt/rs/sse/pom.xml
index c551f96300..e85af95f10 100644
--- a/rt/rs/sse/pom.xml
+++ b/rt/rs/sse/pom.xml
@@ -55,16 +55,6 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-test</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>${cxf.servlet-api.group}</groupId>
             <artifactId>${cxf.servlet-api.artifact}</artifactId>
diff --git a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseBroadcasterImplTest.java b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseBroadcasterImplTest.java
index 9c2b30de54..fdfefd9dcc 100644
--- a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseBroadcasterImplTest.java
+++ b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseBroadcasterImplTest.java
@@ -24,13 +24,13 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionStage;
 import java.util.concurrent.atomic.LongAdder;
 
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.ws.rs.WebApplicationException;
 import jakarta.ws.rs.ext.MessageBodyWriter;
 import jakarta.ws.rs.sse.OutboundSseEvent;
 import jakarta.ws.rs.sse.SseBroadcaster;
-import org.springframework.mock.web.MockAsyncContext;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -44,16 +44,17 @@ import static org.mockito.Mockito.when;
 public class SseBroadcasterImplTest {
     private SseBroadcaster broadcaster;
     private MessageBodyWriter<OutboundSseEvent> writer;
-    private MockHttpServletResponse response;
-    private MockAsyncContext ctx;
+    private HttpServletResponse response;
+    private AsyncContext ctx;
 
     @SuppressWarnings("unchecked")
     @Before
     public void setUp() {
         broadcaster = new SseBroadcasterImpl();
-        response = new MockHttpServletResponse();
+        response = mock(HttpServletResponse.class);
         writer = mock(MessageBodyWriter.class);
-        ctx = new MockAsyncContext(new MockHttpServletRequest(), response);
+        final HttpServletRequest request = mock(HttpServletRequest.class);
+        ctx = new TestAsyncContext(request, response);
     }
 
     @Test
diff --git a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseEventSinkContextProviderTest.java b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseEventSinkContextProviderTest.java
index 8b116ad46c..8f59c4104e 100644
--- a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseEventSinkContextProviderTest.java
+++ b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/SseEventSinkContextProviderTest.java
@@ -24,6 +24,9 @@ import java.util.concurrent.CompletionException;
 import java.util.concurrent.CompletionStage;
 import java.util.stream.IntStream;
 
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.ws.rs.sse.OutboundSseEvent;
 import jakarta.ws.rs.sse.SseEventSink;
 import org.apache.cxf.continuations.ContinuationProvider;
@@ -32,9 +35,6 @@ import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
-import org.springframework.mock.web.MockAsyncContext;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -63,15 +63,16 @@ public class SseEventSinkContextProviderTest {
         final Endpoint endpoint = mock(Endpoint.class);
         final ContinuationProvider continuationProvider = mock(ContinuationProvider.class);
         
-        final MockHttpServletResponse response = new MockHttpServletResponse();
-        final MockHttpServletRequest request = new MockHttpServletRequest();
-        final MockAsyncContext ctx = new MockAsyncContext(request, response) {
+        final HttpServletResponse response = mock(HttpServletResponse.class);
+        final HttpServletRequest request = mock(HttpServletRequest.class);
+        final AsyncContext ctx = new TestAsyncContext(request, response) {
             @Override
             public void start(Runnable runnable) {
                 /* do nothing */
             } 
         };
-        request.setAsyncContext(ctx);
+        
+        when(request.getAsyncContext()).thenReturn(ctx);
         
         message = new MessageImpl();
         message.setExchange(exchange);
diff --git a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/TestAsyncContext.java b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/TestAsyncContext.java
new file mode 100644
index 0000000000..63b937e389
--- /dev/null
+++ b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/TestAsyncContext.java
@@ -0,0 +1,117 @@
+/**
+ * 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.jaxrs.sse;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.AsyncEvent;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+class TestAsyncContext implements AsyncContext {
+    private final HttpServletRequest request;
+    private final HttpServletResponse response;
+    private final Collection<AsyncListener> listeners = new ArrayList<>();
+
+    TestAsyncContext(HttpServletRequest request, HttpServletResponse response) {
+        this.request = request;
+        this.response = response;
+    }
+
+    @Override
+    public ServletRequest getRequest() {
+        return this.request;
+    }
+
+    @Override
+    public ServletResponse getResponse() {
+        return this.response;
+    }
+
+    @Override
+    public boolean hasOriginalRequestAndResponse() {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+
+    @Override
+    public void dispatch() {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+
+    @Override
+    public void dispatch(String path) {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+
+    @Override
+    public void dispatch(ServletContext context, String path) {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+
+    @Override
+    public void complete() {
+        for (AsyncListener listener : this.listeners) {
+            try {
+                listener.onComplete(new AsyncEvent(this, this.request, this.response));
+            } catch (final IOException ex) {
+                throw new UncheckedIOException(ex);
+            }
+        }
+    }
+
+    @Override
+    public void start(Runnable runnable) {
+        runnable.run();
+    }
+
+    @Override
+    public void addListener(AsyncListener listener) {
+        this.listeners.add(listener);
+    }
+
+    @Override
+    public void addListener(AsyncListener listener, ServletRequest req, ServletResponse resp) {
+        this.listeners.add(listener);
+    }
+
+    @Override
+    public <T extends AsyncListener> T createListener(Class<T> clazz) throws ServletException {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+    
+    @Override
+    public void setTimeout(long timeout) {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+
+    @Override
+    public long getTimeout() {
+        throw new UnsupportedOperationException("The operation is not supported by test implementation");
+    }
+}