Index: sync/internal_api/attachments/on_disk_attachment_store_unittest.cc |
diff --git a/sync/internal_api/attachments/on_disk_attachment_store_unittest.cc b/sync/internal_api/attachments/on_disk_attachment_store_unittest.cc |
deleted file mode 100644 |
index 67e27f2ee9ead83f170ec75f6949670716671105..0000000000000000000000000000000000000000 |
--- a/sync/internal_api/attachments/on_disk_attachment_store_unittest.cc |
+++ /dev/null |
@@ -1,524 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "sync/internal_api/public/attachments/on_disk_attachment_store.h" |
- |
-#include <stdint.h> |
- |
-#include <string> |
-#include <utility> |
- |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/run_loop.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "base/time/time.h" |
-#include "sync/internal_api/attachments/attachment_store_test_template.h" |
-#include "sync/internal_api/attachments/proto/attachment_store.pb.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/leveldatabase/src/include/leveldb/db.h" |
-#include "third_party/leveldatabase/src/include/leveldb/options.h" |
-#include "third_party/leveldatabase/src/include/leveldb/slice.h" |
-#include "third_party/leveldatabase/src/include/leveldb/status.h" |
- |
-namespace syncer { |
- |
-namespace { |
- |
-void AttachmentStoreCreated(AttachmentStore::Result* result_dest, |
- const AttachmentStore::Result& result) { |
- *result_dest = result; |
-} |
- |
-} // namespace |
- |
-// Instantiation of common attachment store tests. |
-class OnDiskAttachmentStoreFactory { |
- public: |
- OnDiskAttachmentStoreFactory() {} |
- ~OnDiskAttachmentStoreFactory() {} |
- |
- std::unique_ptr<AttachmentStore> CreateAttachmentStore() { |
- EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- std::unique_ptr<AttachmentStore> store; |
- AttachmentStore::Result result = AttachmentStore::UNSPECIFIED_ERROR; |
- store = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- base::RunLoop run_loop; |
- run_loop.RunUntilIdle(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, result); |
- return store; |
- } |
- |
- private: |
- base::ScopedTempDir temp_dir_; |
-}; |
- |
-INSTANTIATE_TYPED_TEST_CASE_P(OnDisk, |
- AttachmentStoreTest, |
- OnDiskAttachmentStoreFactory); |
- |
-// Tests specific to OnDiskAttachmentStore. |
-class OnDiskAttachmentStoreSpecificTest : public testing::Test { |
- public: |
- base::ScopedTempDir temp_dir_; |
- base::FilePath db_path_; |
- base::MessageLoop message_loop_; |
- std::unique_ptr<AttachmentStore> store_; |
- |
- OnDiskAttachmentStoreSpecificTest() {} |
- |
- void SetUp() override { |
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- db_path_ = temp_dir_.path().Append(FILE_PATH_LITERAL("leveldb")); |
- base::CreateDirectory(db_path_); |
- } |
- |
- void CopyResult(AttachmentStore::Result* destination_result, |
- const AttachmentStore::Result& source_result) { |
- *destination_result = source_result; |
- } |
- |
- void CopyResultAttachments( |
- AttachmentStore::Result* destination_result, |
- AttachmentIdList* destination_failed_attachment_ids, |
- const AttachmentStore::Result& source_result, |
- std::unique_ptr<AttachmentMap> source_attachments, |
- std::unique_ptr<AttachmentIdList> source_failed_attachment_ids) { |
- CopyResult(destination_result, source_result); |
- *destination_failed_attachment_ids = *source_failed_attachment_ids; |
- } |
- |
- void CopyResultMetadata( |
- AttachmentStore::Result* destination_result, |
- std::unique_ptr<AttachmentMetadataList>* destination_metadata, |
- const AttachmentStore::Result& source_result, |
- std::unique_ptr<AttachmentMetadataList> source_metadata) { |
- CopyResult(destination_result, source_result); |
- *destination_metadata = std::move(source_metadata); |
- } |
- |
- std::unique_ptr<leveldb::DB> OpenLevelDB() { |
- leveldb::DB* db; |
- leveldb::Options options; |
- options.create_if_missing = true; |
- leveldb::Status s = |
- leveldb::DB::Open(options, db_path_.AsUTF8Unsafe(), &db); |
- EXPECT_TRUE(s.ok()); |
- return base::WrapUnique(db); |
- } |
- |
- void UpdateRecord(const std::string& key, const std::string& content) { |
- std::unique_ptr<leveldb::DB> db = OpenLevelDB(); |
- leveldb::Status s = db->Put(leveldb::WriteOptions(), key, content); |
- EXPECT_TRUE(s.ok()); |
- } |
- |
- void UpdateStoreMetadataRecord(const std::string& content) { |
- UpdateRecord("database-metadata", content); |
- } |
- |
- void UpdateAttachmentMetadataRecord(const AttachmentId& attachment_id, |
- const std::string& content) { |
- std::string metadata_key = |
- OnDiskAttachmentStore::MakeMetadataKeyFromAttachmentId(attachment_id); |
- UpdateRecord(metadata_key, content); |
- } |
- |
- std::string ReadStoreMetadataRecord() { |
- std::unique_ptr<leveldb::DB> db = OpenLevelDB(); |
- std::string content; |
- leveldb::Status s = |
- db->Get(leveldb::ReadOptions(), "database-metadata", &content); |
- EXPECT_TRUE(s.ok()); |
- return content; |
- } |
- |
- void VerifyAttachmentRecordsPresent(const AttachmentId& attachment_id, |
- bool expect_records_present) { |
- std::unique_ptr<leveldb::DB> db = OpenLevelDB(); |
- |
- std::string metadata_key = |
- OnDiskAttachmentStore::MakeMetadataKeyFromAttachmentId(attachment_id); |
- std::string data_key = |
- OnDiskAttachmentStore::MakeDataKeyFromAttachmentId(attachment_id); |
- std::string data; |
- leveldb::Status s = db->Get(leveldb::ReadOptions(), data_key, &data); |
- if (expect_records_present) |
- EXPECT_TRUE(s.ok()); |
- else |
- EXPECT_TRUE(s.IsNotFound()); |
- s = db->Get(leveldb::ReadOptions(), metadata_key, &data); |
- if (expect_records_present) |
- EXPECT_TRUE(s.ok()); |
- else |
- EXPECT_TRUE(s.IsNotFound()); |
- } |
- |
- void RunLoop() { |
- base::RunLoop run_loop; |
- run_loop.RunUntilIdle(); |
- } |
-}; |
- |
-// Ensure that store can be closed and reopen while retaining stored |
-// attachments. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, CloseAndReopen) { |
- AttachmentStore::Result result; |
- |
- result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, result); |
- |
- result = AttachmentStore::UNSPECIFIED_ERROR; |
- std::string some_data = "data"; |
- Attachment attachment = |
- Attachment::Create(base::RefCountedString::TakeString(&some_data)); |
- AttachmentList attachments; |
- attachments.push_back(attachment); |
- store_->Write(attachments, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), |
- &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, result); |
- |
- // Close and reopen attachment store. |
- store_ = nullptr; |
- result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, result); |
- |
- result = AttachmentStore::UNSPECIFIED_ERROR; |
- AttachmentIdList attachment_ids; |
- attachment_ids.push_back(attachment.GetId()); |
- AttachmentIdList failed_attachment_ids; |
- store_->Read( |
- attachment_ids, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultAttachments, |
- base::Unretained(this), &result, &failed_attachment_ids)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, result); |
- EXPECT_TRUE(failed_attachment_ids.empty()); |
-} |
- |
-// Ensure loading corrupt attachment store fails. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, FailToOpen) { |
- // To simulate corrupt database write empty CURRENT file. |
- std::string current_file_content = ""; |
- base::WriteFile(db_path_.Append(FILE_PATH_LITERAL("CURRENT")), |
- current_file_content.c_str(), current_file_content.size()); |
- |
- AttachmentStore::Result result = AttachmentStore::SUCCESS; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, result); |
-} |
- |
-// Ensure that attachment store works correctly when store metadata is missing, |
-// corrupt or has unknown schema version. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, StoreMetadata) { |
- // Create and close empty database. |
- OpenLevelDB(); |
- // Open database with AttachmentStore. |
- AttachmentStore::Result result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, result); |
- // Close AttachmentStore so that test can check content. |
- store_ = nullptr; |
- RunLoop(); |
- |
- // AttachmentStore should create metadata record. |
- std::string data = ReadStoreMetadataRecord(); |
- attachment_store_pb::StoreMetadata metadata; |
- EXPECT_TRUE(metadata.ParseFromString(data)); |
- EXPECT_EQ(1, metadata.schema_version()); |
- |
- // Set unknown future schema version. |
- metadata.set_schema_version(2); |
- data = metadata.SerializeAsString(); |
- UpdateStoreMetadataRecord(data); |
- |
- // AttachmentStore should fail to load. |
- result = AttachmentStore::SUCCESS; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, result); |
- |
- // Write garbage into metadata record. |
- UpdateStoreMetadataRecord("abra.cadabra"); |
- |
- // AttachmentStore should fail to load. |
- result = AttachmentStore::SUCCESS; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &result)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, result); |
-} |
- |
-// Ensure that attachment store correctly maintains metadata records for |
-// attachments. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, RecordMetadata) { |
- // Create attachment store. |
- AttachmentStore::Result create_result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &create_result)); |
- |
- // Write two attachments. |
- AttachmentStore::Result write_result = AttachmentStore::UNSPECIFIED_ERROR; |
- std::string some_data; |
- AttachmentList attachments; |
- some_data = "data1"; |
- attachments.push_back( |
- Attachment::Create(base::RefCountedString::TakeString(&some_data))); |
- some_data = "data2"; |
- attachments.push_back( |
- Attachment::Create(base::RefCountedString::TakeString(&some_data))); |
- store_->Write(attachments, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &write_result)); |
- |
- // Delete one of written attachments. |
- AttachmentStore::Result drop_result = AttachmentStore::UNSPECIFIED_ERROR; |
- AttachmentIdList attachment_ids; |
- attachment_ids.push_back(attachments[0].GetId()); |
- store_->Drop(attachment_ids, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &drop_result)); |
- store_ = nullptr; |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, create_result); |
- EXPECT_EQ(AttachmentStore::SUCCESS, write_result); |
- EXPECT_EQ(AttachmentStore::SUCCESS, drop_result); |
- |
- // Verify that attachment store contains only records for second attachment. |
- VerifyAttachmentRecordsPresent(attachments[0].GetId(), false); |
- VerifyAttachmentRecordsPresent(attachments[1].GetId(), true); |
-} |
- |
-// Ensure that attachment store fails to load attachment if the crc in the store |
-// does not match the data. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, MismatchedCrcInStore) { |
- // Create attachment store. |
- AttachmentStore::Result create_result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &create_result)); |
- |
- // Write attachment with incorrect crc32c. |
- AttachmentStore::Result write_result = AttachmentStore::UNSPECIFIED_ERROR; |
- const uint32_t intentionally_wrong_crc32c = 0; |
- |
- scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString()); |
- some_data->data() = "data1"; |
- Attachment attachment = Attachment::CreateFromParts( |
- AttachmentId::Create(some_data->size(), intentionally_wrong_crc32c), |
- some_data); |
- AttachmentList attachments; |
- attachments.push_back(attachment); |
- store_->Write(attachments, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &write_result)); |
- |
- // Read attachment. |
- AttachmentStore::Result read_result = AttachmentStore::UNSPECIFIED_ERROR; |
- AttachmentIdList attachment_ids; |
- attachment_ids.push_back(attachment.GetId()); |
- AttachmentIdList failed_attachment_ids; |
- store_->Read( |
- attachment_ids, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultAttachments, |
- base::Unretained(this), &read_result, &failed_attachment_ids)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, create_result); |
- EXPECT_EQ(AttachmentStore::SUCCESS, write_result); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, read_result); |
- EXPECT_THAT(failed_attachment_ids, testing::ElementsAre(attachment.GetId())); |
-} |
- |
-// Ensure that attachment store fails to load attachment if the crc in the id |
-// does not match the data. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, MismatchedCrcInId) { |
- // Create attachment store. |
- AttachmentStore::Result create_result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &create_result)); |
- |
- AttachmentStore::Result write_result = AttachmentStore::UNSPECIFIED_ERROR; |
- scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString()); |
- some_data->data() = "data1"; |
- Attachment attachment = Attachment::Create(some_data); |
- AttachmentList attachments; |
- attachments.push_back(attachment); |
- store_->Write(attachments, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &write_result)); |
- |
- // Read, but with the wrong crc32c in the id. |
- AttachmentStore::Result read_result = AttachmentStore::SUCCESS; |
- |
- AttachmentId id_with_bad_crc32c = |
- AttachmentId::Create(attachment.GetId().GetSize(), 12345); |
- AttachmentIdList attachment_ids; |
- attachment_ids.push_back(id_with_bad_crc32c); |
- AttachmentIdList failed_attachment_ids; |
- store_->Read( |
- attachment_ids, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultAttachments, |
- base::Unretained(this), &read_result, &failed_attachment_ids)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, create_result); |
- EXPECT_EQ(AttachmentStore::SUCCESS, write_result); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, read_result); |
- EXPECT_THAT(failed_attachment_ids, testing::ElementsAre(id_with_bad_crc32c)); |
-} |
- |
-// Ensure that after store initialization failure ReadWrite/Drop operations fail |
-// with correct error. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, OpsAfterInitializationFailed) { |
- // To simulate corrupt database write empty CURRENT file. |
- std::string current_file_content = ""; |
- base::WriteFile(db_path_.Append(FILE_PATH_LITERAL("CURRENT")), |
- current_file_content.c_str(), current_file_content.size()); |
- |
- AttachmentStore::Result create_result = AttachmentStore::SUCCESS; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &create_result)); |
- |
- // Reading from uninitialized store should result in |
- // STORE_INITIALIZATION_FAILED. |
- AttachmentStore::Result read_result = AttachmentStore::SUCCESS; |
- AttachmentIdList attachment_ids; |
- std::string some_data("data1"); |
- Attachment attachment = |
- Attachment::Create(base::RefCountedString::TakeString(&some_data)); |
- attachment_ids.push_back(attachment.GetId()); |
- AttachmentIdList failed_attachment_ids; |
- store_->Read( |
- attachment_ids, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultAttachments, |
- base::Unretained(this), &read_result, &failed_attachment_ids)); |
- |
- // Dropping from uninitialized store should result in |
- // STORE_INITIALIZATION_FAILED. |
- AttachmentStore::Result drop_result = AttachmentStore::SUCCESS; |
- store_->Drop(attachment_ids, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &drop_result)); |
- |
- // Writing to uninitialized store should result in |
- // STORE_INITIALIZATION_FAILED. |
- AttachmentStore::Result write_result = AttachmentStore::SUCCESS; |
- AttachmentList attachments; |
- attachments.push_back(attachment); |
- store_->Write(attachments, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &write_result)); |
- |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, create_result); |
- EXPECT_EQ(AttachmentStore::STORE_INITIALIZATION_FAILED, read_result); |
- EXPECT_THAT(failed_attachment_ids, testing::ElementsAre(attachment_ids[0])); |
- EXPECT_EQ(AttachmentStore::STORE_INITIALIZATION_FAILED, drop_result); |
- EXPECT_EQ(AttachmentStore::STORE_INITIALIZATION_FAILED, write_result); |
-} |
- |
-// Ensure that attachment store handles the case of having an unexpected |
-// record at the end without crashing. |
-TEST_F(OnDiskAttachmentStoreSpecificTest, ReadMetadataWithUnexpectedRecord) { |
- // Write a bogus entry at the end of the database. |
- UpdateRecord("zzz", "foobar"); |
- |
- // Create attachment store. |
- AttachmentStore::Result create_result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &create_result)); |
- |
- // Read all metadata. Should be getting no error and zero entries. |
- AttachmentStore::Result metadata_result = AttachmentStore::UNSPECIFIED_ERROR; |
- std::unique_ptr<AttachmentMetadataList> metadata_list; |
- store_->ReadMetadata( |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultMetadata, |
- base::Unretained(this), &metadata_result, &metadata_list)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, create_result); |
- EXPECT_EQ(AttachmentStore::SUCCESS, metadata_result); |
- EXPECT_EQ(0U, metadata_list->size()); |
- metadata_list.reset(); |
- |
- // Write 3 attachments to the store |
- AttachmentList attachments; |
- |
- for (int i = 0; i < 3; i++) { |
- std::string some_data = "data"; |
- Attachment attachment = |
- Attachment::Create(base::RefCountedString::TakeString(&some_data)); |
- attachments.push_back(attachment); |
- } |
- AttachmentStore::Result write_result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_->Write(attachments, |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResult, |
- base::Unretained(this), &write_result)); |
- |
- // Read all metadata back. We should be getting 3 entries. |
- store_->ReadMetadata( |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultMetadata, |
- base::Unretained(this), &metadata_result, &metadata_list)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, write_result); |
- EXPECT_EQ(AttachmentStore::SUCCESS, metadata_result); |
- EXPECT_EQ(3U, metadata_list->size()); |
- // Get Id of the attachment in the middle. |
- AttachmentId id = (*metadata_list.get())[1].GetId(); |
- metadata_list.reset(); |
- |
- // Close the store. |
- store_ = nullptr; |
- RunLoop(); |
- |
- // Modify the middle attachment metadata entry so that it isn't valid anymore. |
- UpdateAttachmentMetadataRecord(id, "foobar"); |
- |
- // Reopen the store. |
- create_result = AttachmentStore::UNSPECIFIED_ERROR; |
- metadata_result = AttachmentStore::UNSPECIFIED_ERROR; |
- store_ = AttachmentStore::CreateOnDiskStore( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get(), |
- base::Bind(&AttachmentStoreCreated, &create_result)); |
- |
- // Read all metadata back. We should be getting a failure and |
- // only 2 entries now. |
- store_->ReadMetadata( |
- base::Bind(&OnDiskAttachmentStoreSpecificTest::CopyResultMetadata, |
- base::Unretained(this), &metadata_result, &metadata_list)); |
- RunLoop(); |
- EXPECT_EQ(AttachmentStore::SUCCESS, create_result); |
- EXPECT_EQ(AttachmentStore::UNSPECIFIED_ERROR, metadata_result); |
- EXPECT_EQ(2U, metadata_list->size()); |
-} |
- |
-} // namespace syncer |