| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "net/third_party/quiche/src/quic/tools/quic_url.h" | |
| #include <string> | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_str_cat.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" | |
| namespace quic { | |
| namespace test { | |
| namespace { | |
| class QuicUrlTest : public QuicTest {}; | |
| TEST_F(QuicUrlTest, Basic) { | |
| // No scheme specified. | |
| std::string url_str = "www.example.com"; | |
| QuicUrl url(url_str); | |
| EXPECT_FALSE(url.IsValid()); | |
| // scheme is HTTP. | |
| url_str = "http://www.example.com"; | |
| url = QuicUrl(url_str); | |
| EXPECT_TRUE(url.IsValid()); | |
| EXPECT_EQ("http://www.example.com/", url.ToString()); | |
| EXPECT_EQ("http", url.scheme()); | |
| EXPECT_EQ("www.example.com", url.HostPort()); | |
| EXPECT_EQ("/", url.PathParamsQuery()); | |
| EXPECT_EQ(80u, url.port()); | |
| // scheme is HTTPS. | |
| url_str = "https://www.example.com:12345/path/to/resource?a=1&campaign=2"; | |
| url = QuicUrl(url_str); | |
| EXPECT_TRUE(url.IsValid()); | |
| EXPECT_EQ("https://www.example.com:12345/path/to/resource?a=1&campaign=2", | |
| url.ToString()); | |
| EXPECT_EQ("https", url.scheme()); | |
| EXPECT_EQ("www.example.com:12345", url.HostPort()); | |
| EXPECT_EQ("/path/to/resource?a=1&campaign=2", url.PathParamsQuery()); | |
| EXPECT_EQ(12345u, url.port()); | |
| // scheme is FTP. | |
| url_str = "ftp://www.example.com"; | |
| url = QuicUrl(url_str); | |
| EXPECT_TRUE(url.IsValid()); | |
| EXPECT_EQ("ftp://www.example.com/", url.ToString()); | |
| EXPECT_EQ("ftp", url.scheme()); | |
| EXPECT_EQ("www.example.com", url.HostPort()); | |
| EXPECT_EQ("/", url.PathParamsQuery()); | |
| EXPECT_EQ(21u, url.port()); | |
| } | |
| TEST_F(QuicUrlTest, DefaultScheme) { | |
| // Default scheme to HTTP. | |
| std::string url_str = "www.example.com"; | |
| QuicUrl url(url_str, "http"); | |
| EXPECT_EQ("http://www.example.com/", url.ToString()); | |
| EXPECT_EQ("http", url.scheme()); | |
| // URL already has a scheme specified. | |
| url_str = "http://www.example.com"; | |
| url = QuicUrl(url_str, "https"); | |
| EXPECT_EQ("http://www.example.com/", url.ToString()); | |
| EXPECT_EQ("http", url.scheme()); | |
| // Default scheme to FTP. | |
| url_str = "www.example.com"; | |
| url = QuicUrl(url_str, "ftp"); | |
| EXPECT_EQ("ftp://www.example.com/", url.ToString()); | |
| EXPECT_EQ("ftp", url.scheme()); | |
| } | |
| TEST_F(QuicUrlTest, IsValid) { | |
| std::string url_str = | |
| "ftp://www.example.com:12345/path/to/resource?a=1&campaign=2"; | |
| EXPECT_TRUE(QuicUrl(url_str).IsValid()); | |
| // Invalid characters in host name. | |
| url_str = "https://www%.example.com:12345/path/to/resource?a=1&campaign=2"; | |
| EXPECT_FALSE(QuicUrl(url_str).IsValid()); | |
| // Invalid characters in scheme. | |
| url_str = "%http://www.example.com:12345/path/to/resource?a=1&campaign=2"; | |
| EXPECT_FALSE(QuicUrl(url_str).IsValid()); | |
| // Host name too long. | |
| std::string host(1024, 'a'); | |
| url_str = "https://" + host; | |
| EXPECT_FALSE(QuicUrl(url_str).IsValid()); | |
| // Invalid port number. | |
| url_str = "https://www..example.com:123456/path/to/resource?a=1&campaign=2"; | |
| EXPECT_FALSE(QuicUrl(url_str).IsValid()); | |
| } | |
| TEST_F(QuicUrlTest, HostPort) { | |
| std::string url_str = "http://www.example.com/"; | |
| QuicUrl url(url_str); | |
| EXPECT_EQ("www.example.com", url.HostPort()); | |
| EXPECT_EQ("www.example.com", url.host()); | |
| EXPECT_EQ(80u, url.port()); | |
| url_str = "http://www.example.com:80/"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("www.example.com", url.HostPort()); | |
| EXPECT_EQ("www.example.com", url.host()); | |
| EXPECT_EQ(80u, url.port()); | |
| url_str = "http://www.example.com:81/"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("www.example.com:81", url.HostPort()); | |
| EXPECT_EQ("www.example.com", url.host()); | |
| EXPECT_EQ(81u, url.port()); | |
| url_str = "https://192.168.1.1:443/"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("192.168.1.1", url.HostPort()); | |
| EXPECT_EQ("192.168.1.1", url.host()); | |
| EXPECT_EQ(443u, url.port()); | |
| url_str = "http://[2001::1]:80/"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("[2001::1]", url.HostPort()); | |
| EXPECT_EQ("2001::1", url.host()); | |
| EXPECT_EQ(80u, url.port()); | |
| url_str = "http://[2001::1]:81/"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("[2001::1]:81", url.HostPort()); | |
| EXPECT_EQ("2001::1", url.host()); | |
| EXPECT_EQ(81u, url.port()); | |
| } | |
| TEST_F(QuicUrlTest, PathParamsQuery) { | |
| std::string url_str = | |
| "https://www.example.com:12345/path/to/resource?a=1&campaign=2"; | |
| QuicUrl url(url_str); | |
| EXPECT_EQ("/path/to/resource?a=1&campaign=2", url.PathParamsQuery()); | |
| EXPECT_EQ("/path/to/resource", url.path()); | |
| url_str = "https://www.example.com/?"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("/?", url.PathParamsQuery()); | |
| EXPECT_EQ("/", url.path()); | |
| url_str = "https://www.example.com/"; | |
| url = QuicUrl(url_str); | |
| EXPECT_EQ("/", url.PathParamsQuery()); | |
| EXPECT_EQ("/", url.path()); | |
| } | |
| } // namespace | |
| } // namespace test | |
| } // namespace quic |