+str #17361: Unified http java/scala projects except marshallers
This commit is contained in:
parent
454a393af1
commit
be82e85ffc
182 changed files with 13693 additions and 0 deletions
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server;
|
||||
|
||||
import org.junit.Test;
|
||||
import scala.Option;
|
||||
import scala.concurrent.Future;
|
||||
import akka.http.javadsl.model.HttpRequest;
|
||||
import akka.http.javadsl.model.headers.Authorization;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import static akka.http.javadsl.server.Directives.*;
|
||||
|
||||
public class AuthenticationDirectivesTest extends JUnitRouteTest {
|
||||
HttpBasicAuthenticator<String> authenticatedUser =
|
||||
new HttpBasicAuthenticator<String>("test-realm") {
|
||||
@Override
|
||||
public Future<Option<String>> authenticate(BasicUserCredentials credentials) {
|
||||
if (credentials.available() && // no anonymous access
|
||||
credentials.userName().equals("sina") &&
|
||||
credentials.verifySecret("1234"))
|
||||
return authenticateAs("Sina");
|
||||
else return refuseAccess();
|
||||
}
|
||||
};
|
||||
|
||||
Handler1<String> helloWorldHandler =
|
||||
new Handler1<String>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, String user) {
|
||||
return ctx.complete("Hello "+user+"!");
|
||||
}
|
||||
};
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("secure").route(
|
||||
authenticatedUser.route(
|
||||
handleWith(authenticatedUser, helloWorldHandler)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
@Test
|
||||
public void testCorrectUser() {
|
||||
HttpRequest authenticatedRequest =
|
||||
HttpRequest.GET("/secure")
|
||||
.addHeader(Authorization.basic("sina", "1234"));
|
||||
|
||||
route.run(authenticatedRequest)
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("Hello Sina!");
|
||||
}
|
||||
@Test
|
||||
public void testRejectAnonymousAccess() {
|
||||
route.run(HttpRequest.GET("/secure"))
|
||||
.assertStatusCode(401)
|
||||
.assertEntity("The resource requires authentication, which was not supplied with the request")
|
||||
.assertHeaderExists("WWW-Authenticate", "Basic realm=\"test-realm\"");
|
||||
}
|
||||
@Test
|
||||
public void testRejectUnknownUser() {
|
||||
HttpRequest authenticatedRequest =
|
||||
HttpRequest.GET("/secure")
|
||||
.addHeader(Authorization.basic("joe", "0000"));
|
||||
|
||||
route.run(authenticatedRequest)
|
||||
.assertStatusCode(401)
|
||||
.assertEntity("The supplied authentication is invalid");
|
||||
}
|
||||
@Test
|
||||
public void testRejectWrongPassword() {
|
||||
HttpRequest authenticatedRequest =
|
||||
HttpRequest.GET("/secure")
|
||||
.addHeader(Authorization.basic("sina", "1235"));
|
||||
|
||||
route.run(authenticatedRequest)
|
||||
.assertStatusCode(401)
|
||||
.assertEntity("The supplied authentication is invalid");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server;
|
||||
|
||||
import static akka.http.javadsl.server.Directives.*;
|
||||
|
||||
import akka.actor.ActorSystem;
|
||||
import akka.http.javadsl.model.HttpRequest;
|
||||
import akka.http.javadsl.model.headers.AcceptEncoding;
|
||||
import akka.http.javadsl.model.headers.ContentEncoding;
|
||||
import akka.http.javadsl.model.headers.HttpEncodings;
|
||||
import akka.stream.ActorFlowMaterializer;
|
||||
import akka.util.ByteString;
|
||||
import org.junit.*;
|
||||
import scala.concurrent.Await;
|
||||
import scala.concurrent.duration.Duration;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CodingDirectivesTest extends JUnitRouteTest {
|
||||
|
||||
static ActorSystem system;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
system = ActorSystem.create("FlowGraphDocTest");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDown() {
|
||||
system.shutdown();
|
||||
system.awaitTermination();
|
||||
system = null;
|
||||
}
|
||||
|
||||
final ActorFlowMaterializer mat = ActorFlowMaterializer.create(system);
|
||||
|
||||
@Test
|
||||
public void testAutomaticEncodingWhenNoEncodingRequested() throws Exception {
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
encodeResponse(
|
||||
complete("TestString")
|
||||
)
|
||||
);
|
||||
|
||||
TestResponse response = route.run(HttpRequest.create());
|
||||
response
|
||||
.assertStatusCode(200);
|
||||
|
||||
Assert.assertEquals("TestString", response.entityBytes().utf8String());
|
||||
}
|
||||
@Test
|
||||
public void testAutomaticEncodingWhenDeflateRequested() throws Exception {
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
encodeResponse(
|
||||
complete("tester")
|
||||
)
|
||||
);
|
||||
|
||||
HttpRequest request = HttpRequest.create().addHeader(AcceptEncoding.create(HttpEncodings.DEFLATE));
|
||||
TestResponse response = route.run(request);
|
||||
response
|
||||
.assertStatusCode(200)
|
||||
.assertHeaderExists(ContentEncoding.create(HttpEncodings.DEFLATE));
|
||||
|
||||
ByteString decompressed =
|
||||
Await.result(Coder.Deflate.decode(response.entityBytes(), mat), Duration.apply(3, TimeUnit.SECONDS));
|
||||
Assert.assertEquals("tester", decompressed.utf8String());
|
||||
}
|
||||
@Test
|
||||
public void testEncodingWhenDeflateRequestedAndGzipSupported() {
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
encodeResponse(Coder.Gzip).route(
|
||||
complete("tester")
|
||||
)
|
||||
);
|
||||
|
||||
HttpRequest request = HttpRequest.create().addHeader(AcceptEncoding.create(HttpEncodings.DEFLATE));
|
||||
route.run(request)
|
||||
.assertStatusCode(406)
|
||||
.assertEntity("Resource representation is only available with these Content-Encodings:\ngzip");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutomaticDecoding() {}
|
||||
@Test
|
||||
public void testGzipDecoding() {}
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server;
|
||||
|
||||
import akka.dispatch.Futures;
|
||||
import akka.http.javadsl.marshallers.jackson.Jackson;
|
||||
import akka.http.javadsl.model.HttpRequest;
|
||||
import akka.http.javadsl.model.MediaTypes;
|
||||
import org.junit.Test;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import static akka.http.javadsl.server.Directives.*;
|
||||
|
||||
public class CompleteTest extends JUnitRouteTest {
|
||||
@Test
|
||||
public void completeWithString() {
|
||||
Route route = complete("Everything OK!");
|
||||
|
||||
HttpRequest request = HttpRequest.create();
|
||||
|
||||
runRoute(route, request)
|
||||
.assertStatusCode(200)
|
||||
.assertMediaType(MediaTypes.TEXT_PLAIN)
|
||||
.assertEntity("Everything OK!");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void completeAsJacksonJson() {
|
||||
class Person {
|
||||
public String getFirstName() { return "Peter"; }
|
||||
public String getLastName() { return "Parker"; }
|
||||
public int getAge() { return 138; }
|
||||
}
|
||||
Route route = completeAs(Jackson.json(), new Person());
|
||||
|
||||
HttpRequest request = HttpRequest.create();
|
||||
|
||||
runRoute(route, request)
|
||||
.assertStatusCode(200)
|
||||
.assertMediaType("application/json")
|
||||
.assertEntity("{\"age\":138,\"firstName\":\"Peter\",\"lastName\":\"Parker\"}");
|
||||
}
|
||||
@Test
|
||||
public void completeWithFuture() {
|
||||
Parameter<Integer> x = Parameters.integer("x");
|
||||
Parameter<Integer> y = Parameters.integer("y");
|
||||
|
||||
Handler2<Integer, Integer> slowCalc = new Handler2<Integer, Integer>() {
|
||||
@Override
|
||||
public RouteResult handle(final RequestContext ctx, final Integer x, final Integer y) {
|
||||
return ctx.completeWith(Futures.future(new Callable<RouteResult>() {
|
||||
@Override
|
||||
public RouteResult call() throws Exception {
|
||||
int result = x + y;
|
||||
return ctx.complete(String.format("%d + %d = %d",x, y, result));
|
||||
}
|
||||
}, executionContext()));
|
||||
}
|
||||
};
|
||||
|
||||
Route route = handleWith(x, y, slowCalc);
|
||||
runRoute(route, HttpRequest.GET("add?x=42&y=23"))
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("42 + 23 = 65");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server;
|
||||
|
||||
import akka.http.scaladsl.model.HttpRequest;
|
||||
import org.junit.Test;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import static akka.http.javadsl.server.Directives.*;
|
||||
|
||||
public class HandlerBindingTest extends JUnitRouteTest {
|
||||
@Test
|
||||
public void testHandlerWithoutExtractions() {
|
||||
Route route = handleWith(
|
||||
new Handler() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx) {
|
||||
return ctx.complete("Ok");
|
||||
}
|
||||
}
|
||||
);
|
||||
runRoute(route, HttpRequest.GET("/"))
|
||||
.assertEntity("Ok");
|
||||
}
|
||||
@Test
|
||||
public void testHandlerWithSomeExtractions() {
|
||||
final Parameter<Integer> a = Parameters.integer("a");
|
||||
final Parameter<Integer> b = Parameters.integer("b");
|
||||
|
||||
Route route = handleWith(
|
||||
new Handler() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx) {
|
||||
return ctx.complete("Ok a:" + a.get(ctx) +" b:" + b.get(ctx));
|
||||
}
|
||||
}, a, b
|
||||
);
|
||||
runRoute(route, HttpRequest.GET("?a=23&b=42"))
|
||||
.assertEntity("Ok a:23 b:42");
|
||||
}
|
||||
@Test
|
||||
public void testHandlerIfExtractionFails() {
|
||||
final Parameter<Integer> a = Parameters.integer("a");
|
||||
|
||||
Route route = handleWith(
|
||||
new Handler() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx) {
|
||||
return ctx.complete("Ok " + a.get(ctx));
|
||||
}
|
||||
}, a
|
||||
);
|
||||
runRoute(route, HttpRequest.GET("/"))
|
||||
.assertStatusCode(404)
|
||||
.assertEntity("Request is missing required query parameter 'a'");
|
||||
}
|
||||
@Test
|
||||
public void testHandler1() {
|
||||
final Parameter<Integer> a = Parameters.integer("a");
|
||||
|
||||
Route route = handleWith(
|
||||
a,
|
||||
new Handler1<Integer>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, Integer a) {
|
||||
return ctx.complete("Ok " + a);
|
||||
}
|
||||
}
|
||||
);
|
||||
runRoute(route, HttpRequest.GET("?a=23"))
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("Ok 23");
|
||||
}
|
||||
@Test
|
||||
public void testHandler2() {
|
||||
Route route = handleWith(
|
||||
Parameters.integer("a"),
|
||||
Parameters.integer("b"),
|
||||
new Handler2<Integer, Integer>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, Integer a, Integer b) {
|
||||
return ctx.complete("Sum: " + (a + b));
|
||||
}
|
||||
}
|
||||
);
|
||||
runRoute(route, HttpRequest.GET("?a=23&b=42"))
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("Sum: 65");
|
||||
}
|
||||
@Test
|
||||
public void testHandler3() {
|
||||
Route route = handleWith(
|
||||
Parameters.integer("a"),
|
||||
Parameters.integer("b"),
|
||||
Parameters.integer("c"),
|
||||
new Handler3<Integer, Integer, Integer>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, Integer a, Integer b, Integer c) {
|
||||
return ctx.complete("Sum: " + (a + b + c));
|
||||
}
|
||||
}
|
||||
);
|
||||
TestResponse response = runRoute(route, HttpRequest.GET("?a=23&b=42&c=30"));
|
||||
response.assertStatusCode(200);
|
||||
response.assertEntity("Sum: 95");
|
||||
}
|
||||
@Test
|
||||
public void testHandler4() {
|
||||
Route route = handleWith(
|
||||
Parameters.integer("a"),
|
||||
Parameters.integer("b"),
|
||||
Parameters.integer("c"),
|
||||
Parameters.integer("d"),
|
||||
new Handler4<Integer, Integer, Integer, Integer>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, Integer a, Integer b, Integer c, Integer d) {
|
||||
return ctx.complete("Sum: " + (a + b + c + d));
|
||||
}
|
||||
}
|
||||
);
|
||||
runRoute(route, HttpRequest.GET("?a=23&b=42&c=30&d=45"))
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("Sum: 140");
|
||||
}
|
||||
@Test
|
||||
public void testReflectiveInstanceHandler() {
|
||||
class Test {
|
||||
public RouteResult negate(RequestContext ctx, int a) {
|
||||
return ctx.complete("Negated: " + (- a));
|
||||
}
|
||||
}
|
||||
Route route = handleWith(new Test(), "negate", Parameters.integer("a"));
|
||||
runRoute(route, HttpRequest.GET("?a=23"))
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("Negated: -23");
|
||||
}
|
||||
|
||||
public static RouteResult squared(RequestContext ctx, int a) {
|
||||
return ctx.complete("Squared: " + (a * a));
|
||||
}
|
||||
@Test
|
||||
public void testStaticReflectiveHandler() {
|
||||
Route route = handleWith(HandlerBindingTest.class, "squared", Parameters.integer("a"));
|
||||
runRoute(route, HttpRequest.GET("?a=23"))
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("Squared: 529");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,222 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server;
|
||||
|
||||
import static akka.http.javadsl.server.Directives.*;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import akka.http.scaladsl.model.HttpRequest;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PathDirectivesTest extends JUnitRouteTest {
|
||||
@Test
|
||||
public void testPathPrefixAndPath() {
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
pathPrefix("pet").route(
|
||||
path("cat").route(complete("The cat!")),
|
||||
path("dog").route(complete("The dog!")),
|
||||
pathSingleSlash().route(complete("Here are only pets."))
|
||||
)
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/pet/"))
|
||||
.assertEntity("Here are only pets.");
|
||||
|
||||
route.run(HttpRequest.GET("/pet")) // missing trailing slash
|
||||
.assertStatusCode(404);
|
||||
|
||||
route.run(HttpRequest.GET("/pet/cat"))
|
||||
.assertEntity("The cat!");
|
||||
|
||||
route.run(HttpRequest.GET("/pet/dog"))
|
||||
.assertEntity("The dog!");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRawPathPrefix() {
|
||||
TestRoute route1 =
|
||||
testRoute(
|
||||
rawPathPrefix(PathMatchers.SLASH(), "pet", PathMatchers.SLASH(), "", PathMatchers.SLASH(), "cat").route(
|
||||
complete("The cat!")
|
||||
)
|
||||
);
|
||||
|
||||
route1.run(HttpRequest.GET("/pet//cat"))
|
||||
.assertEntity("The cat!");
|
||||
|
||||
// any suffix allowed
|
||||
route1.run(HttpRequest.GET("/pet//cat/abcdefg"))
|
||||
.assertEntity("The cat!");
|
||||
|
||||
TestRoute route2 =
|
||||
testRoute(
|
||||
rawPathPrefix(PathMatchers.SLASH(), "pet", PathMatchers.SLASH(), "", PathMatchers.SLASH(), "cat", PathMatchers.END()).route(
|
||||
complete("The cat!")
|
||||
)
|
||||
);
|
||||
|
||||
route2.run(HttpRequest.GET("/pet//cat"))
|
||||
.assertEntity("The cat!");
|
||||
|
||||
route2.run(HttpRequest.GET("/pet//cat/abcdefg"))
|
||||
.assertStatusCode(404);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSegment() {
|
||||
PathMatcher<String> name = PathMatchers.segment();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("hey", name).route(toStringEcho(name))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/hey/jude"))
|
||||
.assertEntity("jude");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSingleSlash() {
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
pathSingleSlash().route(complete("Ok"))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/"))
|
||||
.assertEntity("Ok");
|
||||
|
||||
route.run(HttpRequest.GET("/abc"))
|
||||
.assertStatusCode(404);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIntegerMatcher() {
|
||||
PathMatcher<Integer> age = PathMatchers.integerNumber();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("age", age).route(toStringEcho(age))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/age/38"))
|
||||
.assertEntity("38");
|
||||
|
||||
route.run(HttpRequest.GET("/age/abc"))
|
||||
.assertStatusCode(404);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTwoVals() {
|
||||
// tests that `x` and `y` have different identities which is important for
|
||||
// retrieving the values
|
||||
PathMatcher<Integer> x = PathMatchers.integerNumber();
|
||||
PathMatcher<Integer> y = PathMatchers.integerNumber();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("multiply", x, y).route(
|
||||
handleWith(x, y, new Handler2<Integer, Integer>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, Integer x, Integer y) {
|
||||
return ctx.complete(String.format("%d * %d = %d", x, y, x * y));
|
||||
}
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/multiply/3/6"))
|
||||
.assertEntity("3 * 6 = 18");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHexIntegerMatcher() {
|
||||
PathMatcher<Integer> color = PathMatchers.hexIntegerNumber();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("color", color).route(toStringEcho(color))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/color/a0c2ef"))
|
||||
.assertEntity(Integer.toString(0xa0c2ef));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongMatcher() {
|
||||
PathMatcher<Long> bigAge = PathMatchers.longNumber();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("bigage", bigAge).route(toStringEcho(bigAge))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/bigage/12345678901"))
|
||||
.assertEntity("12345678901");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHexLongMatcher() {
|
||||
PathMatcher<Long> code = PathMatchers.hexLongNumber();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("code", code).route(toStringEcho(code))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/code/a0b1c2d3e4f5"))
|
||||
.assertEntity(Long.toString(0xa0b1c2d3e4f5L));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRestMatcher() {
|
||||
PathMatcher<String> rest = PathMatchers.rest();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("pets", rest).route(toStringEcho(rest))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/pets/afdaoisd/asda/sfasfasf/asf"))
|
||||
.assertEntity("afdaoisd/asda/sfasfasf/asf");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUUIDMatcher() {
|
||||
PathMatcher<UUID> uuid = PathMatchers.uuid();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("by-uuid", uuid).route(toStringEcho(uuid))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/by-uuid/6ba7b811-9dad-11d1-80b4-00c04fd430c8"))
|
||||
.assertEntity("6ba7b811-9dad-11d1-80b4-00c04fd430c8");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSegmentsMatcher() {
|
||||
PathMatcher<List<String>> segments = PathMatchers.segments();
|
||||
|
||||
TestRoute route =
|
||||
testRoute(
|
||||
path("pets", segments).route(toStringEcho(segments))
|
||||
);
|
||||
|
||||
route.run(HttpRequest.GET("/pets/cat/dog"))
|
||||
.assertEntity("[cat, dog]");
|
||||
}
|
||||
|
||||
private <T> Route toStringEcho(RequestVal<T> value) {
|
||||
return handleWith(value, new Handler1<T>() {
|
||||
@Override
|
||||
public RouteResult handle(RequestContext ctx, T t) {
|
||||
return ctx.complete(t.toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server.examples.petstore;
|
||||
|
||||
import akka.http.javadsl.marshallers.jackson.Jackson;
|
||||
import akka.http.javadsl.model.HttpRequest;
|
||||
import akka.http.javadsl.model.MediaTypes;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import akka.http.javadsl.testkit.TestRoute;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PetStoreAPITest extends JUnitRouteTest {
|
||||
@Test
|
||||
public void testGetPet() {
|
||||
TestResponse response = createRoute().run(HttpRequest.GET("/pet/1"));
|
||||
|
||||
response
|
||||
.assertStatusCode(200)
|
||||
.assertMediaType("application/json");
|
||||
|
||||
Pet pet = response.entityAs(Jackson.jsonAs(Pet.class));
|
||||
assertEquals("cat", pet.getName());
|
||||
assertEquals(1, pet.getId());
|
||||
}
|
||||
@Test
|
||||
public void testGetMissingPet() {
|
||||
createRoute().run(HttpRequest.GET("/pet/999"))
|
||||
.assertStatusCode(404);
|
||||
}
|
||||
@Test
|
||||
public void testPutPet() {
|
||||
HttpRequest request =
|
||||
HttpRequest.PUT("/pet/1")
|
||||
.withEntity(MediaTypes.APPLICATION_JSON.toContentType(), "{\"id\": 1, \"name\": \"giraffe\"}");
|
||||
|
||||
TestResponse response = createRoute().run(request);
|
||||
|
||||
response.assertStatusCode(200);
|
||||
|
||||
Pet pet = response.entityAs(Jackson.jsonAs(Pet.class));
|
||||
assertEquals("giraffe", pet.getName());
|
||||
assertEquals(1, pet.getId());
|
||||
}
|
||||
@Test
|
||||
public void testDeletePet() {
|
||||
Map<Integer, Pet> data = createData();
|
||||
|
||||
HttpRequest request = HttpRequest.DELETE("/pet/0");
|
||||
|
||||
createRoute(data).run(request)
|
||||
.assertStatusCode(200);
|
||||
|
||||
// test actual deletion from data store
|
||||
assertFalse(data.containsKey(0));
|
||||
}
|
||||
|
||||
private TestRoute createRoute() {
|
||||
return createRoute(createData());
|
||||
}
|
||||
private TestRoute createRoute(Map<Integer, Pet> pets) {
|
||||
return testRoute(PetStoreExample.appRoute(pets));
|
||||
}
|
||||
private Map<Integer, Pet> createData() {
|
||||
Map<Integer, Pet> pets = new HashMap<Integer, Pet>();
|
||||
Pet dog = new Pet(0, "dog");
|
||||
Pet cat = new Pet(1, "cat");
|
||||
pets.put(0, dog);
|
||||
pets.put(1, cat);
|
||||
|
||||
return pets;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
|
||||
package akka.http.javadsl.server.examples.simple;
|
||||
|
||||
import akka.http.javadsl.model.HttpRequest;
|
||||
import akka.http.javadsl.testkit.*;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SimpleServerTest extends JUnitRouteTest {
|
||||
TestRoute route = testRoute(new SimpleServerApp().createRoute());
|
||||
|
||||
@Test
|
||||
public void testAdd() {
|
||||
TestResponse response = route.run(HttpRequest.GET("/add?x=42&y=23"));
|
||||
|
||||
response
|
||||
.assertStatusCode(200)
|
||||
.assertEntity("42 + 23 = 65");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue