diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2018-10-27 17:21:35 +0300 |
---|---|---|
committer | Azat Khuzhin <a3at.mail@gmail.com> | 2018-10-27 17:59:11 +0300 |
commit | 26ef859aa707fda72ce530bf761d1c41a76f67b7 (patch) | |
tree | a0b46476427f451749e6a5f2615c3fe558d3ab08 /test/regress_http.c | |
parent | d161ec3842259f2896fc9b15a1e4d5a1ed178bb2 (diff) | |
download | libevent-26ef859aa707fda72ce530bf761d1c41a76f67b7.tar.gz |
Add evhttp_parse_query_str_flags()
And a set of flags:
- EVHTTP_URI_QUERY_LAST
- EVHTTP_URI_QUERY_NONCONFORMANT
Fixes: #15
Diffstat (limited to 'test/regress_http.c')
-rw-r--r-- | test/regress_http.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/regress_http.c b/test/regress_http.c index a1bd4a8a..46ecdc21 100644 --- a/test/regress_http.c +++ b/test/regress_http.c @@ -2520,6 +2520,62 @@ http_parse_query_str_test(void *ptr) end: evhttp_clear_headers(&headers); } +static void +http_parse_query_str_flags_test(void *ptr) +{ + struct evkeyvalq headers; + int r; + + TAILQ_INIT(&headers); + + /** ~EVHTTP_URI_QUERY_LAST_VAL */ + r = evhttp_parse_query_str_flags("q=test&q=test2", &headers, 0); + tt_want(validate_header(&headers, "q", "test") == 0); + tt_int_op(r, ==, 0); + evhttp_clear_headers(&headers); + + /** EVHTTP_URI_QUERY_LAST_VAL */ + r = evhttp_parse_query_str_flags("q=test&q=test2", &headers, EVHTTP_URI_QUERY_LAST_VAL); + tt_want(validate_header(&headers, "q", "test2") == 0); + tt_int_op(r, ==, 0); + evhttp_clear_headers(&headers); + + /** ~EVHTTP_URI_QUERY_NONCONFORMANT */ + r = evhttp_parse_query_str_flags("q=test&q2", &headers, 0); + tt_int_op(r, ==, -1); + evhttp_clear_headers(&headers); + + r = evhttp_parse_query_str_flags("q=test&&q2=test2", &headers, 0); + tt_int_op(r, ==, -1); + evhttp_clear_headers(&headers); + + r = evhttp_parse_query_str_flags("q=test&=1&q2=test2", &headers, 0); + tt_int_op(r, ==, -1); + evhttp_clear_headers(&headers); + + /** EVHTTP_URI_QUERY_NONCONFORMANT */ + r = evhttp_parse_query_str_flags("q=test&q2", &headers, EVHTTP_URI_QUERY_NONCONFORMANT); + tt_want(validate_header(&headers, "q", "test") == 0); + tt_want(validate_header(&headers, "q2", "") == 0); + tt_int_op(r, ==, 0); + evhttp_clear_headers(&headers); + + r = evhttp_parse_query_str_flags("q=test&&q2=test2", &headers, EVHTTP_URI_QUERY_NONCONFORMANT); + tt_want(validate_header(&headers, "q", "test") == 0); + tt_want(validate_header(&headers, "q2", "test2") == 0); + tt_int_op(r, ==, 0); + evhttp_clear_headers(&headers); + + r = evhttp_parse_query_str_flags("q=test&=1&q2=test2", &headers, EVHTTP_URI_QUERY_NONCONFORMANT); + tt_want(validate_header(&headers, "q", "test") == 0); + tt_want(validate_header(&headers, "q2", "test2") == 0); + tt_int_op(r, ==, 0); + evhttp_clear_headers(&headers); + + +end: + evhttp_clear_headers(&headers); +} static void http_parse_uri_test(void *ptr) @@ -4826,6 +4882,7 @@ struct testcase_t http_testcases[] = { { "bad_headers", http_bad_header_test, 0, NULL, NULL }, { "parse_query", http_parse_query_test, 0, NULL, NULL }, { "parse_query_str", http_parse_query_str_test, 0, NULL, NULL }, + { "parse_query_str_flags", http_parse_query_str_flags_test, 0, NULL, NULL }, { "parse_uri", http_parse_uri_test, 0, NULL, NULL }, { "parse_uri_nc", http_parse_uri_test, 0, &basic_setup, (void*)"nc" }, { "uriencode", http_uriencode_test, 0, NULL, NULL }, |