| #include "lldb/Utility/UriParser.h" |
| #include "gtest/gtest.h" |
| |
| using namespace lldb_private; |
| |
| // result strings (scheme/hostname/port/path) passed into UriParser::Parse |
| // are initialized to kAsdf so we can verify that they are unmodified if the |
| // URI is invalid |
| static const char *kAsdf = "asdf"; |
| |
| class UriTestCase { |
| public: |
| UriTestCase(const char *uri, const char *scheme, const char *hostname, |
| int port, const char *path) |
| : m_uri(uri), m_result(true), m_scheme(scheme), m_hostname(hostname), |
| m_port(port), m_path(path) {} |
| |
| UriTestCase(const char *uri) |
| : m_uri(uri), m_result(false), m_scheme(kAsdf), m_hostname(kAsdf), |
| m_port(1138), m_path(kAsdf) {} |
| |
| const char *m_uri; |
| bool m_result; |
| const char *m_scheme; |
| const char *m_hostname; |
| int m_port; |
| const char *m_path; |
| }; |
| |
| #define VALIDATE \ |
| llvm::StringRef scheme(kAsdf); \ |
| llvm::StringRef hostname(kAsdf); \ |
| int port(1138); \ |
| llvm::StringRef path(kAsdf); \ |
| EXPECT_EQ(testCase.m_result, \ |
| UriParser::Parse(testCase.m_uri, scheme, hostname, port, path)); \ |
| EXPECT_STREQ(testCase.m_scheme, scheme.str().c_str()); \ |
| EXPECT_STREQ(testCase.m_hostname, hostname.str().c_str()); \ |
| EXPECT_EQ(testCase.m_port, port); \ |
| EXPECT_STREQ(testCase.m_path, path.str().c_str()); |
| |
| TEST(UriParserTest, Minimal) { |
| const UriTestCase testCase("x://y", "x", "y", -1, "/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, MinimalPort) { |
| const UriTestCase testCase("x://y:1", "x", "y", 1, "/"); |
| llvm::StringRef scheme(kAsdf); |
| llvm::StringRef hostname(kAsdf); |
| int port(1138); |
| llvm::StringRef path(kAsdf); |
| bool result = UriParser::Parse(testCase.m_uri, scheme, hostname, port, path); |
| EXPECT_EQ(testCase.m_result, result); |
| |
| EXPECT_STREQ(testCase.m_scheme, scheme.str().c_str()); |
| EXPECT_STREQ(testCase.m_hostname, hostname.str().c_str()); |
| EXPECT_EQ(testCase.m_port, port); |
| EXPECT_STREQ(testCase.m_path, path.str().c_str()); |
| } |
| |
| TEST(UriParserTest, MinimalPath) { |
| const UriTestCase testCase("x://y/", "x", "y", -1, "/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, MinimalPortPath) { |
| const UriTestCase testCase("x://y:1/", "x", "y", 1, "/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, LongPath) { |
| const UriTestCase testCase("x://y/abc/def/xyz", "x", "y", -1, "/abc/def/xyz"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, TypicalPortPath) { |
| const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", |
| "192.168.100.132", 5432, "/"); |
| VALIDATE; |
| } |
| |
| TEST(UriParserTest, BracketedHostnamePort) { |
| const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", |
| "192.168.100.132", 5432, "/"); |
| llvm::StringRef scheme(kAsdf); |
| llvm::StringRef hostname(kAsdf); |
| int port(1138); |
| llvm::StringRef path(kAsdf); |
| bool result = UriParser::Parse(testCase.m_uri, scheme, hostname, port, path); |
| EXPECT_EQ(testCase.m_result, result); |
| |
| EXPECT_STREQ(testCase.m_scheme, scheme.str().c_str()); |
| EXPECT_STREQ(testCase.m_hostname, hostname.str().c_str()); |
| EXPECT_EQ(testCase.m_port, port); |
| EXPECT_STREQ(testCase.m_path, path.str().c_str()); |
| } |
| |
| TEST(UriParserTest, BracketedHostname) { |
| const UriTestCase testCase("connect://[192.168.100.132]", "connect", |
| "192.168.100.132", -1, "/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, BracketedHostnameWithColon) { |
| const UriTestCase testCase("connect://[192.168.100.132:5555]:1234", "connect", |
| "192.168.100.132:5555", 1234, "/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, SchemeHostSeparator) { |
| const UriTestCase testCase("x:/y"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, SchemeHostSeparator2) { |
| const UriTestCase testCase("x:y"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, SchemeHostSeparator3) { |
| const UriTestCase testCase("x//y"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, SchemeHostSeparator4) { |
| const UriTestCase testCase("x/y"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, BadPort) { |
| const UriTestCase testCase("x://y:a/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, BadPort2) { |
| const UriTestCase testCase("x://y:5432a/"); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, Empty) { |
| const UriTestCase testCase(""); |
| VALIDATE |
| } |
| |
| TEST(UriParserTest, PortOverflow) { |
| const UriTestCase testCase("x://" |
| "y:" |
| "0123456789012345678901234567890123456789012345678" |
| "9012345678901234567890123456789012345678901234567" |
| "89/"); |
| VALIDATE |
| } |