summaryrefslogtreecommitdiff
path: root/test/regress_http.c
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2018-10-27 17:21:35 +0300
committerAzat Khuzhin <a3at.mail@gmail.com>2018-10-27 17:59:11 +0300
commit26ef859aa707fda72ce530bf761d1c41a76f67b7 (patch)
treea0b46476427f451749e6a5f2615c3fe558d3ab08 /test/regress_http.c
parentd161ec3842259f2896fc9b15a1e4d5a1ed178bb2 (diff)
downloadlibevent-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.c57
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 },