Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1504)

Unified Diff: net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java

Issue 867073002: [Android] Add a java version of the test server spawner. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: findbugs Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java
diff --git a/net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java b/net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1b45f9edf0a2e9fee7afcf4526d430d47eccd25
--- /dev/null
+++ b/net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java
@@ -0,0 +1,129 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net.test;
+
+import android.util.Log;
+
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.DefaultHttpServerConnection;
+import org.apache.http.message.BasicHttpResponse;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpParams;
+
+import java.io.IOException;
+import java.net.Socket;
+
+/** A base class for simple HTTP test servers. */
+public abstract class BaseHttpTestServer extends BaseTcpTestServer {
+ private static final String TAG = "BaseHttpTestServer";
+
+ /**
+ * Create an HTTP test server on the given port.
+ *
+ * @param serverPort The port to listen on for incoming HTTP connections.
+ * @param acceptTimeoutMs The timeout for calls to ServerSocket.accept(), in milliseconds.
+ * @throws IOException If the server port can't be bound.
+ */
+ public BaseHttpTestServer(int serverPort, int acceptTimeoutMs) throws IOException {
+ super(serverPort, acceptTimeoutMs);
+ }
+
+ /**
+ * Handle an incoming connection on |sock|.
+ *
+ * This will bind the socket, receive the request header (and entity, if applicable),
+ * dispatch the request to a handler based on the request method, and send the response
+ * generated by the handler.
+ *
+ * @param sock The socket for the incoming connection.
+ * @throws IOException If an error occurs while reading from or writing to the socket.
+ */
+ @Override
+ protected final void handle(Socket sock) throws IOException {
+ HttpParams httpParams = getConnectionParams();
+ DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
+ conn.bind(sock, httpParams);
+
+ try {
+ HttpRequest request = conn.receiveRequestHeader();
+ if (request instanceof HttpEntityEnclosingRequest) {
+ conn.receiveRequestEntity((HttpEntityEnclosingRequest) request);
+ }
+
+ HttpResponse response = null;
+ switch (request.getRequestLine().getMethod()) {
+ case HttpGet.METHOD_NAME:
+ response = handleGet(request);
+ break;
+ case HttpPost.METHOD_NAME:
+ response = handlePost((HttpEntityEnclosingRequest) request);
+ break;
+ default:
+ response = handleUnsupported(request);
+ break;
+ }
+
+ conn.sendResponseHeader(response);
+ conn.sendResponseEntity(response);
+ } catch (HttpException e) {
+ Log.e(TAG, "Error while handling HTTP request", e);
+ } finally {
+ conn.close();
+ }
+ }
+
+ /**
+ * Returns the parameters used to establish the HTTP connection.
+ *
+ * The default implementation returns a default BasicHttpParams instance.
+ *
+ * @return The HttpParams to use to establish the HTTP connection.
+ */
+ protected HttpParams getConnectionParams() {
+ return new BasicHttpParams();
+ }
+
+ /**
+ * Handle a GET request.
+ *
+ * The default implementation returns a 405. Override this function if you want to support
+ * GET.
+ *
+ * @param request The GET request to handle.
+ * @return The response to the GET request.
+ */
+ protected HttpResponse handleGet(HttpRequest request) throws HttpException {
+ return handleUnsupported(request);
+ }
+
+ /**
+ * Handle a POST request.
+ *
+ * The default implementation returns a 405. Override this function if you want to support
+ * POST.
+ *
+ * @param request The POST request to handle.
+ * @return The response to the POST request.
+ */
+ protected HttpResponse handlePost(HttpEntityEnclosingRequest request) throws HttpException {
+ return handleUnsupported(request);
+ }
+
+ /** Handle an unsupported HTTP request.
+ *
+ * @param request The unsupported HTTP request.
+ * @return A 405 Method Not Allowed response.
+ */
+ protected HttpResponse handleUnsupported(HttpRequest request) {
+ return new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_METHOD_NOT_ALLOWED, "");
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698