diff options
author | Henrik Høiness <31851923+henrhoi@users.noreply.github.com> | 2018-07-11 16:04:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-11 16:04:45 +0200 |
commit | 343bc34fe8230c9da5489ce60d3849136438a583 (patch) | |
tree | 411a8a1c0cd12a4ce23da642ac6ea04a737ede81 /container-search-gui/src | |
parent | 2e4ddebe0db405d91c0cff6f63118a094101f467 (diff) | |
parent | 06d97034b84a7ec99f196ed9fb2e875431f6f410 (diff) |
Merge pull request #6366 from vespa-engine/henrhoi/adding-gui-handler-when-building-containermodel
Adding handler and binding when services.xml has <search>-field
Diffstat (limited to 'container-search-gui/src')
-rw-r--r-- | container-search-gui/src/main/java/com/yahoo/search/query/gui/GUIHandler.java | 70 | ||||
-rw-r--r-- | container-search-gui/src/test/java/com/yahoo/search/query/gui/GUIHandlerTest.java | 85 |
2 files changed, 37 insertions, 118 deletions
diff --git a/container-search-gui/src/main/java/com/yahoo/search/query/gui/GUIHandler.java b/container-search-gui/src/main/java/com/yahoo/search/query/gui/GUIHandler.java index 0f4eebd7fd7..95adbbea3fc 100644 --- a/container-search-gui/src/main/java/com/yahoo/search/query/gui/GUIHandler.java +++ b/container-search-gui/src/main/java/com/yahoo/search/query/gui/GUIHandler.java @@ -5,17 +5,13 @@ import com.google.inject.Inject; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; - - import com.yahoo.search.query.restapi.ErrorResponse; import com.yahoo.yolean.Exceptions; -import java.io.File; + import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.logging.Level; /** @@ -47,75 +43,83 @@ public class GUIHandler extends LoggingRequestHandler { } private HttpResponse handleGET(HttpRequest request) { - com.yahoo.restapi.Path path = new com.yahoo.restapi.Path(request.getUri().getPath()); + com.yahoo.restapi.Path path = new com.yahoo.restapi.Path(request.getUri().getPath()); if (path.matches("/querybuilder/")) { return new FileResponse("_includes/index.html"); } if (!path.matches("/querybuilder/{*}") ) { - return ErrorResponse.notFoundError("Nothing at " + path); + return ErrorResponse.notFoundError("Nothing at path:" + path); } String filepath = path.getRest(); - if (!isValidPath(GUIHandler.class.getClassLoader().getResource("gui").getFile()+"/"+filepath)){ - return ErrorResponse.notFoundError("Nothing at " + path); + if (!isValidPath(filepath)){ + return ErrorResponse.notFoundError("Nothing at path:" + filepath); } return new FileResponse(filepath); } private static boolean isValidPath(String path) { - File file = new File(path); - return file.exists(); + InputStream in = GUIHandler.class.getClassLoader().getResourceAsStream("gui/"+path); + boolean isValid = (in != null); + if(isValid){ + try { in.close(); } catch (IOException e) {/* Problem with closing inputstream */} + } + + return isValid; } private static class FileResponse extends HttpResponse { - private final Path path; + private final String path; public FileResponse(String relativePath) { super(200); - this.path = Paths.get(GUIHandler.class.getClassLoader().getResource("gui").getFile(), relativePath); + this.path = relativePath; } @Override public void render(OutputStream out) throws IOException { - byte[] data = Files.readAllBytes(path); - out.write(data); + InputStream is = GUIHandler.class.getClassLoader().getResourceAsStream("gui/"+this.path); + byte[] buf = new byte[1024]; + int numRead; + while ( (numRead = is.read(buf) ) >= 0) { + out.write(buf, 0, numRead); + } } @Override public String getContentType() { - if (path.toString().endsWith(".css")) { + if (path.endsWith(".css")) { return "text/css"; - } else if (path.toString().endsWith(".js")) { + } else if (path.endsWith(".js")) { return "application/javascript"; - } else if (path.toString().endsWith(".html")) { + } else if (path.endsWith(".html")) { return "text/html"; - }else if (path.toString().endsWith(".php")) { + } else if (path.endsWith(".php")) { return "text/php"; - }else if (path.toString().endsWith(".svg")) { + } else if (path.endsWith(".svg")) { return "image/svg+xml"; - }else if (path.toString().endsWith(".eot")) { + } else if (path.endsWith(".eot")) { return "application/vnd.ms-fontobject"; - }else if (path.toString().endsWith(".ttf")) { + } else if (path.endsWith(".ttf")) { return "font/ttf"; - }else if (path.toString().endsWith(".woff")) { + } else if (path.endsWith(".woff")) { return "font/woff"; - }else if (path.toString().endsWith(".woff2")) { + } else if (path.endsWith(".woff2")) { return "font/woff2"; - }else if (path.toString().endsWith(".otf")) { + } else if (path.endsWith(".otf")) { return "font/otf"; - }else if (path.toString().endsWith(".png")) { + } else if (path.endsWith(".png")) { return "image/png"; - }else if (path.toString().endsWith(".xml")) { + } else if (path.endsWith(".xml")) { return "application/xml"; - }else if (path.toString().endsWith(".ico")) { + } else if (path.endsWith(".ico")) { return "image/x-icon"; - }else if (path.toString().endsWith(".json")) { + } else if (path.endsWith(".json")) { return "application/json"; - }else if (path.toString().endsWith(".ttf")) { + } else if (path.endsWith(".ttf")) { return "font/ttf"; } return "text/html"; } } - -} +}
\ No newline at end of file diff --git a/container-search-gui/src/test/java/com/yahoo/search/query/gui/GUIHandlerTest.java b/container-search-gui/src/test/java/com/yahoo/search/query/gui/GUIHandlerTest.java deleted file mode 100644 index ec515a1bf4a..00000000000 --- a/container-search-gui/src/test/java/com/yahoo/search/query/gui/GUIHandlerTest.java +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.search.query.gui; - -import com.yahoo.application.Networking; -import com.yahoo.application.container.JDisc; -import com.yahoo.application.container.handler.Request; -import com.yahoo.application.container.handler.Response; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; - -import static org.junit.Assert.assertTrue; - - -/** - * @author Henrik Høiness - */ - -public class GUIHandlerTest { - - private JDisc container; - - @Before - public void startContainer() { - container = JDisc.fromServicesXml(servicesXml(), Networking.enable); - } - - @After - public void stopContainer() { - /* - try { - Thread.sleep(100_000); - } catch (InterruptedException e) { - e.printStackTrace(); - }*/ - container.close(); - } - - @Test - public void testRequest() throws Exception { - assertResponse("/querybuilder/", "<!-- Copyright 2018 Yahoo Holdings.","text/html; charset=UTF-8", 200); - } - - @Test - public void testContentTypes() throws Exception{ - assertResponse("/querybuilder/_includes/css/vespa.css", "/**","text/css; charset=UTF-8", 200); - assertResponse("/querybuilder/js/agency.js", "/*!","application/javascript; charset=UTF-8", 200); - assertResponse("/querybuilder/img/reload.svg", "<?xml","image/svg+xml; charset=UTF-8", 200); - assertResponse("/querybuilder/img/Vespa-V2.png", null,"image/png; charset=UTF-8", 200); - } - - @Test - public void testInvalidPath() throws Exception{ - assertResponse("/querybuilder/invalid_filepath", "{\"error-code\":\"NOT_FOUND\",\"message\":\"Nothing at path","application/json; charset=UTF-8", 404); - } - - - private void assertResponse(String path, String expectedStartString, String expectedContentType, int expectedStatusCode) throws IOException { - assertResponse(Request.Method.GET, path, expectedStartString,expectedContentType, expectedStatusCode); - } - - private void assertResponse(Request.Method method, String path, String expectedStartString, String expectedContentType, int expectedStatusCode) throws IOException { - Response response = container.handleRequest(new Request("http://localhost:8080" + path, new byte[0], method)); - Assert.assertEquals("Status code", expectedStatusCode, response.getStatus()); - Assert.assertEquals(expectedContentType, response.getHeaders().getFirst("Content-Type")); - if(expectedStartString != null){ - assertTrue(response.getBodyAsString().startsWith(expectedStartString)); - } - } - - private String servicesXml() { - return "<jdisc version='1.0'>\n" + - " <handler id='com.yahoo.search.query.gui.GUIHandler'>\n" + - " <binding>http://*/querybuilder/*</binding>\n" + - " </handler>\n" + - " <http>\n" + - " <server id='default' port='8080'/>\n" + - " </http>\n" + - "</jdisc>"; - } - -}
\ No newline at end of file |