From b22c2b2f4d3c780cb0497fdc9a0b5220ee92ec66 Mon Sep 17 00:00:00 2001 From: JDierkse Date: Sun, 14 Jun 2020 16:33:19 +0200 Subject: [PATCH] Add Tests --- Makefile.conf | 4 +- Makefile.target | 7 +- Test/HttpClient.cpp | 195 ++++++++++++++++++++++++++++++++++++++++++++ Test/Makefile | 1 + Test/Test.cc | 24 ++++++ Test/Test.h | 7 ++ 6 files changed, 236 insertions(+), 2 deletions(-) create mode 100644 Test/HttpClient.cpp create mode 120000 Test/Makefile create mode 100644 Test/Test.cc create mode 100644 Test/Test.h diff --git a/Makefile.conf b/Makefile.conf index e65930a..02a3cb7 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -12,8 +12,10 @@ CFLAGS += -I$(ROOTPATH)/Libraries/Logging/include CFLAGS += -I$(ROOTPATH)/Libraries/asio/include -LFLAGS += -lHttp +LFLAGS += -lHttp -lcrypto -lcurl -lssl -lz LFLAGS += -L$(ROOTPATH)/lib/$(ARCH) CFLAGS += -I$(ROOTPATH) -I$(ROOTPATH)/include +LFLAGS += -pthread + DEBUGDIR := .debug diff --git a/Makefile.target b/Makefile.target index 3400b77..540c80a 100644 --- a/Makefile.target +++ b/Makefile.target @@ -7,6 +7,11 @@ Http.a.$(ARCH) : $(OBJECTS) Http.a: $(call build_target,$@) +test.$(ARCH): $(OBJECTS) Test/Test.o.$(ARCH) | Http.a.$(ARCH) + $(call build_target_arch,$@,$^) +test: + $(call build_target,$@) + .DEFAULT_GOAL := Http.a -TARGETS += Http.a +TARGETS += Http.a test diff --git a/Test/HttpClient.cpp b/Test/HttpClient.cpp new file mode 100644 index 0000000..858b1d3 --- /dev/null +++ b/Test/HttpClient.cpp @@ -0,0 +1,195 @@ +#include "Test.h" +#include "HttpClient.h" +#include +#include + + +namespace Http { +namespace Test { + +bool Execute(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + + try + { + client.Open(request); + ss << "| SUCCESS |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + return true; + } + catch (const std::exception& e) + { + ss << "| FAIL |" << e.what() << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + return false; + } +} + +// ----- + +bool TestHttpClientGet(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| GET |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::GET); + return Execute(client, request); +} + +bool TestHttpClientHead(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| HEAD |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::HEAD); + return Execute(client, request); +} + +bool TestHttpClientPost(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| POST |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::POST); + return Execute(client, request); +} + +bool TestHttpClientPut(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| PUT |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::PUT); + return Execute(client, request); +} + +bool TestHttpClientDelete(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| DELETE |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::DELETE); + return Execute(client, request); +} + +bool TestHttpClientConnect(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| CONNECT |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::CONNECT); + return Execute(client, request); +} + +bool TestHttpClientTrace(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| TRACE |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::TRACE); + return Execute(client, request); +} + +bool TestHttpClientPatch(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| PATCH |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::PATCH); + return Execute(client, request); +} + +// ----- + +bool TestHttpClientNone(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| None |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.ReturnType(HttpRequest::ReturnType::Code); + return Execute(client, request); +} + +bool TestHttpClientCode(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| Code |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.ReturnType(HttpRequest::ReturnType::Code); + return Execute(client, request); +} + +bool TestHttpClientContent(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| Content |" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.ReturnType(HttpRequest::ReturnType::Content); + return Execute(client, request); +} + +bool TestHttpClientRedirect(HttpClient& client, HttpRequest& request) +{ + std::stringstream ss; + ss << "| Redirect |"; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.ReturnType(HttpRequest::ReturnType::Redirect); + return Execute(client, request); +} + +// ----- + +bool TestHttpClient() +{ + std::stringstream ss; + ss << "----------------------------------" << std::endl; + ss << "| TestHttpClient |" << std::endl; + ss << "----------------------------------" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + HttpClient client; + HttpRequest request("http://nginx.dierkse.nl"); + + bool success = true; + request.ReturnType(HttpRequest::ReturnType::Code); + success = TestHttpClientGet(client, request) && success; + success = TestHttpClientHead(client, request) && success; + success = TestHttpClientPost(client, request) && success; + success = TestHttpClientPut(client, request) && success; + success = TestHttpClientDelete(client, request) && success; + success = TestHttpClientConnect(client, request) && success; + success = TestHttpClientTrace(client, request) && success; + success = TestHttpClientPatch(client, request) && success; + + ss.str(""); + ss << "----------------------------------" << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + request.Method(HttpRequest::Method::GET); + success = TestHttpClientNone(client, request) && success; + success = TestHttpClientCode(client, request) && success; + success = TestHttpClientContent(client, request) && success; + success = TestHttpClientRedirect(client, request) && success; + + ss.str(""); + ss << "==================================" << std::endl << std::endl; + Logging::Log(Logging::Severity::Info, ss.str()); + + return success; +} + +} // namespace Test +} // namespace Http diff --git a/Test/Makefile b/Test/Makefile new file mode 120000 index 0000000..d0b0e8e --- /dev/null +++ b/Test/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/Test/Test.cc b/Test/Test.cc new file mode 100644 index 0000000..919cdcb --- /dev/null +++ b/Test/Test.cc @@ -0,0 +1,24 @@ +#include "Test.h" +#include + + +int main(int /*argc*/, char** /*argv*/) +{ + Logging::OpenLog(); + Logging::SetLogMask(Logging::Severity::Info); + + if ( + Http::Test::TestHttpClient() + ) + { + Logging::Log(Logging::Severity::Info, "Pass"); + Logging::CloseLog(); + + return 0; + } + + Logging::Log(Logging::Severity::Info, "Error"); + Logging::CloseLog(); + + return -1; +} diff --git a/Test/Test.h b/Test/Test.h new file mode 100644 index 0000000..bd20c1f --- /dev/null +++ b/Test/Test.h @@ -0,0 +1,7 @@ +namespace Http { +namespace Test { + +bool TestHttpClient(); + +} // namespace Test +} // namespace Http