Skip to content

Instantly share code, notes, and snippets.

@swankjesse
Created February 11, 2018 18:18
Show Gist options
  • Save swankjesse/025118cadfa93d7f0904cb96d80aaf68 to your computer and use it in GitHub Desktop.
Save swankjesse/025118cadfa93d7f0904cb96d80aaf68 to your computer and use it in GitHub Desktop.
package okhttp3.sample;
import java.io.IOException;
import okhttp3.HttpUrl;
import okhttp3.mockwebserver.Dispatcher;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import okio.Buffer;
import okio.BufferedSink;
import okio.GzipSink;
import okio.Okio;
public final class ApiServer extends Dispatcher {
private final int port;
public ApiServer(int port) {
this.port = port;
}
public void run() throws IOException {
MockWebServer server = new MockWebServer();
server.setDispatcher(this);
server.start(port);
}
@Override public MockResponse dispatch(RecordedRequest request) {
HttpUrl url = request.getRequestUrl();
try {
if (url.encodedPath().equals("/foo.gz")) {
Buffer result = new Buffer();
try (BufferedSink sink = Okio.buffer(new GzipSink(result))) {
sink.writeUtf8("<h1>Hello");
}
try (BufferedSink sink = Okio.buffer(new GzipSink(result))) {
sink.writeUtf8(" World</h1>");
}
return new MockResponse()
.addHeader("Content-Type: text/html; charset=utf-8")
.addHeader("Content-Encoding: gzip")
.setBody(result);
}
return new MockResponse()
.setStatus("HTTP/1.1 404")
.addHeader("content-type: text/plain; charset=utf-8")
.setBody("NOT FOUND: " + url);
} catch (IOException e) {
return new MockResponse()
.setStatus("HTTP/1.1 500")
.addHeader("content-type: text/plain; charset=utf-8")
.setBody("SERVER ERROR: " + e);
}
}
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.out.println("Usage: ApiServer <port>");
return;
}
int port = Integer.parseInt(args[0]);
ApiServer server = new ApiServer(port);
server.run();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment