Refine the streaming, add UT, add error handling.

This commit is contained in:
Chunting Gu
2019-08-09 16:10:16 +08:00
parent c669551552
commit feae9b7acc
17 changed files with 316 additions and 212 deletions
+2 -7
View File
@@ -1,12 +1,7 @@
# Unit test
set(UT_SRCS
base64_unittest.cc
body_unittest.cc
request_parser_unittest.cc
url_unittest.cc
utility_unittest.cc
)
file(GLOB UT_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/*.cc)
set(UT_TARGET_NAME webcc_unittest)
+17
View File
@@ -0,0 +1,17 @@
#include "gtest/gtest.h"
#include "webcc/response_builder.h"
// Empty body should also have `Content-Length` header.
TEST(ResponseBuilderTest, EmptyBody) {
using namespace webcc;
auto response = ResponseBuilder{}.OK()();
bool existed = false;
const auto& value = response->GetHeader(headers::kContentLength, &existed);
EXPECT_TRUE(existed);
EXPECT_EQ("0", value);
}
-77
View File
@@ -1,77 +0,0 @@
#include "gtest/gtest.h"
#include "webcc/service_manager.h"
// -----------------------------------------------------------------------------
class MyService : public webcc::Service {
public:
webcc::ResponsePtr Handle(webcc::RequestPtr request,
const webcc::UrlArgs& args) override {
return webcc::ResponseBuilder{}.OK()();
}
};
// -----------------------------------------------------------------------------
/*
TEST(ServiceManagerTest, URL_RegexBasic) {
webcc::ServiceManager service_manager;
service_manager.Add(std::make_shared<MyService>(), "/instance/(\\d+)", true);
std::string url = "/instance/12345";
webcc::UrlArgs args;
webcc::ServicePtr service = service_manager.Get(url, &args);
EXPECT_TRUE(!!service);
EXPECT_EQ(1, args.size());
EXPECT_EQ("12345", args[0]);
url = "/instance/abcde";
args.clear();
service = service_manager.Get(url, &args);
EXPECT_FALSE(!!service);
}
TEST(RestServiceManagerTest, URL_RegexMultiple) {
webcc::ServiceManager service_manager;
service_manager.Add(std::make_shared<MyService>(),
"/study/(\\d+)/series/(\\d+)/instance/(\\d+)", true);
std::string url = "/study/1/series/2/instance/3";
webcc::UrlArgs args;
webcc::ServicePtr service = service_manager.Get(url, &args);
EXPECT_TRUE(!!service);
EXPECT_EQ(3, args.size());
EXPECT_EQ("1", args[0]);
EXPECT_EQ("2", args[1]);
EXPECT_EQ("3", args[2]);
url = "/study/a/series/b/instance/c";
args.clear();
service = service_manager.Get(url, &args);
EXPECT_FALSE(!!service);
}
TEST(RestServiceManagerTest, URL_NonRegex) {
webcc::ServiceManager service_manager;
service_manager.Add(std::make_shared<MyService>(), "/instances", false);
std::string url = "/instances";
webcc::UrlArgs args;
webcc::ServicePtr service = service_manager.Get(url, &args);
EXPECT_TRUE(!!service);
EXPECT_TRUE(args.empty());
}
*/