Skip to content

Commit

Permalink
feat(mockwebserver): io.fabric8:mockwebserver is based on Vert.x Web
Browse files Browse the repository at this point in the history
Signed-off-by: Marc Nuri <marc@marcnuri.com>
  • Loading branch information
manusa committed Oct 18, 2024
1 parent 4d1fd2b commit c61c716
Show file tree
Hide file tree
Showing 27 changed files with 116 additions and 575 deletions.
5 changes: 0 additions & 5 deletions junit/mockwebserver/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,6 @@
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
Expand Down Expand Up @@ -87,7 +83,6 @@
</execution>
</executions>
</plugin>

</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,12 @@
package io.fabric8.mockwebserver;

import io.fabric8.mockwebserver.dsl.MockServerExpectation;
import io.fabric8.mockwebserver.http.Dispatcher;
import io.fabric8.mockwebserver.http.RecordedRequest;
import io.fabric8.mockwebserver.internal.MockDispatcher;
import io.fabric8.mockwebserver.internal.MockSSLContextFactory;
import io.fabric8.mockwebserver.internal.MockServerExpectationImpl;
import okhttp3.mockwebserver.Dispatcher;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import io.vertx.core.net.SelfSignedCertificate;

import java.io.IOException;
import java.net.InetAddress;
import java.net.Proxy;
import java.util.HashMap;
Expand Down Expand Up @@ -63,8 +61,9 @@ public DefaultMockServer(Context context, MockWebServer server, Map<ServerReques
this(context, server, responses, new MockDispatcher(responses), useHttps);
}

