package org.limewire.http.handler; import java.io.File; import java.io.IOException; import junit.framework.TestCase; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.ProtocolException; import org.apache.http.message.BasicHttpRequest; import org.apache.http.message.BasicHttpResponse; import org.limewire.http.entity.FileNIOEntity; public class FileRequestHandlerTest extends TestCase { private File root; private File subdir; private File subdirFile; private File indexFile; @Override protected void setUp() throws Exception { root = File.createTempFile("lime", null); root.delete(); assertTrue(root.mkdirs()); root.deleteOnExit(); indexFile = new File(root, "index.html"); indexFile.createNewFile(); indexFile.deleteOnExit(); subdir = new File(root, "subdir"); subdir.mkdir(); subdir.deleteOnExit(); subdirFile = new File(subdir, "file"); subdirFile.createNewFile(); subdirFile.deleteOnExit(); } public void testGetIndexFilename() throws IOException { FileRequestHandler handler = new FileRequestHandler(root, new BasicMimeTypeProvider()); assertEquals("index.html", handler.getIndexFilename()); handler.setIndexFilename("foo"); assertEquals("foo", handler.getIndexFilename()); } public void testHandle() throws Exception { FileRequestHandler handler = new FileRequestHandler(root, new BasicMimeTypeProvider()); HttpRequest request = new BasicHttpRequest("GET", "/"); HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode()); assertEquals(indexFile, ((FileNIOEntity) response.getEntity()) .getFile()); request = new BasicHttpRequest("GET", "/index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode()); assertEquals(indexFile, ((FileNIOEntity) response.getEntity()) .getFile()); assertEquals("text/html", response.getEntity().getContentType().getValue()); request = new BasicHttpRequest("GET", "/foo"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_NOT_FOUND, response.getStatusLine().getStatusCode()); } public void testHandleSubDir() throws Exception { FileRequestHandler handler = new FileRequestHandler(root, new BasicMimeTypeProvider()); HttpRequest request = new BasicHttpRequest("GET", "/subdir"); HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_NOT_FOUND, response.getStatusLine().getStatusCode()); request = new BasicHttpRequest("GET", "/subdir/"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_NOT_FOUND, response.getStatusLine().getStatusCode()); request = new BasicHttpRequest("GET", "/subdir/foo"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_NOT_FOUND, response.getStatusLine().getStatusCode()); request = new BasicHttpRequest("GET", "/subdir/file"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); handler.handle(request, response, null); assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode()); assertEquals(subdirFile, ((FileNIOEntity) response.getEntity()) .getFile()); } public void testHandleInvalidRequest() throws Exception { FileRequestHandler handler = new FileRequestHandler(root, new BasicMimeTypeProvider()); HttpRequest request = new BasicHttpRequest("GET", ""); HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", "index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", "../index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", ".."); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", "."); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", "/../index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", " ../index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", " ../index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } request = new BasicHttpRequest("GET", "/subdir/../index.html"); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); try { handler.handle(request, response, null); fail("Expected ProtocolException"); } catch (ProtocolException expected) { } } }