/** * @file tests/unit/test_httpcommon.cpp * @brief Test src/httpcommon.*. */ // test imports #include "../tests_common.h" // lib imports #include // local imports #include struct UrlEscapeTest: testing::TestWithParam> {}; TEST_P(UrlEscapeTest, Run) { const auto &[input, expected] = GetParam(); ASSERT_EQ(http::url_escape(input), expected); } INSTANTIATE_TEST_SUITE_P( UrlEscapeTests, UrlEscapeTest, testing::Values( std::make_tuple("igdb_0123456789", "igdb_0123456789"), std::make_tuple("../../../", "..%2F..%2F..%2F"), std::make_tuple("..*\\", "..%2A%5C") ) ); struct UrlGetHostTest: testing::TestWithParam> {}; TEST_P(UrlGetHostTest, Run) { const auto &[input, expected] = GetParam(); ASSERT_EQ(http::url_get_host(input), expected); } INSTANTIATE_TEST_SUITE_P( UrlGetHostTests, UrlGetHostTest, testing::Values( std::make_tuple("https://images.igdb.com/example.txt", "images.igdb.com"), std::make_tuple("http://localhost:8080", "localhost"), std::make_tuple("nonsense!!}{::", "") ) ); struct DownloadFileTest: testing::TestWithParam> {}; TEST_P(DownloadFileTest, Run) { const auto &[url, filename] = GetParam(); const std::string test_dir = platf::appdata().string() + "/tests/"; std::string path = test_dir + filename; ASSERT_TRUE(http::download_file(url, path, CURL_SSLVERSION_TLSv1_0)); } #ifdef SUNSHINE_BUILD_FLATPAK // requires running `npm run serve` prior to running the tests constexpr const char *URL_1 = "http://0.0.0.0:3000/hello.txt"; constexpr const char *URL_2 = "http://0.0.0.0:3000/hello-redirect.txt"; #else constexpr const char *URL_1 = "https://httpbin.org/base64/aGVsbG8h"; constexpr const char *URL_2 = "https://httpbin.org/redirect-to?url=/base64/aGVsbG8h"; #endif INSTANTIATE_TEST_SUITE_P( DownloadFileTests, DownloadFileTest, testing::Values( std::make_tuple(URL_1, "hello.txt"), std::make_tuple(URL_2, "hello-redirect.txt") ) );