Commit e1812c07 authored by Leonid Baraz's avatar Leonid Baraz Committed by Chromium LUCI CQ

Fix reading bug in StorageQueue.

Bug was detected while working on stress test:
When part of the data is available and we want to read more,
we need to start not from initial 'pos' but shift to the position
after the available data! The original code always started to read
from the initial position - thus reading some data twice.

Also some cleanup done.

BUG: b:177439641
Change-Id: I59c9d36f97d2a7193ff0d211c61f5afb7cf2d60b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2626102Reviewed-by: default avatarZach Trudo <zatrudo@google.com>
Commit-Queue: Leonid Baraz <lbaraz@chromium.org>
Auto-Submit: Leonid Baraz <lbaraz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843284}
parent 35e8309c
......@@ -72,7 +72,7 @@ void EncryptionModule::EncryptRecord(
encrypted_record.mutable_encrypted_wrapped_record()->assign(record.begin(),
record.end());
// encryption_info is not set.
std::move(cb).Run(encrypted_record);
std::move(cb).Run(std::move(encrypted_record));
return;
}
......
......@@ -366,8 +366,8 @@ Status StorageQueue::ScanLastFile() {
read_result.ValueOrDie().data(), header.record_size);
if (header.record_hash != actual_record_hash) {
LOG(ERROR) << "Hash mismatch, seq=" << header.record_sequencing_id
<< " expected_hash=" << std::hex << actual_record_hash
<< " actual_hash=" << std::hex << header.record_hash;
<< " actual_hash=" << std::hex << actual_record_hash
<< " expected_hash=" << std::hex << header.record_hash;
break;
}
// Everything looks all right. Advance the sequencing id.
......@@ -1410,8 +1410,10 @@ StatusOr<base::StringPiece> StorageQueue::SingleFile::Read(
data_start_ = 0;
}
size_t actual_size = data_end_ - data_start_;
pos += actual_size;
while (actual_size < size) {
// Read as much as possible.
DCHECK_LT(data_end_, buffer_size_);
const int32_t result =
handle_->Read(pos, reinterpret_cast<char*>(buffer_.get() + data_end_),
buffer_size_ - data_end_);
......
......@@ -269,7 +269,7 @@ class StorageQueueTest : public ::testing::TestWithParam<size_t> {
.set_single_file_size(GetParam());
}
void CreateStorageQueueOrDie(const QueueOptions& options) {
void CreateTestStorageQueueOrDie(const QueueOptions& options) {
ASSERT_FALSE(storage_queue_) << "StorageQueue already assigned";
test_encryption_module_ =
base::MakeRefCounted<test::TestEncryptionModule>();
......@@ -285,6 +285,11 @@ class StorageQueueTest : public ::testing::TestWithParam<size_t> {
storage_queue_ = std::move(storage_queue_result.ValueOrDie());
}
void ResetTestStorageQueue() {
task_environment_.RunUntilIdle();
storage_queue_.reset();
}
void InjectFailures(std::initializer_list<uint64_t> seq_numbers) {
storage_queue_->TestInjectBlockReadErrors(seq_numbers);
}
......@@ -351,50 +356,50 @@ class StorageQueueTest : public ::testing::TestWithParam<size_t> {
base::test::TaskEnvironment::TimeSource::MOCK_TIME};
};
constexpr std::array<const char*, 3> data = {"Rec1111", "Rec222", "Rec33"};
constexpr std::array<const char*, 3> more_data = {"More1111", "More222",
constexpr std::array<const char*, 3> kData = {"Rec1111", "Rec222", "Rec33"};
constexpr std::array<const char*, 3> kMoreData = {"More1111", "More222",
"More33"};
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndReopen) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull())).Times(0);
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
storage_queue_.reset();
ResetTestStorageQueue();
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
}
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueReopenAndWriteMore) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull())).Times(0);
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
storage_queue_.reset();
ResetTestStorageQueue();
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
}
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndUpload) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Trigger upload.
......@@ -402,10 +407,10 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndUpload) {
}
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndUploadWithFailures) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Inject simulated failures.
InjectFailures({1});
......@@ -414,9 +419,9 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndUploadWithFailures) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(0, kData[0])
.RequiredGap(1, 1)
.Possible(2, data[2]); // Depending on records binpacking
.Possible(2, kData[2]); // Depending on records binpacking
}));
// Trigger upload.
......@@ -424,28 +429,28 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndUploadWithFailures) {
}
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueReopenWriteMoreAndUpload) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
storage_queue_.reset();
ResetTestStorageQueue();
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
// Trigger upload.
......@@ -454,15 +459,15 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueReopenWriteMoreAndUpload) {
TEST_P(StorageQueueTest,
WriteIntoNewStorageQueueReopenWithMissingMetadataWriteMoreAndUpload) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Save copy of options.
const QueueOptions options = storage_queue_->options();
storage_queue_.reset();
ResetTestStorageQueue();
// Delete all metadata files.
base::FileEnumerator dir_enum(
......@@ -475,18 +480,18 @@ TEST_P(StorageQueueTest,
}
// Reopen, starting a new generation.
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Set uploader expectations. Previous data is all lost.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, more_data[0])
.Required(1, more_data[1])
.Required(2, more_data[2]);
.Required(0, kMoreData[0])
.Required(1, kMoreData[1])
.Required(2, kMoreData[2]);
}));
// Trigger upload.
......@@ -495,18 +500,18 @@ TEST_P(StorageQueueTest,
TEST_P(StorageQueueTest,
WriteIntoNewStorageQueueReopenWithMissingDataWriteMoreAndUpload) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Save copy of options.
const QueueOptions options = storage_queue_->options();
storage_queue_.reset();
ResetTestStorageQueue();
// Reopen with the same generation and sequencing information.
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
// Delete the first data file.
base::FilePath full_name = options.directory().Append(
......@@ -514,9 +519,9 @@ TEST_P(StorageQueueTest,
base::DeleteFile(full_name);
// Write more data.
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Set uploader expectations. Previous data is all lost.
// The expected results depend on the test configuration.
......@@ -526,11 +531,11 @@ TEST_P(StorageQueueTest,
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.PossibleGap(0, 1)
.Required(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
break;
case 256: // two records in file - deletion killed the first two records.
......@@ -540,9 +545,9 @@ TEST_P(StorageQueueTest,
.PossibleGap(0, 2)
.Failure(
2, Status(error::DATA_LOSS, "Last record digest mismatch"))
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
break;
default: // UNlimited file size - deletion above killed all the data.
......@@ -557,18 +562,18 @@ TEST_P(StorageQueueTest,
}
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndFlush) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Flush manually.
......@@ -576,28 +581,28 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndFlush) {
}
TEST_P(StorageQueueTest, WriteIntoNewStorageQueueReopenWriteMoreAndFlush) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
storage_queue_.reset();
ResetTestStorageQueue();
CreateStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
// Flush manually.
......@@ -609,7 +614,7 @@ TEST_P(StorageQueueTest, ValidateVariousRecordSizes) {
for (size_t i = 16; i < 16 + 16; ++i) {
data.emplace_back(i, 'R');
}
CreateStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
for (const auto& record : data) {
WriteStringOrDie(record);
}
......@@ -628,19 +633,19 @@ TEST_P(StorageQueueTest, ValidateVariousRecordSizes) {
}
TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmations) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
......@@ -652,8 +657,8 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmations) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(1, data[1])
.Required(2, data[2]);
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -663,24 +668,24 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmations) {
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client).Required(2, data[2]);
MockUploadClient::SetUp(mock_upload_client).Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
// Add more data and verify that #2 and new data are returned.
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -691,27 +696,27 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmations) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
}
TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmationsAndReopen) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
......@@ -723,8 +728,8 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmationsAndReopen) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(1, data[1])
.Required(2, data[2]);
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -734,29 +739,29 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmationsAndReopen) {
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client).Required(2, data[2]);
MockUploadClient::SetUp(mock_upload_client).Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
storage_queue_.reset();
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
ResetTestStorageQueue();
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
// Add more data and verify that #2 and new data are returned.
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -767,28 +772,28 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmationsAndReopen) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
}
TEST_P(StorageQueueTest,
WriteAndRepeatedlyUploadWithConfirmationsAndReopenWithFailures) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
WriteStringOrDie(data[0]);
WriteStringOrDie(data[1]);
WriteStringOrDie(data[2]);
WriteStringOrDie(kData[0]);
WriteStringOrDie(kData[1]);
WriteStringOrDie(kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
......@@ -800,8 +805,8 @@ TEST_P(StorageQueueTest,
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(1, data[1])
.Required(2, data[2]);
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -811,18 +816,18 @@ TEST_P(StorageQueueTest,
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client).Required(2, data[2]);
MockUploadClient::SetUp(mock_upload_client).Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
storage_queue_.reset();
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
ResetTestStorageQueue();
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
// Add more data and verify that #2 and new data are returned.
WriteStringOrDie(more_data[0]);
WriteStringOrDie(more_data[1]);
WriteStringOrDie(more_data[2]);
WriteStringOrDie(kMoreData[0]);
WriteStringOrDie(kMoreData[1]);
WriteStringOrDie(kMoreData[2]);
// Inject simulated failures.
InjectFailures({4, 5});
......@@ -831,10 +836,10 @@ TEST_P(StorageQueueTest,
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Possible(0, kData[0])
.Possible(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
// Gap may be 2 records at once or 2 gaps 1 record each.
.PossibleGap(4, 2)
.PossibleGap(4, 1)
......@@ -852,15 +857,15 @@ TEST_P(StorageQueueTest,
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
}
TEST_P(StorageQueueTest, WriteAndRepeatedlyImmediateUpload) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsImmediate());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsImmediate());
// Upload is initiated asynchronously, so it may happen after the next
// record is also written. Because of that we set expectations for the
......@@ -868,31 +873,31 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyImmediateUpload) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Required(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(data[0]);
WriteStringOrDie(kData[0]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Possible(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(data[1]);
WriteStringOrDie(kData[1]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
WriteStringOrDie(data[2]);
WriteStringOrDie(kData[2]);
}
TEST_P(StorageQueueTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsImmediate());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsImmediate());
// Upload is initiated asynchronously, so it may happen after the next
// record is also written. Because of the Confirmation below, we set
......@@ -901,27 +906,27 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(data[0]);
WriteStringOrDie(kData[0]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(data[1]);
WriteStringOrDie(kData[1]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Required(2, data[2]); // Not confirmed - hence |Required|
.Possible(0, kData[0])
.Possible(1, kData[1])
.Required(2, kData[2]); // Not confirmed - hence |Required|
}));
WriteStringOrDie(data[2]);
WriteStringOrDie(kData[2]);
// Confirm #1, removing data #0 and #1
ConfirmOrDie(/*seq_number=*/1);
......@@ -933,34 +938,34 @@ TEST_P(StorageQueueTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Possible(4, more_data[1])
.Possible(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Possible(4, kMoreData[1])
.Possible(5, kMoreData[2]);
}));
WriteStringOrDie(more_data[0]);
WriteStringOrDie(kMoreData[0]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Possible(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Possible(5, kMoreData[2]);
}));
WriteStringOrDie(more_data[1]);
WriteStringOrDie(kMoreData[1]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
WriteStringOrDie(more_data[2]);
WriteStringOrDie(kMoreData[2]);
}
TEST_P(StorageQueueTest, WriteEncryptFailure) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
CreateTestStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
DCHECK(test_encryption_module_);
EXPECT_CALL(*test_encryption_module_, EncryptRecord(_, _))
.WillOnce(WithArg<1>(
......
......@@ -605,16 +605,16 @@ class StorageTest
set_mock_uploader_expectations_;
};
constexpr std::array<const char*, 3> data = {"Rec1111", "Rec222", "Rec33"};
constexpr std::array<const char*, 3> more_data = {"More1111", "More222",
constexpr std::array<const char*, 3> kData = {"Rec1111", "Rec222", "Rec33"};
constexpr std::array<const char*, 3> kMoreData = {"More1111", "More222",
"More33"};
TEST_P(StorageTest, WriteIntoNewStorageAndReopen) {
CreateTestStorageOrDie(BuildTestStorageOptions());
EXPECT_CALL(set_mock_uploader_expectations_, Call(_, NotNull())).Times(0);
WriteStringOrDie(FAST_BATCH, data[0]);
WriteStringOrDie(FAST_BATCH, data[1]);
WriteStringOrDie(FAST_BATCH, data[2]);
WriteStringOrDie(FAST_BATCH, kData[0]);
WriteStringOrDie(FAST_BATCH, kData[1]);
WriteStringOrDie(FAST_BATCH, kData[2]);
ResetTestStorage();
......@@ -624,32 +624,32 @@ TEST_P(StorageTest, WriteIntoNewStorageAndReopen) {
TEST_P(StorageTest, WriteIntoNewStorageReopenAndWriteMore) {
CreateTestStorageOrDie(BuildTestStorageOptions());
EXPECT_CALL(set_mock_uploader_expectations_, Call(_, NotNull())).Times(0);
WriteStringOrDie(FAST_BATCH, data[0]);
WriteStringOrDie(FAST_BATCH, data[1]);
WriteStringOrDie(FAST_BATCH, data[2]);
WriteStringOrDie(FAST_BATCH, kData[0]);
WriteStringOrDie(FAST_BATCH, kData[1]);
WriteStringOrDie(FAST_BATCH, kData[2]);
ResetTestStorage();
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(FAST_BATCH, more_data[0]);
WriteStringOrDie(FAST_BATCH, more_data[1]);
WriteStringOrDie(FAST_BATCH, more_data[2]);
WriteStringOrDie(FAST_BATCH, kMoreData[0]);
WriteStringOrDie(FAST_BATCH, kMoreData[1]);
WriteStringOrDie(FAST_BATCH, kMoreData[2]);
}
TEST_P(StorageTest, WriteIntoNewStorageAndUpload) {
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(FAST_BATCH, data[0]);
WriteStringOrDie(FAST_BATCH, data[1]);
WriteStringOrDie(FAST_BATCH, data[2]);
WriteStringOrDie(FAST_BATCH, kData[0]);
WriteStringOrDie(FAST_BATCH, kData[1]);
WriteStringOrDie(FAST_BATCH, kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(FAST_BATCH), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Trigger upload.
......@@ -658,28 +658,28 @@ TEST_P(StorageTest, WriteIntoNewStorageAndUpload) {
TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndUpload) {
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(FAST_BATCH, data[0]);
WriteStringOrDie(FAST_BATCH, data[1]);
WriteStringOrDie(FAST_BATCH, data[2]);
WriteStringOrDie(FAST_BATCH, kData[0]);
WriteStringOrDie(FAST_BATCH, kData[1]);
WriteStringOrDie(FAST_BATCH, kData[2]);
ResetTestStorage();
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(FAST_BATCH, more_data[0]);
WriteStringOrDie(FAST_BATCH, more_data[1]);
WriteStringOrDie(FAST_BATCH, more_data[2]);
WriteStringOrDie(FAST_BATCH, kMoreData[0]);
WriteStringOrDie(FAST_BATCH, kMoreData[1]);
WriteStringOrDie(FAST_BATCH, kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(FAST_BATCH), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
// Trigger upload.
......@@ -688,9 +688,9 @@ TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndUpload) {
TEST_P(StorageTest, WriteIntoNewStorageAndFlush) {
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(MANUAL_BATCH, data[0]);
WriteStringOrDie(MANUAL_BATCH, data[1]);
WriteStringOrDie(MANUAL_BATCH, data[2]);
WriteStringOrDie(MANUAL_BATCH, kData[0]);
WriteStringOrDie(MANUAL_BATCH, kData[1]);
WriteStringOrDie(MANUAL_BATCH, kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_,
......@@ -698,9 +698,9 @@ TEST_P(StorageTest, WriteIntoNewStorageAndFlush) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Trigger upload.
......@@ -709,16 +709,16 @@ TEST_P(StorageTest, WriteIntoNewStorageAndFlush) {
TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndFlush) {
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(MANUAL_BATCH, data[0]);
WriteStringOrDie(MANUAL_BATCH, data[1]);
WriteStringOrDie(MANUAL_BATCH, data[2]);
WriteStringOrDie(MANUAL_BATCH, kData[0]);
WriteStringOrDie(MANUAL_BATCH, kData[1]);
WriteStringOrDie(MANUAL_BATCH, kData[2]);
ResetTestStorage();
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(MANUAL_BATCH, more_data[0]);
WriteStringOrDie(MANUAL_BATCH, more_data[1]);
WriteStringOrDie(MANUAL_BATCH, more_data[2]);
WriteStringOrDie(MANUAL_BATCH, kMoreData[0]);
WriteStringOrDie(MANUAL_BATCH, kMoreData[1]);
WriteStringOrDie(MANUAL_BATCH, kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_,
......@@ -726,12 +726,12 @@ TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndFlush) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
// Trigger upload.
......@@ -741,18 +741,18 @@ TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndFlush) {
TEST_P(StorageTest, WriteAndRepeatedlyUploadWithConfirmations) {
CreateTestStorageOrDie(BuildTestStorageOptions());
WriteStringOrDie(FAST_BATCH, data[0]);
WriteStringOrDie(FAST_BATCH, data[1]);
WriteStringOrDie(FAST_BATCH, data[2]);
WriteStringOrDie(FAST_BATCH, kData[0]);
WriteStringOrDie(FAST_BATCH, kData[1]);
WriteStringOrDie(FAST_BATCH, kData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(FAST_BATCH), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
......@@ -765,8 +765,8 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadWithConfirmations) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(1, data[1])
.Required(2, data[2]);
.Required(1, kData[1])
.Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -778,25 +778,25 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadWithConfirmations) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(2, data[2]);
.Required(2, kData[2]);
}));
// Forward time to trigger upload
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
// Add more records and verify that #2 and new records are returned.
WriteStringOrDie(FAST_BATCH, more_data[0]);
WriteStringOrDie(FAST_BATCH, more_data[1]);
WriteStringOrDie(FAST_BATCH, more_data[2]);
WriteStringOrDie(FAST_BATCH, kMoreData[0]);
WriteStringOrDie(FAST_BATCH, kMoreData[1]);
WriteStringOrDie(FAST_BATCH, kMoreData[2]);
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(FAST_BATCH), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
......@@ -808,9 +808,9 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadWithConfirmations) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
}
......@@ -825,32 +825,32 @@ TEST_P(StorageTest, WriteAndRepeatedlyImmediateUpload) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Required(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE,
data[0]); // Immediately uploads and verifies.
kData[0]); // Immediately uploads and verifies.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Possible(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE,
data[1]); // Immediately uploads and verifies.
kData[1]); // Immediately uploads and verifies.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, data[0])
.Required(1, data[1])
.Required(2, data[2]);
.Required(0, kData[0])
.Required(1, kData[1])
.Required(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE,
data[2]); // Immediately uploads and verifies.
kData[2]); // Immediately uploads and verifies.
}
TEST_P(StorageTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {
......@@ -864,29 +864,29 @@ TEST_P(StorageTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE, data[0]);
WriteStringOrDie(IMMEDIATE, kData[0]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE, data[1]);
WriteStringOrDie(IMMEDIATE, kData[1]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Required(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Required(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE, data[2]);
WriteStringOrDie(IMMEDIATE, kData[2]);
// Confirm #1, removing data #0 and #1
ConfirmOrDie(IMMEDIATE, /*sequencing_id=*/1);
......@@ -899,32 +899,32 @@ TEST_P(StorageTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Possible(4, more_data[1])
.Possible(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Possible(4, kMoreData[1])
.Possible(5, kMoreData[2]);
}));
WriteStringOrDie(IMMEDIATE, more_data[0]);
WriteStringOrDie(IMMEDIATE, kMoreData[0]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Possible(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Possible(5, kMoreData[2]);
}));
WriteStringOrDie(IMMEDIATE, more_data[1]);
WriteStringOrDie(IMMEDIATE, kMoreData[1]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(2, data[2])
.Required(3, more_data[0])
.Required(4, more_data[1])
.Required(5, more_data[2]);
.Required(2, kData[2])
.Required(3, kMoreData[0])
.Required(4, kMoreData[1])
.Required(5, kMoreData[2]);
}));
WriteStringOrDie(IMMEDIATE, more_data[2]);
WriteStringOrDie(IMMEDIATE, kMoreData[2]);
}
TEST_P(StorageTest, WriteAndRepeatedlyUploadMultipleQueues) {
......@@ -938,22 +938,22 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadMultipleQueues) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE, data[0]);
WriteStringOrDie(SLOW_BATCH, more_data[0]);
WriteStringOrDie(IMMEDIATE, kData[0]);
WriteStringOrDie(SLOW_BATCH, kMoreData[0]);
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(IMMEDIATE), NotNull()))
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Possible(0, data[0])
.Possible(1, data[1])
.Possible(2, data[2]);
.Possible(0, kData[0])
.Possible(1, kData[1])
.Possible(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE, data[1]);
WriteStringOrDie(SLOW_BATCH, more_data[1]);
WriteStringOrDie(IMMEDIATE, kData[1]);
WriteStringOrDie(SLOW_BATCH, kMoreData[1]);
// Set uploader expectations for SLOW_BATCH.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(FAST_BATCH), NotNull()))
......@@ -965,8 +965,8 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadMultipleQueues) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Required(0, more_data[0])
.Required(1, more_data[1]);
.Required(0, kMoreData[0])
.Required(1, kMoreData[1]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(20));
......@@ -981,11 +981,11 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadMultipleQueues) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(priority, mock_upload_client)
.Possible(1, data[1])
.Required(2, data[2]);
.Possible(1, kData[1])
.Required(2, kData[2]);
}));
WriteStringOrDie(IMMEDIATE, data[2]);
WriteStringOrDie(SLOW_BATCH, more_data[2]);
WriteStringOrDie(IMMEDIATE, kData[2]);
WriteStringOrDie(SLOW_BATCH, kMoreData[2]);
// Set uploader expectations for SLOW_BATCH.
EXPECT_CALL(set_mock_uploader_expectations_, Call(Eq(FAST_BATCH), NotNull()))
......@@ -997,8 +997,8 @@ TEST_P(StorageTest, WriteAndRepeatedlyUploadMultipleQueues) {
.WillOnce(
Invoke([](Priority priority, MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp(SLOW_BATCH, mock_upload_client)
.Required(1, more_data[1])
.Required(2, more_data[2]);
.Required(1, kMoreData[1])
.Required(2, kMoreData[2]);
}));
task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(20));
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment