unittest/url-validation-test.cpp (66 lines of code) (raw):
#include "iam/core/IAMUtils.h"
#include "common.h"
using namespace Redshift::IamSupport;
TEST(TEST_URL_VALIDATION_SUITE, test_happy_path){
EXPECT_NO_THROW(IAMUtils::ValidateURL("https://www.website.com:5439/path/to/something?q=123"));
}
TEST(TEST_URL_VALIDATION_SUITE, test_no_www){
EXPECT_NO_THROW(IAMUtils::ValidateURL("https://a.co"));
}
TEST(TEST_URL_VALIDATION_SUITE, test_no_www_empty_path){
EXPECT_NO_THROW(IAMUtils::ValidateURL("https://a.co/"));
}
TEST(TEST_URL_VALIDATION_SUITE, test_no_www_with_query){
EXPECT_NO_THROW(IAMUtils::ValidateURL("https://a.co?foo"));
}
TEST(TEST_URL_VALIDATION_SUITE, test_no_www_path_and_query){
EXPECT_NO_THROW(IAMUtils::ValidateURL("https://a.co/?foo"));
}
TEST(TEST_URL_VALIDATION_SUITE, test_anchor){
EXPECT_NO_THROW(IAMUtils::ValidateURL("https://www.website.com:5439/path/to/something#/anchor"));
}
TEST(TEST_URL_VALIDATION_SUITE, test_http){
EXPECT_THROW(IAMUtils::ValidateURL("http://www.website.com:5439/path/to/something?q=123"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_unsafe_char){
EXPECT_THROW(IAMUtils::ValidateURL("https://www.website.com:5439/path/to/something?{}|\^~[]`"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_inject_php){
EXPECT_THROW(IAMUtils::ValidateURL("http://www.website.com:5439/path/to/something?q=123; phpinfo()"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_null){
EXPECT_THROW(IAMUtils::ValidateURL(""), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_query_inject_shell_command){
EXPECT_THROW(IAMUtils::ValidateURL("https://demo_url?`ls`"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_inject_duplicate_schemes){
EXPECT_THROW(IAMUtils::ValidateURL("https://https://https://https://https://"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_no_domain){
EXPECT_THROW(IAMUtils::ValidateURL("https://"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_no_scheme){
EXPECT_THROW(IAMUtils::ValidateURL("www.website.com"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_domain_inject_shell_command){
EXPECT_THROW(IAMUtils::ValidateURL("https://www.`ls`.com"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_scheme_inject_shell_command){
EXPECT_THROW(IAMUtils::ValidateURL("https`ls`://www.website.com"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_path_inject_shell_command){
EXPECT_THROW(IAMUtils::ValidateURL("https://www.website.com:5439/path/`ls`/something?q=123"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_port_inject_shell_command){
EXPECT_THROW(IAMUtils::ValidateURL("https://www.website.com:5439`ls`/path/to/something?q=something"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_incorrect_format){
EXPECT_THROW(IAMUtils::ValidateURL("https://?this=that/path/to/something://www.website.com:2323/http://"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_userpwd){
EXPECT_THROW(IAMUtils::ValidateURL("https://user:password@website.com:5439/path/to/something?query=q#/anchor"), RsErrorException);
}
TEST(TEST_URL_VALIDATION_SUITE, test_ipv6){
EXPECT_THROW(IAMUtils::ValidateURL("http://[1080:0:0:0:8:800:200C:417A%eth0]/index.html"), RsErrorException);
}