Line data Source code
1 : // Copyright (c) 2011-2026 Made to Order Software Corp. All Rights Reserved
2 : //
3 : // https://snapwebsites.org/project/edhttp
4 : // contact@m2osw.com
5 : //
6 : // This program is free software: you can redistribute it and/or modify
7 : // it under the terms of the GNU General Public License as published by
8 : // the Free Software Foundation, either version 3 of the License, or
9 : // (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program. If not, see <https://www.gnu.org/licenses/>.
18 :
19 : /** \file
20 : * \brief Verify the validator_uri class.
21 : *
22 : * This file implements tests to verify that the validator_uri
23 : * class functions as expected.
24 : */
25 :
26 : // self
27 : //
28 : #include "catch_main.h"
29 :
30 :
31 : // edhttp
32 : //
33 : #include <edhttp/validator_uri.h>
34 :
35 :
36 :
37 9 : CATCH_TEST_CASE("validator_uri", "[domain]")
38 : {
39 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (default)")
40 : {
41 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri"));
42 :
43 1 : CATCH_REQUIRE(v != nullptr);
44 1 : CATCH_REQUIRE(v->name() == "uri");
45 :
46 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
47 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
48 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
49 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
50 :
51 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
52 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
53 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
54 :
55 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
56 3 : CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
57 1 : }
58 10 : CATCH_END_SECTION()
59 :
60 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (refuse all)")
61 : {
62 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(refuse-ip, refuse-path)"));
63 :
64 1 : CATCH_REQUIRE(v != nullptr);
65 1 : CATCH_REQUIRE(v->name() == "uri");
66 :
67 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
68 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
69 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
70 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
71 :
72 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
73 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
74 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
75 :
76 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
77 3 : CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
78 1 : }
79 10 : CATCH_END_SECTION()
80 :
81 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (refuse ip)")
82 : {
83 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(refuse_ip)"));
84 :
85 1 : CATCH_REQUIRE(v != nullptr);
86 1 : CATCH_REQUIRE(v->name() == "uri");
87 :
88 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
89 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
90 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
91 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
92 :
93 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
94 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
95 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
96 :
97 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
98 3 : CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
99 1 : }
100 10 : CATCH_END_SECTION()
101 :
102 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (refuse path)")
103 : {
104 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(refuse_path)"));
105 :
106 1 : CATCH_REQUIRE(v != nullptr);
107 1 : CATCH_REQUIRE(v->name() == "uri");
108 :
109 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
110 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
111 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
112 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
113 :
114 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
115 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
116 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
117 :
118 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
119 3 : CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
120 1 : }
121 10 : CATCH_END_SECTION()
122 :
123 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept IP, dash)")
124 : {
125 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept-ip)"));
126 :
127 1 : CATCH_REQUIRE(v != nullptr);
128 1 : CATCH_REQUIRE(v->name() == "uri");
129 :
130 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
131 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
132 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
133 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
134 3 : CATCH_REQUIRE(v->validate("http://127.0.0.1/accepted?this#one"));
135 :
136 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
137 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
138 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
139 :
140 3 : CATCH_REQUIRE_FALSE(v->validate("/refused/by/default"));
141 1 : }
142 10 : CATCH_END_SECTION()
143 :
144 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept IP, underscore)")
145 : {
146 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept_ip)"));
147 :
148 1 : CATCH_REQUIRE(v != nullptr);
149 1 : CATCH_REQUIRE(v->name() == "uri");
150 :
151 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
152 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
153 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
154 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
155 3 : CATCH_REQUIRE(v->validate("http://127.0.0.1/accepted?this#one"));
156 :
157 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
158 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
159 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
160 :
161 3 : CATCH_REQUIRE_FALSE(v->validate("/refused/by/default"));
162 1 : }
163 10 : CATCH_END_SECTION()
164 :
165 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept Unix path, dash)")
166 : {
167 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept-path)"));
168 :
169 1 : CATCH_REQUIRE(v != nullptr);
170 1 : CATCH_REQUIRE(v->name() == "uri");
171 :
172 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
173 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
174 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
175 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
176 3 : CATCH_REQUIRE(v->validate("cdu:///refused/by/default"));
177 :
178 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
179 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
180 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
181 :
182 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
183 1 : }
184 10 : CATCH_END_SECTION()
185 :
186 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept Unix path, underscore)")
187 : {
188 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept_path)"));
189 :
190 1 : CATCH_REQUIRE(v != nullptr);
191 1 : CATCH_REQUIRE(v->name() == "uri");
192 :
193 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
194 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
195 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
196 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
197 3 : CATCH_REQUIRE(v->validate("cdu:///refused/by/default"));
198 :
199 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
200 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
201 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
202 :
203 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
204 1 : }
205 10 : CATCH_END_SECTION()
206 :
207 9 : CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (invalid parameter)")
208 : {
209 : // TODO: verify error message
210 3 : advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(allow_path)"));
211 :
212 1 : CATCH_REQUIRE(v != nullptr);
213 1 : CATCH_REQUIRE(v->name() == "uri");
214 :
215 3 : CATCH_REQUIRE(v->validate("http://snap.website/"));
216 3 : CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
217 3 : CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
218 3 : CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
219 :
220 3 : CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
221 3 : CATCH_REQUIRE_FALSE(v->validate("bad:too"));
222 3 : CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
223 :
224 3 : CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
225 3 : CATCH_REQUIRE_FALSE(v->validate("cdu:///refused/by/default"));
226 1 : }
227 10 : CATCH_END_SECTION()
228 9 : }
229 :
230 :
231 : // vim: ts=4 sw=4 et
|