/ tests / test-http-req.cpp
test-http-req.cpp
 1  #include <cassert>
 2  #include "HTTP.h"
 3  
 4  using namespace i2p::http;
 5  
 6  int main() {
 7    HTTPReq *req;
 8    int ret = 0, len = 0;
 9    const char *buf;
10  
11    /* test: parsing request with body */
12    buf =
13      "GET / HTTP/1.0\r\n"
14      "User-Agent: curl/7.26.0\r\n"
15      "Host: inr.i2p\r\n"
16      "Accept: */*\r\n"
17      "\r\n"
18      "test";
19    len = strlen(buf);
20    req = new HTTPReq;
21    assert((ret = req->parse(buf, len)) == len - 4);
22    assert(req->version == "HTTP/1.0");
23    assert(req->method == "GET");
24    assert(req->uri == "/");
25    assert(req->GetNumHeaders () == 3);
26    assert(req->GetNumHeaders("Host") == 1);
27    assert(req->GetNumHeaders("Accept") == 1);
28    assert(req->GetNumHeaders("User-Agent") == 1);
29    assert(req->GetHeader("Host")  == "inr.i2p");
30    assert(req->GetHeader("Accept") == "*/*");
31    assert(req->GetHeader("User-Agent")  == "curl/7.26.0");
32    delete req;
33  
34    /* test: parsing request without body */
35    buf =
36      "GET / HTTP/1.0\r\n"
37      "\r\n";
38    len = strlen(buf);
39    req = new HTTPReq;
40    assert((ret = req->parse(buf, len)) == len);
41    assert(req->version == "HTTP/1.0");
42    assert(req->method == "GET");
43    assert(req->uri == "/");
44    assert(req->GetNumHeaders () == 0);
45    delete req;
46  
47    /* test: parsing request without body */
48    buf =
49      "GET / HTTP/1.1\r\n"
50      "\r\n";
51    len = strlen(buf);
52    req = new HTTPReq;
53    assert((ret = req->parse(buf, len)) > 0);
54    delete req;
55  
56    /* test: parsing incomplete request */
57    buf =
58      "GET / HTTP/1.0\r\n"
59      "";
60    len = strlen(buf);
61    req = new HTTPReq;
62    assert((ret = req->parse(buf, len)) == 0); /* request not completed */
63    delete req;
64  
65    /* test: parsing slightly malformed request */
66    buf =
67      "GET http://inr.i2p HTTP/1.1\r\n"
68      "Host:  stats.i2p\r\n"
69      "Accept-Encoding: \r\n"
70      "Accept: */*\r\n"
71      "\r\n";
72    len = strlen(buf);
73    req = new HTTPReq;
74    assert((ret = req->parse(buf, len)) == len); /* no host header */
75    assert(req->method == "GET");
76    assert(req->uri == "http://inr.i2p");
77    assert(req->GetNumHeaders () == 3);
78    assert(req->GetNumHeaders("Host") == 1);
79    assert(req->GetNumHeaders("Accept") == 1);
80    assert(req->GetNumHeaders("Accept-Encoding") == 1);
81    assert(req->GetHeader("Host") == "stats.i2p");
82    assert(req->GetHeader("Accept") == "*/*");
83    assert(req->GetHeader("Accept-Encoding") == "");
84    delete req;
85  
86    return 0;
87  }
88  
89  /* vim: expandtab:ts=2 */