|
8 | 8 |
|
9 | 9 | namespace nix {
|
10 | 10 |
|
| 11 | +// ============================================================================= |
| 12 | +// ParsedS3URL Tests |
| 13 | +// ============================================================================= |
| 14 | + |
11 | 15 | struct ParsedS3URLTestCase
|
12 | 16 | {
|
13 | 17 | std::string url;
|
@@ -86,18 +90,41 @@ INSTANTIATE_TEST_SUITE_P(
|
86 | 90 | }),
|
87 | 91 | [](const ::testing::TestParamInfo<ParsedS3URLTestCase> & info) { return info.param.description; });
|
88 | 92 |
|
89 |
| -TEST(InvalidParsedS3URLTest, parseS3URLErrors) |
| 93 | +// Parameterized test for invalid S3 URLs |
| 94 | +struct InvalidS3URLTestCase |
90 | 95 | {
|
91 |
| - auto invalidBucketMatcher = ::testing::ThrowsMessage<BadURL>( |
92 |
| - testing::HasSubstrIgnoreANSIMatcher("error: URI has a missing or invalid bucket name")); |
| 96 | + std::string url; |
| 97 | + std::string expectedErrorSubstring; |
| 98 | + std::string description; |
| 99 | +}; |
93 | 100 |
|
94 |
| - /* Empty bucket (authority) */ |
95 |
| - ASSERT_THAT([]() { ParsedS3URL::parse(parseURL("s3:///key")); }, invalidBucketMatcher); |
96 |
| - /* Invalid bucket name */ |
97 |
| - ASSERT_THAT([]() { ParsedS3URL::parse(parseURL("s3://127.0.0.1")); }, invalidBucketMatcher); |
| 101 | +class InvalidParsedS3URLTest : public ::testing::WithParamInterface<InvalidS3URLTestCase>, public ::testing::Test |
| 102 | +{}; |
| 103 | + |
| 104 | +TEST_P(InvalidParsedS3URLTest, parseS3URLErrors) |
| 105 | +{ |
| 106 | + const auto & testCase = GetParam(); |
| 107 | + |
| 108 | + ASSERT_THAT( |
| 109 | + [&testCase]() { ParsedS3URL::parse(parseURL(testCase.url)); }, |
| 110 | + ::testing::ThrowsMessage<BadURL>(testing::HasSubstrIgnoreANSIMatcher(testCase.expectedErrorSubstring))); |
98 | 111 | }
|
99 | 112 |
|
100 |
| -// Parameterized test for s3ToHttpsUrl conversion |
| 113 | +INSTANTIATE_TEST_SUITE_P( |
| 114 | + InvalidUrls, |
| 115 | + InvalidParsedS3URLTest, |
| 116 | + ::testing::Values( |
| 117 | + InvalidS3URLTestCase{"s3:///key", "error: URI has a missing or invalid bucket name", "empty_bucket"}, |
| 118 | + InvalidS3URLTestCase{"s3://127.0.0.1", "error: URI has a missing or invalid bucket name", "ip_address_bucket"}, |
| 119 | + InvalidS3URLTestCase{"s3://bucket with spaces/key", "is not a valid URL", "bucket_with_spaces"}, |
| 120 | + InvalidS3URLTestCase{"s3://", "error: URI has a missing or invalid bucket name", "completely_empty"}, |
| 121 | + InvalidS3URLTestCase{"s3://bucket", "error: URI has a missing or invalid key", "missing_key"}), |
| 122 | + [](const ::testing::TestParamInfo<InvalidS3URLTestCase> & info) { return info.param.description; }); |
| 123 | + |
| 124 | +// ============================================================================= |
| 125 | +// S3 URL to HTTPS Conversion Tests |
| 126 | +// ============================================================================= |
| 127 | + |
101 | 128 | struct S3ToHttpsConversionTestCase
|
102 | 129 | {
|
103 | 130 | ParsedS3URL input;
|
|
0 commit comments