1#include <xrpl/basics/StringUtilities.h>
3#include <xrpl/basics/Slice.h>
4#include <xrpl/basics/ToString.h>
6#include <gtest/gtest.h>
35 testUnHexSuccess(
"526970706c6544",
"RippleD");
36 testUnHexSuccess(
"A",
"\n");
37 testUnHexSuccess(
"0A",
"\n");
38 testUnHexSuccess(
"D0A",
"\r\n");
39 testUnHexSuccess(
"0D0A",
"\r\n");
40 testUnHexSuccess(
"200D0A",
" \r\n");
41 testUnHexSuccess(
"282A2B2C2D2E2F29",
"(*+,-./)");
44 testUnHexFailure(
"123X");
45 testUnHexFailure(
"V");
46 testUnHexFailure(
"XRP");
54 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://"));
55 EXPECT_EQ(pUrl.
scheme,
"scheme");
59 EXPECT_FALSE(pUrl.
port);
69 EXPECT_TRUE(
parseUrl(pUrl,
"scheme:///"));
70 EXPECT_EQ(pUrl.
scheme,
"scheme");
74 EXPECT_FALSE(pUrl.
port);
75 EXPECT_EQ(pUrl.
path,
"/");
80 EXPECT_TRUE(
parseUrl(pUrl,
"lower://domain"));
81 EXPECT_EQ(pUrl.
scheme,
"lower");
84 EXPECT_EQ(pUrl.
domain,
"domain");
85 EXPECT_FALSE(pUrl.
port);
91 EXPECT_TRUE(
parseUrl(pUrl,
"UPPER://domain:234/"));
92 EXPECT_EQ(pUrl.
scheme,
"upper");
95 EXPECT_EQ(pUrl.
domain,
"domain");
96 EXPECT_EQ(*pUrl.
port, 234);
97 EXPECT_EQ(pUrl.
path,
"/");
102 EXPECT_TRUE(
parseUrl(pUrl,
"Mixed://domain/path"));
103 EXPECT_EQ(pUrl.
scheme,
"mixed");
106 EXPECT_EQ(pUrl.
domain,
"domain");
107 EXPECT_FALSE(pUrl.
port);
108 EXPECT_EQ(pUrl.
path,
"/path");
113 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://[::1]:123/path"));
114 EXPECT_EQ(pUrl.
scheme,
"scheme");
117 EXPECT_EQ(pUrl.
domain,
"::1");
118 EXPECT_EQ(*pUrl.
port, 123);
119 EXPECT_EQ(pUrl.
path,
"/path");
124 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://user:pass@domain:123/abc:321"));
125 EXPECT_EQ(pUrl.
scheme,
"scheme");
128 EXPECT_EQ(pUrl.
domain,
"domain");
129 EXPECT_EQ(*pUrl.
port, 123);
130 EXPECT_EQ(pUrl.
path,
"/abc:321");
135 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://user@domain:123/abc:321"));
136 EXPECT_EQ(pUrl.
scheme,
"scheme");
139 EXPECT_EQ(pUrl.
domain,
"domain");
140 EXPECT_EQ(*pUrl.
port, 123);
141 EXPECT_EQ(pUrl.
path,
"/abc:321");
146 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://:pass@domain:123/abc:321"));
147 EXPECT_EQ(pUrl.
scheme,
"scheme");
150 EXPECT_EQ(pUrl.
domain,
"domain");
151 EXPECT_EQ(*pUrl.
port, 123);
152 EXPECT_EQ(pUrl.
path,
"/abc:321");
157 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://domain:123/abc:321"));
158 EXPECT_EQ(pUrl.
scheme,
"scheme");
161 EXPECT_EQ(pUrl.
domain,
"domain");
162 EXPECT_EQ(*pUrl.
port, 123);
163 EXPECT_EQ(pUrl.
path,
"/abc:321");
168 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://user:pass@domain/abc:321"));
169 EXPECT_EQ(pUrl.
scheme,
"scheme");
172 EXPECT_EQ(pUrl.
domain,
"domain");
173 EXPECT_FALSE(pUrl.
port);
174 EXPECT_EQ(pUrl.
path,
"/abc:321");
179 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://user@domain/abc:321"));
180 EXPECT_EQ(pUrl.
scheme,
"scheme");
183 EXPECT_EQ(pUrl.
domain,
"domain");
184 EXPECT_FALSE(pUrl.
port);
185 EXPECT_EQ(pUrl.
path,
"/abc:321");
190 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://:pass@domain/abc:321"));
191 EXPECT_EQ(pUrl.
scheme,
"scheme");
194 EXPECT_EQ(pUrl.
domain,
"domain");
195 EXPECT_FALSE(pUrl.
port);
196 EXPECT_EQ(pUrl.
path,
"/abc:321");
201 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://domain/abc:321"));
202 EXPECT_EQ(pUrl.
scheme,
"scheme");
205 EXPECT_EQ(pUrl.
domain,
"domain");
206 EXPECT_FALSE(pUrl.
port);
207 EXPECT_EQ(pUrl.
path,
"/abc:321");
212 EXPECT_TRUE(
parseUrl(pUrl,
"scheme:///path/to/file"));
213 EXPECT_EQ(pUrl.
scheme,
"scheme");
217 EXPECT_FALSE(pUrl.
port);
218 EXPECT_EQ(pUrl.
path,
"/path/to/file");
223 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://user:pass@domain/path/with/an@sign"));
224 EXPECT_EQ(pUrl.
scheme,
"scheme");
227 EXPECT_EQ(pUrl.
domain,
"domain");
228 EXPECT_FALSE(pUrl.
port);
229 EXPECT_EQ(pUrl.
path,
"/path/with/an@sign");
234 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://domain/path/with/an@sign"));
235 EXPECT_EQ(pUrl.
scheme,
"scheme");
238 EXPECT_EQ(pUrl.
domain,
"domain");
239 EXPECT_FALSE(pUrl.
port);
240 EXPECT_EQ(pUrl.
path,
"/path/with/an@sign");
245 EXPECT_TRUE(
parseUrl(pUrl,
"scheme://:999/"));
246 EXPECT_EQ(pUrl.
scheme,
"scheme");
249 EXPECT_EQ(pUrl.
domain,
":999");
250 EXPECT_FALSE(pUrl.
port);
251 EXPECT_EQ(pUrl.
path,
"/");
256 EXPECT_TRUE(
parseUrl(pUrl,
"http://::1:1234/validators"));
257 EXPECT_EQ(pUrl.
scheme,
"http");
260 EXPECT_EQ(pUrl.
domain,
"::0.1.18.52");
261 EXPECT_FALSE(pUrl.
port);
262 EXPECT_EQ(pUrl.
path,
"/validators");
269 EXPECT_FALSE(
parseUrl(pUrl,
"nonsense"));
270 EXPECT_FALSE(
parseUrl(pUrl,
"://"));
271 EXPECT_FALSE(
parseUrl(pUrl,
":///"));
272 EXPECT_FALSE(
parseUrl(pUrl,
"scheme://user:pass@domain:65536/abc:321"));
273 EXPECT_FALSE(
parseUrl(pUrl,
"UPPER://domain:23498765/"));
274 EXPECT_FALSE(
parseUrl(pUrl,
"UPPER://domain:0/"));
275 EXPECT_FALSE(
parseUrl(pUrl,
"UPPER://domain:+7/"));
276 EXPECT_FALSE(
parseUrl(pUrl,
"UPPER://domain:-7234/"));
277 EXPECT_FALSE(
parseUrl(pUrl,
"UPPER://domain:@#$56!/"));
283 EXPECT_FALSE(
parseUrl(pUrl, strUrl));
290 EXPECT_EQ(result,
"hello");
309 EXPECT_EQ(
toLower(
"ABC"),
"abc");
310 EXPECT_EQ(
toLower(
"AbC123"),
"abc123");
311 EXPECT_EQ(
toLower(
"already lower"),
"already lower");
315 EXPECT_EQ(
toLower(
"@[`{_^"),
"@[`{_^");
330 EXPECT_EQ(
toLower(agrave), agrave);
static void testUnHexFailure(std::string const &strIn)
static void testUnHexSuccess(std::string const &strIn, std::string const &strExpected)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string toLower(std::string str)
Fold ASCII upper case letters to lower case.
TEST_F(HardenedHashTest, user_types)
std::string trimWhitespace(std::string str)
Remove leading and trailing ASCII whitespace.
std::string to_string(BaseUInt< Bits, Tag > const &a)
Slice makeSlice(std::array< T, N > const &a)
std::optional< Blob > strUnHex(std::size_t strSize, Iterator begin, Iterator end)
bool parseUrl(ParsedUrl &pUrl, std::string const &strUrl)
std::optional< std::uint16_t > port