Merge pull request #18742 from johanandren/wip-18661-make-java-testkit-consistent-with-scala-johanandren

=htp #18661 EffectiveUri in Java Testkit
This commit is contained in:
Konrad Malawski 2015-10-26 10:46:28 -07:00
commit 098375571c
6 changed files with 49 additions and 22 deletions

View file

@ -32,7 +32,7 @@ public class HeaderRequestValsExampleTest extends JUnitRouteTest {
final HttpRequest request =
HttpRequest
.GET("http://akka.io/")
.addHeader(Host.create("akka.io", 80));
.addHeader(Host.create("akka.io"));
testRoute(route).run(request).assertEntity("Host header was: akka.io");
//#by-class

View file

@ -18,9 +18,6 @@ import org.junit.Test;
public class HostDirectivesExamplesTest extends JUnitRouteTest {
//FIXME The GET requests should work with HttpRequest.GET("/").addHeader(Host.create
// instead of absolute paths. That is tracked by issue: https://github.com/akka/akka/issues/18661
@Test
public void testListOfHost() {
//#host1
@ -28,7 +25,7 @@ public class HostDirectivesExamplesTest extends JUnitRouteTest {
Arrays.asList("api.company.com", "rest.company.com"),
completeWithStatus(StatusCodes.OK));
testRoute(matchListOfHosts).run(HttpRequest.GET("http://api.company.com/"))
testRoute(matchListOfHosts).run(HttpRequest.GET("/").addHeader(Host.create("api.company.com")))
.assertStatusCode(StatusCodes.OK);
//#host1
}
@ -39,10 +36,10 @@ public class HostDirectivesExamplesTest extends JUnitRouteTest {
final Route shortOnly = host(hostname -> hostname.length() < 10,
completeWithStatus(StatusCodes.OK));
testRoute(shortOnly).run(HttpRequest.GET("http://short.com/"))
testRoute(shortOnly).run(HttpRequest.GET("/").addHeader(Host.create("short.com")))
.assertStatusCode(StatusCodes.OK);
testRoute(shortOnly).run(HttpRequest.GET("http://verylonghostname.com/"))
testRoute(shortOnly).run(HttpRequest.GET("/").addHeader(Host.create("verylonghostname.com")))
.assertStatusCode(StatusCodes.NOT_FOUND);
//#host2
}
@ -55,7 +52,7 @@ public class HostDirectivesExamplesTest extends JUnitRouteTest {
final Route route = handleWith1(host,
(ctx, hn) -> ctx.complete("Hostname: " + hn));
testRoute(route).run(HttpRequest.GET("http://company.com:9090/"))
testRoute(route).run(HttpRequest.GET("/").addHeader(Host.create("company.com", 9090)))
.assertEntity("Hostname: company.com");
//#extractHostname
}
@ -79,10 +76,10 @@ public class HostDirectivesExamplesTest extends JUnitRouteTest {
final Route route = route(hostPrefixRoute, hostPartRoute);
testRoute(route).run(HttpRequest.GET("http://api.company.com/"))
testRoute(route).run(HttpRequest.GET("/").addHeader(Host.create("api.company.com")))
.assertStatusCode(StatusCodes.OK).assertEntity("Extracted prefix: api");
testRoute(route).run(HttpRequest.GET("http://public.mycompany.com/"))
testRoute(route).run(HttpRequest.GET("/").addHeader(Host.create("public.mycompany.com")))
.assertStatusCode(StatusCodes.OK)
.assertEntity("You came through my company");
//#matchAndExtractHost

View file

@ -0,0 +1,14 @@
/**
* Copyright (C) 2009-2015 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.http.javadsl.testkit
import akka.http.javadsl.model.headers.Host
final case class DefaultHostInfo(private val host: Host, private val securedConnection: Boolean) {
def getHost(): Host = host
def isSecuredConnection(): Boolean = securedConnection
}

View file

@ -10,6 +10,7 @@ import scala.concurrent.duration._
import akka.stream.Materializer
import akka.http.scaladsl.server
import akka.http.javadsl.model.HttpRequest
import akka.http.javadsl.model.headers.Host
import akka.http.javadsl.server.{ HttpApp, AllDirectives, Route, Directives }
import akka.http.impl.util.JavaMapping.Implicits._
import akka.http.impl.server.RouteImplementation
@ -34,13 +35,27 @@ abstract class RouteTest extends AllDirectives {
protected def awaitDuration: FiniteDuration = 500.millis
def runRoute(route: Route, request: HttpRequest): TestResponse =
runScalaRoute(ScalaRoute.seal(RouteImplementation(route)), request)
def runRouteUnSealed(route: Route, request: HttpRequest): TestResponse =
runScalaRoute(RouteImplementation(route), request)
protected def defaultHostInfo: DefaultHostInfo = DefaultHostInfo(Host.create("example.com"), false)
private def runScalaRoute(scalaRoute: ScalaRoute, request: HttpRequest): TestResponse = {
val result = scalaRoute(new server.RequestContextImpl(request.asScala, NoLogging, RoutingSettings(system)))
def runRoute(route: Route, request: HttpRequest): TestResponse =
runRoute(route, request, defaultHostInfo)
def runRoute(route: Route, request: HttpRequest, defaultHostInfo: DefaultHostInfo): TestResponse =
runScalaRoute(ScalaRoute.seal(RouteImplementation(route)), request, defaultHostInfo)
def runRouteUnSealed(route: Route, request: HttpRequest): TestResponse =
runRouteUnSealed(route, request, defaultHostInfo)
def runRouteUnSealed(route: Route, request: HttpRequest, defaultHostInfo: DefaultHostInfo): TestResponse =
runScalaRoute(RouteImplementation(route), request, defaultHostInfo)
private def runScalaRoute(scalaRoute: ScalaRoute, request: HttpRequest, defaultHostInfo: DefaultHostInfo): TestResponse = {
val effectiveRequest = request.asScala
.withEffectiveUri(
securedConnection = defaultHostInfo.isSecuredConnection(),
defaultHostHeader = defaultHostInfo.getHost().asScala)
val result = scalaRoute(new server.RequestContextImpl(effectiveRequest, NoLogging, RoutingSettings(system)))
result.awaitResult(awaitDuration) match {
case RouteResult.Complete(response) createTestResponse(response)

View file

@ -49,14 +49,14 @@ public class HandlerExampleDocTest extends JUnitRouteTest {
TestRoute r = testRoute(new TestHandler().createRoute());
r.run(HttpRequest.GET("/test"))
.assertStatusCode(200)
.assertEntity("This was a GET request to /test");
.assertEntity("This was a GET request to http://example.com/test");
r.run(HttpRequest.POST("/test"))
.assertStatusCode(404);
r.run(HttpRequest.POST("/abc"))
.assertStatusCode(200)
.assertEntity("This was a POST request to /abc");
.assertEntity("This was a POST request to http://example.com/abc");
//#simple-handler-example-full
}

View file

@ -5,6 +5,7 @@
package akka.http.javadsl.server.directives;
import akka.http.javadsl.model.StatusCodes;
import akka.http.javadsl.model.headers.Host;
import akka.http.javadsl.server.values.PathMatcher;
import org.junit.Test;
@ -337,9 +338,9 @@ public class PathDirectivesTest extends JUnitRouteTest {
redirectToTrailingSlashIfMissing(StatusCodes.FOUND, complete("Ok"))
);
route.run(HttpRequest.GET("/home"))
route.run(HttpRequest.GET("/home").addHeader(Host.create("example.com")))
.assertStatusCode(302)
.assertHeaderExists("Location", "/home/");
.assertHeaderExists("Location", "http://example.com/home/");
route.run(HttpRequest.GET("/home/"))
.assertStatusCode(200)
@ -353,9 +354,9 @@ public class PathDirectivesTest extends JUnitRouteTest {
redirectToNoTrailingSlashIfPresent(StatusCodes.FOUND, complete("Ok"))
);
route.run(HttpRequest.GET("/home/"))
route.run(HttpRequest.GET("/home/").addHeader(Host.create("example.com")))
.assertStatusCode(302)
.assertHeaderExists("Location", "/home");
.assertHeaderExists("Location", "http://example.com/home");
route.run(HttpRequest.GET("/home"))
.assertStatusCode(200)