# HG changeset patch # User Jie Kang # Date 1508502916 14400 # Node ID ede4435b368261dfaecfa0545c29a86c3d4dd638 # Parent 4375a5dd5ec8ddb30e6dfe939b75258395feba39 Add handler to supply web-gateway URL Reviewed-by: jerboaa, aazores Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-September/025042.html Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-October/025485.html diff -r 4375a5dd5ec8 -r ede4435b3682 server/src/main/java/com/redhat/thermostat/gateway/server/CoreServerBuilder.java --- a/server/src/main/java/com/redhat/thermostat/gateway/server/CoreServerBuilder.java Thu Oct 19 12:04:56 2017 -0400 +++ b/server/src/main/java/com/redhat/thermostat/gateway/server/CoreServerBuilder.java Fri Oct 20 08:35:16 2017 -0400 @@ -64,6 +64,7 @@ import com.redhat.thermostat.gateway.server.apidoc.SwaggerUiHandler; import com.redhat.thermostat.gateway.server.services.CoreService; import com.redhat.thermostat.gateway.server.services.CoreServiceBuilder; +import com.redhat.thermostat.gateway.server.webclient.GatewayUrlHandler; import com.redhat.thermostat.gateway.server.webclient.StaticAssetsHandler; public class CoreServerBuilder { @@ -142,6 +143,10 @@ // via /web-client context path ContextHandler webClientHandler = staticAssetsHandler.create(); contextHandlerCollection.addHandler(webClientHandler); + + // Set up a handler which serves the gateway url via /gatewayurl + ContextHandler gatewayUrlHandler = new GatewayUrlHandler().create(); + contextHandlerCollection.addHandler(gatewayUrlHandler); } server.setHandler(contextHandlerCollection); diff -r 4375a5dd5ec8 -r ede4435b3682 server/src/main/java/com/redhat/thermostat/gateway/server/webclient/GatewayUrlHandler.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/main/java/com/redhat/thermostat/gateway/server/webclient/GatewayUrlHandler.java Fri Oct 20 08:35:16 2017 -0400 @@ -0,0 +1,76 @@ +/* + * Copyright 2012-2017 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat 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. + * + * Thermostat 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. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.gateway.server.webclient; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpUtils; + +import org.eclipse.jetty.server.handler.ContextHandler; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; + +public class GatewayUrlHandler { + + private static final String GATEWAY_PATH = "/gatewayurl"; + + public ContextHandler create() { + ServletContextHandler servletContextHandler = new ServletContextHandler(); + servletContextHandler.setContextPath("/"); + servletContextHandler.addServlet(new ServletHolder(new GatewayServlet()), GATEWAY_PATH); + return servletContextHandler; + } + + private static class GatewayServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException + { + response.setContentType("application/json"); + response.setStatus(HttpServletResponse.SC_OK); + + StringBuffer url = request.getRequestURL(); + String host = url.substring(0, url.indexOf(GATEWAY_PATH)); + + response.getWriter().print("{\"gatewayUrl\":\"" + host + "\"}"); + } + } +} diff -r 4375a5dd5ec8 -r ede4435b3682 server/src/test/java/com/redhat/thermostat/gateway/server/CoreServerBuilderTest.java --- a/server/src/test/java/com/redhat/thermostat/gateway/server/CoreServerBuilderTest.java Thu Oct 19 12:04:56 2017 -0400 +++ b/server/src/test/java/com/redhat/thermostat/gateway/server/CoreServerBuilderTest.java Fri Oct 20 08:35:16 2017 -0400 @@ -133,8 +133,8 @@ Server server = builder.build(); ContextHandlerCollection handler = (ContextHandlerCollection) server.getHandler(); - // Expects 3 handlers, 1 service mocked above, 1 swagger ui handler, 1 static resource handler - assertEquals(3, handler.getHandlers().length); + // Expects 4 handlers, 1 service mocked above, 1 swagger ui handler, 1 static resource handler, 1 web gateway url handler + assertEquals(4, handler.getHandlers().length); } @Test diff -r 4375a5dd5ec8 -r ede4435b3682 tests/integration-tests/src/test/java/com/redhat/thermostat/gateway/service/webclient/WebGatewayUrlTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/integration-tests/src/test/java/com/redhat/thermostat/gateway/service/webclient/WebGatewayUrlTest.java Fri Oct 20 08:35:16 2017 -0400 @@ -0,0 +1,63 @@ +/* + * Copyright 2012-2017 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat 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. + * + * Thermostat 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. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.gateway.service.webclient; + +import static org.junit.Assert.assertEquals; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; + +import org.eclipse.jetty.client.api.ContentResponse; +import org.junit.Test; + +import com.redhat.thermostat.gateway.tests.integration.IntegrationTest; + +public class WebGatewayUrlTest extends IntegrationTest { + private static final String GATEWAY_PATH = "gatewayurl"; + + public WebGatewayUrlTest() { + super(GATEWAY_PATH); + } + + @Test + public void testGatewayUrlEndpoint() throws InterruptedException, ExecutionException, TimeoutException { + ContentResponse response = client.GET(resourceUrl); + + String expected = "{\"gatewayUrl\":\"" + baseUrl + "\"}"; + assertEquals(expected, response.getContentAsString()); + } +}