Skip to content

Commit d253afd

Browse files
committed
added integration test
1 parent c50093d commit d253afd

File tree

1 file changed

+51
-14
lines changed

1 file changed

+51
-14
lines changed

google/cloud/storage/tests/object_checksum_integration_test.cc

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,8 @@ TEST_F(ObjectChecksumIntegrationTest, WriteObjectDefault) {
145145
EXPECT_THAT(os.computed_hash(),
146146
HasSubstr(ComputeCrc32cChecksum(LoremIpsum())));
147147
if (meta->has_metadata("x_emulator_upload")) {
148-
if (UsingGrpc()) {
149-
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_crc32c", _)));
150-
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_md5", _)));
151-
} else {
152-
// Streaming uploads over REST cannot include checksums
153-
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_crc32c", _)));
154-
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_md5", _)));
155-
}
148+
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_crc32c", _)));
149+
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_md5", _)));
156150
}
157151
}
158152

@@ -200,14 +194,8 @@ TEST_F(ObjectChecksumIntegrationTest, WriteObjectExplicitEnable) {
200194
EXPECT_THAT(os.computed_hash(),
201195
HasSubstr(ComputeCrc32cChecksum(LoremIpsum())));
202196
if (meta->has_metadata("x_emulator_upload")) {
203-
if (UsingGrpc()) {
204197
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_crc32c", _)));
205198
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_md5", _)));
206-
} else {
207-
// Streaming uploads over REST cannot include checksums
208-
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_crc32c", _)));
209-
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_md5", _)));
210-
}
211199
}
212200
}
213201

@@ -289,6 +277,54 @@ TEST_F(ObjectChecksumIntegrationTest, WriteObjectUploadBadChecksum) {
289277
ASSERT_THAT(stream.metadata(), Not(IsOk()));
290278
}
291279

280+
/// @test Verify that full object checksums are sent in the final chunk.
281+
TEST_F(ObjectChecksumIntegrationTest, WriteObjectWithFullChecksumValidation) {
282+
auto client = MakeIntegrationTestClient();
283+
auto object_name = MakeRandomObjectName();
284+
auto content = LoremIpsum();
285+
auto expected_crc32c = ComputeCrc32cChecksum(content);
286+
287+
auto os = client.WriteObject(bucket_name_, object_name,
288+
DisableCrc32cChecksum(false),
289+
DisableMD5Hash(true),
290+
IfGenerationMatch(0));
291+
os << content;
292+
os.Close();
293+
auto meta = os.metadata();
294+
ASSERT_STATUS_OK(meta);
295+
ScheduleForDelete(*meta);
296+
297+
EXPECT_EQ(os.computed_hash(), expected_crc32c);
298+
299+
if (meta->has_metadata("x_emulator_upload")) {
300+
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_crc32c", expected_crc32c)));
301+
EXPECT_THAT(meta->metadata(), Contains(Pair("x_emulator_no_md5", "true")));
302+
}
303+
}
304+
305+
/// @test Verify that the upload fails when the provided CRC32C checksum does not match the data.
306+
TEST_F(ObjectChecksumIntegrationTest, WriteObjectWithIncorrectChecksumValue) {
307+
auto client = MakeIntegrationTestClient();
308+
auto object_name = MakeRandomObjectName();
309+
auto content = LoremIpsum();
310+
311+
auto bad_crc32c = ComputeCrc32cChecksum("this is not the data being uploaded");
312+
313+
auto os = client.WriteObject(bucket_name_, object_name,
314+
Crc32cChecksumValue(bad_crc32c),
315+
DisableMD5Hash(true),
316+
IfGenerationMatch(0));
317+
318+
os << content;
319+
os.Close();
320+
EXPECT_TRUE(os.bad());
321+
auto meta = os.metadata();
322+
EXPECT_THAT(meta, Not(IsOk()));
323+
324+
// The server returns FAILED_PRECONDITION (412) for checksum mismatches during finalization
325+
EXPECT_THAT(meta, StatusIs(StatusCode::kFailedPrecondition));
326+
}
327+
292328
/// @test Verify that CRC32C checksums are computed by default on downloads.
293329
TEST_F(ObjectChecksumIntegrationTest, ReadObjectDefault) {
294330
// TODO(#14385) - the emulator does not support this feature for gRPC.
@@ -385,3 +421,4 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
385421
} // namespace storage
386422
} // namespace cloud
387423
} // namespace google
424+

0 commit comments

Comments
 (0)