char *test_Request_create() { int rc = 0; size_t nparsed = 0; bstring fake_sender = bfromcstr("FAKESENDER"); Request_init(); Request *req = Request_create(); mu_assert(req != NULL, "Failed to create parser for request."); FILE *infile = fopen("tests/and_suite/ex_httpd_tst_16", "r"); mu_assert(infile != NULL, "Failed to open test file."); bstring data = bread((bNread)fread, infile); fclose(infile); mu_assert(data != NULL, "Failed to read test file."); mu_assert(blength(data) > 0, "Nothing in that file."); Request_start(req); rc = Request_parse(req, bdata(data), blength(data), &nparsed); mu_assert(rc == 1, "It should parse."); mu_assert(nparsed > 0, "Should have parsed something."); bstring payload = Request_to_payload(req, fake_sender, 0, "", 0,conn, NULL); debug("PAYLOAD IS: %s", bdata(payload)); bdestroy(payload); payload = Request_to_tnetstring(req, fake_sender, 0, "", 0,conn, NULL); debug("TNETSTRING PAYLOAD: '%.*s'", blength(payload), bdata(payload)); mu_assert(Request_get(req, &HTTP_IF_MODIFIED_SINCE) != NULL, "Should have an if-modified-since header."); mu_assert(req->host != NULL, "Should have Host header."); mu_assert(Request_get_date(req, &HTTP_IF_MODIFIED_SINCE, RFC_822_TIME) > 0, "Wrong time from header."); mu_assert(Request_get_date(req, &HTTP_IF_UNMODIFIED_SINCE, RFC_822_TIME) == 0, "Unmodified since should be invalid."); mu_assert(Request_get_date(req, &HTTP_IF_NONE_MATCH, RFC_822_TIME) == 0, "None match shouldn't even be a date."); Request_start(req); Request_destroy(req); // test with null Request_destroy(NULL); bdestroy(payload); bdestroy(fake_sender); bdestroy(data); return NULL; }
Request *Request_create() { Request *req = calloc(sizeof(Request), 1); check_mem(req); req->parser.http_field = header_field_cb; req->parser.request_method = request_method_cb; req->parser.request_uri = uri_cb; req->parser.fragment = fragment_cb; req->parser.request_path = path_cb; req->parser.query_string = query_string_cb; req->parser.http_version = http_version_cb; req->parser.header_done = header_done_cb; req->headers = hash_create(MAX_HEADER_COUNT, (hash_comp_t)bstrcmp, bstr_hash_fun); check_mem(req->headers); hash_set_allocator(req->headers, req_alloc_hash, req_free_hash, NULL); req->parser.data = req; // for the http callbacks return req; error: Request_destroy(req); return NULL; }
void Connection_destroy(Connection *conn) { if(conn) { Request_destroy(conn->req); conn->req = NULL; IOBuf_destroy(conn->iob); IOBuf_destroy(conn->proxy_iob); h_free(conn); } }
void Connection_destroy(Connection *conn) { if(conn) { Connection_deliver_task_kill(conn); Request_destroy(conn->req); conn->req = NULL; if(conn->client) free(conn->client); IOBuf_destroy(conn->iob); IOBuf_destroy(conn->proxy_iob); free(conn); } }
char *test_Request_payloads() { glob_t test_files; bstring fake_sender = bfromcstr("FAKESENDER"); Request *req = Request_create(); //Connection *conn=Connection_create(NULL,0,1,""); size_t nparsed = 0; unsigned int i = 0; int rc = glob("tests/and_suite/*", 0, NULL, &test_files); mu_assert(rc == 0, "Failed to glob file sin tests/and_suite/*"); FILE *test_cases = fopen("tests/request_payloads.txt", "w"); mu_assert(test_cases != NULL, "Failed to create the tests/request_payloads.txt file."); for(i = 0; i < test_files.gl_pathc; i++) { nparsed = 0; FILE *infile = fopen(test_files.gl_pathv[i], "r"); mu_assert(infile != NULL, "Failed to open test file."); bstring data = bread((bNread)fread, infile); fclose(infile); mu_assert(data != NULL, "Failed to read test file."); Request_start(req); rc = Request_parse(req, bdata(data), blength(data), &nparsed); if(rc == 1) { mu_assert(nparsed > 0, "Should have parsed something."); // TODO: fix this up so that we never get a null for path if(req->path == NULL) req->path = bfromcstr("/"); bstring payload = Request_to_payload(req, fake_sender, 0, "", 0,conn, NULL); bconchar(payload, '\n'); fwrite(payload->data, blength(payload), 1, test_cases); bdestroy(payload); payload = Request_to_tnetstring(req, fake_sender, 0, "", 0,conn, NULL); debug("TNETSTRING PAYLOAD: '%.*s'", blength(payload), bdata(payload)); bconchar(payload, '\n'); fwrite(payload->data, blength(payload), 1, test_cases); bdestroy(payload); } bdestroy(data); } globfree(&test_files); fclose(test_cases); bdestroy(fake_sender); Request_destroy(req); return NULL; }
char *test_Multiple_Header_Request() { int rc = 0; size_t nparsed = 0; Request_init(); Request *req = Request_create(); mu_assert(req != NULL, "Failed to create parser for request."); FILE *infile = fopen("tests/and_suite/ex_httpd_tst_21", "r"); mu_assert(infile != NULL, "Failed to open test file."); bstring data = bread((bNread)fread, infile); fclose(infile); mu_assert(data != NULL, "Failed to read test file."); mu_assert(blength(data) > 0, "Nothing in that file."); Request_start(req); rc = Request_parse(req, bdata(data), blength(data), &nparsed); mu_assert(rc == 1, "It should parse."); mu_assert(nparsed > 0, "Should have parsed something."); mu_assert(Request_get(req, &COOKIE_HEADER) != NULL, "Should have an cookie header."); bstring payload = Request_to_payload(req, &JSON_METHOD, 0, "", 0,conn, NULL); debug("PAYLOAD IS: %s", bdata(payload)); mu_assert(bstrcmp(payload, &EXPECTED_COOKIE_HEADER) == 0, "Expected header not in correct format."); Request_destroy(req); bdestroy(payload); bdestroy(data); return NULL; }