Index: chrome/browser/chromeos/drive/drive_resource_metadata_storage_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/drive_resource_metadata_storage_unittest.cc b/chrome/browser/chromeos/drive/drive_resource_metadata_storage_unittest.cc |
index 04090f20642925d0b4daf69a17ef7560a7f5246a..d8453e5069565dc8f20e17a1fed4290c4b777c24 100644 |
--- a/chrome/browser/chromeos/drive/drive_resource_metadata_storage_unittest.cc |
+++ b/chrome/browser/chromeos/drive/drive_resource_metadata_storage_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/files/scoped_temp_dir.h" |
#include "chrome/browser/chromeos/drive/drive.pb.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/leveldatabase/src/include/leveldb/db.h" |
namespace drive { |
@@ -48,6 +49,26 @@ class DriveResourceMetadataStorageTest : public testing::Test { |
return storage_->CheckValidity(); |
} |
+ // Puts a child entry. |
+ void PutChild(const std::string& parent_resource_id, |
+ const std::string& child_base_name, |
+ const std::string& child_resource_id) { |
+ storage_->resource_map_->Put( |
+ leveldb::WriteOptions(), |
+ DriveResourceMetadataStorage::GetChildEntryKey(parent_resource_id, |
+ child_base_name), |
+ child_resource_id); |
+ } |
+ |
+ // Removes a child entry. |
+ void RemoveChild(const std::string& parent_resource_id, |
+ const std::string& child_base_name) { |
+ storage_->resource_map_->Delete( |
+ leveldb::WriteOptions(), |
+ DriveResourceMetadataStorage::GetChildEntryKey(parent_resource_id, |
+ child_base_name)); |
+ } |
+ |
base::ScopedTempDir temp_dir_; |
scoped_ptr<DriveResourceMetadataStorage> storage_; |
}; |
@@ -61,6 +82,9 @@ TEST_F(DriveResourceMetadataStorageTest, LargestChangestamp) { |
TEST_F(DriveResourceMetadataStorageTest, PutEntry) { |
const std::string key1 = "abcdefg"; |
const std::string key2 = "abcd"; |
+ const std::string key3 = "efgh"; |
+ const std::string name2 = "ABCD"; |
+ const std::string name3 = "EFGH"; |
DriveEntryProto entry1; |
entry1.set_resource_id(key1); |
@@ -69,7 +93,7 @@ TEST_F(DriveResourceMetadataStorageTest, PutEntry) { |
EXPECT_FALSE(storage_->GetEntry(key1)); |
// Put entry1. |
- storage_->PutEntry(entry1); |
+ EXPECT_TRUE(storage_->PutEntry(entry1)); |
// key1 found. |
scoped_ptr<DriveEntryProto> result; |
@@ -80,8 +104,42 @@ TEST_F(DriveResourceMetadataStorageTest, PutEntry) { |
// key2 not found. |
EXPECT_FALSE(storage_->GetEntry(key2)); |
- // Remove key1. |
- storage_->RemoveEntry(key1); |
+ // Put entry2 as a child of entry1. |
+ DriveEntryProto entry2; |
+ entry2.set_parent_resource_id(key1); |
+ entry2.set_resource_id(key2); |
+ entry2.set_base_name(name2); |
+ EXPECT_TRUE(storage_->PutEntry(entry2)); |
+ |
+ // key2 found. |
+ EXPECT_TRUE(storage_->GetEntry(key2)); |
+ EXPECT_EQ(key2, storage_->GetChild(key1, name2)); |
+ |
+ // Put entry3 as a child of entry2. |
+ DriveEntryProto entry3; |
+ entry3.set_parent_resource_id(key2); |
+ entry3.set_resource_id(key3); |
+ entry3.set_base_name(name3); |
+ EXPECT_TRUE(storage_->PutEntry(entry3)); |
+ |
+ // key3 found. |
+ EXPECT_TRUE(storage_->GetEntry(key3)); |
+ EXPECT_EQ(key3, storage_->GetChild(key2, name3)); |
+ |
+ // Change entry3's parent to entry1. |
+ entry3.set_parent_resource_id(key1); |
+ EXPECT_TRUE(storage_->PutEntry(entry3)); |
+ |
+ // entry3 is a child of entry1 now. |
+ EXPECT_TRUE(storage_->GetChild(key2, name3).empty()); |
+ EXPECT_EQ(key3, storage_->GetChild(key1, name3)); |
+ |
+ // Remove entries. |
+ EXPECT_TRUE(storage_->RemoveEntry(key3)); |
+ EXPECT_FALSE(storage_->GetEntry(key3)); |
+ EXPECT_TRUE(storage_->RemoveEntry(key2)); |
+ EXPECT_FALSE(storage_->GetEntry(key2)); |
+ EXPECT_TRUE(storage_->RemoveEntry(key1)); |
EXPECT_FALSE(storage_->GetEntry(key1)); |
} |
@@ -100,7 +158,7 @@ TEST_F(DriveResourceMetadataStorageTest, Iterate) { |
entries.push_back(entry); |
for (size_t i = 0; i < entries.size(); ++i) |
- storage_->PutEntry(entries[i]); |
+ EXPECT_TRUE(storage_->PutEntry(entries[i])); |
// Call Iterate and check the result. |
std::map<std::string, DriveEntryProto> result; |
@@ -111,49 +169,6 @@ TEST_F(DriveResourceMetadataStorageTest, Iterate) { |
EXPECT_EQ(1U, result.count(entries[i].resource_id())); |
} |
-TEST_F(DriveResourceMetadataStorageTest, PutChild) { |
- const std::string parent_id1 = "abcdefg"; |
- const std::string parent_id2 = "abcd"; |
- const std::string child_name1 = "WXYZABC"; |
- const std::string child_name2 = "efgWXYZABC"; |
- const std::string child_id1 = "qwerty"; |
- const std::string child_id2 = "asdfgh"; |
- |
- // No child found. |
- EXPECT_TRUE(storage_->GetChild(parent_id1, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id1, child_name2).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name2).empty()); |
- |
- // Put child1 under parent1. |
- storage_->PutChild(parent_id1, child_name1, child_id1); |
- EXPECT_EQ(child_id1, storage_->GetChild(parent_id1, child_name1)); |
- EXPECT_TRUE(storage_->GetChild(parent_id1, child_name2).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name2).empty()); |
- |
- // Put child2 under parent1. |
- storage_->PutChild(parent_id1, child_name2, child_id2); |
- EXPECT_EQ(child_id1, storage_->GetChild(parent_id1, child_name1)); |
- EXPECT_EQ(child_id2, storage_->GetChild(parent_id1, child_name2)); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name2).empty()); |
- |
- // Remove child1. |
- storage_->RemoveChild(parent_id1, child_name1); |
- EXPECT_TRUE(storage_->GetChild(parent_id1, child_name1).empty()); |
- EXPECT_EQ(child_id2, storage_->GetChild(parent_id1, child_name2)); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name2).empty()); |
- |
- // Remove child2. |
- storage_->RemoveChild(parent_id1, child_name2); |
- EXPECT_TRUE(storage_->GetChild(parent_id1, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id1, child_name2).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name1).empty()); |
- EXPECT_TRUE(storage_->GetChild(parent_id2, child_name2).empty()); |
-} |
- |
TEST_F(DriveResourceMetadataStorageTest, GetChildren) { |
const std::string parents_id[] = { "mercury", "venus", "mars", "jupiter", |
"saturn" }; |
@@ -174,21 +189,30 @@ TEST_F(DriveResourceMetadataStorageTest, GetChildren) { |
children_name_id[4].push_back(std::make_pair("titan", "saturn_vi")); |
children_name_id[4].push_back(std::make_pair("iapetus", "saturn_vii")); |
+ // Put parents. |
+ for (size_t i = 0; i < arraysize(parents_id); ++i) { |
+ DriveEntryProto entry; |
+ entry.set_resource_id(parents_id[i]); |
+ EXPECT_TRUE(storage_->PutEntry(entry)); |
+ } |
+ |
// Put some data. |
- for (size_t i = 0; i != children_name_id.size(); ++i) { |
- for (size_t j = 0; j != children_name_id[i].size(); ++j) { |
- storage_->PutChild(parents_id[i], |
- children_name_id[i][j].first, |
- children_name_id[i][j].second); |
+ for (size_t i = 0; i < children_name_id.size(); ++i) { |
+ for (size_t j = 0; j < children_name_id[i].size(); ++j) { |
+ DriveEntryProto entry; |
+ entry.set_parent_resource_id(parents_id[i]); |
+ entry.set_base_name(children_name_id[i][j].first); |
+ entry.set_resource_id(children_name_id[i][j].second); |
+ EXPECT_TRUE(storage_->PutEntry(entry)); |
} |
} |
// Try to get children. |
- for (size_t i = 0; i != children_name_id.size(); ++i) { |
+ for (size_t i = 0; i < children_name_id.size(); ++i) { |
std::vector<std::string> children; |
storage_->GetChildren(parents_id[i], &children); |
EXPECT_EQ(children_name_id[i].size(), children.size()); |
- for (size_t j = 0; j != children_name_id[i].size(); ++j) { |
+ for (size_t j = 0; j < children_name_id[i].size(); ++j) { |
EXPECT_EQ(1, std::count(children.begin(), |
children.end(), |
children_name_id[i][j].second)); |
@@ -209,9 +233,8 @@ TEST_F(DriveResourceMetadataStorageTest, OpenExistingDB) { |
entry2.set_base_name(child_name1); |
// Put some data. |
- storage_->PutEntry(entry1); |
- storage_->PutEntry(entry2); |
- storage_->PutChild(parent_id1, child_name1, child_id1); |
+ EXPECT_TRUE(storage_->PutEntry(entry1)); |
+ EXPECT_TRUE(storage_->PutEntry(entry2)); |
// Close DB and reopen. |
storage_.reset(new DriveResourceMetadataStorage(temp_dir_.path())); |
@@ -241,7 +264,7 @@ TEST_F(DriveResourceMetadataStorageTest, IncompatibleDB) { |
// Put some data. |
storage_->SetLargestChangestamp(kLargestChangestamp); |
- storage_->PutEntry(entry); |
+ EXPECT_TRUE(storage_->PutEntry(entry)); |
EXPECT_TRUE(storage_->GetEntry(key1)); |
// Set incompatible version and reopen DB. |
@@ -279,57 +302,60 @@ TEST_F(DriveResourceMetadataStorageTest, CheckValidity) { |
DriveEntryProto entry; |
entry.set_resource_id(key1); |
entry.set_base_name(name1); |
- storage_->PutEntry(entry); |
+ EXPECT_TRUE(storage_->PutEntry(entry)); |
EXPECT_TRUE(CheckValidity()); |
// Put entry with key2 under key1. |
entry.set_resource_id(key2); |
entry.set_parent_resource_id(key1); |
entry.set_base_name(name2); |
- storage_->PutEntry(entry); |
+ EXPECT_TRUE(storage_->PutEntry(entry)); |
+ EXPECT_TRUE(CheckValidity()); |
+ |
+ RemoveChild(key1, name2); |
EXPECT_FALSE(CheckValidity()); // Missing parent-child relationship. |
- // Add missing parent-child relationship between key1 and key2. |
- storage_->PutChild(key1, name2, key2); |
+ // Add back parent-child relationship between key1 and key2. |
+ PutChild(key1, name2, key2); |
EXPECT_TRUE(CheckValidity()); |
// Add parent-child relationship between key2 and key3. |
- storage_->PutChild(key2, name3, key3); |
+ PutChild(key2, name3, key3); |
EXPECT_FALSE(CheckValidity()); // key3 is not stored in the storage. |
// Put entry with key3 under key2. |
entry.set_resource_id(key3); |
entry.set_parent_resource_id(key2); |
entry.set_base_name(name3); |
- storage_->PutEntry(entry); |
+ EXPECT_TRUE(storage_->PutEntry(entry)); |
EXPECT_TRUE(CheckValidity()); |
// Parent-child relationship with wrong name. |
- storage_->RemoveChild(key2, name3); |
+ RemoveChild(key2, name3); |
EXPECT_FALSE(CheckValidity()); |
- storage_->PutChild(key2, name2, key3); |
+ PutChild(key2, name2, key3); |
EXPECT_FALSE(CheckValidity()); |
// Fix up the relationship between key2 and key3. |
- storage_->RemoveChild(key2, name2); |
+ RemoveChild(key2, name2); |
EXPECT_FALSE(CheckValidity()); |
- storage_->PutChild(key2, name3, key3); |
+ PutChild(key2, name3, key3); |
EXPECT_TRUE(CheckValidity()); |
// Remove key2. |
- storage_->RemoveChild(key1, name2); |
+ RemoveChild(key1, name2); |
EXPECT_FALSE(CheckValidity()); |
- storage_->RemoveEntry(key2); |
+ EXPECT_TRUE(storage_->RemoveEntry(key2)); |
EXPECT_FALSE(CheckValidity()); |
// Remove key3. |
- storage_->RemoveChild(key2, name3); |
+ RemoveChild(key2, name3); |
EXPECT_FALSE(CheckValidity()); |
- storage_->RemoveEntry(key3); |
+ EXPECT_TRUE(storage_->RemoveEntry(key3)); |
EXPECT_TRUE(CheckValidity()); |
// Remove key1. |
- storage_->RemoveEntry(key1); |
+ EXPECT_TRUE(storage_->RemoveEntry(key1)); |
EXPECT_TRUE(CheckValidity()); |
} |