xref: /aosp_15_r20/external/sandboxed-api/contrib/uriparser/test/test_uriparser.cc (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li // Copyright 2022 Google LLC
2*ec63e07aSXin Li //
3*ec63e07aSXin Li // Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li // you may not use this file except in compliance with the License.
5*ec63e07aSXin Li // You may obtain a copy of the License at
6*ec63e07aSXin Li //
7*ec63e07aSXin Li //     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li //
9*ec63e07aSXin Li // Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li // distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li // See the License for the specific language governing permissions and
13*ec63e07aSXin Li // limitations under the License.
14*ec63e07aSXin Li 
15*ec63e07aSXin Li #include <fstream>
16*ec63e07aSXin Li 
17*ec63e07aSXin Li #include "contrib/uriparser/sandboxed.h"
18*ec63e07aSXin Li #include "contrib/uriparser/utils/utils_uriparser.h"
19*ec63e07aSXin Li #include "sandboxed_api/util/path.h"
20*ec63e07aSXin Li #include "sandboxed_api/util/status_matchers.h"
21*ec63e07aSXin Li #include "sandboxed_api/util/temp_file.h"
22*ec63e07aSXin Li 
23*ec63e07aSXin Li namespace {
24*ec63e07aSXin Li 
25*ec63e07aSXin Li using ::sapi::IsOk;
26*ec63e07aSXin Li 
27*ec63e07aSXin Li const struct TestVariant {
28*ec63e07aSXin Li   std::string test;
29*ec63e07aSXin Li   std::string uri;
30*ec63e07aSXin Li   std::string uriescaped;
31*ec63e07aSXin Li   std::string scheme;
32*ec63e07aSXin Li   std::string userinfo;
33*ec63e07aSXin Li   std::string hosttext;
34*ec63e07aSXin Li   std::string hostip;
35*ec63e07aSXin Li   std::string porttext;
36*ec63e07aSXin Li   std::string query;
37*ec63e07aSXin Li   std::string fragment;
38*ec63e07aSXin Li   std::string normalized;
39*ec63e07aSXin Li   std::string add_base_example;
40*ec63e07aSXin Li   std::string remove_base_example;
41*ec63e07aSXin Li   std::vector<std::string> path_elements;
42*ec63e07aSXin Li   std::map<std::string, std::string> query_elements;
43*ec63e07aSXin Li } TestData[] = {
44*ec63e07aSXin Li     {
45*ec63e07aSXin Li         .test = "http://www.example.com/",
46*ec63e07aSXin Li         .uri = "http://www.example.com/",
47*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2Fwww.example.com%2F",
48*ec63e07aSXin Li         .scheme = "http",
49*ec63e07aSXin Li         .userinfo = "",
50*ec63e07aSXin Li         .hosttext = "www.example.com",
51*ec63e07aSXin Li         .hostip = "",
52*ec63e07aSXin Li         .porttext = "",
53*ec63e07aSXin Li         .query = "",
54*ec63e07aSXin Li         .fragment = "",
55*ec63e07aSXin Li         .normalized = "http://www.example.com/",
56*ec63e07aSXin Li         .add_base_example = "http://www.example.com/",
57*ec63e07aSXin Li         .remove_base_example = "./",
58*ec63e07aSXin Li     },
59*ec63e07aSXin Li     {
60*ec63e07aSXin Li         .test = "https://github.com/google/sandboxed-api/",
61*ec63e07aSXin Li         .uri = "https://github.com/google/sandboxed-api/",
62*ec63e07aSXin Li         .uriescaped = "https%3A%2F%2Fgithub.com%2Fgoogle%2Fsandboxed-api%2F",
63*ec63e07aSXin Li         .scheme = "https",
64*ec63e07aSXin Li         .userinfo = "",
65*ec63e07aSXin Li         .hosttext = "github.com",
66*ec63e07aSXin Li         .hostip = "",
67*ec63e07aSXin Li         .porttext = "",
68*ec63e07aSXin Li         .query = "",
69*ec63e07aSXin Li         .fragment = "",
70*ec63e07aSXin Li         .normalized = "https://github.com/google/sandboxed-api/",
71*ec63e07aSXin Li         .add_base_example = "https://github.com/google/sandboxed-api/",
72*ec63e07aSXin Li         .remove_base_example = "https://github.com/google/sandboxed-api/",
73*ec63e07aSXin Li         .path_elements = {"google", "sandboxed-api"},
74*ec63e07aSXin Li     },
75*ec63e07aSXin Li     {
76*ec63e07aSXin Li         .test = "mailto:[email protected]",
77*ec63e07aSXin Li         .uri = "mailto:[email protected]",
78*ec63e07aSXin Li         .uriescaped = "mailto%3Atest%40example.com",
79*ec63e07aSXin Li         .scheme = "mailto",
80*ec63e07aSXin Li         .userinfo = "",
81*ec63e07aSXin Li         .hosttext = "",
82*ec63e07aSXin Li         .hostip = "",
83*ec63e07aSXin Li         .porttext = "",
84*ec63e07aSXin Li         .query = "",
85*ec63e07aSXin Li         .fragment = "",
86*ec63e07aSXin Li         .normalized = "mailto:[email protected]",
87*ec63e07aSXin Li         .add_base_example = "mailto:[email protected]",
88*ec63e07aSXin Li         .remove_base_example = "mailto:[email protected]",
89*ec63e07aSXin Li         .path_elements = {"[email protected]"},
90*ec63e07aSXin Li     },
91*ec63e07aSXin Li     {
92*ec63e07aSXin Li         .test = "file:///bin/bash",
93*ec63e07aSXin Li         .uri = "file:///bin/bash",
94*ec63e07aSXin Li         .uriescaped = "file%3A%2F%2F%2Fbin%2Fbash",
95*ec63e07aSXin Li         .scheme = "file",
96*ec63e07aSXin Li         .userinfo = "",
97*ec63e07aSXin Li         .hosttext = "",
98*ec63e07aSXin Li         .hostip = "",
99*ec63e07aSXin Li         .porttext = "",
100*ec63e07aSXin Li         .query = "",
101*ec63e07aSXin Li         .fragment = "",
102*ec63e07aSXin Li         .normalized = "file:///bin/bash",
103*ec63e07aSXin Li         .add_base_example = "file:///bin/bash",
104*ec63e07aSXin Li         .remove_base_example = "file:///bin/bash",
105*ec63e07aSXin Li         .path_elements =
106*ec63e07aSXin Li             {
107*ec63e07aSXin Li                 "bin",
108*ec63e07aSXin Li                 "bash",
109*ec63e07aSXin Li             },
110*ec63e07aSXin Li     },
111*ec63e07aSXin Li     {
112*ec63e07aSXin Li         .test = "http://www.example.com/name%20with%20spaces/",
113*ec63e07aSXin Li         .uri = "http://www.example.com/name%20with%20spaces/",
114*ec63e07aSXin Li         .uriescaped =
115*ec63e07aSXin Li             "http%3A%2F%2Fwww.example.com%2Fname%2520with%2520spaces%2F",
116*ec63e07aSXin Li         .scheme = "http",
117*ec63e07aSXin Li         .userinfo = "",
118*ec63e07aSXin Li         .hosttext = "www.example.com",
119*ec63e07aSXin Li         .hostip = "",
120*ec63e07aSXin Li         .porttext = "",
121*ec63e07aSXin Li         .query = "",
122*ec63e07aSXin Li         .fragment = "",
123*ec63e07aSXin Li         .normalized = "http://www.example.com/name%20with%20spaces/",
124*ec63e07aSXin Li         .add_base_example = "http://www.example.com/name%20with%20spaces/",
125*ec63e07aSXin Li         .remove_base_example = "name%20with%20spaces/",
126*ec63e07aSXin Li         .path_elements =
127*ec63e07aSXin Li             {
128*ec63e07aSXin Li                 "name%20with%20spaces",
129*ec63e07aSXin Li             },
130*ec63e07aSXin Li     },
131*ec63e07aSXin Li     {
132*ec63e07aSXin Li         .test = "http://abcdefg@localhost/",
133*ec63e07aSXin Li         .uri = "http://abcdefg@localhost/",
134*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2Fabcdefg%40localhost%2F",
135*ec63e07aSXin Li         .scheme = "http",
136*ec63e07aSXin Li         .userinfo = "abcdefg",
137*ec63e07aSXin Li         .hosttext = "localhost",
138*ec63e07aSXin Li         .hostip = "",
139*ec63e07aSXin Li         .porttext = "",
140*ec63e07aSXin Li         .query = "",
141*ec63e07aSXin Li         .fragment = "",
142*ec63e07aSXin Li         .normalized = "http://abcdefg@localhost/",
143*ec63e07aSXin Li         .add_base_example = "http://abcdefg@localhost/",
144*ec63e07aSXin Li         .remove_base_example = "//abcdefg@localhost/",
145*ec63e07aSXin Li     },
146*ec63e07aSXin Li     {
147*ec63e07aSXin Li         .test = "https://localhost:123/",
148*ec63e07aSXin Li         .uri = "https://localhost:123/",
149*ec63e07aSXin Li         .uriescaped = "https%3A%2F%2Flocalhost%3A123%2F",
150*ec63e07aSXin Li         .scheme = "https",
151*ec63e07aSXin Li         .userinfo = "",
152*ec63e07aSXin Li         .hosttext = "localhost",
153*ec63e07aSXin Li         .hostip = "",
154*ec63e07aSXin Li         .porttext = "123",
155*ec63e07aSXin Li         .query = "",
156*ec63e07aSXin Li         .fragment = "",
157*ec63e07aSXin Li         .normalized = "https://localhost:123/",
158*ec63e07aSXin Li         .add_base_example = "https://localhost:123/",
159*ec63e07aSXin Li         .remove_base_example = "https://localhost:123/",
160*ec63e07aSXin Li     },
161*ec63e07aSXin Li     {
162*ec63e07aSXin Li         .test = "http://[::1]/",
163*ec63e07aSXin Li         .uri = "http://[0000:0000:0000:0000:0000:0000:0000:0001]/",
164*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2F%5B0000%3A0000%3A0000%3A0000%3A0000%3A0000%"
165*ec63e07aSXin Li                       "3A0000%3A0001%5D%2F",
166*ec63e07aSXin Li         .scheme = "http",
167*ec63e07aSXin Li         .userinfo = "",
168*ec63e07aSXin Li         .hosttext = "::1",
169*ec63e07aSXin Li         .hostip = "::1",
170*ec63e07aSXin Li         .porttext = "",
171*ec63e07aSXin Li         .query = "",
172*ec63e07aSXin Li         .fragment = "",
173*ec63e07aSXin Li         .normalized = "http://[0000:0000:0000:0000:0000:0000:0000:0001]/",
174*ec63e07aSXin Li         .add_base_example = "http://[0000:0000:0000:0000:0000:0000:0000:0001]/",
175*ec63e07aSXin Li         .remove_base_example = "//[0000:0000:0000:0000:0000:0000:0000:0001]/",
176*ec63e07aSXin Li     },
177*ec63e07aSXin Li     {
178*ec63e07aSXin Li         .test = "http://a/b/c/d;p?q",
179*ec63e07aSXin Li         .uri = "http://a/b/c/d;p?q",
180*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2Fa%2Fb%2Fc%2Fd%3Bp%3Fq",
181*ec63e07aSXin Li         .scheme = "http",
182*ec63e07aSXin Li         .userinfo = "",
183*ec63e07aSXin Li         .hosttext = "a",
184*ec63e07aSXin Li         .hostip = "",
185*ec63e07aSXin Li         .porttext = "",
186*ec63e07aSXin Li         .query = "q",
187*ec63e07aSXin Li         .fragment = "",
188*ec63e07aSXin Li         .normalized = "http://a/b/c/d;p?q",
189*ec63e07aSXin Li         .add_base_example = "http://a/b/c/d;p?q",
190*ec63e07aSXin Li         .remove_base_example = "//a/b/c/d;p?q",
191*ec63e07aSXin Li         .path_elements = {"b", "c", "d;p"},
192*ec63e07aSXin Li         .query_elements = {{"q", ""}},
193*ec63e07aSXin Li     },
194*ec63e07aSXin Li     {.test = "http://a/b/c/../d;p?q",
195*ec63e07aSXin Li      .uri = "http://a/b/c/../d;p?q",
196*ec63e07aSXin Li      .uriescaped = "http%3A%2F%2Fa%2Fb%2Fc%2F..%2Fd%3Bp%3Fq",
197*ec63e07aSXin Li      .scheme = "http",
198*ec63e07aSXin Li      .userinfo = "",
199*ec63e07aSXin Li      .hosttext = "a",
200*ec63e07aSXin Li      .hostip = "",
201*ec63e07aSXin Li      .porttext = "",
202*ec63e07aSXin Li      .query = "q",
203*ec63e07aSXin Li      .fragment = "",
204*ec63e07aSXin Li      .normalized = "http://a/b/d;p?q",
205*ec63e07aSXin Li      .add_base_example = "http://a/b/d;p?q",
206*ec63e07aSXin Li      .remove_base_example = "//a/b/c/../d;p?q",
207*ec63e07aSXin Li      .path_elements = {"b", "c", "..", "d;p"},
208*ec63e07aSXin Li      .query_elements = {{"q", ""}}},
209*ec63e07aSXin Li     {
210*ec63e07aSXin Li         .test = "http://example.com/abc/def/",
211*ec63e07aSXin Li         .uri = "http://example.com/abc/def/",
212*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2Fexample.com%2Fabc%2Fdef%2F",
213*ec63e07aSXin Li         .scheme = "http",
214*ec63e07aSXin Li         .userinfo = "",
215*ec63e07aSXin Li         .hosttext = "example.com",
216*ec63e07aSXin Li         .hostip = "",
217*ec63e07aSXin Li         .porttext = "",
218*ec63e07aSXin Li         .query = "",
219*ec63e07aSXin Li         .fragment = "",
220*ec63e07aSXin Li         .normalized = "http://example.com/abc/def/",
221*ec63e07aSXin Li         .add_base_example = "http://example.com/abc/def/",
222*ec63e07aSXin Li         .remove_base_example = "//example.com/abc/def/",
223*ec63e07aSXin Li         .path_elements =
224*ec63e07aSXin Li             {
225*ec63e07aSXin Li                 "abc",
226*ec63e07aSXin Li                 "def",
227*ec63e07aSXin Li             },
228*ec63e07aSXin Li     },
229*ec63e07aSXin Li     {.test = "http://example.com/?abc",
230*ec63e07aSXin Li      .uri = "http://example.com/?abc",
231*ec63e07aSXin Li      .uriescaped = "http%3A%2F%2Fexample.com%2F%3Fabc",
232*ec63e07aSXin Li      .scheme = "http",
233*ec63e07aSXin Li      .userinfo = "",
234*ec63e07aSXin Li      .hosttext = "example.com",
235*ec63e07aSXin Li      .hostip = "",
236*ec63e07aSXin Li      .porttext = "",
237*ec63e07aSXin Li      .query = "abc",
238*ec63e07aSXin Li      .fragment = "",
239*ec63e07aSXin Li      .normalized = "http://example.com/?abc",
240*ec63e07aSXin Li      .add_base_example = "http://example.com/?abc",
241*ec63e07aSXin Li      .remove_base_example = "//example.com/?abc",
242*ec63e07aSXin Li      .query_elements = {{"abc", ""}}},
243*ec63e07aSXin Li     {
244*ec63e07aSXin Li         .test = "http://[vA.123456]/",
245*ec63e07aSXin Li         .uri = "http://[vA.123456]/",
246*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2F%5BvA.123456%5D%2F",
247*ec63e07aSXin Li         .scheme = "http",
248*ec63e07aSXin Li         .userinfo = "",
249*ec63e07aSXin Li         .hosttext = "vA.123456",
250*ec63e07aSXin Li         .hostip = "",
251*ec63e07aSXin Li         .porttext = "",
252*ec63e07aSXin Li         .query = "",
253*ec63e07aSXin Li         .fragment = "",
254*ec63e07aSXin Li         .normalized = "http://[va.123456]/",
255*ec63e07aSXin Li         .add_base_example = "http://[vA.123456]/",
256*ec63e07aSXin Li         .remove_base_example = "//[vA.123456]/",
257*ec63e07aSXin Li     },
258*ec63e07aSXin Li     {
259*ec63e07aSXin Li         .test = "http://8.8.8.8/",
260*ec63e07aSXin Li         .uri = "http://8.8.8.8/",
261*ec63e07aSXin Li         .uriescaped = "http%3A%2F%2F8.8.8.8%2F",
262*ec63e07aSXin Li         .scheme = "http",
263*ec63e07aSXin Li         .userinfo = "",
264*ec63e07aSXin Li         .hosttext = "8.8.8.8",
265*ec63e07aSXin Li         .hostip = "8.8.8.8",
266*ec63e07aSXin Li         .porttext = "",
267*ec63e07aSXin Li         .query = "",
268*ec63e07aSXin Li         .fragment = "",
269*ec63e07aSXin Li         .normalized = "http://8.8.8.8/",
270*ec63e07aSXin Li         .add_base_example = "http://8.8.8.8/",
271*ec63e07aSXin Li         .remove_base_example = "//8.8.8.8/",
272*ec63e07aSXin Li     },
273*ec63e07aSXin Li     {.test = "http://www.example.com/?abc",
274*ec63e07aSXin Li      .uri = "http://www.example.com/?abc",
275*ec63e07aSXin Li      .uriescaped = "http%3A%2F%2Fwww.example.com%2F%3Fabc",
276*ec63e07aSXin Li      .scheme = "http",
277*ec63e07aSXin Li      .userinfo = "",
278*ec63e07aSXin Li      .hosttext = "www.example.com",
279*ec63e07aSXin Li      .hostip = "",
280*ec63e07aSXin Li      .porttext = "",
281*ec63e07aSXin Li      .query = "abc",
282*ec63e07aSXin Li      .fragment = "",
283*ec63e07aSXin Li      .normalized = "http://www.example.com/?abc",
284*ec63e07aSXin Li      .add_base_example = "http://www.example.com/?abc",
285*ec63e07aSXin Li      .remove_base_example = "./?abc",
286*ec63e07aSXin Li      .query_elements = {{"abc", ""}}},
287*ec63e07aSXin Li     {.test = "https://google.com?q=asd&x=y&zxc=asd",
288*ec63e07aSXin Li      .uri = "https://google.com?q=asd&x=y&zxc=asd",
289*ec63e07aSXin Li      .uriescaped = "https%3A%2F%2Fgoogle.com%3Fq%3Dasd%26x%3Dy%26zxc%3Dasd",
290*ec63e07aSXin Li      .scheme = "https",
291*ec63e07aSXin Li      .userinfo = "",
292*ec63e07aSXin Li      .hosttext = "google.com",
293*ec63e07aSXin Li      .hostip = "",
294*ec63e07aSXin Li      .porttext = "",
295*ec63e07aSXin Li      .query = "q=asd&x=y&zxc=asd",
296*ec63e07aSXin Li      .fragment = "",
297*ec63e07aSXin Li      .normalized = "https://google.com?q=asd&x=y&zxc=asd",
298*ec63e07aSXin Li      .add_base_example = "https://google.com?q=asd&x=y&zxc=asd",
299*ec63e07aSXin Li      .remove_base_example = "https://google.com?q=asd&x=y&zxc=asd",
300*ec63e07aSXin Li      .query_elements = {{"q", "asd"}, {"x", "y"}, {"zxc", "asd"}}},
301*ec63e07aSXin Li     {.test = "https://google.com?q=asd#newplace",
302*ec63e07aSXin Li      .uri = "https://google.com?q=asd#newplace",
303*ec63e07aSXin Li      .uriescaped = "https%3A%2F%2Fgoogle.com%3Fq%3Dasd%23newplace",
304*ec63e07aSXin Li      .scheme = "https",
305*ec63e07aSXin Li      .userinfo = "",
306*ec63e07aSXin Li      .hosttext = "google.com",
307*ec63e07aSXin Li      .hostip = "",
308*ec63e07aSXin Li      .porttext = "",
309*ec63e07aSXin Li      .query = "q=asd",
310*ec63e07aSXin Li      .fragment = "newplace",
311*ec63e07aSXin Li      .normalized = "https://google.com?q=asd#newplace",
312*ec63e07aSXin Li      .add_base_example = "https://google.com?q=asd#newplace",
313*ec63e07aSXin Li      .remove_base_example = "https://google.com?q=asd#newplace",
314*ec63e07aSXin Li      .query_elements = {{"q", "asd"}}},
315*ec63e07aSXin Li };
316*ec63e07aSXin Li 
317*ec63e07aSXin Li class UriParserBase : public testing::Test {
318*ec63e07aSXin Li  protected:
319*ec63e07aSXin Li   void SetUp() override;
320*ec63e07aSXin Li   std::unique_ptr<UriparserSapiSandbox> sandbox_;
321*ec63e07aSXin Li };
322*ec63e07aSXin Li 
323*ec63e07aSXin Li class UriParserTestData : public UriParserBase,
324*ec63e07aSXin Li                           public testing::WithParamInterface<TestVariant> {};
325*ec63e07aSXin Li 
SetUp()326*ec63e07aSXin Li void UriParserBase::SetUp() {
327*ec63e07aSXin Li   sandbox_ = std::make_unique<UriparserSapiSandbox>();
328*ec63e07aSXin Li   ASSERT_THAT(sandbox_->Init(), IsOk());
329*ec63e07aSXin Li }
330*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestUri)331*ec63e07aSXin Li TEST_P(UriParserTestData, TestUri) {
332*ec63e07aSXin Li   const TestVariant& tv = GetParam();
333*ec63e07aSXin Li 
334*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
335*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
336*ec63e07aSXin Li 
337*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetUri());
338*ec63e07aSXin Li   ASSERT_EQ(ret, tv.uri);
339*ec63e07aSXin Li }
340*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestUriEscaped)341*ec63e07aSXin Li TEST_P(UriParserTestData, TestUriEscaped) {
342*ec63e07aSXin Li   const TestVariant& tv = GetParam();
343*ec63e07aSXin Li 
344*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
345*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
346*ec63e07aSXin Li 
347*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetUriEscaped(true, true));
348*ec63e07aSXin Li   ASSERT_EQ(ret, tv.uriescaped);
349*ec63e07aSXin Li }
350*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestScheme)351*ec63e07aSXin Li TEST_P(UriParserTestData, TestScheme) {
352*ec63e07aSXin Li   const TestVariant& tv = GetParam();
353*ec63e07aSXin Li 
354*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
355*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
356*ec63e07aSXin Li 
357*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetScheme());
358*ec63e07aSXin Li   ASSERT_EQ(ret, tv.scheme);
359*ec63e07aSXin Li }
360*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestUserInfo)361*ec63e07aSXin Li TEST_P(UriParserTestData, TestUserInfo) {
362*ec63e07aSXin Li   const TestVariant& tv = GetParam();
363*ec63e07aSXin Li 
364*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
365*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
366*ec63e07aSXin Li 
367*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetUserInfo());
368*ec63e07aSXin Li   ASSERT_EQ(ret, tv.userinfo);
369*ec63e07aSXin Li }
370*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestHostText)371*ec63e07aSXin Li TEST_P(UriParserTestData, TestHostText) {
372*ec63e07aSXin Li   const TestVariant& tv = GetParam();
373*ec63e07aSXin Li 
374*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
375*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
376*ec63e07aSXin Li 
377*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetHostText());
378*ec63e07aSXin Li   ASSERT_EQ(ret, tv.hosttext);
379*ec63e07aSXin Li }
380*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestHostIP)381*ec63e07aSXin Li TEST_P(UriParserTestData, TestHostIP) {
382*ec63e07aSXin Li   const TestVariant& tv = GetParam();
383*ec63e07aSXin Li 
384*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
385*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
386*ec63e07aSXin Li 
387*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetHostIP());
388*ec63e07aSXin Li   ASSERT_EQ(ret, tv.hostip);
389*ec63e07aSXin Li }
390*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestPortText)391*ec63e07aSXin Li TEST_P(UriParserTestData, TestPortText) {
392*ec63e07aSXin Li   const TestVariant& tv = GetParam();
393*ec63e07aSXin Li 
394*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
395*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
396*ec63e07aSXin Li 
397*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetPortText());
398*ec63e07aSXin Li   ASSERT_EQ(ret, tv.porttext);
399*ec63e07aSXin Li }
400*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestQuery)401*ec63e07aSXin Li TEST_P(UriParserTestData, TestQuery) {
402*ec63e07aSXin Li   const TestVariant& tv = GetParam();
403*ec63e07aSXin Li 
404*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
405*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
406*ec63e07aSXin Li 
407*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetQuery());
408*ec63e07aSXin Li   ASSERT_EQ(ret, tv.query);
409*ec63e07aSXin Li }
410*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestFragment)411*ec63e07aSXin Li TEST_P(UriParserTestData, TestFragment) {
412*ec63e07aSXin Li   const TestVariant& tv = GetParam();
413*ec63e07aSXin Li 
414*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
415*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
416*ec63e07aSXin Li 
417*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetFragment());
418*ec63e07aSXin Li   ASSERT_EQ(ret, tv.fragment);
419*ec63e07aSXin Li }
420*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestNormalize)421*ec63e07aSXin Li TEST_P(UriParserTestData, TestNormalize) {
422*ec63e07aSXin Li   const TestVariant& tv = GetParam();
423*ec63e07aSXin Li 
424*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
425*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
426*ec63e07aSXin Li 
427*ec63e07aSXin Li   ASSERT_THAT(uri.NormalizeSyntax(), IsOk());
428*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret, uri.GetUri());
429*ec63e07aSXin Li   ASSERT_EQ(ret, tv.normalized);
430*ec63e07aSXin Li }
431*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestMultiple)432*ec63e07aSXin Li TEST_P(UriParserTestData, TestMultiple) {
433*ec63e07aSXin Li   const TestVariant& tv = GetParam();
434*ec63e07aSXin Li 
435*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
436*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
437*ec63e07aSXin Li 
438*ec63e07aSXin Li   std::string ret;
439*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(ret, uri.GetQuery());
440*ec63e07aSXin Li   ASSERT_EQ(ret, tv.query);
441*ec63e07aSXin Li 
442*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(ret, uri.GetHostIP());
443*ec63e07aSXin Li   ASSERT_EQ(ret, tv.hostip);
444*ec63e07aSXin Li 
445*ec63e07aSXin Li   ASSERT_THAT(uri.NormalizeSyntax(), IsOk());
446*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(ret, uri.GetUri());
447*ec63e07aSXin Li   ASSERT_EQ(ret, tv.normalized);
448*ec63e07aSXin Li }
449*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestAddBaseExample)450*ec63e07aSXin Li TEST_P(UriParserTestData, TestAddBaseExample) {
451*ec63e07aSXin Li   const TestVariant& tv = GetParam();
452*ec63e07aSXin Li 
453*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
454*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
455*ec63e07aSXin Li 
456*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string ret,
457*ec63e07aSXin Li                             uri.GetUriWithBase("http://www.example.com"));
458*ec63e07aSXin Li   ASSERT_EQ(ret, tv.add_base_example);
459*ec63e07aSXin Li }
460*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestRemoveBaseExample)461*ec63e07aSXin Li TEST_P(UriParserTestData, TestRemoveBaseExample) {
462*ec63e07aSXin Li   const TestVariant& tv = GetParam();
463*ec63e07aSXin Li 
464*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
465*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
466*ec63e07aSXin Li 
467*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
468*ec63e07aSXin Li       std::string ret, uri.GetUriWithoutBase("http://www.example.com", false));
469*ec63e07aSXin Li   ASSERT_EQ(ret, tv.remove_base_example);
470*ec63e07aSXin Li }
471*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestPath)472*ec63e07aSXin Li TEST_P(UriParserTestData, TestPath) {
473*ec63e07aSXin Li   const TestVariant& tv = GetParam();
474*ec63e07aSXin Li 
475*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
476*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
477*ec63e07aSXin Li 
478*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::vector<std::string> ret, uri.GetPath());
479*ec63e07aSXin Li   ASSERT_EQ(ret.size(), tv.path_elements.size());
480*ec63e07aSXin Li   for (int i = 0; i < ret.size(); ++i) {
481*ec63e07aSXin Li     ASSERT_EQ(ret[i], tv.path_elements[i]);
482*ec63e07aSXin Li   }
483*ec63e07aSXin Li }
484*ec63e07aSXin Li 
TEST_P(UriParserTestData,TestQueryElements)485*ec63e07aSXin Li TEST_P(UriParserTestData, TestQueryElements) {
486*ec63e07aSXin Li   const TestVariant& tv = GetParam();
487*ec63e07aSXin Li 
488*ec63e07aSXin Li   UriParser uri(sandbox_.get(), tv.test);
489*ec63e07aSXin Li   ASSERT_THAT(uri.GetStatus(), IsOk());
490*ec63e07aSXin Li 
491*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(auto ret, uri.GetQueryElements());
492*ec63e07aSXin Li   ASSERT_EQ(ret.size(), tv.query_elements.size());
493*ec63e07aSXin Li   for (auto orig : tv.query_elements) {
494*ec63e07aSXin Li     ASSERT_NE(ret.find(orig.first), ret.end());
495*ec63e07aSXin Li     ASSERT_EQ(ret[orig.first], orig.second);
496*ec63e07aSXin Li   }
497*ec63e07aSXin Li }
498*ec63e07aSXin Li 
499*ec63e07aSXin Li INSTANTIATE_TEST_SUITE_P(UriParserBase, UriParserTestData,
500*ec63e07aSXin Li                          testing::ValuesIn(TestData));
501*ec63e07aSXin Li 
502*ec63e07aSXin Li }  // namespace
503