aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authoripknHama <ipknhama@gmail.com>2014-09-07 04:30:53 +0900
committeripknHama <ipknhama@gmail.com>2014-09-07 04:30:53 +0900
commit2748e35430b9a4aaf64dfbd626d819f0fc5eedd2 (patch)
treea8ebd5648d46cc7073b2ae6f6b5ada0e702c456c /tests
parentc89cafa820ec02f041c3b0e52877bc321f6a1ba9 (diff)
downloadcrow-2748e35430b9a4aaf64dfbd626d819f0fc5eedd2.tar.gz
crow-2748e35430b9a4aaf64dfbd626d819f0fc5eedd2.zip
basic middleware test: before_handler
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt6
-rw-r--r--tests/unittest.cpp72
2 files changed, 76 insertions, 2 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 6beb0be..5ea48f1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -10,9 +10,13 @@ add_executable(unittest ${TEST_SRCS})
#target_link_libraries(unittest crow)
target_link_libraries(unittest ${Boost_LIBRARIES} )
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+# using Clang
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+# using GCC
set_target_properties(unittest PROPERTIES COMPILE_FLAGS "--coverage -fprofile-arcs -ftest-coverage")
-
target_link_libraries(unittest gcov)
+endif()
add_subdirectory(template)
#CXXFLAGS="-g -O0 -Wall -W -Wshadow -Wunused-variable \
diff --git a/tests/unittest.cpp b/tests/unittest.cpp
index 17bc53c..c84e3ed 100644
--- a/tests/unittest.cpp
+++ b/tests/unittest.cpp
@@ -352,7 +352,8 @@ TEST(json_read)
ASSERT_EQUAL(1, x.size());
ASSERT_EQUAL(false, x.has("mess"));
ASSERT_THROW(x["mess"]);
- ASSERT_THROW(3 == x["message"]);
+ // TODO returning false is better than exception
+ //ASSERT_THROW(3 == x["message"]);
ASSERT_EQUAL(12, x["message"].size());
std::string s = R"({"int":3, "ints" :[1,2,3,4,5] })";
@@ -478,6 +479,75 @@ int testmain()
return failed ? -1 : 0;
}
+struct NullMiddleware
+{
+ struct context {};
+
+ template <typename AllContext>
+ void before_handle(request& req, response& res, context& ctx, AllContext& all_ctx)
+ {}
+
+ template <typename AllContext>
+ void after_handle(request& req, response& res, context& ctx, AllContext& all_ctx)
+ {}
+};
+
+TEST(middleware_simple)
+{
+ App<NullMiddleware> app;
+ CROW_ROUTE(app, "/")([&](const crow::request& req)
+ {
+ app.get_middleware_context<NullMiddleware>(req);
+ return "";
+ });
+}
+
+struct IntSettingMiddleware
+{
+ struct context { int val; };
+
+ template <typename AllContext>
+ void before_handle(request& req, response& res, context& ctx, AllContext& all_ctx)
+ {
+ ctx.val = 1;
+ }
+
+ template <typename AllContext>
+ void after_handle(request& req, response& res, context& ctx, AllContext& all_ctx)
+ {
+ ctx.val = 2;
+ }
+};
+
+TEST(middleware_context)
+{
+ static char buf[2048];
+ App<IntSettingMiddleware> app;
+ Server<decltype(app), IntSettingMiddleware> server(&app, 45451);
+ auto _ = async(launch::async, [&]{server.run();});
+ std::string sendmsg = "GET /\r\n\r\n";
+
+ int x{};
+ CROW_ROUTE(app, "/")([&](const request& req){
+ auto& ctx = app.get_middleware_context<IntSettingMiddleware>(req);
+ x = ctx.val;
+
+ return "";
+ });
+ asio::io_service is;
+ {
+ asio::ip::tcp::socket c(is);
+ c.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string("127.0.0.1"), 45451));
+
+
+ c.send(asio::buffer(sendmsg));
+
+ c.receive(asio::buffer(buf, 2048));
+ }
+ ASSERT_EQUAL(1, x);
+ server.stop();
+}
+
int main()
{
return testmain();