1 #include "server_http.hpp" 2 #include "client_http.hpp" 3 #include <iostream> 4 #include <cassert> 5 6 using namespace std; 7 using namespace SimpleWeb; 8 9 class ServerTest : public ServerBase<HTTP> { 10 public: ServerTest()11 ServerTest() : ServerBase<HTTP>::ServerBase(8080) {} 12 accept()13 void accept() {} 14 parse_request_test()15 void parse_request_test() { 16 HTTP socket(*io_service); 17 std::shared_ptr<Request> request(new Request(socket)); 18 19 std::ostream stream(&request->content.streambuf); 20 stream << "GET /test/ HTTP/1.1\r\n"; 21 stream << "TestHeader: test\r\n"; 22 stream << "TestHeader2:test2\r\n"; 23 stream << "TestHeader3:test3a\r\n"; 24 stream << "TestHeader3:test3b\r\n"; 25 stream << "\r\n"; 26 27 assert(parse_request(request)); 28 29 assert(request->method=="GET"); 30 assert(request->path=="/test/"); 31 assert(request->http_version=="1.1"); 32 33 assert(request->header.size()==4); 34 auto header_it=request->header.find("TestHeader"); 35 assert(header_it!=request->header.end() && header_it->second=="test"); 36 header_it=request->header.find("TestHeader2"); 37 assert(header_it!=request->header.end() && header_it->second=="test2"); 38 39 header_it=request->header.find("testheader"); 40 assert(header_it!=request->header.end() && header_it->second=="test"); 41 header_it=request->header.find("testheader2"); 42 assert(header_it!=request->header.end() && header_it->second=="test2"); 43 44 auto range=request->header.equal_range("testheader3"); 45 auto first=range.first; 46 auto second=first; 47 ++second; 48 assert(range.first!=request->header.end() && range.second!=request->header.end() && 49 ((first->second=="test3a" && second->second=="test3b") || 50 (first->second=="test3b" && second->second=="test3a"))); 51 } 52 }; 53 54 class ClientTest : public ClientBase<HTTP> { 55 public: ClientTest(const std::string & server_port_path)56 ClientTest(const std::string& server_port_path) : ClientBase<HTTP>::ClientBase(server_port_path, 80) {} 57 connect()58 void connect() {} 59 constructor_parse_test1()60 void constructor_parse_test1() { 61 assert(host=="test.org"); 62 assert(port==8080); 63 } 64 constructor_parse_test2()65 void constructor_parse_test2() { 66 assert(host=="test.org"); 67 assert(port==80); 68 } 69 parse_response_header_test()70 void parse_response_header_test() { 71 std::shared_ptr<Response> response(new Response()); 72 73 ostream stream(&response->content_buffer); 74 stream << "HTTP/1.1 200 OK\r\n"; 75 stream << "TestHeader: test\r\n"; 76 stream << "TestHeader2:test2\r\n"; 77 stream << "TestHeader3:test3a\r\n"; 78 stream << "TestHeader3:test3b\r\n"; 79 stream << "\r\n"; 80 81 parse_response_header(response); 82 83 assert(response->http_version=="1.1"); 84 assert(response->status_code=="200 OK"); 85 86 assert(response->header.size()==4); 87 auto header_it=response->header.find("TestHeader"); 88 assert(header_it!=response->header.end() && header_it->second=="test"); 89 header_it=response->header.find("TestHeader2"); 90 assert(header_it!=response->header.end() && header_it->second=="test2"); 91 92 header_it=response->header.find("testheader"); 93 assert(header_it!=response->header.end() && header_it->second=="test"); 94 header_it=response->header.find("testheader2"); 95 assert(header_it!=response->header.end() && header_it->second=="test2"); 96 97 auto range=response->header.equal_range("testheader3"); 98 auto first=range.first; 99 auto second=first; 100 ++second; 101 assert(range.first!=response->header.end() && range.second!=response->header.end() && 102 ((first->second=="test3a" && second->second=="test3b") || 103 (first->second=="test3b" && second->second=="test3a"))); 104 } 105 }; 106 main()107int main() { 108 ServerTest serverTest; 109 serverTest.io_service=std::make_shared<boost::asio::io_service>(); 110 111 serverTest.parse_request_test(); 112 113 ClientTest clientTest("test.org:8080"); 114 clientTest.constructor_parse_test1(); 115 116 ClientTest clientTest2("test.org"); 117 clientTest2.constructor_parse_test2(); 118 119 clientTest2.parse_response_header_test(); 120 } 121