• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()107 int 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