test-http-url.c revision 5394bed8aaef2a6c1c870a34a23a7824e1f370bb
5e0ce63bb65db34d7f48b34bbb5545fa791781c4Timo Sirainen/* Copyright (c) 2009-2012 Dovecot authors, see the included COPYING file */
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen const char *url;
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen/* Valid HTTP URL tests */
cd466fe7b84b0223735a6469c7f7bc225f65996dTimo Sirainenstatic struct valid_http_url_test valid_url_tests[] = {
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen /* Generic tests */
d56384d5226c8860079d0d0b08b83404e8c42986Timo Sirainen .url = "http://www.%65%78%61%6d%70%6c%65.com",
a3ea111cfdbfd4f32baeb0bd7f1d72568c60a023Timo Sirainen "?question=What%20are%20you%20doing%3f&answer=Nothing.",
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .enc_query = "question=What%20are%20you%20doing%3f&answer=Nothing." }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url = "http://www.example.com/#Status%20of%20development",
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen /* RFC 3986, Section 5.4. Reference Resolution Examples
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen * Within a representation with a well defined base URI of
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen * a relative reference is transformed to its target URI as follows.
a3ea111cfdbfd4f32baeb0bd7f1d72568c60a023Timo Sirainen * 5.4.1. Normal Examples
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g" }
a29a5b7520f7b8d6cdaf97e66d184b6a9e4f4ecfTimo Sirainen },{ // "./g" = "http://a/b/c/g"
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen },{ // "g/" = "http://a/b/c/g/"
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g/" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen },{ // "/g" = "http://a/g"
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_parsed = { .host_name = "a", .path = "/g" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen },{ // "//g" = "http://g"
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "y" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen },{ // "g?y" = "http://a/b/c/g?y"
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_query = "y" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen },{ // "#s" = "http://a/b/c/d;p?q#s"
6defed8fef1781cb1d34353784232e87c19f173bTimo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q",
6defed8fef1781cb1d34353784232e87c19f173bTimo Sirainen },{ // "g#s" = "http://a/b/c/g#s"
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
fc34e919907845ce01ad04aa8213033596a1ae70Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_fragment = "s" }
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen },{ // "g?y#s" = "http://a/b/c/g?y#s"
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_query = "y",
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen },{ // ";x" = "http://a/b/c/;x"
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
0c9754d1cf2ba0ff7873b6baa614ca10051a08fdTimo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/;x" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen },{ // "g;x" = "http://a/b/c/g;x"
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g;x" }
9453e8d75cfd8fab2232cf772e9b120f308fb3eeTimo Sirainen },{ // "g;x?y#s" = "http://a/b/c/g;x?y#s"
9453e8d75cfd8fab2232cf772e9b120f308fb3eeTimo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/g;x", .enc_query = "y",
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen .url_parsed = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" }
33ca6b017b6ebbd048651b5e3d16915001dbc291Timo Sirainen .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
},{ // "./" = "http://a/b/c/"
},{ // ".." = "http://a/b/"
},{ // "../" = "http://a/b/"
},{ // "../g" = "http://a/b/g"
},{ // "../.." = "http://a/"
},{ // "../../" = "http://a/"
},{ // "../../g" = "http://a/g"
},{ // "../../../g" = "http://a/g"
},{ // "../../../../g" = "http://a/g"
},{ // "/./g" = "http://a/g"
},{ // "/../g" = "http://a/g"
},{ // "g." = "http://a/b/c/g."
},{ // ".g" = "http://a/b/c/.g"
},{ // "g.." = "http://a/b/c/g.."
},{ // "..g" = "http://a/b/c/..g"
},{ // "./../g" = "http://a/b/g"
},{ // "./g/." = "http://a/b/c/g/"
},{ // "g/./h" = "http://a/b/c/g/h"
},{ // "g/../h" = "http://a/b/c/h"
},{ // "g;x=1/./y" = "http://a/b/c/g;x=1/y"
},{ // "g;x=1/../y" = "http://a/b/c/y"
},{ // "g?y/./x" = "http://a/b/c/g?y/./x"
},{ // "g?y/../x" = "http://a/b/c/g?y/../x"
},{ // "g#s/./x" = "http://a/b/c/g#s/./x"
.url_parsed =
},{ // "g#s/../x" = "http://a/b/c/g#s/../x"
.url_parsed =
static void test_http_url_valid(void)
test_end();
} T_END;
struct invalid_http_url_test {
const char *url;
#ifdef HAVE_IPV6
static void test_http_url_invalid(void)
test_end();
} T_END;
static const char *parse_create_url_tests[] = {
#ifdef HAVE_IPV6
"http://www.example.com/network.html#IMAP%20Server",
static void test_http_url_parse_create(void)
if (http_url_parse
test_end();
} T_END;
int main(void)
static void (*test_functions[])(void) = {