Java tutorial
/* * Copyright (C) 2008 Josh Guilfoyle <jasta@devtcg.org> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ package org.devtcg.five.util.streaming; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Locale; import java.util.Random; import junit.framework.TestCase; import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.MethodNotSupportedException; import org.apache.http.RequestLine; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.entity.ContentProducer; import org.apache.http.entity.EntityTemplate; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpRequestHandler; import android.util.Log; public class LocalHttpServerTest extends TestCase { public static final String TAG = "LocalHttpServerTest"; public MyHttpServer startMyHttpServer() throws IOException { int port = 1024 + (new Random()).nextInt(1000); Log.v(TAG, "Starting server on port " + port); MyHttpServer server = new MyHttpServer(port); server.start(); return server; } public void testServerQuick() throws IOException { LocalHttpServer server = startMyHttpServer(); server.shutdown(); } public void testServerResponse() throws IOException { LocalHttpServer server = startMyHttpServer(); try { String url = "http://127.0.0.1:" + server.getPort() + "/testing/1/2/3"; HttpClient cli = new DefaultHttpClient(); HttpGet method = new HttpGet(url); HttpResponse resp = cli.execute(method); StatusLine status = resp.getStatusLine(); assertEquals(status.getStatusCode(), HttpStatus.SC_OK); HttpEntity ent = resp.getEntity(); assertNotNull(ent); InputStream in = ent.getContent(); byte[] b = new byte[2048]; int n; long recvd = 0; while ((n = in.read(b)) >= 0) recvd += n; in.close(); assertTrue(recvd > 0); } finally { server.shutdown(); } } public static class MyHttpServer extends LocalHttpServer { public MyHttpServer(int port) throws IOException { super(port); setRequestHandler(mHttpHandler); } private final HttpRequestHandler mHttpHandler = new HttpRequestHandler() { public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException { RequestLine reqLine = request.getRequestLine(); Log.v(TAG, "reqLine=" + reqLine); String method = reqLine.getMethod().toUpperCase(Locale.ENGLISH); if (method.equals("GET") == false) { throw new MethodNotSupportedException(method + " method not supported"); } response.setEntity(new MyBoilerPlateEntity()); response.setStatusCode(HttpStatus.SC_OK); } }; public static class MyBoilerPlateEntity extends EntityTemplate { public MyBoilerPlateEntity() { super(new ContentProducer() { public void writeTo(OutputStream out) throws IOException { OutputStreamWriter w = new OutputStreamWriter(out, "UTF-8"); w.write("<html><body>"); w.write("<h1>Success!</h1>"); w.write("</body></html>"); w.flush(); } }); setContentType("text/html; charset=UTF-8"); } } } }