=htp #18661 effectiveUri in Java testkit
Java testkit now uses effectiveUri to behave just like the Scala testkit so that the host header and path is joined. This allows for test calls that use just a relative URI.
This commit is contained in:
parent
630bd948d5
commit
19c8e557ba
6 changed files with 49 additions and 22 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue