Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_db_unittest.cc

Issue 10168025: GDataDB support with leveldb. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fixes Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
satorux1 2012/04/23 17:40:41 shouldn't this be gdata_leveldb_unittest?
achuithb 2012/04/24 08:09:36 No, it tests GDataDB. I'm not including gdata_leve
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_files.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "chrome/test/base/testing_profile.h"
11
12 namespace gdata {
13 namespace {
14
15 class GDataDBTest : public testing::Test {
16 public:
17 GDataDBTest() : index_(0) {
18 }
19
20 virtual ~GDataDBTest() {
21 }
22
23 protected:
24 // testing::Test implementation.
25 virtual void SetUp() OVERRIDE;
26
27 // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry
28 // with path |file_name| or resource_id |resource_id| does not exist.
29 void TestGetNotFound(const std::string& file_name,
30 const std::string& resource_id);
31
32 // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry
33 // with path |file_name| and resource_id |resource_id| exists. Additionally
34 // tests entry's content_url matches |content_url|.
35 void TestGetFound(const std::string& file_name,
36 const std::string& resource_id,
37 const GURL& content_url);
38
39 // Initialize the database with the following entries:
40 // /gdata/dir1
41 // /gdata/dir2
42 // /gdata/dir1/dir3
43 // /gdata/dir1/file4
44 // /gdata/dir1/file5
45 // /gdata/dir2/file6
46 // /gdata/dir2/file7
47 // /gdata/dir2/file8
48 // /gdata/dir1/dir3/file9
49 // /gdata/dir1/dir3/file10
50 void InitDB();
51
52 // Helper functions to add a directory/file, incrementing index.
53 void AddDir(const std::string& parent);
54 void AddFile(const std::string& parent);
55
56 // Tests GDataDB::NewIterator and GDataDBIter::GetNext.
57 // Creates an iterator with start at |parent|, and iterates comparing with
58 // expected |filenames|.
59 void TestIter(const std::string& parent,
60 const char* file_names[],
61 uint32 file_names_size);
62
63 int index_;
64 scoped_ptr<TestingProfile> profile_;
65 scoped_ptr<GDataDB> gdata_db_;
66 };
67
68 void GDataDBTest::SetUp() {
69 profile_.reset(new TestingProfile());
70 gdata_db_ = GDataDB::Create(profile_->GetPath().Append("testdb"));
71 }
72
73 void GDataDBTest::TestGetNotFound(const std::string& file_name,
74 const std::string& resource_id) {
75 scoped_ptr<GDataEntry> entry;
76 GDataDB::Status status = gdata_db_->GetByPath(file_name, &entry);
77 EXPECT_EQ(GDataDB::DB_NOT_FOUND, status);
78 EXPECT_FALSE(entry.get());
79
80 status = gdata_db_->GetByResourceId(resource_id, &entry);
81 EXPECT_EQ(GDataDB::DB_NOT_FOUND, status);
82 EXPECT_FALSE(entry.get());
83 }
84
85 void GDataDBTest::TestGetFound(const std::string& file_name,
86 const std::string& resource_id,
87 const GURL& content_url) {
88 scoped_ptr<GDataEntry> entry;
89 GDataDB::Status status = gdata_db_->GetByPath(file_name, &entry);
90 EXPECT_EQ(GDataDB::DB_OK, status);
91 ASSERT_TRUE(entry.get());
92 EXPECT_EQ(file_name, entry->file_name());
93 EXPECT_EQ(resource_id, entry->resource_id());
94 EXPECT_EQ(content_url, entry->content_url());
95 entry.reset();
96
97 status = gdata_db_->GetByResourceId(resource_id, &entry);
98 EXPECT_EQ(GDataDB::DB_OK, status);
99 ASSERT_TRUE(entry.get());
100 EXPECT_EQ(file_name, entry->file_name());
101 EXPECT_EQ(resource_id, entry->resource_id());
102 EXPECT_EQ(content_url, entry->content_url());
103 }
104
105 void GDataDBTest::InitDB() {
106 index_ = 1;
107 AddDir("");
108 AddDir("");
109 AddDir("dir1");
110
111 AddFile("dir1");
112 AddFile("dir1");
113
114 AddFile("dir2");
115 AddFile("dir2");
116 AddFile("dir2");
117
118 AddFile("dir1/dir3");
119 AddFile("dir1/dir3");
120 }
121
122 std::string AddTrailingSlash(const std::string& parent) {
123 std::string parent_str = parent;
124 if (!parent.empty() && *parent.rbegin() != '/')
125 parent_str += '/';
126 return parent_str;
127 }
128
129 void GDataDBTest::AddDir(const std::string& parent) {
130 std::string parent_str = AddTrailingSlash(parent);
131 GDataDirectory dir(NULL, NULL);
132 const std::string dir_name = std::string("/gdata/")
133 + parent_str + "dir" + base::IntToString(index_++);
134 const std::string resource_id = std::string("dir_resource_id:")
135 + dir_name;
136 dir.set_file_name(dir_name);
137 dir.set_resource_id(resource_id);
138 GDataDB::Status status = gdata_db_->Put(dir);
139 EXPECT_EQ(GDataDB::DB_OK, status);
140 DVLOG(1) << "AddDir " << dir_name << ", " << resource_id;
141 }
142
143 void GDataDBTest::AddFile(const std::string& parent) {
144 std::string parent_str = AddTrailingSlash(parent);
145 GDataFile file(NULL, NULL);
146 const std::string file_name = std::string("/gdata/")
147 + parent_str + "file" + base::IntToString(index_++);
148 const std::string resource_id = std::string("file_resource_id:")
149 + file_name;
150 file.set_file_name(file_name);
151 file.set_resource_id(resource_id);
152 GDataDB::Status status = gdata_db_->Put(file);
153 EXPECT_EQ(GDataDB::DB_OK, status);
154 DVLOG(1) << "AddFile " << file_name << ", " << resource_id;
155 }
156
157 void GDataDBTest::TestIter(const std::string& parent,
158 const char* file_names[],
159 uint32 file_names_size) {
160 scoped_ptr<GDataDBIter> iter = gdata_db_->NewIterator(parent);
161 for (uint i = 0; true; ++i) {
162 scoped_ptr<GDataEntry> entry = iter->GetNext();
163 if (!entry.get()) {
164 EXPECT_EQ(i, file_names_size);
165 break;
166 }
167 ASSERT_LT(i, file_names_size);
168 EXPECT_EQ(file_names[i], entry->file_name());
169 DVLOG(1) << "Iter " << entry->file_name();
170 }
171 }
172
173 } // namespace
174
175 TEST_F(GDataDBTest, FileTest) {
176 GDataFile file1(NULL, NULL);
177 const std::string file_name1("/gdata/dir1/file1");
178 const std::string resource_id1("abcd");
179 const GURL content_url1("http://content/dir1/file1");
180 const std::string file_md51("ijkl");
181 file1.set_file_name(file_name1);
182 file1.set_resource_id(resource_id1);
183 file1.set_content_url(content_url1);
184 file1.set_file_md5(file_md51);
185
186 TestGetNotFound(file_name1, resource_id1);
187
188 GDataDB::Status status = gdata_db_->Put(file1);
189 EXPECT_EQ(GDataDB::DB_OK, status);
190
191 TestGetFound(file_name1, resource_id1, content_url1);
192
193 scoped_ptr<GDataEntry> entry;
194 gdata_db_->GetByPath(file_name1, &entry);
195 EXPECT_EQ(file_md51, entry->AsGDataFile()->file_md5());
196 EXPECT_FALSE(entry->AsGDataFile()->file_info().is_directory);
197
198 status = gdata_db_->DeleteByPath(file_name1);
199 EXPECT_EQ(GDataDB::DB_OK, status);
200
201 TestGetNotFound(file_name1, resource_id1);
202 }
203
204 TEST_F(GDataDBTest, DirTest) {
205 GDataDirectory dir1(NULL, NULL);
206 const std::string dir_name1("/gdata/dir1");
207 const std::string dir_resource_id1("efgh");
208 const GURL dir_content_url1("http://content/dir1");
209 const GURL upload_url1("http://upload/dir1");
210 dir1.set_file_name(dir_name1);
211 dir1.set_resource_id(dir_resource_id1);
212 dir1.set_content_url(dir_content_url1);
213 dir1.set_upload_url(upload_url1);
214
215 TestGetNotFound(dir_name1, dir_resource_id1);
216
217 GDataDB::Status status = gdata_db_->Put(dir1);
218 EXPECT_EQ(GDataDB::DB_OK, status);
219
220 TestGetFound(dir_name1, dir_resource_id1, dir_content_url1);
221
222 scoped_ptr<GDataEntry> entry;
223 gdata_db_->GetByPath(dir_name1, &entry);
224 EXPECT_EQ(upload_url1, entry->AsGDataDirectory()->upload_url());
225 EXPECT_TRUE(entry->AsGDataDirectory()->file_info().is_directory);
226
227 status = gdata_db_->DeleteByPath(dir_name1);
228 EXPECT_EQ(GDataDB::DB_OK, status);
229
230 TestGetNotFound(dir_name1, dir_resource_id1);
231 }
232
233 TEST_F(GDataDBTest, IterTest) {
234 InitDB();
235
236 const char* dir1_children[] = {
237 "/gdata/dir1",
238 "/gdata/dir1/dir3",
239 "/gdata/dir1/dir3/file10",
240 "/gdata/dir1/dir3/file9",
241 "/gdata/dir1/file4",
242 "/gdata/dir1/file5",
243 };
244 TestIter("/gdata/dir1", dir1_children, arraysize(dir1_children));
245
246 const char* dir2_children[] = {
247 "/gdata/dir2",
248 "/gdata/dir2/file6",
249 "/gdata/dir2/file7",
250 "/gdata/dir2/file8",
251 };
252 TestIter("/gdata/dir2", dir2_children, arraysize(dir2_children));
253
254 const char* dir3_children[] = {
255 "/gdata/dir1/dir3",
256 "/gdata/dir1/dir3/file10",
257 "/gdata/dir1/dir3/file9",
258 };
259 TestIter("/gdata/dir1/dir3", dir3_children, arraysize(dir3_children));
260
261 const char* file10[] = {
262 "/gdata/dir1/dir3/file10",
263 };
264 TestIter(file10[0], file10, arraysize(file10));
265
266 const char* all_entries[] = {
267 "/gdata/dir1",
268 "/gdata/dir1/dir3",
269 "/gdata/dir1/dir3/file10",
270 "/gdata/dir1/dir3/file9",
271 "/gdata/dir1/file4",
272 "/gdata/dir1/file5",
273 "/gdata/dir2",
274 "/gdata/dir2/file6",
275 "/gdata/dir2/file7",
276 "/gdata/dir2/file8",
277 };
278 TestIter("/", all_entries, arraysize(all_entries));
279
280 TestIter("/gdata/dir4", NULL, 0);
281 }
282
283 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698