annotate src/lib-http/test-http-url.c @ 22656:1789bf2a1e01

director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0 The reset command would just hang in that case. doveadm would never have sent this, so this is just an extra sanity check.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 05 Nov 2017 23:51:56 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
1 /* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
2
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
3 #include "lib.h"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
4 #include "net.h"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
5 #include "http-url.h"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
6 #include "test-common.h"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
7
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
8 struct valid_http_url_test {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
9 const char *url;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
10 enum http_url_parse_flags flags;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
11 struct http_url url_base;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
12
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
13 struct http_url url_parsed;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
14 };
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
15
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
16 /* Valid HTTP URL tests */
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
17 static struct valid_http_url_test valid_url_tests[] = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
18 /* Generic tests */
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
19 {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
20 .url = "http://localhost",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
21 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
22 .host_name = "localhost" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
23 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
24 .url = "http://www.%65%78%61%6d%70%6c%65.com",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
25 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
26 .host_name = "www.example.com" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
27 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
28 .url = "http://www.dovecot.org:8080",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
29 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
30 .host_name = "www.dovecot.org",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
31 .port = 8080, .have_port = TRUE }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
32 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
33 .url = "http://127.0.0.1",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
34 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
35 .host_name = "127.0.0.1",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
36 .have_host_ip = TRUE }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
37 #ifdef HAVE_IPV6
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
38 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
39 .url = "http://[::1]",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
40 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
41 .host_name = "[::1]",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
42 .have_host_ip = TRUE }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
43 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
44 .url = "http://[::1]:8080",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
45 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
46 .host_name = "[::1]",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
47 .have_host_ip = TRUE,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
48 .port = 8080, .have_port = TRUE }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
49 #endif
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
50 },{
16761
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
51 .url = "http://user@api.dovecot.org",
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
52 .flags = HTTP_URL_ALLOW_USERINFO_PART,
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
53 .url_parsed = {
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
54 .host_name = "api.dovecot.org", .user = "user" }
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
55 },{
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
56 .url = "http://userid:secret@api.dovecot.org",
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
57 .flags = HTTP_URL_ALLOW_USERINFO_PART,
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
58 .url_parsed = {
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
59 .host_name = "api.dovecot.org",
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
60 .user = "userid", .password = "secret" }
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
61 },{
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
62 .url = "http://su%3auserid:secret@api.dovecot.org",
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
63 .flags = HTTP_URL_ALLOW_USERINFO_PART,
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
64 .url_parsed = {
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
65 .host_name = "api.dovecot.org",
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
66 .user = "su:userid", .password = "secret" }
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
67 },{
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
68 .url = "http://www.example.com/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
69 "?question=What%20are%20you%20doing%3f&answer=Nothing.",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
70 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
71 .path = "/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
72 .host_name = "www.example.com",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
73 .enc_query = "question=What%20are%20you%20doing%3f&answer=Nothing." }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
74 },{
17560
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
75 /* These next 2 URLs don't follow the recommendations in
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
76 http://tools.ietf.org/html/rfc1034#section-3.5 and
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
77 http://tools.ietf.org/html/rfc3696
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
78 However they satisfy the grammar in
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
79 http://tools.ietf.org/html/rfc1123#section-2 and
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
80 http://tools.ietf.org/html/rfc952
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
81 so we should parse them.
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
82 */
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
83 .url = "http://256.0.0.1/that/reverts/to/DNS",
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
84 .url_parsed = {
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
85 .path = "/that/reverts/to/DNS",
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
86 .host_name = "256.0.0.1"
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
87 }
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
88 },{
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
89 .url = "http://127.0.0.284/this/also/reverts/to/DNS",
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
90 .url_parsed = {
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
91 .path = "/this/also/reverts/to/DNS",
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
92 .host_name = "127.0.0.284"
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
93 }
a39ccb12c14f lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody <phil@dovecot.fi>
parents: 17558
diff changeset
94 },{
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
95 .url = "http://www.example.com/#Status%20of%20development",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
96 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
97 .url_parsed = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
98 .path = "/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
99 .host_name = "www.example.com",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
100 .enc_fragment = "Status%20of%20development" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
101
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
102
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
103 /* RFC 3986, Section 5.4. Reference Resolution Examples
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
104 *
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
105 * Within a representation with a well defined base URI of
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
106 *
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
107 * http://a/b/c/d;p?q
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
108 *
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
109 * a relative reference is transformed to its target URI as follows.
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
110 *
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
111 * 5.4.1. Normal Examples
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
112 */
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
113 },{ // "g" = "http://a/b/c/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
114 .url = "g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
115 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
116 .url_parsed = { .host_name = "a", .path = "/b/c/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
117 },{ // "./g" = "http://a/b/c/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
118 .url = "./g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
119 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
120 .url_parsed = { .host_name = "a", .path = "/b/c/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
121 },{ // "g/" = "http://a/b/c/g/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
122 .url = "g/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
123 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
124 .url_parsed = { .host_name = "a", .path = "/b/c/g/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
125 },{ // "/g" = "http://a/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
126 .url = "/g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
127 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
128 .url_parsed = { .host_name = "a", .path = "/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
129 },{ // "//g" = "http://g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
130 .url = "//g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
131 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
132 .url_parsed = { .host_name = "g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
133 },{ // "?y" = "http://a/b/c/d;p?y"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
134 .url = "?y",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
135 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
136 .url_parsed = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "y" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
137 },{ // "g?y" = "http://a/b/c/g?y"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
138 .url = "g?y",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
139 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
140 .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_query = "y" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
141 },{ // "#s" = "http://a/b/c/d;p?q#s"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
142 .url = "#s",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
143 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
144 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
145 .url_parsed = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
146 .enc_fragment = "s" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
147 },{ // "g#s" = "http://a/b/c/g#s"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
148 .url = "g#s",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
149 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
150 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
151 .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_fragment = "s" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
152
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
153 },{ // "g?y#s" = "http://a/b/c/g?y#s"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
154 .url = "g?y#s",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
155 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
156 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
157 .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_query = "y",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
158 .enc_fragment = "s" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
159 },{ // ";x" = "http://a/b/c/;x"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
160 .url = ";x",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
161 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
162 .url_parsed = { .host_name = "a", .path = "/b/c/;x" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
163 },{ // "g;x" = "http://a/b/c/g;x"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
164 .url = "g;x",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
165 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
166 .url_parsed = { .host_name = "a", .path = "/b/c/g;x" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
167
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
168 },{ // "g;x?y#s" = "http://a/b/c/g;x?y#s"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
169 .url = "g;x?y#s",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
170 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
171 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
172 .url_parsed = { .host_name = "a", .path = "/b/c/g;x", .enc_query = "y",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
173 .enc_fragment = "s" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
174 },{ // "" = "http://a/b/c/d;p?q"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
175 .url = "",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
176 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
177 .url_parsed = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
178 },{ // "." = "http://a/b/c/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
179 .url = ".",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
180 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
181 .url_parsed = { .host_name = "a", .path = "/b/c/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
182 },{ // "./" = "http://a/b/c/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
183 .url = "./",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
184 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
185 .url_parsed = { .host_name = "a", .path = "/b/c/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
186 },{ // ".." = "http://a/b/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
187 .url = "..",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
188 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
189 .url_parsed = { .host_name = "a", .path = "/b/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
190 },{ // "../" = "http://a/b/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
191 .url = "../",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
192 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
193 .url_parsed = { .host_name = "a", .path = "/b/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
194 },{ // "../g" = "http://a/b/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
195 .url = "../g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
196 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
197 .url_parsed = { .host_name = "a", .path = "/b/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
198 },{ // "../.." = "http://a/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
199 .url = "../..",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
200 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
201 .url_parsed = { .host_name = "a", .path = "/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
202 },{ // "../../" = "http://a/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
203 .url = "../../",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
204 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
205 .url_parsed = { .host_name = "a", .path = "/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
206 },{ // "../../g" = "http://a/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
207 .url = "../../g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
208 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
209 .url_parsed = { .host_name = "a", .path = "/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
210
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
211 /* 5.4.2. Abnormal Examples
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
212 */
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
213 },{ // "../../../g" = "http://a/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
214 .url = "../../../g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
215 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
216 .url_parsed = { .host_name = "a", .path = "/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
217 },{ // "../../../../g" = "http://a/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
218 .url = "../../../../g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
219 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
220 .url_parsed = { .host_name = "a", .path = "/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
221 },{ // "/./g" = "http://a/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
222 .url = "/./g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
223 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
224 .url_parsed = { .host_name = "a", .path = "/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
225 },{ // "/../g" = "http://a/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
226 .url = "/../g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
227 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
228 .url_parsed = { .host_name = "a", .path = "/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
229 },{ // "g." = "http://a/b/c/g."
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
230 .url = "g.",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
231 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
232 .url_parsed = { .host_name = "a", .path = "/b/c/g." }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
233 },{ // ".g" = "http://a/b/c/.g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
234 .url = ".g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
235 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
236 .url_parsed = { .host_name = "a", .path = "/b/c/.g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
237 },{ // "g.." = "http://a/b/c/g.."
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
238 .url = "g..",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
239 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
240 .url_parsed = { .host_name = "a", .path = "/b/c/g.." }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
241 },{ // "..g" = "http://a/b/c/..g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
242 .url = "..g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
243 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
244 .url_parsed = { .host_name = "a", .path = "/b/c/..g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
245 },{ // "./../g" = "http://a/b/g"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
246 .url = "./../g",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
247 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
248 .url_parsed = { .host_name = "a", .path = "/b/g" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
249 },{ // "./g/." = "http://a/b/c/g/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
250 .url = "./g/.",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
251 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
252 .url_parsed = { .host_name = "a", .path = "/b/c/g/" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
253 },{ // "g/./h" = "http://a/b/c/g/h"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
254 .url = "g/./h",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
255 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
256 .url_parsed = { .host_name = "a", .path = "/b/c/g/h" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
257 },{ // "g/../h" = "http://a/b/c/h"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
258 .url = "g/../h",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
259 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
260 .url_parsed = { .host_name = "a", .path = "/b/c/h" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
261 },{ // "g;x=1/./y" = "http://a/b/c/g;x=1/y"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
262 .url = "g;x=1/./y",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
263 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
264 .url_parsed = { .host_name = "a", .path = "/b/c/g;x=1/y" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
265 },{ // "g;x=1/../y" = "http://a/b/c/y"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
266 .url = "g;x=1/../y",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
267 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
268 .url_parsed = { .host_name = "a", .path = "/b/c/y" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
269 },{ // "g?y/./x" = "http://a/b/c/g?y/./x"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
270 .url = "g?y/./x",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
271 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
272 .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_query = "y/./x" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
273 },{ // "g?y/../x" = "http://a/b/c/g?y/../x"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
274 .url = "g?y/../x",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
275 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
276 .url_parsed = { .host_name = "a", .path = "/b/c/g", .enc_query = "y/../x" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
277 },{ // "g#s/./x" = "http://a/b/c/g#s/./x"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
278 .url = "g#s/./x",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
279 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
280 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
281 .url_parsed =
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
282 { .host_name = "a", .path = "/b/c/g", .enc_fragment = "s/./x" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
283 },{ // "g#s/../x" = "http://a/b/c/g#s/../x"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
284 .url = "g#s/../x",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
285 .flags = HTTP_URL_ALLOW_FRAGMENT_PART,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
286 .url_base = { .host_name = "a", .path = "/b/c/d;p", .enc_query = "q" },
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
287 .url_parsed =
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
288 { .host_name = "a", .path = "/b/c/g", .enc_fragment = "s/../x" }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
289 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
290 };
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
291
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
292 static unsigned int valid_url_test_count = N_ELEMENTS(valid_url_tests);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
293
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
294 static void test_http_url_valid(void)
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
295 {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
296 unsigned int i;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
297
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
298 for (i = 0; i < valid_url_test_count; i++) T_BEGIN {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
299 const char *url = valid_url_tests[i].url;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
300 enum http_url_parse_flags flags = valid_url_tests[i].flags;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
301 struct http_url *urlt = &valid_url_tests[i].url_parsed;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
302 struct http_url *urlb = &valid_url_tests[i].url_base;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
303 struct http_url *urlp;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
304 const char *error = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
305
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
306 test_begin(t_strdup_printf("http url valid [%d]", i));
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
307
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
308 if (urlb->host_name == NULL) urlb = NULL;
15431
c9f6deb65d7b lib-http: http_url_parse() now returns the http_url allocated from given memory pool.
Timo Sirainen <tss@iki.fi>
parents: 15195
diff changeset
309 if (http_url_parse(url, urlb, flags, pool_datastack_create(), &urlp, &error) < 0)
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
310 urlp = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
311
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
312 test_out_reason(t_strdup_printf("http_url_parse(%s)",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
313 valid_url_tests[i].url), urlp != NULL, error);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
314 if (urlp != NULL) {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
315 if (urlp->host_name == NULL || urlt->host_name == NULL) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
316 test_assert(urlp->host_name == urlt->host_name);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
317 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
318 test_assert(strcmp(urlp->host_name, urlt->host_name) == 0);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
319 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
320 if (!urlp->have_port) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
321 test_assert(urlp->have_port == urlt->have_port);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
322 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
323 test_assert(urlp->have_port == urlt->have_port && urlp->port == urlt->port);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
324 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
325 if (!urlp->have_host_ip) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
326 test_assert(urlp->have_host_ip == urlt->have_host_ip);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
327 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
328 test_assert(urlp->have_host_ip == urlt->have_host_ip);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
329 }
16761
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
330 if (urlp->user == NULL || urlt->user == NULL) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
331 test_assert(urlp->user == urlt->user);
16761
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
332 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
333 test_assert(strcmp(urlp->user, urlt->user) == 0);
16761
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
334 }
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
335 if (urlp->password == NULL || urlt->password == NULL) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
336 test_assert(urlp->password == urlt->password);
16761
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
337 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
338 test_assert(strcmp(urlp->password, urlt->password) == 0);
16761
ec9eab188dd8 lib-http: Added (non-default) support for parsing user:pasword from HTTP URL.
Stephan Bosch <stephan@rename-it.nl>
parents: 15715
diff changeset
339 }
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
340 if (urlp->path == NULL || urlt->path == NULL) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
341 test_assert(urlp->path == urlt->path);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
342 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
343 test_assert(strcmp(urlp->path, urlt->path) == 0);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
344 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
345 if (urlp->enc_query == NULL || urlt->enc_query == NULL) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
346 test_assert(urlp->enc_query == urlt->enc_query);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
347 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
348 test_assert(strcmp(urlp->enc_query, urlt->enc_query) == 0);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
349 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
350 if (urlp->enc_fragment == NULL || urlt->enc_fragment == NULL) {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
351 test_assert(urlp->enc_fragment == urlt->enc_fragment);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
352 } else {
17137
ff81b3f52e8f lib-http: Fixed test-http-url not to crash with some libcs
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
353 test_assert(strcmp(urlp->enc_fragment, urlt->enc_fragment) == 0);
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
354 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
355 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
356
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
357 test_end();
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
358 } T_END;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
359 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
360
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
361 struct invalid_http_url_test {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
362 const char *url;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
363 enum http_url_parse_flags flags;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
364 struct http_url url_base;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
365 };
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
366
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
367 static struct invalid_http_url_test invalid_url_tests[] = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
368 {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
369 .url = "imap://example.com/INBOX"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
370 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
371 .url = "http:/www.example.com"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
372 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
373 .url = ""
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
374 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
375 .url = "/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
376 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
377 .url = "http://www.example.com/index.html\""
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
378 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
379 .url = "http:///dovecot.org"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
380 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
381 .url = "http://[]/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
382 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
383 .url = "http://[v08.234:232:234:234:2221]/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
384 #ifdef HAVE_IPV6
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
385 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
386 .url = "http://[1::34a:34:234::6]/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
387 #endif
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
388 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
389 .url = "http://example%a.com/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
390 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
391 .url = "http://example.com%/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
392 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
393 .url = "http://example%00.com/index.html"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
394 },{
17558
f21e0f0e42a3 lib-http: test-http-url - make port number test cases harder
Phil Carmody <phil@dovecot.fi>
parents: 17137
diff changeset
395 .url = "http://example.com:65536/index.html"
f21e0f0e42a3 lib-http: test-http-url - make port number test cases harder
Phil Carmody <phil@dovecot.fi>
parents: 17137
diff changeset
396 },{
f21e0f0e42a3 lib-http: test-http-url - make port number test cases harder
Phil Carmody <phil@dovecot.fi>
parents: 17137
diff changeset
397 .url = "http://example.com:72817/index.html"
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
398 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
399 .url = "http://example.com/settings/%00/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
400 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
401 .url = "http://example.com/settings/%0r/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
402 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
403 .url = "http://example.com/settings/misc/%/"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
404 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
405 .url = "http://example.com/?%00"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
406 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
407 .url = "http://www.example.com/network.html#IMAP_Server"
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
408 },{
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
409 .url = "http://example.com/#%00",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
410 .flags = HTTP_URL_ALLOW_FRAGMENT_PART
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
411 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
412 };
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
413
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
414 static unsigned int invalid_url_test_count = N_ELEMENTS(invalid_url_tests);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
415
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
416 static void test_http_url_invalid(void)
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
417 {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
418 unsigned int i;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
419
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
420 for (i = 0; i < invalid_url_test_count; i++) T_BEGIN {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
421 const char *url = invalid_url_tests[i].url;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
422 enum http_url_parse_flags flags = invalid_url_tests[i].flags;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
423 struct http_url *urlb = &invalid_url_tests[i].url_base;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
424 struct http_url *urlp;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
425 const char *error = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
426
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
427 if (urlb->host_name == NULL)
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
428 urlb = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
429
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
430 test_begin(t_strdup_printf("http url invalid [%d]", i));
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
431
15431
c9f6deb65d7b lib-http: http_url_parse() now returns the http_url allocated from given memory pool.
Timo Sirainen <tss@iki.fi>
parents: 15195
diff changeset
432 if (http_url_parse(url, urlb, flags,
c9f6deb65d7b lib-http: http_url_parse() now returns the http_url allocated from given memory pool.
Timo Sirainen <tss@iki.fi>
parents: 15195
diff changeset
433 pool_datastack_create(), &urlp, &error) < 0)
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
434 urlp = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
435 test_out_reason(t_strdup_printf("parse %s", url), urlp == NULL, error);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
436
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
437 test_end();
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
438 } T_END;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
439
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
440 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
441
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
442 static const char *parse_create_url_tests[] = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
443 "http://www.example.com/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
444 "http://10.0.0.1/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
445 #ifdef HAVE_IPV6
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
446 "http://[::1]/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
447 #endif
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
448 "http://www.example.com:993/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
449 "http://www.example.com/index.html",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
450 "http://www.example.com/settings/index.html",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
451 "http://ww.%23example.com/",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
452 "http://www.example.com/%23shared/news",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
453 "http://www.example.com/query.php?name=Hendrik%20Visser",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
454 "http://www.example.com/network.html#IMAP%20Server",
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
455 };
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
456
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
457 static unsigned int
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
458 parse_create_url_test_count = N_ELEMENTS(parse_create_url_tests);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
459
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
460 static void test_http_url_parse_create(void)
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
461 {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
462 unsigned int i;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
463
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
464 for (i = 0; i < parse_create_url_test_count; i++) T_BEGIN {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
465 const char *url = parse_create_url_tests[i];
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
466 struct http_url *urlp;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
467 const char *error = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
468
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
469 test_begin(t_strdup_printf("http url parse/create [%d]", i));
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
470
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
471 if (http_url_parse
15431
c9f6deb65d7b lib-http: http_url_parse() now returns the http_url allocated from given memory pool.
Timo Sirainen <tss@iki.fi>
parents: 15195
diff changeset
472 (url, NULL, HTTP_URL_ALLOW_FRAGMENT_PART,
c9f6deb65d7b lib-http: http_url_parse() now returns the http_url allocated from given memory pool.
Timo Sirainen <tss@iki.fi>
parents: 15195
diff changeset
473 pool_datastack_create(), &urlp, &error) < 0)
15195
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
474 urlp = NULL;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
475 test_out_reason(t_strdup_printf("parse %s", url), urlp != NULL, error);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
476 if (urlp != NULL) {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
477 const char *urlnew = http_url_create(urlp);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
478 test_out(t_strdup_printf
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
479 ("create %s", urlnew), strcmp(url, urlnew) == 0);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
480 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
481
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
482 test_end();
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
483 } T_END;
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
484
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
485 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
486
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
487 int main(void)
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
488 {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
489 static void (*test_functions[])(void) = {
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
490 test_http_url_valid,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
491 test_http_url_invalid,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
492 test_http_url_parse_create,
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
493 NULL
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
494 };
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
495 return test_run(test_functions);
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
496 }
70305d850220 Adds HTTP URL parse support.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
497