This commit adds tests for a request and the implementation. The first line of a request should now be decoded correctlymaster
parent
66d4702297
commit
0e2b9dae2b
4 changed files with 224 additions and 11 deletions
@ -0,0 +1,162 @@ |
|||||||
|
#include "munit/munit.h" |
||||||
|
#include "../src/request.c" |
||||||
|
|
||||||
|
typedef struct { |
||||||
|
char *fullLine; |
||||||
|
char *method; |
||||||
|
char *host; |
||||||
|
char *protocol; |
||||||
|
double version; |
||||||
|
char *path; |
||||||
|
char *queryString; |
||||||
|
} firstLine; |
||||||
|
|
||||||
|
|
||||||
|
static firstLine line1Examples[] = { |
||||||
|
//Full Line, Method Host Protocol Version Path
|
||||||
|
{ "GET /search?q=test HTTP/2", "GET", "", "", 2, "/search", "?q=test"}, |
||||||
|
{ "POST http://example.com/test HTTP/1.1", "POST", "example.com", "http", 1.1, "/test", "" }, |
||||||
|
{ "POST https://example.com/test/test2/test3 HTTP/1.1", "POST", "example.com", "https", 1.1, "/test/test2/test3", ""}, |
||||||
|
{ NULL, NULL, NULL, NULL, 0, NULL, NULL } |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MunitResult testFirstLineProtocols(const MunitParameter params[], |
||||||
|
void* user_data_or_fixture){ |
||||||
|
Request *req; |
||||||
|
for ( firstLine *line = line1Examples; line->fullLine != NULL; line++ ){ |
||||||
|
req = newRequest(); |
||||||
|
requestFirstLine( req, line->fullLine ); |
||||||
|
munit_assert_string_equal( req->protocol, line->protocol ); |
||||||
|
free( req ); |
||||||
|
} |
||||||
|
return MUNIT_OK; |
||||||
|
} |
||||||
|
|
||||||
|
MunitResult testFirstLineMethod(const MunitParameter params[], |
||||||
|
void* user_data_or_fixture){ |
||||||
|
Request *req; |
||||||
|
for ( firstLine *line = line1Examples; line->fullLine != NULL; line++ ){ |
||||||
|
req = newRequest(); |
||||||
|
requestFirstLine( req, line->fullLine ); |
||||||
|
munit_assert_string_equal( req->method, line->method ); |
||||||
|
free( req ); |
||||||
|
} |
||||||
|
return MUNIT_OK; |
||||||
|
} |
||||||
|
|
||||||
|
MunitResult testFirstLineHosts(const MunitParameter params[], |
||||||
|
void* user_data_or_fixture){ |
||||||
|
Request *req; |
||||||
|
for ( firstLine *line = line1Examples; line->fullLine != NULL; line++ ){ |
||||||
|
req = newRequest(); |
||||||
|
requestFirstLine( req, line->fullLine ); |
||||||
|
munit_assert_string_equal( req->host, line->host ); |
||||||
|
free( req ); |
||||||
|
} |
||||||
|
return MUNIT_OK; |
||||||
|
} |
||||||
|
|
||||||
|
MunitResult testFirstLinePaths(const MunitParameter params[], |
||||||
|
void* user_data_or_fixture){ |
||||||
|
Request *req; |
||||||
|
for ( firstLine *line = line1Examples; line->fullLine != NULL; line++ ){ |
||||||
|
req = newRequest(); |
||||||
|
requestFirstLine( req, line->fullLine ); |
||||||
|
munit_assert_string_equal( req->path, line->path ); |
||||||
|
free( req ); |
||||||
|
} |
||||||
|
return MUNIT_OK; |
||||||
|
} |
||||||
|
|
||||||
|
MunitResult testFirstLineVersions(const MunitParameter params[], |
||||||
|
void* user_data_or_fixture){ |
||||||
|
Request *req; |
||||||
|
for ( firstLine *line = line1Examples; line->fullLine != NULL; line++ ){ |
||||||
|
req = newRequest(); |
||||||
|
requestFirstLine( req, line->fullLine ); |
||||||
|
munit_assert_float( req->version, ==, line->version ); |
||||||
|
free( req ); |
||||||
|
} |
||||||
|
return MUNIT_OK; |
||||||
|
} |
||||||
|
|
||||||
|
MunitResult testFirstLineQueryString(const MunitParameter params[], |
||||||
|
void* user_data_or_fixture){ |
||||||
|
Request *req; |
||||||
|
for ( firstLine *line = line1Examples; line->fullLine != NULL; line++ ){ |
||||||
|
req = newRequest(); |
||||||
|
requestFirstLine( req, line->fullLine ); |
||||||
|
munit_assert_string_equal( req->queryString, line->queryString ); |
||||||
|
free( req ); |
||||||
|
} |
||||||
|
return MUNIT_OK; |
||||||
|
} |
||||||
|
|
||||||
|
static MunitTest request_tests[] = { |
||||||
|
{ |
||||||
|
"/line1/versions", /* name */ |
||||||
|
testFirstLineVersions, /* test */ |
||||||
|
NULL, /* setup */ |
||||||
|
NULL, /* tear_down */ |
||||||
|
MUNIT_TEST_OPTION_NONE, /* options */ |
||||||
|
NULL /* parameters */ |
||||||
|
}, { |
||||||
|
"/line1/methods", /* name */ |
||||||
|
testFirstLineMethod, /* test */ |
||||||
|
NULL, /* setup */ |
||||||
|
NULL, /* tear_down */ |
||||||
|
MUNIT_TEST_OPTION_NONE, /* options */ |
||||||
|
NULL /* parameters */ |
||||||
|
},{ |
||||||
|
"/line1/protocols", /* name */ |
||||||
|
testFirstLineProtocols, /* test */ |
||||||
|
NULL, /* setup */ |
||||||
|
NULL, /* tear_down */ |
||||||
|
MUNIT_TEST_OPTION_NONE, /* options */ |
||||||
|
NULL /* parameters */ |
||||||
|
},{ |
||||||
|
"/line1/hosts", /* name */ |
||||||
|
testFirstLineHosts, /* test */ |
||||||
|
NULL, /* setup */ |
||||||
|
NULL, /* tear_down */ |
||||||
|
MUNIT_TEST_OPTION_NONE, /* options */ |
||||||
|
NULL /* parameters */ |
||||||
|
},{ |
||||||
|
"/line1/paths", /* name */ |
||||||
|
testFirstLinePaths, /* test */ |
||||||
|
NULL, /* setup */ |
||||||
|
NULL, /* tear_down */ |
||||||
|
MUNIT_TEST_OPTION_NONE, /* options */ |
||||||
|
NULL /* parameters */ |
||||||
|
},{ |
||||||
|
"/line1/queryStrings", /* name */ |
||||||
|
testFirstLineQueryString, /* test */ |
||||||
|
NULL, /* setup */ |
||||||
|
NULL, /* tear_down */ |
||||||
|
MUNIT_TEST_OPTION_NONE, /* options */ |
||||||
|
NULL /* parameters */ |
||||||
|
}, |
||||||
|
/* Mark the end of the array with an entry where the test
|
||||||
|
* function is NULL */ |
||||||
|
{ NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL } |
||||||
|
}; |
||||||
|
|
||||||
|
MunitSuite request_test_suite = { |
||||||
|
"/request", /* name */ |
||||||
|
request_tests, /* tests */ |
||||||
|
NULL, /* suites */ |
||||||
|
1, /* iterations */ |
||||||
|
MUNIT_SUITE_OPTION_NONE /* options */ |
||||||
|
}; |
||||||
|
|
||||||
|
#ifndef MAINTEST |
||||||
|
#define MAINTEST |
||||||
|
|
||||||
|
int main (int argc, char* argv[]) { |
||||||
|
return munit_suite_main(&request_test_suite, NULL, argc, argv); |
||||||
|
} |
||||||
|
|
||||||
|
#endif /* ifndef MAINTEST */ |
Loading…
Reference in new issue