Chromium Code Reviews
|
| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/chromeos/gdata/gdata_db.h" | |
| 6 | |
| 7 #include "base/string_number_conversions.h" | |
| 8 #include "chrome/browser/chromeos/gdata/gdata_db_factory.h" | |
| 9 #include "chrome/browser/chromeos/gdata/gdata_files.h" | |
| 10 #include "testing/gtest/include/gtest/gtest.h" | |
| 11 #include "chrome/test/base/testing_profile.h" | |
| 12 | |
| 13 namespace gdata { | |
| 14 namespace { | |
| 15 | |
| 16 class GDataDBTest : public testing::Test { | |
| 17 public: | |
| 18 GDataDBTest() : sequence_id_(0) { | |
| 19 } | |
| 20 | |
| 21 virtual ~GDataDBTest() { | |
| 22 } | |
| 23 | |
| 24 protected: | |
| 25 // testing::Test implementation. | |
| 26 virtual void SetUp() OVERRIDE; | |
| 27 | |
| 28 // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry | |
| 29 // matching |source| does not exist. | |
| 30 void TestGetNotFound(const GDataEntry& source); | |
| 31 | |
| 32 // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry | |
| 33 // matching |source| exists. | |
| 34 void TestGetFound(const GDataEntry& source); | |
| 35 | |
| 36 // Initialize the database with the following entries: | |
| 37 // dir1 | |
| 38 // dir2 | |
| 39 // dir1/dir3 | |
| 40 // dir1/file4 | |
| 41 // dir1/file5 | |
| 42 // dir2/file6 | |
| 43 // dir2/file7 | |
| 44 // dir2/file8 | |
| 45 // dir1/dir3/file9 | |
| 46 // dir1/dir3/file10 | |
| 47 void InitDB(); | |
| 48 | |
| 49 // Helper functions to add a directory/file, incrementing index. | |
| 50 GDataDirectory* AddDirectory(GDataDirectory* parent); | |
| 51 GDataFile* AddFile(GDataDirectory* parent); | |
| 52 | |
| 53 // Tests GDataDB::NewIterator and GDataDBIter::GetNext. | |
| 54 // Creates an iterator with start at |parent|, and iterates comparing with | |
| 55 // expected |filenames|. | |
| 56 void TestIter(const std::string& parent, | |
| 57 const char* file_paths[], | |
| 58 size_t file_paths_size); | |
| 59 | |
| 60 int sequence_id_; | |
| 61 scoped_ptr<TestingProfile> profile_; | |
| 62 scoped_ptr<GDataDB> gdata_db_; | |
| 63 GDataRootDirectory root_; | |
| 64 }; | |
| 65 | |
| 66 void GDataDBTest::SetUp() { | |
| 67 profile_.reset(new TestingProfile()); | |
| 68 gdata_db_ = db_factory::CreateGDataDB( | |
| 69 profile_->GetPath().Append("testdb")); | |
| 70 } | |
| 71 | |
| 72 void GDataDBTest::TestGetNotFound(const GDataEntry& source) { | |
| 73 scoped_ptr<GDataEntry> entry; | |
| 74 GDataDB::Status status = gdata_db_->GetByPath(source.GetFilePath(), &entry); | |
| 75 EXPECT_EQ(GDataDB::DB_KEY_NOT_FOUND, status); | |
| 76 EXPECT_FALSE(entry.get()); | |
| 77 | |
| 78 status = gdata_db_->GetByResourceId(source.resource_id(), &entry); | |
| 79 EXPECT_EQ(GDataDB::DB_KEY_NOT_FOUND, status); | |
| 80 EXPECT_FALSE(entry.get()); | |
| 81 } | |
| 82 | |
| 83 void GDataDBTest::TestGetFound(const GDataEntry& source) { | |
| 84 scoped_ptr<GDataEntry> entry; | |
| 85 GDataDB::Status status = gdata_db_->GetByPath(source.GetFilePath(), &entry); | |
| 86 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 87 ASSERT_TRUE(entry.get()); | |
| 88 EXPECT_EQ(source.file_name(), entry->file_name()); | |
| 89 EXPECT_EQ(source.resource_id(), entry->resource_id()); | |
| 90 EXPECT_EQ(source.content_url(), entry->content_url()); | |
| 91 entry.reset(); | |
| 92 | |
| 93 status = gdata_db_->GetByResourceId(source.resource_id(), &entry); | |
| 94 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 95 ASSERT_TRUE(entry.get()); | |
| 96 EXPECT_EQ(source.file_name(), entry->file_name()); | |
| 97 EXPECT_EQ(source.resource_id(), entry->resource_id()); | |
| 98 EXPECT_EQ(source.content_url(), entry->content_url()); | |
| 99 } | |
| 100 | |
| 101 void GDataDBTest::InitDB() { | |
| 102 sequence_id_ = 1; | |
| 103 GDataDirectory* dir1 = AddDirectory(NULL); | |
|
satorux1
2012/04/24 21:47:57
rather than using a member variable, sequence_id_,
achuithb
2012/04/24 22:15:13
Done.
| |
| 104 GDataDirectory* dir2 = AddDirectory(NULL); | |
| 105 GDataDirectory* dir3 = AddDirectory(dir1); | |
| 106 | |
| 107 AddFile(dir1); | |
| 108 AddFile(dir1); | |
| 109 | |
| 110 AddFile(dir2); | |
| 111 AddFile(dir2); | |
| 112 AddFile(dir2); | |
| 113 | |
| 114 AddFile(dir3); | |
| 115 AddFile(dir3); | |
| 116 } | |
| 117 | |
| 118 GDataDirectory* GDataDBTest::AddDirectory(GDataDirectory* parent) { | |
| 119 GDataDirectory* dir = new GDataDirectory(parent ? parent : &root_, &root_); | |
| 120 const std::string dir_name = "dir" + base::IntToString(sequence_id_++); | |
| 121 const std::string resource_id = std::string("dir_resource_id:") + | |
| 122 dir_name; | |
| 123 dir->set_file_name(dir_name); | |
| 124 dir->set_resource_id(resource_id); | |
| 125 GDataDB::Status status = gdata_db_->Put(*dir); | |
| 126 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 127 DVLOG(1) << "AddDirectory " << dir->GetFilePath().value() | |
| 128 << ", " << resource_id; | |
| 129 return dir; | |
| 130 } | |
| 131 | |
| 132 GDataFile* GDataDBTest::AddFile(GDataDirectory* parent) { | |
| 133 GDataFile* file = new GDataFile(parent, &root_); | |
| 134 const std::string file_name = "file" + base::IntToString(sequence_id_++); | |
| 135 const std::string resource_id = std::string("file_resource_id:") + | |
| 136 file_name; | |
| 137 file->set_file_name(file_name); | |
| 138 file->set_resource_id(resource_id); | |
| 139 GDataDB::Status status = gdata_db_->Put(*file); | |
| 140 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 141 DVLOG(1) << "AddFile " << file->GetFilePath().value() | |
| 142 << ", " << resource_id; | |
| 143 return file; | |
| 144 } | |
| 145 | |
| 146 void GDataDBTest::TestIter(const std::string& parent, | |
| 147 const char* file_paths[], | |
| 148 size_t file_paths_size) { | |
| 149 scoped_ptr<GDataDBIter> iter = gdata_db_->CreateIterator( | |
| 150 FilePath::FromUTF8Unsafe(parent)); | |
| 151 for (size_t i = 0; ; ++i) { | |
| 152 scoped_ptr<GDataEntry> entry; | |
| 153 std::string path; | |
| 154 if (!iter->GetNext(&path, &entry)) { | |
| 155 EXPECT_EQ(i, file_paths_size); | |
| 156 break; | |
| 157 } | |
| 158 ASSERT_LT(i, file_paths_size); | |
| 159 // TODO(achuith): Also test entry->GetFilePath(). | |
|
satorux1
2012/04/24 21:47:57
why cannot we do this now?
achuithb
2012/04/24 22:15:13
GetFilePath() traverses the parent_ tree to constr
satorux1
2012/04/24 22:34:50
I see. you might want to move your comment here to
achuithb
2012/04/24 23:47:20
Done.
| |
| 160 EXPECT_EQ(FilePath(file_paths[i]).BaseName().value(), entry->file_name()); | |
| 161 EXPECT_EQ(file_paths[i], path); | |
| 162 DVLOG(1) << "Iter " << path; | |
| 163 } | |
| 164 } | |
| 165 | |
| 166 } // namespace | |
| 167 | |
| 168 TEST_F(GDataDBTest, PutTest) { | |
| 169 GDataDirectory* dir = new GDataDirectory(&root_, &root_); | |
| 170 dir->set_file_name("dir"); | |
| 171 dir->set_resource_id("dir_resource_id"); | |
| 172 dir->set_content_url(GURL("http://content/dir")); | |
| 173 dir->set_upload_url(GURL("http://upload/dir")); | |
| 174 | |
| 175 TestGetNotFound(*dir); | |
| 176 | |
| 177 GDataDB::Status status = gdata_db_->Put(*dir); | |
| 178 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 179 | |
| 180 TestGetFound(*dir); | |
| 181 | |
| 182 scoped_ptr<GDataEntry> entry; | |
| 183 gdata_db_->GetByPath(dir->GetFilePath(), &entry); | |
| 184 EXPECT_EQ(dir->upload_url(), entry->AsGDataDirectory()->upload_url()); | |
| 185 EXPECT_TRUE(entry->AsGDataDirectory()->file_info().is_directory); | |
| 186 | |
| 187 status = gdata_db_->DeleteByPath(dir->GetFilePath()); | |
| 188 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 189 | |
| 190 TestGetNotFound(*dir); | |
| 191 | |
| 192 GDataFile* file = new GDataFile(dir, &root_); | |
| 193 file->set_file_name("file1"); | |
| 194 file->set_resource_id("file1_resource_id"); | |
| 195 file->set_content_url(GURL("http://content/dir1/file1")); | |
| 196 file->set_file_md5("file1_md5"); | |
| 197 | |
| 198 TestGetNotFound(*file); | |
| 199 | |
| 200 status = gdata_db_->Put(*file); | |
| 201 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 202 | |
| 203 TestGetFound(*file); | |
| 204 | |
| 205 gdata_db_->GetByPath(file->GetFilePath(), &entry); | |
| 206 EXPECT_EQ(file->file_md5(), entry->AsGDataFile()->file_md5()); | |
| 207 EXPECT_FALSE(entry->AsGDataFile()->file_info().is_directory); | |
| 208 | |
| 209 status = gdata_db_->DeleteByPath(file->GetFilePath()); | |
| 210 EXPECT_EQ(GDataDB::DB_OK, status); | |
| 211 | |
| 212 TestGetNotFound(*file); | |
| 213 } | |
| 214 | |
| 215 TEST_F(GDataDBTest, IterTest) { | |
| 216 InitDB(); | |
| 217 | |
| 218 const char* dir1_children[] = { | |
| 219 "dir1", | |
| 220 "dir1/dir3", | |
| 221 "dir1/dir3/file10", | |
| 222 "dir1/dir3/file9", | |
| 223 "dir1/file4", | |
| 224 "dir1/file5", | |
| 225 }; | |
| 226 TestIter("dir1", dir1_children, arraysize(dir1_children)); | |
| 227 | |
| 228 const char* dir2_children[] = { | |
| 229 "dir2", | |
| 230 "dir2/file6", | |
| 231 "dir2/file7", | |
| 232 "dir2/file8", | |
| 233 }; | |
| 234 TestIter("dir2", dir2_children, arraysize(dir2_children)); | |
| 235 | |
| 236 const char* dir3_children[] = { | |
| 237 "dir1/dir3", | |
| 238 "dir1/dir3/file10", | |
| 239 "dir1/dir3/file9", | |
| 240 }; | |
| 241 TestIter("dir1/dir3", dir3_children, arraysize(dir3_children)); | |
| 242 | |
| 243 const char* file10[] = { | |
| 244 "dir1/dir3/file10", | |
| 245 }; | |
| 246 TestIter(file10[0], file10, arraysize(file10)); | |
| 247 | |
| 248 const char* all_entries[] = { | |
| 249 "dir1", | |
| 250 "dir1/dir3", | |
| 251 "dir1/dir3/file10", | |
| 252 "dir1/dir3/file9", | |
| 253 "dir1/file4", | |
| 254 "dir1/file5", | |
| 255 "dir2", | |
| 256 "dir2/file6", | |
| 257 "dir2/file7", | |
| 258 "dir2/file8", | |
| 259 }; | |
| 260 TestIter("", all_entries, arraysize(all_entries)); | |
| 261 | |
| 262 TestIter("dir4", NULL, 0); | |
| 263 } | |
| 264 | |
| 265 } // namespace gdata | |
| OLD | NEW |