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 */