forked from OSchip/llvm-project
156 lines
4.8 KiB
C++
156 lines
4.8 KiB
C++
#include "Utility/UriParser.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace {
|
|
class UriParserTest : public ::testing::Test {};
|
|
}
|
|
|
|
// 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_F(UriParserTest, Minimal) {
|
|
const UriTestCase testCase("x://y", "x", "y", -1, "/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(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_F(UriParserTest, MinimalPath) {
|
|
const UriTestCase testCase("x://y/", "x", "y", -1, "/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, MinimalPortPath) {
|
|
const UriTestCase testCase("x://y:1/", "x", "y", 1, "/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, LongPath) {
|
|
const UriTestCase testCase("x://y/abc/def/xyz", "x", "y", -1, "/abc/def/xyz");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, TypicalPortPath) {
|
|
const UriTestCase testCase("connect://192.168.100.132:5432/", "connect",
|
|
"192.168.100.132", 5432, "/");
|
|
VALIDATE;
|
|
}
|
|
|
|
TEST_F(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_F(UriParserTest, BracketedHostname) {
|
|
const UriTestCase testCase("connect://[192.168.100.132]", "connect",
|
|
"192.168.100.132", -1, "/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, BracketedHostnameWithColon) {
|
|
const UriTestCase testCase("connect://[192.168.100.132:5555]:1234", "connect",
|
|
"192.168.100.132:5555", 1234, "/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, SchemeHostSeparator) {
|
|
const UriTestCase testCase("x:/y");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, SchemeHostSeparator2) {
|
|
const UriTestCase testCase("x:y");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, SchemeHostSeparator3) {
|
|
const UriTestCase testCase("x//y");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, SchemeHostSeparator4) {
|
|
const UriTestCase testCase("x/y");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, BadPort) {
|
|
const UriTestCase testCase("x://y:a/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, BadPort2) {
|
|
const UriTestCase testCase("x://y:5432a/");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, Empty) {
|
|
const UriTestCase testCase("");
|
|
VALIDATE
|
|
}
|
|
|
|
TEST_F(UriParserTest, PortOverflow) {
|
|
const UriTestCase testCase("x://"
|
|
"y:"
|
|
"0123456789012345678901234567890123456789012345678"
|
|
"9012345678901234567890123456789012345678901234567"
|
|
"89/");
|
|
VALIDATE
|
|
}
|