package org.deftserver.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.HashMap; import java.util.Map; import java.util.regex.PatternSyntaxException; import org.deftserver.web.handler.BadRequestRequestHandler; import org.deftserver.web.handler.NotFoundRequestHandler; import org.deftserver.web.handler.RequestHandler; import org.deftserver.web.http.HttpRequest; import org.deftserver.web.http.HttpResponse; import org.junit.Test; public class ApplicationTest { @Test public void simpleApplicationTest() { Map<String, RequestHandler> handlers = new HashMap<String, RequestHandler>(); final RequestHandler handler1 = new RequestHandler() { @Override public void get(HttpRequest request, HttpResponse response) { } }; final RequestHandler handler2 = new RequestHandler() { @Override public void get(HttpRequest request, HttpResponse response) { } }; final RequestHandler handler3 = new RequestHandler() { @Override public void get(HttpRequest request, HttpResponse response) { } }; final RequestHandler handler4 = new RequestHandler() { @Override public void get(HttpRequest request, HttpResponse response) { } }; handlers.put("/", handler1); handlers.put("/persons/([0-9]+)", handler2); handlers.put("/persons/phone_numbers", handler3); handlers.put("/pets/([0-9]{0,3})", handler4); Application app = new Application(handlers); String requestLine = "GET / HTTP/1.1"; Map<String, String> headers = new HashMap<String, String>(); headers.put("host", "localhost"); HttpRequest request = new HttpRequest(requestLine, headers); assertNotNull(app.getHandler(request)); requestLine = "GET /persons/1911 HTTP/1.1"; request = new HttpRequest(requestLine, headers); assertNotNull(app.getHandler(request)); requestLine = "GET /persons/phone_numbers HTTP/1.1"; request = new HttpRequest(requestLine, headers); assertNotNull(app.getHandler(request)); requestLine = "GET /pets/123 HTTP/1.1"; request = new HttpRequest(requestLine, headers); assertNotNull(app.getHandler(request)); request = new HttpRequest("GET /missing HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /persons HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /persons/roger HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /persons/123a HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /persons/a123 HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /pets/a123 HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /pets/123a HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET /pets/1234 HTTP/1.1", headers); assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request)); request = new HttpRequest("GET / HTTP/1.1", headers); assertEquals(handler1, app.getHandler(request)); request = new HttpRequest("GET /persons/1911 HTTP/1.1", headers); assertEquals(handler2, app.getHandler(request)); request = new HttpRequest("GET /persons/phone_numbers HTTP/1.1", headers); assertEquals(handler3, app.getHandler(request)); request = new HttpRequest("GET /pets/123 HTTP/1.1", headers); assertEquals(handler4, app.getHandler(request)); //Verify that BadRequestRequestHandler is returned if request does not include Host header headers = new HashMap<String, String>(); request = new HttpRequest("GET /pets/123 HTTP/1.1", headers); assertEquals(BadRequestRequestHandler.getInstance(), app.getHandler(request)); } @Test(expected=PatternSyntaxException.class) public void malFormedRegularExpressionTest() { Map<String, RequestHandler> handlers = new HashMap<String, RequestHandler>(); final RequestHandler handler1 = new RequestHandler() { @Override public void get(HttpRequest request, HttpResponse response) { } }; handlers.put("/persons/([[0-9]{0,3})", handler1); // path contains malformed (a '[' too much) regex Application app = new Application(handlers); } }