1#include <xrpl/basics/Slice.h>
2#include <xrpl/basics/StringUtilities.h>
3#include <xrpl/basics/ToString.h>
4#include <xrpl/beast/unit_test/suite.h>
57 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://"));
58 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
62 BEAST_EXPECT(!pUrl.
port);
72 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///"));
73 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
77 BEAST_EXPECT(!pUrl.
port);
78 BEAST_EXPECT(pUrl.
path ==
"/");
83 BEAST_EXPECT(
parseUrl(pUrl,
"lower://domain"));
84 BEAST_EXPECT(pUrl.
scheme ==
"lower");
87 BEAST_EXPECT(pUrl.
domain ==
"domain");
88 BEAST_EXPECT(!pUrl.
port);
94 BEAST_EXPECT(
parseUrl(pUrl,
"UPPER://domain:234/"));
95 BEAST_EXPECT(pUrl.
scheme ==
"upper");
98 BEAST_EXPECT(pUrl.
domain ==
"domain");
99 BEAST_EXPECT(*pUrl.
port == 234);
100 BEAST_EXPECT(pUrl.
path ==
"/");
105 BEAST_EXPECT(
parseUrl(pUrl,
"Mixed://domain/path"));
106 BEAST_EXPECT(pUrl.
scheme ==
"mixed");
109 BEAST_EXPECT(pUrl.
domain ==
"domain");
110 BEAST_EXPECT(!pUrl.
port);
111 BEAST_EXPECT(pUrl.
path ==
"/path");
116 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://[::1]:123/path"));
117 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
120 BEAST_EXPECT(pUrl.
domain ==
"::1");
121 BEAST_EXPECT(*pUrl.
port == 123);
122 BEAST_EXPECT(pUrl.
path ==
"/path");
127 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain:123/abc:321"));
128 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
129 BEAST_EXPECT(pUrl.
username ==
"user");
130 BEAST_EXPECT(pUrl.
password ==
"pass");
131 BEAST_EXPECT(pUrl.
domain ==
"domain");
132 BEAST_EXPECT(*pUrl.
port == 123);
133 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
138 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain:123/abc:321"));
139 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
140 BEAST_EXPECT(pUrl.
username ==
"user");
142 BEAST_EXPECT(pUrl.
domain ==
"domain");
143 BEAST_EXPECT(*pUrl.
port == 123);
144 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
149 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain:123/abc:321"));
150 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
152 BEAST_EXPECT(pUrl.
password ==
"pass");
153 BEAST_EXPECT(pUrl.
domain ==
"domain");
154 BEAST_EXPECT(*pUrl.
port == 123);
155 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
160 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain:123/abc:321"));
161 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
164 BEAST_EXPECT(pUrl.
domain ==
"domain");
165 BEAST_EXPECT(*pUrl.
port == 123);
166 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
171 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/abc:321"));
172 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
173 BEAST_EXPECT(pUrl.
username ==
"user");
174 BEAST_EXPECT(pUrl.
password ==
"pass");
175 BEAST_EXPECT(pUrl.
domain ==
"domain");
176 BEAST_EXPECT(!pUrl.
port);
177 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
182 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain/abc:321"));
183 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
184 BEAST_EXPECT(pUrl.
username ==
"user");
186 BEAST_EXPECT(pUrl.
domain ==
"domain");
187 BEAST_EXPECT(!pUrl.
port);
188 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
193 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain/abc:321"));
194 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
196 BEAST_EXPECT(pUrl.
password ==
"pass");
197 BEAST_EXPECT(pUrl.
domain ==
"domain");
198 BEAST_EXPECT(!pUrl.
port);
199 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
204 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/abc:321"));
205 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
208 BEAST_EXPECT(pUrl.
domain ==
"domain");
209 BEAST_EXPECT(!pUrl.
port);
210 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
215 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///path/to/file"));
216 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
220 BEAST_EXPECT(!pUrl.
port);
221 BEAST_EXPECT(pUrl.
path ==
"/path/to/file");
226 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/path/with/an@sign"));
227 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
228 BEAST_EXPECT(pUrl.
username ==
"user");
229 BEAST_EXPECT(pUrl.
password ==
"pass");
230 BEAST_EXPECT(pUrl.
domain ==
"domain");
231 BEAST_EXPECT(!pUrl.
port);
232 BEAST_EXPECT(pUrl.
path ==
"/path/with/an@sign");
237 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/path/with/an@sign"));
238 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
241 BEAST_EXPECT(pUrl.
domain ==
"domain");
242 BEAST_EXPECT(!pUrl.
port);
243 BEAST_EXPECT(pUrl.
path ==
"/path/with/an@sign");
248 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:999/"));
249 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
252 BEAST_EXPECT(pUrl.
domain ==
":999");
253 BEAST_EXPECT(!pUrl.
port);
254 BEAST_EXPECT(pUrl.
path ==
"/");
259 BEAST_EXPECT(
parseUrl(pUrl,
"http://::1:1234/validators"));
260 BEAST_EXPECT(pUrl.
scheme ==
"http");
263 BEAST_EXPECT(pUrl.
domain ==
"::0.1.18.52");
264 BEAST_EXPECT(!pUrl.
port);
265 BEAST_EXPECT(pUrl.
path ==
"/validators");
272 BEAST_EXPECT(!
parseUrl(pUrl,
"nonsense"));
273 BEAST_EXPECT(!
parseUrl(pUrl,
"://"));
274 BEAST_EXPECT(!
parseUrl(pUrl,
":///"));
275 BEAST_EXPECT(!
parseUrl(pUrl,
"scheme://user:pass@domain:65536/abc:321"));
276 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:23498765/"));
277 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:0/"));
278 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:+7/"));
279 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:-7234/"));
280 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:@#$56!/"));
286 BEAST_EXPECT(!
parseUrl(pUrl, strUrl));
295 BEAST_EXPECT(result ==
"hello");
TestcaseT testcase
Memberspace for declaring test cases.
void testUnHexSuccess(std::string const &strIn, std::string const &strExpected)
void testUnHexFailure(std::string const &strIn)
void run() override
Runs the suite.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string to_string(BaseUInt< Bits, Tag > const &a)
std::optional< Blob > strUnHex(std::size_t strSize, Iterator begin, Iterator end)
BEAST_DEFINE_TESTSUITE(AccountTxPaging, app, xrpl)
std::enable_if_t< std::is_same_v< T, char >||std::is_same_v< T, unsigned char >, Slice > makeSlice(std::array< T, N > const &a)
bool parseUrl(ParsedUrl &pUrl, std::string const &strUrl)
std::optional< std::uint16_t > port