public DefaultMockServer(Context context, MockWebServer server, Map<ServerRequest, Queue<ServerResponse>> responses,
Dispatcher dispatcher, boolean useHttps) {
public DefaultMockServer(
Context context, MockWebServer server, Map<ServerRequest, Queue<ServerResponse>> responses, Dispatcher dispatcher,
boolean useHttps) {
this.context = context;
this.useHttps = useHttps;
this.server = server;
Expand All @@ -77,7 +76,7 @@ public DefaultMockServer(Context context, MockWebServer server, Map<ServerReques
private void startInternal() {
if (initialized.compareAndSet(false, true)) {
if (useHttps) {
server.useHttps(MockSSLContextFactory.create().getSocketFactory(), false);
server.useHttps();
}
onStart();
}
Expand All @@ -90,37 +89,23 @@ private void shutdownInternal() {
}

public final void start() {
try {
startInternal();
server.start();
} catch (IOException e) {
throw new MockServerException("Exception when starting DefaultMockServer", e);
}
startInternal();
server.start();
}

public final void start(int port) {
try {
startInternal();
server.start(port);
} catch (IOException e) {
throw new MockServerException("Exception when starting DefaultMockServer with port", e);
}
startInternal();
server.start(port);
}

public final void start(InetAddress inetAddress, int port) {
try {
startInternal();
server.start(inetAddress, port);
} catch (IOException e) {
throw new MockServerException("Exception when starting DefaultMockServer with InetAddress and port", e);
}
startInternal();
server.start(inetAddress, port);
}

public final void shutdown() {
try {
server.shutdown();
} catch (IOException e) {
throw new MockServerException("Exception when stopping DefaultMockServer", e);
} finally {
shutdownInternal();
}
Expand Down Expand Up @@ -158,6 +143,14 @@ public Proxy toProxyAddress() {
return server.toProxyAddress();
}

/**
* {@inheritDoc}
*/
@Override
public SelfSignedCertificate getSelfSignedCertificate() {
return server.getSelfSignedCertificate();
}

/**
* {@inheritDoc}
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
package io.fabric8.mockwebserver;

import io.fabric8.mockwebserver.dsl.MockServerExpectation;
import okhttp3.mockwebserver.RecordedRequest;
import io.fabric8.mockwebserver.http.RecordedRequest;
import io.vertx.core.net.SelfSignedCertificate;

import java.net.Proxy;
import java.util.concurrent.TimeUnit;
Expand All @@ -36,26 +37,33 @@ default void onShutdown() {
}

/**
* The port for the {@link okhttp3.mockwebserver.MockWebServer}.
* The port for the {@link MockWebServer}.
*
* @return the MockWebServer port.
*/
int getPort();

/**
* The host name for the {@link okhttp3.mockwebserver.MockWebServer}.
*
* The host name for the {@link MockWebServer}.
*
* @return the MockWebServer host name;
*/
String getHostName();

/**
* Returns a {@link Proxy} for the {@link okhttp3.mockwebserver.MockWebServer} with the current HostName and Port.
* Returns a {@link Proxy} for the {@link MockWebServer} with the current HostName and Port.
*
* @return a Proxy for the MockWebServer.
*/
Proxy toProxyAddress();

/**
* Returns the {@link SelfSignedCertificate} for the Mock Web Server.
*
* @return the SelfSignedCertificate for the MockWebServer.
*/
SelfSignedCertificate getSelfSignedCertificate();

/**
* Returns a String URL for connecting to this server.
*
Expand Down Expand Up @@ -97,7 +105,7 @@ default void onShutdown() {
RecordedRequest takeRequest(long timeout, TimeUnit unit) throws InterruptedException;

/**
* Returns the last (most recent) HTTP request processed by the {@link okhttp3.mockwebserver.MockWebServer}.
* Returns the last (most recent) HTTP request processed by the {@link MockWebServer}.
*
* n.b. This method clears the request queue.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
*/
package io.fabric8.mockwebserver;

import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.RecordedRequest;
import io.fabric8.mockwebserver.http.MockResponse;
import io.fabric8.mockwebserver.http.RecordedRequest;

public interface ServerResponse {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
import com.fasterxml.jackson.databind.JsonNode;
import io.fabric8.mockwebserver.Context;
import io.fabric8.mockwebserver.MockServerException;
import io.fabric8.mockwebserver.http.Dispatcher;
import io.fabric8.mockwebserver.http.MockResponse;
import io.fabric8.mockwebserver.http.RecordedRequest;
import io.fabric8.zjsonpatch.JsonPatch;
import okhttp3.mockwebserver.Dispatcher;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.RecordedRequest;

import java.net.HttpURLConnection;
import java.util.ArrayList;
Expand All @@ -32,12 +32,6 @@

public class CrudDispatcher extends Dispatcher {

private static final String POST = "POST";
private static final String PUT = "PUT";
private static final String PATCH = "PATCH";
private static final String GET = "GET";
private static final String DELETE = "DELETE";

protected final Map<AttributeSet, String> map = Collections.synchronizedMap(new LinkedHashMap<>());

protected final Context context;
Expand All @@ -53,7 +47,7 @@ public CrudDispatcher(Context context, AttributeExtractor attributeExtractor, Re
@Override
public MockResponse dispatch(RecordedRequest request) {
String path = request.getPath();
switch (request.getMethod().toUpperCase()) {
switch (request.method()) {
case POST:
return handleCreate(request);
case PUT:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,6 @@ public MockResponse removeHeader(String name) {
}

public MockResponse withWebSocketUpgrade(WebSocketListener listener) {
// TODO: Check if this is necessary with Vert.x
// setStatus("HTTP/1.1 101 Switching Protocols");
// setHeader("Connection", "Upgrade");
// setHeader("Upgrade", "websocket");
body = null;
webSocketListener = listener;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
package io.fabric8.mockwebserver.internal;

import io.fabric8.mockwebserver.ServerResponse;
import io.fabric8.mockwebserver.http.MockResponse;
import io.fabric8.mockwebserver.http.RecordedRequest;
import io.fabric8.mockwebserver.utils.ResponseProvider;
import io.fabric8.mockwebserver.utils.ResponseProviders;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.RecordedRequest;

import java.util.List;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -59,6 +59,7 @@ public ResponseProvider<List<String>> getBodyProvider() {
@Override
public MockResponse toMockResponse(RecordedRequest request) {
MockResponse mockResponse = new MockResponse();
mockResponse.setHttpVersion(request.getHttpVersion());
mockResponse.setHeaders(bodyProvider.getHeaders());
mockResponse.setChunkedBody(concatBody(request), DEFAULT_MAX_CHUNK_SIZE);
mockResponse.setResponseCode(bodyProvider.getStatusCode(request));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,9 @@

import io.fabric8.mockwebserver.ServerRequest;
import io.fabric8.mockwebserver.ServerResponse;
import io.fabric8.mockwebserver.dsl.HttpMethod;
import okhttp3.mockwebserver.Dispatcher;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.RecordedRequest;
import okhttp3.mockwebserver.SocketPolicy;
import io.fabric8.mockwebserver.http.Dispatcher;
import io.fabric8.mockwebserver.http.MockResponse;
import io.fabric8.mockwebserver.http.RecordedRequest;

import java.util.Collection;
import java.util.Map;
Expand All @@ -37,20 +35,14 @@ public MockDispatcher(Map<ServerRequest, Queue<ServerResponse>> responses) {
this.responses = responses;
}

@Override
public MockResponse peek() {
return new MockResponse().setSocketPolicy(SocketPolicy.EXPECT_CONTINUE);
}

@Override
public MockResponse dispatch(RecordedRequest request) {
for (WebSocketSession webSocketSession : webSocketSessions) {
webSocketSession.dispatch(request);
}

HttpMethod method = HttpMethod.valueOf(request.getMethod());
String path = request.getPath();
SimpleRequest key = new SimpleRequest(method, path);
SimpleRequest key = new SimpleRequest(request.method(), path);
SimpleRequest keyForAnyMethod = new SimpleRequest(path);
if (responses.containsKey(key)) {
Queue<ServerResponse> queue = responses.get(key);
Expand All @@ -59,12 +51,12 @@ public MockResponse dispatch(RecordedRequest request) {
Queue<ServerResponse> queue = responses.get(keyForAnyMethod);
return handleResponse(queue.peek(), queue, request);
}
return new MockResponse().setResponseCode(404);
return new MockResponse().setHttpVersion(request.getHttpVersion()).setResponseCode(404);
}

private MockResponse handleResponse(ServerResponse response, Queue<ServerResponse> queue, RecordedRequest request) {
if (response == null) {
return new MockResponse().setResponseCode(404);
return new MockResponse().setHttpVersion(request.getHttpVersion()).setResponseCode(404);
} else if (!response.isRepeatable()) {
queue.remove();
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
import io.fabric8.mockwebserver.dsl.ReturnOrWebsocketable;
import io.fabric8.mockwebserver.dsl.TimesOnceableOrHttpHeaderable;
import io.fabric8.mockwebserver.dsl.WebSocketSessionBuilder;
import io.fabric8.mockwebserver.http.Headers;
import io.fabric8.mockwebserver.http.RecordedRequest;
import io.fabric8.mockwebserver.utils.BodyProvider;
import io.fabric8.mockwebserver.utils.ResponseProvider;
import io.fabric8.mockwebserver.utils.ResponseProviders;
import okhttp3.Headers;
import okhttp3.mockwebserver.RecordedRequest;

import java.util.ArrayDeque;
import java.util.ArrayList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
package io.fabric8.mockwebserver.internal;

import io.fabric8.mockwebserver.ServerResponse;
import io.fabric8.mockwebserver.http.MockResponse;
import io.fabric8.mockwebserver.http.RecordedRequest;
import io.fabric8.mockwebserver.utils.ResponseProvider;
import io.fabric8.mockwebserver.utils.ResponseProviders;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.RecordedRequest;

import java.util.Objects;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -64,6 +64,7 @@ public ResponseProvider<String> getBodyProvider() {
@Override
public MockResponse toMockResponse(RecordedRequest request) {
MockResponse mockResponse = new MockResponse();
mockResponse.setHttpVersion(request.getHttpVersion());
mockResponse.setHeaders(bodyProvider.getHeaders());
mockResponse.setResponseCode(bodyProvider.getStatusCode(request));

Expand Down
Loading

0 comments on commit c61c716

Please sign in to comment.