From 3042ee4a31d2f81cccdc3c5d31cd7a89b4a0c5a0 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 16 May 2015 09:55:41 +0200 Subject: [PATCH] Added parse test for server and client. --- CMakeLists.txt | 3 + test/CMakeLists.txt | 4 ++ test/parse_test.cpp | 133 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 test/CMakeLists.txt create mode 100644 test/parse_test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 46aeb9e..205e7df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,3 +39,6 @@ target_link_libraries(https_examples ${CMAKE_THREAD_LIBS_INIT}) add_executable(http_examples http_examples.cpp) target_link_libraries(http_examples ${Boost_LIBRARIES}) target_link_libraries(http_examples ${CMAKE_THREAD_LIBS_INIT}) + +enable_testing() +add_subdirectory(test) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..cadba79 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(parse_test parse_test.cpp) +target_link_libraries(parse_test ${Boost_LIBRARIES}) +target_link_libraries(parse_test ${CMAKE_THREAD_LIBS_INIT}) +add_test(parse_test parse_test) diff --git a/test/parse_test.cpp b/test/parse_test.cpp new file mode 100644 index 0000000..833aa2d --- /dev/null +++ b/test/parse_test.cpp @@ -0,0 +1,133 @@ +#define private public + +#include "../server_http.hpp" +#include "../client_http.hpp" +#include + +using namespace std; +using namespace SimpleWeb; + +class ServerTest : public ServerBase { +public: + ServerTest() : + ServerBase::ServerBase(8080, 1, 5, 300) {} + + void accept() {} + + bool parse_request_test() { + std::shared_ptr request(new Request()); + + stringstream ss; + ss << "GET /test/ HTTP/1.1\r\n"; + ss << "TestHeader: test\r\n"; + ss << "TestHeader2:test2\r\n"; + ss << "\r\n"; + + parse_request(request, ss); + + if(request->method!="GET") + return 0; + if(request->path!="/test/") + return 0; + if(request->http_version!="1.1") + return 0; + + if(request->header.size()!=2) + return 0; + if(request->header.count("TestHeader")==0) + return 0; + if(request->header["TestHeader"]!="test") + return 0; + + if(request->header.count("TestHeader2")==0) + return 0; + if(request->header["TestHeader2"]!="test2") + return 0; + + return 1; + } +}; + +class ClientTest : public ClientBase { +public: + ClientTest(const std::string& server_port_path) : ClientBase::ClientBase(server_port_path, 80) {} + + void connect() {} + + bool constructor_parse_test1() { + if(host!="test.org") + return 0; + if(port!=8080) + return 0; + + return 1; + } + + bool constructor_parse_test2() { + if(host!="test.org") + return 0; + if(port!=80) + return 0; + + return 1; + } + + bool parse_response_header_test() { + std::shared_ptr response(new Response()); + + stringstream ss; + ss << "HTTP/1.1 200 OK\r\n"; + ss << "TestHeader: test\r\n"; + ss << "TestHeader2:test2\r\n"; + ss << "\r\n"; + + parse_response_header(response, ss); + + if(response->http_version!="1.1") + return 0; + if(response->status_code!="200 OK") + return 0; + + if(response->header.size()!=2) + return 0; + if(response->header.count("TestHeader")==0) + return 0; + if(response->header["TestHeader"]!="test") + return 0; + + if(response->header.count("TestHeader2")==0) + return 0; + if(response->header["TestHeader2"]!="test2") + return 0; + + return 1; + } +}; + +int main(int argc, char** argv) { + ServerTest serverTest; + + if(!serverTest.parse_request_test()) { + cerr << "FAIL Server::parse_request" << endl; + return 1; + } + + ClientTest clientTest("test.org:8080"); + if(!clientTest.constructor_parse_test1()) { + cerr << "FAIL Client::Client" << endl; + return 1; + } + + ClientTest clientTest2("test.org"); + if(!clientTest2.constructor_parse_test2()) { + cerr << "FAIL Client::Client" << endl; + return 1; + } + + if(!clientTest2.parse_response_header_test()) { + cerr << "FAIL Client::parse_response_header" << endl; + return 1; + } + + return 0; +} \ No newline at end of file