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/sync/syncable/directory_backing_store_unittest.cc

Issue 9699057: [Sync] Move 'sync' target to sync/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Tim's comments Created 8 years, 9 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
OLDNEW
(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 "testing/gtest/include/gtest/gtest.h"
6
7 #include <string>
8
9 #include "base/file_path.h"
10 #include "base/file_util.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/scoped_temp_dir.h"
13 #include "base/stl_util.h"
14 #include "base/string_number_conversions.h"
15 #include "chrome/browser/sync/syncable/directory_backing_store.h"
16 #include "chrome/browser/sync/syncable/on_disk_directory_backing_store.h"
17 #include "chrome/browser/sync/syncable/syncable-inl.h"
18 #include "chrome/browser/sync/syncable/syncable.h"
19 #include "chrome/browser/sync/test/test_directory_backing_store.h"
20 #include "chrome/browser/sync/util/time.h"
21 #include "sql/connection.h"
22 #include "sql/statement.h"
23 #include "sync/protocol/bookmark_specifics.pb.h"
24 #include "sync/protocol/sync.pb.h"
25 #include "testing/gtest/include/gtest/gtest-param-test.h"
26
27 namespace syncable {
28
29 extern const int32 kCurrentDBVersion;
30
31 class MigrationTest : public testing::TestWithParam<int> {
32 public:
33 virtual void SetUp() {
34 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
35 }
36
37 protected:
38 std::string GetUsername() {
39 return "nick@chromium.org";
40 }
41
42 FilePath GetDatabasePath() {
43 return temp_dir_.path().Append(Directory::kSyncDatabaseFilename);
44 }
45
46 static bool LoadAndIgnoreReturnedData(DirectoryBackingStore *dbs) {
47 MetahandlesIndex metas;
48 STLElementDeleter<MetahandlesIndex> index_deleter(&metas);
49 Directory::KernelLoadInfo kernel_load_info;
50 return dbs->Load(&metas, &kernel_load_info) == OPENED;
51 }
52
53 void SetUpVersion67Database(sql::Connection* connection);
54 void SetUpVersion68Database(sql::Connection* connection);
55 void SetUpVersion69Database(sql::Connection* connection);
56 void SetUpVersion70Database(sql::Connection* connection);
57 void SetUpVersion71Database(sql::Connection* connection);
58 void SetUpVersion72Database(sql::Connection* connection);
59 void SetUpVersion73Database(sql::Connection* connection);
60 void SetUpVersion74Database(sql::Connection* connection);
61 void SetUpVersion75Database(sql::Connection* connection);
62 void SetUpVersion76Database(sql::Connection* connection);
63 void SetUpVersion77Database(sql::Connection* connection);
64
65 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) {
66 SetUpVersion77Database(connection); // Prepopulates data.
67 scoped_ptr<TestDirectoryBackingStore> dbs(
68 new TestDirectoryBackingStore(GetUsername(), connection));
69
70 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
71 ASSERT_FALSE(dbs->needs_column_refresh_);
72 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
73 }
74
75 private:
76 ScopedTempDir temp_dir_;
77 };
78
79 class DirectoryBackingStoreTest : public MigrationTest {};
80
81 #if defined(OS_WIN)
82
83 // On Windows, we used to store timestamps in FILETIME format.
84 #define LEGACY_META_PROTO_TIMES_1 129079956640320000LL
85 #define LEGACY_META_PROTO_TIMES_2 128976886618480000LL
86 #define LEGACY_META_PROTO_TIMES_4 129002163642690000LL
87 #define LEGACY_META_PROTO_TIMES_5 129001555500000000LL
88 #define LEGACY_META_PROTO_TIMES_6 129053976170000000LL
89 #define LEGACY_META_PROTO_TIMES_7 128976864758480000LL
90 #define LEGACY_META_PROTO_TIMES_8 128976864758480000LL
91 #define LEGACY_META_PROTO_TIMES_9 128976864758480000LL
92 #define LEGACY_META_PROTO_TIMES_10 128976864758480000LL
93 #define LEGACY_META_PROTO_TIMES_11 129079956948440000LL
94 #define LEGACY_META_PROTO_TIMES_12 129079957513650000LL
95 #define LEGACY_META_PROTO_TIMES_13 129079957985300000LL
96 #define LEGACY_META_PROTO_TIMES_14 129079958383000000LL
97
98 #define LEGACY_META_PROTO_TIMES_STR_1 "129079956640320000"
99 #define LEGACY_META_PROTO_TIMES_STR_2 "128976886618480000"
100 #define LEGACY_META_PROTO_TIMES_STR_4 "129002163642690000"
101 #define LEGACY_META_PROTO_TIMES_STR_5 "129001555500000000"
102 #define LEGACY_META_PROTO_TIMES_STR_6 "129053976170000000"
103 #define LEGACY_META_PROTO_TIMES_STR_7 "128976864758480000"
104 #define LEGACY_META_PROTO_TIMES_STR_8 "128976864758480000"
105 #define LEGACY_META_PROTO_TIMES_STR_9 "128976864758480000"
106 #define LEGACY_META_PROTO_TIMES_STR_10 "128976864758480000"
107 #define LEGACY_META_PROTO_TIMES_STR_11 "129079956948440000"
108 #define LEGACY_META_PROTO_TIMES_STR_12 "129079957513650000"
109 #define LEGACY_META_PROTO_TIMES_STR_13 "129079957985300000"
110 #define LEGACY_META_PROTO_TIMES_STR_14 "129079958383000000"
111
112 // Generated via:
113 //
114 // ruby -ane '$F[1].sub!("LEGACY_", ""); $F[2] = Integer($F[2].sub!("LL", "")) / 10000 - 11644473600000; print "#{$F[0]} #{$F[1]} #{$F[2]}LL\n"'
115 //
116 // Magic numbers taken from
117 // http://stackoverflow.com/questions/5398557/java-library-for-dealing-with-win3 2-filetime .
118
119 // Now we store them in Java format (ms since the Unix epoch).
120 #define META_PROTO_TIMES_1 1263522064032LL
121 #define META_PROTO_TIMES_2 1253215061848LL
122 #define META_PROTO_TIMES_4 1255742764269LL
123 #define META_PROTO_TIMES_5 1255681950000LL
124 #define META_PROTO_TIMES_6 1260924017000LL
125 #define META_PROTO_TIMES_7 1253212875848LL
126 #define META_PROTO_TIMES_8 1253212875848LL
127 #define META_PROTO_TIMES_9 1253212875848LL
128 #define META_PROTO_TIMES_10 1253212875848LL
129 #define META_PROTO_TIMES_11 1263522094844LL
130 #define META_PROTO_TIMES_12 1263522151365LL
131 #define META_PROTO_TIMES_13 1263522198530LL
132 #define META_PROTO_TIMES_14 1263522238300LL
133
134 #define META_PROTO_TIMES_STR_1 "1263522064032"
135 #define META_PROTO_TIMES_STR_2 "1253215061848"
136 #define META_PROTO_TIMES_STR_4 "1255742764269"
137 #define META_PROTO_TIMES_STR_5 "1255681950000"
138 #define META_PROTO_TIMES_STR_6 "1260924017000"
139 #define META_PROTO_TIMES_STR_7 "1253212875848"
140 #define META_PROTO_TIMES_STR_8 "1253212875848"
141 #define META_PROTO_TIMES_STR_9 "1253212875848"
142 #define META_PROTO_TIMES_STR_10 "1253212875848"
143 #define META_PROTO_TIMES_STR_11 "1263522094844"
144 #define META_PROTO_TIMES_STR_12 "1263522151365"
145 #define META_PROTO_TIMES_STR_13 "1263522198530"
146 #define META_PROTO_TIMES_STR_14 "1263522238300"
147
148 #else
149
150 // On other platforms, we used to store timestamps in time_t format (s
151 // since the Unix epoch).
152 #define LEGACY_META_PROTO_TIMES_1 1263522064LL
153 #define LEGACY_META_PROTO_TIMES_2 1253215061LL
154 #define LEGACY_META_PROTO_TIMES_4 1255742764LL
155 #define LEGACY_META_PROTO_TIMES_5 1255681950LL
156 #define LEGACY_META_PROTO_TIMES_6 1260924017LL
157 #define LEGACY_META_PROTO_TIMES_7 1253212875LL
158 #define LEGACY_META_PROTO_TIMES_8 1253212875LL
159 #define LEGACY_META_PROTO_TIMES_9 1253212875LL
160 #define LEGACY_META_PROTO_TIMES_10 1253212875LL
161 #define LEGACY_META_PROTO_TIMES_11 1263522094LL
162 #define LEGACY_META_PROTO_TIMES_12 1263522151LL
163 #define LEGACY_META_PROTO_TIMES_13 1263522198LL
164 #define LEGACY_META_PROTO_TIMES_14 1263522238LL
165
166 #define LEGACY_META_PROTO_TIMES_STR_1 "1263522064"
167 #define LEGACY_META_PROTO_TIMES_STR_2 "1253215061"
168 #define LEGACY_META_PROTO_TIMES_STR_4 "1255742764"
169 #define LEGACY_META_PROTO_TIMES_STR_5 "1255681950"
170 #define LEGACY_META_PROTO_TIMES_STR_6 "1260924017"
171 #define LEGACY_META_PROTO_TIMES_STR_7 "1253212875"
172 #define LEGACY_META_PROTO_TIMES_STR_8 "1253212875"
173 #define LEGACY_META_PROTO_TIMES_STR_9 "1253212875"
174 #define LEGACY_META_PROTO_TIMES_STR_10 "1253212875"
175 #define LEGACY_META_PROTO_TIMES_STR_11 "1263522094"
176 #define LEGACY_META_PROTO_TIMES_STR_12 "1263522151"
177 #define LEGACY_META_PROTO_TIMES_STR_13 "1263522198"
178 #define LEGACY_META_PROTO_TIMES_STR_14 "1263522238"
179
180 // Now we store them in Java format (ms since the Unix epoch).
181 #define META_PROTO_TIMES_1 1263522064000LL
182 #define META_PROTO_TIMES_2 1253215061000LL
183 #define META_PROTO_TIMES_4 1255742764000LL
184 #define META_PROTO_TIMES_5 1255681950000LL
185 #define META_PROTO_TIMES_6 1260924017000LL
186 #define META_PROTO_TIMES_7 1253212875000LL
187 #define META_PROTO_TIMES_8 1253212875000LL
188 #define META_PROTO_TIMES_9 1253212875000LL
189 #define META_PROTO_TIMES_10 1253212875000LL
190 #define META_PROTO_TIMES_11 1263522094000LL
191 #define META_PROTO_TIMES_12 1263522151000LL
192 #define META_PROTO_TIMES_13 1263522198000LL
193 #define META_PROTO_TIMES_14 1263522238000LL
194
195 #define META_PROTO_TIMES_STR_1 "1263522064000"
196 #define META_PROTO_TIMES_STR_2 "1253215061000"
197 #define META_PROTO_TIMES_STR_4 "1255742764000"
198 #define META_PROTO_TIMES_STR_5 "1255681950000"
199 #define META_PROTO_TIMES_STR_6 "1260924017000"
200 #define META_PROTO_TIMES_STR_7 "1253212875000"
201 #define META_PROTO_TIMES_STR_8 "1253212875000"
202 #define META_PROTO_TIMES_STR_9 "1253212875000"
203 #define META_PROTO_TIMES_STR_10 "1253212875000"
204 #define META_PROTO_TIMES_STR_11 "1263522094000"
205 #define META_PROTO_TIMES_STR_12 "1263522151000"
206 #define META_PROTO_TIMES_STR_13 "1263522198000"
207 #define META_PROTO_TIMES_STR_14 "1263522238000"
208
209 #endif
210
211 // Helper macros for the database dumps in the SetUpVersion*Database
212 // functions.
213 #define LEGACY_META_PROTO_TIMES(x) LEGACY_META_PROTO_TIMES_##x
214 #define LEGACY_META_PROTO_TIMES_STR(x) LEGACY_META_PROTO_TIMES_STR_##x
215 #define LEGACY_PROTO_TIME_VALS(x) \
216 LEGACY_META_PROTO_TIMES_STR(x) "," \
217 LEGACY_META_PROTO_TIMES_STR(x) "," \
218 LEGACY_META_PROTO_TIMES_STR(x) "," \
219 LEGACY_META_PROTO_TIMES_STR(x)
220 #define META_PROTO_TIMES(x) META_PROTO_TIMES_##x
221 #define META_PROTO_TIMES_STR(x) META_PROTO_TIMES_STR_##x
222 #define META_PROTO_TIMES_VALS(x) \
223 META_PROTO_TIMES_STR(x) "," \
224 META_PROTO_TIMES_STR(x) "," \
225 META_PROTO_TIMES_STR(x) "," \
226 META_PROTO_TIMES_STR(x)
227
228 namespace {
229
230 // Helper functions for testing.
231
232 enum ShouldIncludeDeletedItems {
233 INCLUDE_DELETED_ITEMS,
234 DONT_INCLUDE_DELETED_ITEMS
235 };
236
237 // Returns a map from metahandle -> expected legacy time (in proto
238 // format).
239 std::map<int64, int64> GetExpectedLegacyMetaProtoTimes(
240 enum ShouldIncludeDeletedItems include_deleted) {
241 std::map<int64, int64> expected_legacy_meta_proto_times;
242 expected_legacy_meta_proto_times[1] = LEGACY_META_PROTO_TIMES(1);
243 if (include_deleted == INCLUDE_DELETED_ITEMS) {
244 expected_legacy_meta_proto_times[2] = LEGACY_META_PROTO_TIMES(2);
245 expected_legacy_meta_proto_times[4] = LEGACY_META_PROTO_TIMES(4);
246 expected_legacy_meta_proto_times[5] = LEGACY_META_PROTO_TIMES(5);
247 }
248 expected_legacy_meta_proto_times[6] = LEGACY_META_PROTO_TIMES(6);
249 expected_legacy_meta_proto_times[7] = LEGACY_META_PROTO_TIMES(7);
250 expected_legacy_meta_proto_times[8] = LEGACY_META_PROTO_TIMES(8);
251 expected_legacy_meta_proto_times[9] = LEGACY_META_PROTO_TIMES(9);
252 expected_legacy_meta_proto_times[10] = LEGACY_META_PROTO_TIMES(10);
253 expected_legacy_meta_proto_times[11] = LEGACY_META_PROTO_TIMES(11);
254 expected_legacy_meta_proto_times[12] = LEGACY_META_PROTO_TIMES(12);
255 expected_legacy_meta_proto_times[13] = LEGACY_META_PROTO_TIMES(13);
256 expected_legacy_meta_proto_times[14] = LEGACY_META_PROTO_TIMES(14);
257 return expected_legacy_meta_proto_times;
258 }
259
260 // Returns a map from metahandle -> expected time (in proto format).
261 std::map<int64, int64> GetExpectedMetaProtoTimes(
262 enum ShouldIncludeDeletedItems include_deleted) {
263 std::map<int64, int64> expected_meta_proto_times;
264 expected_meta_proto_times[1] = META_PROTO_TIMES(1);
265 if (include_deleted == INCLUDE_DELETED_ITEMS) {
266 expected_meta_proto_times[2] = META_PROTO_TIMES(2);
267 expected_meta_proto_times[4] = META_PROTO_TIMES(4);
268 expected_meta_proto_times[5] = META_PROTO_TIMES(5);
269 }
270 expected_meta_proto_times[6] = META_PROTO_TIMES(6);
271 expected_meta_proto_times[7] = META_PROTO_TIMES(7);
272 expected_meta_proto_times[8] = META_PROTO_TIMES(8);
273 expected_meta_proto_times[9] = META_PROTO_TIMES(9);
274 expected_meta_proto_times[10] = META_PROTO_TIMES(10);
275 expected_meta_proto_times[11] = META_PROTO_TIMES(11);
276 expected_meta_proto_times[12] = META_PROTO_TIMES(12);
277 expected_meta_proto_times[13] = META_PROTO_TIMES(13);
278 expected_meta_proto_times[14] = META_PROTO_TIMES(14);
279 return expected_meta_proto_times;
280 }
281
282 // Returns a map from metahandle -> expected time (as a Time object).
283 std::map<int64, base::Time> GetExpectedMetaTimes() {
284 std::map<int64, base::Time> expected_meta_times;
285 const std::map<int64, int64>& expected_meta_proto_times =
286 GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS);
287 for (std::map<int64, int64>::const_iterator it =
288 expected_meta_proto_times.begin();
289 it != expected_meta_proto_times.end(); ++it) {
290 expected_meta_times[it->first] =
291 browser_sync::ProtoTimeToTime(it->second);
292 }
293 return expected_meta_times;
294 }
295
296 // Extracts a map from metahandle -> time (in proto format) from the
297 // given database.
298 std::map<int64, int64> GetMetaProtoTimes(sql::Connection *db) {
299 sql::Statement s(db->GetCachedStatement(
300 SQL_FROM_HERE,
301 "SELECT metahandle, mtime, server_mtime, ctime, server_ctime "
302 "FROM metas"));
303 EXPECT_EQ(5, s.ColumnCount());
304 std::map<int64, int64> meta_times;
305 while (s.Step()) {
306 int64 metahandle = s.ColumnInt64(0);
307 int64 mtime = s.ColumnInt64(1);
308 int64 server_mtime = s.ColumnInt64(2);
309 int64 ctime = s.ColumnInt64(3);
310 int64 server_ctime = s.ColumnInt64(4);
311 EXPECT_EQ(mtime, server_mtime);
312 EXPECT_EQ(mtime, ctime);
313 EXPECT_EQ(mtime, server_ctime);
314 meta_times[metahandle] = mtime;
315 }
316 EXPECT_TRUE(s.Succeeded());
317 return meta_times;
318 }
319
320 ::testing::AssertionResult AssertTimesMatch(const char* t1_expr,
321 const char* t2_expr,
322 const base::Time& t1,
323 const base::Time& t2) {
324 if (t1 == t2)
325 return ::testing::AssertionSuccess();
326
327 return ::testing::AssertionFailure()
328 << t1_expr << " and " << t2_expr
329 << " (internal values: " << t1.ToInternalValue()
330 << " and " << t2.ToInternalValue()
331 << ") (proto time: " << browser_sync::TimeToProtoTime(t1)
332 << " and " << browser_sync::TimeToProtoTime(t2)
333 << ") do not match";
334 }
335
336 // Expect that all time fields of the given entry kernel will be the
337 // given time.
338 void ExpectTime(const EntryKernel& entry_kernel,
339 const base::Time& expected_time) {
340 EXPECT_PRED_FORMAT2(AssertTimesMatch,
341 expected_time, entry_kernel.ref(CTIME));
342 EXPECT_PRED_FORMAT2(AssertTimesMatch,
343 expected_time, entry_kernel.ref(SERVER_CTIME));
344 EXPECT_PRED_FORMAT2(AssertTimesMatch,
345 expected_time, entry_kernel.ref(MTIME));
346 EXPECT_PRED_FORMAT2(AssertTimesMatch,
347 expected_time, entry_kernel.ref(SERVER_MTIME));
348 }
349
350 // Expect that all the entries in |index| have times matching those in
351 // the given map (from metahandle to expect time).
352 void ExpectTimes(const MetahandlesIndex& index,
353 const std::map<int64, base::Time>& expected_times) {
354 for (MetahandlesIndex::const_iterator it = index.begin();
355 it != index.end(); ++it) {
356 int64 meta_handle = (*it)->ref(META_HANDLE);
357 SCOPED_TRACE(meta_handle);
358 std::map<int64, base::Time>::const_iterator it2 =
359 expected_times.find(meta_handle);
360 if (it2 == expected_times.end()) {
361 ADD_FAILURE() << "Could not find expected time for " << meta_handle;
362 continue;
363 }
364 ExpectTime(**it, it2->second);
365 }
366 }
367
368 } // namespace
369
370 void MigrationTest::SetUpVersion67Database(sql::Connection* connection) {
371 // This is a version 67 database dump whose contents were backformed from
372 // the contents of the version 68 database dump (the v68 migration was
373 // actually written first).
374 ASSERT_TRUE(connection->is_open());
375 ASSERT_TRUE(connection->BeginTransaction());
376 ASSERT_TRUE(connection->Execute(
377 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
378 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
379 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
380 "base_version bigint default -1,server_version bigint default 0,"
381 "mtime bigint default 0,server_mtime bigint default 0,"
382 "ctime bigint default 0,server_ctime bigint default 0,"
383 "server_position_in_parent bigint default 0,"
384 "local_external_id bigint default 0,id varchar(255) default 'r',"
385 "parent_id varchar(255) default 'r',"
386 "server_parent_id varchar(255) default 'r',"
387 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
388 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
389 "is_del bit default 0,is_dir bit default 0,"
390 "is_bookmark_object bit default 0,server_is_dir bit default 0,"
391 "server_is_del bit default 0,server_is_bookmark_object bit default 0,"
392 "name varchar(255), " /* COLLATE PATHNAME, */
393 "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */
394 "non_unique_name varchar,"
395 "server_name varchar(255)," /* COLLATE PATHNAME */
396 "server_non_unique_name varchar,"
397 "bookmark_url varchar,server_bookmark_url varchar,"
398 "singleton_tag varchar,bookmark_favicon blob,"
399 "server_bookmark_favicon blob);"
400 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
401 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
402 "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);"
403 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
404 ",-2097152,"
405 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
406 "'Deleted Item',NULL,'Deleted Item','Deleted Item','Deleted Item',"
407 "'http://www.google.com/','http://www.google.com/2',NULL,'AASGASGA',"
408 "'ASADGADGADG');"
409 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
410 ",-3145728,"
411 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
412 "'Welcome to Chromium',NULL,'Welcome to Chromium',"
413 "'Welcome to Chromium','Welcome to Chromium',"
414 "'http://www.google.com/chrome/intl/en/welcome.html',"
415 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
416 "NULL);"
417 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
418 ",1048576,"
419 "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
420 "'Google',NULL,'Google','Google','Google','http://www.google.com/',"
421 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
422 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
423 ",-4194304,"
424 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
425 "'The Internet',NULL,'The Internet','The Internet',"
426 "'The Internet',NULL,NULL,NULL,NULL,NULL);"
427 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
428 ","
429 "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
430 "'Google Chrome',NULL,'Google Chrome','Google Chrome',"
431 "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL);"
432 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
433 ",1048576,"
434 "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
435 "NULL,'Bookmarks','Bookmarks','Bookmarks',NULL,NULL,"
436 "'google_chrome_bookmarks',NULL,NULL);"
437 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
438 ","
439 "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
440 "1,'Bookmark Bar',NULL,'Bookmark Bar','Bookmark Bar','Bookmark Bar',"
441 "NULL,NULL,'bookmark_bar',NULL,NULL);"
442 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
443 ",2097152,"
444 "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
445 "'Other Bookmarks',NULL,'Other Bookmarks','Other Bookmarks',"
446 "'Other Bookmarks',NULL,NULL,'other_bookmarks',"
447 "NULL,NULL);"
448 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
449 ",-1048576,"
450 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
451 "'Home (The Chromium Projects)',NULL,'Home (The Chromium Projects)',"
452 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
453 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
454 "'AGATWA','AFAGVASF');"
455 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
456 ",0,9,"
457 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
458 "'Extra Bookmarks',NULL,'Extra Bookmarks','Extra Bookmarks',"
459 "'Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
460 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
461 ",-917504,"
462 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
463 "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
464 "'ICANN Internet Corporation for Assigned Names and Numbers',"
465 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
466 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
467 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
468 "'http://www.icann.com/','http://www.icann.com/',NULL,"
469 "'PNGAXF0AAFF','DAAFASF');"
470 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
471 ",1048576,"
472 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
473 "'The WebKit Open Source Project',NULL,"
474 "'The WebKit Open Source Project','The WebKit Open Source Project',"
475 "'The WebKit Open Source Project','http://webkit.org/',"
476 "'http://webkit.org/x',NULL,'PNGX','PNG2Y');"
477 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
478 "last_sync_timestamp INT, name VARCHAR(128), "
479 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
480 "db_create_version VARCHAR(128), db_create_time int, "
481 "next_id bigint default -2, cache_guid VARCHAR(32));"
482 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
483 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
484 "'Unknown',1263522064,-65542,"
485 "'9010788312004066376x-6609234393368420856x');"
486 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
487 "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
488 ASSERT_TRUE(connection->CommitTransaction());
489 }
490
491 void MigrationTest::SetUpVersion68Database(sql::Connection* connection) {
492 // This sets up an actual version 68 database dump. The IDs were
493 // canonicalized to be less huge, and the favicons were overwritten
494 // with random junk so that they didn't contain any unprintable
495 // characters. A few server URLs were tweaked so that they'd be
496 // different from the local URLs. Lastly, the custom collation on
497 // the server_non_unique_name column was removed.
498 ASSERT_TRUE(connection->is_open());
499 ASSERT_TRUE(connection->BeginTransaction());
500 ASSERT_TRUE(connection->Execute(
501 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
502 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
503 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
504 "base_version bigint default -1,server_version bigint default 0,"
505 "mtime bigint default 0,server_mtime bigint default 0,"
506 "ctime bigint default 0,server_ctime bigint default 0,"
507 "server_position_in_parent bigint default 0,"
508 "local_external_id bigint default 0,id varchar(255) default 'r',"
509 "parent_id varchar(255) default 'r',"
510 "server_parent_id varchar(255) default 'r',"
511 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
512 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
513 "is_del bit default 0,is_dir bit default 0,"
514 "is_bookmark_object bit default 0,server_is_dir bit default 0,"
515 "server_is_del bit default 0,"
516 "server_is_bookmark_object bit default 0,"
517 "non_unique_name varchar,server_non_unique_name varchar(255),"
518 "bookmark_url varchar,server_bookmark_url varchar,"
519 "singleton_tag varchar,bookmark_favicon blob,"
520 "server_bookmark_favicon blob);"
521 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
522 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
523 "NULL,NULL,NULL,NULL,NULL,NULL);"
524 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
525 ",-2097152,"
526 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
527 "'Deleted Item','Deleted Item','http://www.google.com/',"
528 "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG');"
529 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
530 ",-3145728,"
531 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
532 "'Welcome to Chromium','Welcome to Chromium',"
533 "'http://www.google.com/chrome/intl/en/welcome.html',"
534 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
535 "NULL);"
536 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
537 ",1048576,"
538 "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
539 "'Google','Google','http://www.google.com/',"
540 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
541 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
542 ",-4194304,"
543 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
544 "'The Internet','The Internet',NULL,NULL,NULL,NULL,NULL);"
545 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
546 ","
547 "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
548 "'Google Chrome','Google Chrome',NULL,NULL,'google_chrome',NULL,"
549 "NULL);"
550 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
551 ",1048576,"
552 "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
553 "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL);"
554 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
555 ","
556 "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
557 "1,'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,"
558 "NULL);"
559 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
560 ",2097152,"
561 "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
562 "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
563 "NULL,NULL);"
564 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
565 ",-1048576,"
566 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
567 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
568 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
569 "'AGATWA','AFAGVASF');"
570 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
571 ",0,9,"
572 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
573 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
574 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
575 ",-917504,"
576 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
577 "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
578 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
579 "'http://www.icann.com/','http://www.icann.com/',NULL,"
580 "'PNGAXF0AAFF','DAAFASF');"
581 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
582 ",1048576,"
583 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
584 "'The WebKit Open Source Project','The WebKit Open Source Project',"
585 "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y');"
586 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
587 "last_sync_timestamp INT, name VARCHAR(128), "
588 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
589 "db_create_version VARCHAR(128), db_create_time int, "
590 "next_id bigint default -2, cache_guid VARCHAR(32));"
591 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
592 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
593 "'Unknown',1263522064,-65542,"
594 "'9010788312004066376x-6609234393368420856x');"
595 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
596 "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
597 ASSERT_TRUE(connection->CommitTransaction());
598 }
599
600 void MigrationTest::SetUpVersion69Database(sql::Connection* connection) {
601 ASSERT_TRUE(connection->is_open());
602 ASSERT_TRUE(connection->BeginTransaction());
603 ASSERT_TRUE(connection->Execute(
604 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
605 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
606 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
607 "base_version bigint default -1,server_version bigint default 0,"
608 "mtime bigint default 0,server_mtime bigint default 0,"
609 "ctime bigint default 0,server_ctime bigint default 0,"
610 "server_position_in_parent bigint default 0,"
611 "local_external_id bigint default 0,id varchar(255) default 'r',"
612 "parent_id varchar(255) default 'r',"
613 "server_parent_id varchar(255) default 'r',"
614 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
615 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
616 "is_del bit default 0,is_dir bit default 0,"
617 "is_bookmark_object bit default 0,server_is_dir bit default 0,"
618 "server_is_del bit default 0,"
619 "server_is_bookmark_object bit default 0,"
620 "non_unique_name varchar,server_non_unique_name varchar(255),"
621 "bookmark_url varchar,server_bookmark_url varchar,"
622 "singleton_tag varchar,bookmark_favicon blob,"
623 "server_bookmark_favicon blob, specifics blob, "
624 "server_specifics blob);"
625 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
626 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,NULL,NULL,NULL,NULL,"
627 "NULL,NULL,X'',X'');"
628 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
629 ",-2097152,"
630 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
631 "'Deleted Item','Deleted Item','http://www.google.com/',"
632 "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG',"
633 "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841415"
634 "34741534741',X'C28810260A17687474703A2F2F7777772E676F6F676C652E636F"
635 "6D2F32120B4153414447414447414447');"
636 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
637 ",-3145728,"
638 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
639 "'Welcome to Chromium','Welcome to Chromium',"
640 "'http://www.google.com/chrome/intl/en/welcome.html',"
641 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,NULL,"
642 "X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
643 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A3168"
644 "7474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F6"
645 "56E2F77656C636F6D652E68746D6C1200');"
646 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
647 ",1048576,7,"
648 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
649 "'Google','Google','http://www.google.com/',"
650 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG',X'C28810220A166"
651 "87474703A2F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'"
652 "C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464"
653 "447415347');"
654 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
655 ",-4194304,6"
656 ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,'The Internet',"
657 "'The Internet',NULL,NULL,NULL,NULL,NULL,X'C2881000',X'C2881000');"
658 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
659 ",1048576,0,"
660 "'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,'Google Chrome',"
661 "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL,NULL,NULL);"
662 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
663 ",1048576,0,"
664 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
665 "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL,"
666 "X'C2881000',X'C2881000');"
667 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
668 ",1048576,1,"
669 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,1,"
670 "'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,NULL,"
671 "X'C2881000',X'C2881000');"
672 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
673 ",2097152,2,"
674 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
675 "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
676 "NULL,NULL,X'C2881000',X'C2881000');"
677 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
678 ",-1048576,"
679 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
680 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
681 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
682 "'AGATWA','AFAGVASF',X'C28810220A18687474703A2F2F6465762E6368726F6D6"
683 "9756D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F646576"
684 "2E6368726F6D69756D2E6F72672F6F7468657212084146414756415346');"
685 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
686 ",0,9,"
687 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
688 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL,"
689 "X'C2881000',X'C2881000');"
690 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
691 ",-917504,"
692 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
693 "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
694 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
695 "'http://www.icann.com/','http://www.icann.com/',NULL,'PNGAXF0AAFF',"
696 "'DAAFASF',X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F1"
697 "20B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963"
698 "616E6E2E636F6D2F120744414146415346');"
699 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
700 ",1048576,11,"
701 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
702 "'The WebKit Open Source Project','The WebKit Open Source Project',"
703 "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y',"
704 "X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C2"
705 "88101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259');"
706 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
707 "last_sync_timestamp INT, name VARCHAR(128), "
708 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
709 "db_create_version VARCHAR(128), db_create_time int, "
710 "next_id bigint default -2, cache_guid VARCHAR(32));"
711 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
712 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
713 "'Unknown',1263522064,-65542,"
714 "'9010788312004066376x-6609234393368420856x');"
715 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
716 "INSERT INTO share_version VALUES('nick@chromium.org',69);"
717 ));
718 ASSERT_TRUE(connection->CommitTransaction());
719 }
720
721 void MigrationTest::SetUpVersion70Database(sql::Connection* connection) {
722 ASSERT_TRUE(connection->is_open());
723 ASSERT_TRUE(connection->BeginTransaction());
724 ASSERT_TRUE(connection->Execute(
725 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
726 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
727 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
728 "last_sync_timestamp INT, name VARCHAR(128), "
729 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
730 "db_create_version VARCHAR(128), db_create_time int, "
731 "next_id bigint default -2, cache_guid VARCHAR(32));"
732 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
733 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
734 "'Unknown',1263522064,-65542,"
735 "'9010788312004066376x-6609234393368420856x');"
736 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
737 "INSERT INTO share_version VALUES('nick@chromium.org',70);"
738 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
739 "base_version bigint default -1,server_version bigint default 0,"
740 "mtime bigint default 0,server_mtime bigint default 0,"
741 "ctime bigint default 0,server_ctime bigint default 0,"
742 "server_position_in_parent bigint default 0,"
743 "local_external_id bigint default 0,id varchar(255) default 'r',"
744 "parent_id varchar(255) default 'r',"
745 "server_parent_id varchar(255) default 'r',"
746 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
747 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
748 "is_del bit default 0,is_dir bit default 0,"
749 "server_is_dir bit default 0,server_is_del bit default 0,"
750 "non_unique_name varchar,server_non_unique_name varchar(255),"
751 "unique_server_tag varchar,unique_client_tag varchar,"
752 "specifics blob,server_specifics blob);"
753 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
754 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
755 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) ","
756 "-2097152,4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,"
757 "1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A"
758 "2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X'C2881026"
759 "0A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B415341444741"
760 "4447414447');"
761 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
762 ",-3145728,"
763 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
764 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A"
765 "31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E74"
766 "6C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F"
767 "2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
768 "6C636F6D652E68746D6C1200');"
769 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
770 ",1048576,7,"
771 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
772 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C6"
773 "52E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F77777"
774 "72E676F6F676C652E636F6D2F12084147464447415347');"
775 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
776 ",-4194304,"
777 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
778 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
779 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
780 ",1048576,0,"
781 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome',"
782 "'Google Chrome','google_chrome',NULL,NULL,NULL);"
783 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
784 ",1048576,0,"
785 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
786 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',"
787 "X'C2881000');"
788 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
789 ",1048576,"
790 "1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,"
791 "'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000',"
792 "X'C2881000');"
793 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
794 ","
795 "2097152,2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
796 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
797 "X'C2881000',X'C2881000');"
798 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
799 ",-1048576,"
800 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
801 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
802 "NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F"
803 "72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636872"
804 "6F6D69756D2E6F72672F6F7468657212084146414756415346');"
805 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
806 ",0,9,"
807 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
808 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
809 "X'C2881000');"
810 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
811 ",-917504,"
812 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
813 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
814 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
815 "NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F"
816 "120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E69"
817 "63616E6E2E636F6D2F120744414146415346');"
818 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
819 ",1048576,"
820 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
821 "'The WebKit Open Source Project','The WebKit Open Source Project',"
822 "NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
823 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F78120550"
824 "4E473259');"
825 ));
826 ASSERT_TRUE(connection->CommitTransaction());
827 }
828
829 void MigrationTest::SetUpVersion71Database(sql::Connection* connection) {
830 ASSERT_TRUE(connection->is_open());
831 ASSERT_TRUE(connection->BeginTransaction());
832 ASSERT_TRUE(connection->Execute(
833 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
834 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
835 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
836 "INSERT INTO 'share_version' VALUES('nick@chromium.org',71);"
837 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
838 "base_version bigint default -1,server_version bigint default 0,"
839 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
840 "default 0,server_ctime bigint default 0,server_position_in_parent "
841 "bigint default 0,local_external_id bigint default 0,id varchar(255) "
842 "default 'r',parent_id varchar(255) default 'r',server_parent_id "
843 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
844 "varchar(255) default 'r',is_unsynced bit default 0,"
845 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
846 "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
847 "non_unique_name varchar,server_non_unique_name varchar(255),"
848 "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
849 "server_specifics blob);"
850 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
851 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
852 "NULL,NULL,X'',X'');"
853 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
854 ",-2097152,4,"
855 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
856 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
857 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
858 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
859 "47');"
860 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
861 ",-3145728,3,"
862 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
863 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
864 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
865 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
866 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
867 "652E68746D6C1200');"
868 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
869 ",1048576,7,"
870 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
871 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
872 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
873 "76F6F676C652E636F6D2F12084147464447415347');"
874 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
875 ",-4194304,6,"
876 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
877 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
878 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
879 ",1048576,0,"
880 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
881 ",'google_chrome',NULL,NULL,NULL);"
882 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
883 ",1048576,0,"
884 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
885 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
886 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
887 ",1048576,1,"
888 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
889 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
890 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
891 ",2097152,2,"
892 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
893 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
894 "X'C2881000',X'C2881000');"
895 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
896 ",-1048576,8,"
897 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
898 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
899 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
900 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
901 "D2E6F72672F6F7468657212084146414756415346');"
902 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
903 ",0,9,"
904 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
905 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
906 "X'C2881000');"
907 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
908 ",-917504,10,"
909 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
910 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
911 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
912 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
913 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
914 "E636F6D2F120744414146415346');"
915 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
916 ",1048576,11,"
917 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
918 "'The WebKit Open Source Project','The WebKit Open Source Project',"
919 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
920 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
921 "473259');"
922 "CREATE TABLE models (model_id BLOB primary key, "
923 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
924 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
925 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
926 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
927 "next_id INT default -2, cache_guid TEXT);"
928 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
929 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
930 "'9010788312004066376x-6609234393368420856x');"));
931 ASSERT_TRUE(connection->CommitTransaction());
932 }
933
934 void MigrationTest::SetUpVersion72Database(sql::Connection* connection) {
935 ASSERT_TRUE(connection->is_open());
936 ASSERT_TRUE(connection->BeginTransaction());
937 ASSERT_TRUE(connection->Execute(
938 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
939 "INSERT INTO 'share_version' VALUES('nick@chromium.org',72);"
940 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
941 "base_version bigint default -1,server_version bigint default 0,"
942 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
943 "default 0,server_ctime bigint default 0,server_position_in_parent "
944 "bigint default 0,local_external_id bigint default 0,id varchar(255) "
945 "default 'r',parent_id varchar(255) default 'r',server_parent_id "
946 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
947 "varchar(255) default 'r',is_unsynced bit default 0,"
948 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
949 "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
950 "non_unique_name varchar,server_non_unique_name varchar(255),"
951 "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
952 "server_specifics blob);"
953 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
954 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
955 "NULL,NULL,X'',X'');"
956 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
957 ",-2097152,4,"
958 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
959 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
960 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
961 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
962 "47');"
963 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
964 ",-3145728,3,"
965 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
966 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
967 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
968 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
969 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
970 "652E68746D6C1200');"
971 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
972 ",1048576,7,"
973 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
974 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
975 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
976 "76F6F676C652E636F6D2F12084147464447415347');"
977 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
978 ",-4194304,6,"
979 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
980 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
981 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
982 ",1048576,0,"
983 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
984 ",'google_chrome',NULL,NULL,NULL);"
985 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
986 ",1048576,0,"
987 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
988 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
989 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
990 ",1048576,1,"
991 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
992 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
993 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
994 ",2097152,2,"
995 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
996 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
997 "X'C2881000',X'C2881000');"
998 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
999 ",-1048576,8,"
1000 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
1001 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
1002 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
1003 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
1004 "D2E6F72672F6F7468657212084146414756415346');"
1005 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1006 ",0,9,"
1007 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
1008 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
1009 "X'C2881000');"
1010 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1011 ",-917504,10,"
1012 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
1013 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
1014 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
1015 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
1016 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
1017 "E636F6D2F120744414146415346');"
1018 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1019 ",1048576,11,"
1020 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
1021 "'The WebKit Open Source Project','The WebKit Open Source Project',"
1022 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
1023 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
1024 "473259');"
1025 "CREATE TABLE models (model_id BLOB primary key, "
1026 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
1027 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
1028 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
1029 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
1030 "next_id INT default -2, cache_guid TEXT);"
1031 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1032 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
1033 "'9010788312004066376x-6609234393368420856x');"));
1034 ASSERT_TRUE(connection->CommitTransaction());
1035 }
1036
1037 void MigrationTest::SetUpVersion73Database(sql::Connection* connection) {
1038 ASSERT_TRUE(connection->is_open());
1039 ASSERT_TRUE(connection->BeginTransaction());
1040 ASSERT_TRUE(connection->Execute(
1041 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1042 "INSERT INTO 'share_version' VALUES('nick@chromium.org',73);"
1043 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
1044 "base_version bigint default -1,server_version bigint default 0,"
1045 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
1046 "default 0,server_ctime bigint default 0,server_position_in_parent "
1047 "bigint default 0,local_external_id bigint default 0,id varchar(255) "
1048 "default 'r',parent_id varchar(255) default 'r',server_parent_id "
1049 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
1050 "varchar(255) default 'r',is_unsynced bit default 0,"
1051 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
1052 "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
1053 "non_unique_name varchar,server_non_unique_name varchar(255),"
1054 "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
1055 "server_specifics blob);"
1056 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1057 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
1058 "NULL,NULL,X'',X'');"
1059 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1060 ",-2097152,4,"
1061 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
1062 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
1063 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
1064 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
1065 "47');"
1066 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1067 ",-3145728,3,"
1068 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
1069 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
1070 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
1071 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
1072 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
1073 "652E68746D6C1200');"
1074 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1075 ",1048576,7,"
1076 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
1077 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
1078 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
1079 "76F6F676C652E636F6D2F12084147464447415347');"
1080 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1081 ",-4194304,6,"
1082 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
1083 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
1084 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1085 ",1048576,0,"
1086 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
1087 ",'google_chrome',NULL,NULL,NULL);"
1088 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1089 ",1048576,0,"
1090 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
1091 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1092 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1093 ",1048576,1,"
1094 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
1095 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1096 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1097 ",2097152,2,"
1098 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
1099 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
1100 "X'C2881000',X'C2881000');"
1101 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1102 ",-1048576,8,"
1103 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
1104 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
1105 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
1106 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
1107 "D2E6F72672F6F7468657212084146414756415346');"
1108 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1109 ",0,9,"
1110 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
1111 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
1112 "X'C2881000');"
1113 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1114 ",-917504,10,"
1115 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
1116 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
1117 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
1118 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
1119 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
1120 "E636F6D2F120744414146415346');"
1121 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1122 ",1048576,11,"
1123 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
1124 "'The WebKit Open Source Project','The WebKit Open Source Project',"
1125 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
1126 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
1127 "473259');"
1128 "CREATE TABLE models (model_id BLOB primary key, "
1129 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
1130 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
1131 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
1132 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
1133 "next_id INT default -2, cache_guid TEXT, "
1134 "notification_state BLOB);"
1135 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1136 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
1137 "'9010788312004066376x-6609234393368420856x',X'C2881000');"));
1138 ASSERT_TRUE(connection->CommitTransaction());
1139 }
1140
1141 void MigrationTest::SetUpVersion74Database(sql::Connection* connection) {
1142 ASSERT_TRUE(connection->is_open());
1143 ASSERT_TRUE(connection->BeginTransaction());
1144 ASSERT_TRUE(connection->Execute(
1145 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1146 "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);"
1147 "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp"
1148 " INT, initial_sync_ended BOOLEAN default 0);"
1149 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
1150 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
1151 "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
1152 "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
1153 "tion_state INT default 0, bookmarks_added_during_autofill_migration"
1154 " INT default 0, autofill_migration_time INT default 0, autofill_ent"
1155 "ries_added_during_migration INT default 0, autofill_profiles_added_"
1156 "during_migration INT default 0);"
1157 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'"
1158 ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542"
1159 ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
1160 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas"
1161 "e_version bigint default -1,server_version bigint default 0,mtime b"
1162 "igint default 0,server_mtime bigint default 0,ctime bigint default "
1163 "0,server_ctime bigint default 0,server_position_in_parent bigint de"
1164 "fault 0,local_external_id bigint default 0,id varchar(255) default "
1165 "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255"
1166 ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)"
1167 " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa"
1168 "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d"
1169 "efault 0,server_is_del bit default 0,non_unique_name varchar,server"
1170 "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie"
1171 "nt_tag varchar,specifics blob,server_specifics blob);"
1172 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1173 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'"
1174 "');"
1175 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1176 ",-2097152,4,'s_ID_2','s_ID"
1177 "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted "
1178 "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
1179 "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67"
1180 "6F6F676C652E636F6D2F32120B4153414447414447414447');"
1181 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1182 ",-3145728,3,'s_ID_4','s_ID"
1183 "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W"
1184 "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6"
1185 "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E"
1186 "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636"
1187 "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
1188 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1189 ",1048576,7,'s_ID_5','s_ID_"
1190 "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU"
1191 "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841"
1192 "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
1193 "36F6D2F12084147464447415347');"
1194 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1195 ",-4194304,6,'s_ID_6','s_ID"
1196 "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL"
1197 ",NULL,X'C2881000',X'C2881000');"
1198 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1199 ",1048576,0,'s_ID_7','r','r"
1200 "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom"
1201 "e',NULL,NULL,NULL);"
1202 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1203 ",1048576,0,'s_ID_8','s_ID_"
1204 "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr"
1205 "ome_bookmarks',NULL,X'C2881000',X'C2881000');"
1206 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1207 ",1048576,1,'s_ID_9','s_ID_"
1208 "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
1209 ",'bookmark_bar',NULL,X'C2881000',X'C2881000');"
1210 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1211 ",2097152,2,'s_ID_10','s_I"
1212 "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
1213 "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
1214 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1215 ",-1048576,8,'s_ID_11','s_"
1216 "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec"
1217 "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747"
1218 "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810"
1219 "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120"
1220 "84146414756415346');"
1221 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1222 ",0,9,'s_ID_12','s_ID_6','"
1223 "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo"
1224 "okmarks',NULL,NULL,X'C2881000',X'C2881000');"
1225 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1226 ",-917504,10,'s_ID_13','s_"
1227 "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co"
1228 "rporation for Assigned Names and Numbers','ICANN | Internet Corpora"
1229 "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474"
1230 "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C"
1231 "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641"
1232 "5346');"
1233 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1234 ",1048576,11,'s_ID_14','s_"
1235 "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr"
1236 "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687"
1237 "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474"
1238 "703A2F2F7765626B69742E6F72672F781205504E473259');"
1239 ));
1240 ASSERT_TRUE(connection->CommitTransaction());
1241 }
1242
1243 void MigrationTest::SetUpVersion75Database(sql::Connection* connection) {
1244 ASSERT_TRUE(connection->is_open());
1245 ASSERT_TRUE(connection->BeginTransaction());
1246 ASSERT_TRUE(connection->Execute(
1247 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1248 "INSERT INTO 'share_version' VALUES('nick@chromium.org',75);"
1249 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
1250 "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
1251 "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
1252 "tion_state INT default 0,bookmarks_added_during_autofill_migration "
1253 "INT default 0, autofill_migration_time INT default 0, autofill_entr"
1254 "ies_added_during_migration INT default 0, autofill_profiles_added_d"
1255 "uring_migration INT default 0);"
1256 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org"
1257 "','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-655"
1258 "42,'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
1259 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, "
1260 "initial_sync_ended BOOLEAN default 0);"
1261 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1262 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,ba"
1263 "se_version bigint default -1,server_version bigint default 0,mtime"
1264 " bigint default 0,server_mtime bigint default 0,ctime bigint defau"
1265 "lt 0,server_ctime bigint default 0,server_position_in_parent bigin"
1266 "t default 0,local_external_id bigint default 0,id varchar(255) def"
1267 "ault 'r',parent_id varchar(255) default 'r',server_parent_id varch"
1268 "ar(255) default 'r',prev_id varchar(255) default 'r',next_id varch"
1269 "ar(255) default 'r',is_unsynced bit default 0,is_unapplied_update "
1270 "bit default 0,is_del bit default 0,is_dir bit default 0,server_is_"
1271 "dir bit default 0,server_is_del bit default 0,non_unique_name varc"
1272 "har,server_non_unique_name varchar(255),unique_server_tag varchar,"
1273 "unique_client_tag varchar,specifics blob,server_specifics blob);"
1274 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1275 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NUL"
1276 "L,X'',X'');"
1277 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1278 ",-2097152,4,'s_ID_"
1279 "2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Ite"
1280 "m','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772"
1281 "E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A176874"
1282 "74703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474"
1283 "14447');"
1284 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1285 ",-3145728,3,'s_ID_"
1286 "4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to "
1287 "Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A316874747"
1288 "03A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F65"
1289 "6E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7"
1290 "777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
1291 "6C636F6D652E68746D6C1200');"
1292 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1293 ",1048576,7,'s_ID_5"
1294 "','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Goo"
1295 "gle',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C65"
1296 "2E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F777"
1297 "7772E676F6F676C652E636F6D2F12084147464447415347');"
1298 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1299 ",-4194304,6,'s_ID_"
1300 "6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The In"
1301 "ternet',NULL,NULL,X'C2881000',X'C2881000');"
1302 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1303 ",1048576,0,'s_ID_7"
1304 "','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','"
1305 "google_chrome',NULL,NULL,NULL);"
1306 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1307 ",1048576,0,'s_ID_8"
1308 "','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks'"
1309 ",'google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1310 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1311 ",1048576,1,'s_ID_9"
1312 "','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','B"
1313 "ookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1314 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1315 ",2097152,2,'s_ID_"
1316 "10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks"
1317 "','Other Bookmarks','other_bookmarks',NULL,X'C2881000',X'C28810"
1318 "00');"
1319 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1320 ",-1048576,8,'s_ID"
1321 "_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chr"
1322 "omium Projects)','Home (The Chromium Projects)',NULL,NULL,X'C28"
1323 "810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641"
1324 "4741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
1325 "D2E6F72672F6F7468657212084146414756415346');"
1326 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1327 ",0,9,'s_ID_12','s"
1328 "_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmark"
1329 "s','Extra Bookmarks',NULL,NULL,X'C2881000',X'C2881000');"
1330 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1331 ",-917504,10,'s_ID"
1332 "_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN |"
1333 " Internet Corporation for Assigned Names and Numbers','ICANN | "
1334 "Internet Corporation for Assigned Names and Numbers',NULL,NULL,"
1335 "X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
1336 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E696361"
1337 "6E6E2E636F6D2F120744414146415346');"
1338 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1339 ",1048576,11,'s_ID"
1340 "_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Op"
1341 "en Source Project','The WebKit Open Source Project',NULL,NULL,X"
1342 "'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',"
1343 "X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473"
1344 "259');"
1345 ));
1346 ASSERT_TRUE(connection->CommitTransaction());
1347 }
1348
1349 void MigrationTest::SetUpVersion76Database(sql::Connection* connection) {
1350 ASSERT_TRUE(connection->is_open());
1351 ASSERT_TRUE(connection->BeginTransaction());
1352 ASSERT_TRUE(connection->Execute(
1353 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1354 "INSERT INTO 'share_version' VALUES('nick@chromium.org',76);"
1355 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1356 "itial_sync_ended BOOLEAN default 0);"
1357 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1358 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1359 "_version bigint default -1,server_version bigint default 0,mtime big"
1360 "int default 0,server_mtime bigint default 0,ctime bigint default 0,s"
1361 "erver_ctime bigint default 0,server_position_in_parent bigint defaul"
1362 "t 0,local_external_id bigint default 0,id varchar(255) default 'r',p"
1363 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1364 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1365 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1366 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1367 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1368 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1369 "har,specifics blob,server_specifics blob);"
1370 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1371 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'')"
1372 ";"
1373 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1374 ",-2097152,4,'s_ID_2','s_ID_9"
1375 "','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted Ite"
1376 "m',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6"
1377 "D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E676F6F6"
1378 "76C652E636F6D2F32120B4153414447414447414447');"
1379 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1380 ",-3145728,3,'s_ID_4','s_ID_9"
1381 "','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','Welc"
1382 "ome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E676F6"
1383 "F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746"
1384 "D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6"
1385 "368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
1386 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1387 ",1048576,7,'s_ID_5','s_ID_9'"
1388 ",'s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NULL,"
1389 "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F1208414741"
1390 "5347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D"
1391 "2F12084147464447415347');"
1392 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1393 ",-4194304,6,'s_ID_6','s_ID_9"
1394 "','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL,NU"
1395 "LL,X'C2881000',X'C2881000');"
1396 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1397 ",1048576,0,'s_ID_7','r','r',"
1398 "'r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrome',"
1399 "NULL,NULL,NULL);"
1400 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1401 ",1048576,0,'s_ID_8','s_ID_7'"
1402 ",'s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chrome"
1403 "_bookmarks',NULL,X'C2881000',X'C2881000');"
1404 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1405 ",1048576,1,'s_ID_9','s_ID_8'"
1406 ",'s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar','b"
1407 "ookmark_bar',NULL,X'C2881000',X'C2881000');"
1408 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1409 ",2097152,2,'s_ID_10','s_ID_"
1410 "8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Bookma"
1411 "rks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
1412 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1413 ",-1048576,8,'s_ID_11','s_ID"
1414 "_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projects)"
1415 "','Home (The Chromium Projects)',NULL,NULL,X'C28810220A18687474703A2"
1416 "F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1"
1417 "D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120841464"
1418 "14756415346');"
1419 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1420 ",0,9,'s_ID_12','s_ID_6','s_"
1421 "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
1422 "arks',NULL,NULL,X'C2881000',X'C2881000');"
1423 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1424 ",-917504,10,'s_ID_13','s_ID"
1425 "_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Corpo"
1426 "ration for Assigned Names and Numbers','ICANN | Internet Corporation"
1427 " for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474703A2"
1428 "F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C288102"
1429 "00A15687474703A2F2F7777772E6963616E6E2E636F6D2F120744414146415346');"
1430 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1431 ",1048576,11,'s_ID_14','s_ID"
1432 "_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Proje"
1433 "ct','The WebKit Open Source Project',NULL,NULL,X'C288101A0A126874747"
1434 "03A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2"
1435 "F2F7765626B69742E6F72672F781205504E473259');"
1436 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1437 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1438 "ult -2, cache_guid TEXT , notification_state BLOB);"
1439 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1440 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
1441 "9010788312004066376x-6609234393368420856x',NULL);"
1442 ));
1443 ASSERT_TRUE(connection->CommitTransaction());
1444 }
1445
1446 void MigrationTest::SetUpVersion77Database(sql::Connection* connection) {
1447 ASSERT_TRUE(connection->is_open());
1448 ASSERT_TRUE(connection->BeginTransaction());
1449 ASSERT_TRUE(connection->Execute(
1450 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1451 "INSERT INTO 'share_version' VALUES('nick@chromium.org',77);"
1452 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1453 "itial_sync_ended BOOLEAN default 0);"
1454 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1455 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1456 "_version bigint default -1,server_version bigint default 0,server_po"
1457 "sition_in_parent bigint default 0,local_external_id bigint default 0"
1458 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1459 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1460 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1461 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1462 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1463 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1464 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1465 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1466 "har,specifics blob,server_specifics blob);"
1467 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1)
1468 ",'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
1469 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
1470 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
1471 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
1472 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
1473 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
1474 "14447414447414447');"
1475 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
1476 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
1477 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
1478 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
1479 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
1480 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
1481 "E2F77656C636F6D652E68746D6C1200');"
1482 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," META_PROTO_TIMES_VALS(5)
1483 ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','"
1484 "Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E"
1485 "636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E67"
1486 "6F6F676C652E636F6D2F12084147464447415347');"
1487 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
1488 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
1489 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
1490 ");"
1491 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," META_PROTO_TIMES_VALS(7)
1492 ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Goo"
1493 "gle Chrome','google_chrome',NULL,NULL,NULL);"
1494 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," META_PROTO_TIMES_VALS(8)
1495 ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmar"
1496 "ks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1497 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," META_PROTO_TIMES_VALS(9)
1498 ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'"
1499 ",'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1500 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
1501 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
1502 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
1503 "LL,X'C2881000',X'C2881000');"
1504 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
1505 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
1506 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
1507 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
1508 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
1509 "8726F6D69756D2E6F72672F6F7468657212084146414756415346');"
1510 "INSERT INTO 'metas' VALUES(12,685,685,0,9," META_PROTO_TIMES_VALS(12)
1511 ",'s_ID_12','s_ID_6','s_"
1512 "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
1513 "arks',NULL,NULL,X'C2881000',X'C2881000');"
1514 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
1515 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
1516 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
1517 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
1518 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
1519 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
1520 "E6963616E6E2E636F6D2F120744414146415346');"
1521 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
1522 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
1523 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
1524 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
1525 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
1526 "81205504E473259');"
1527 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1528 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1529 "ult -2, cache_guid TEXT , notification_state BLOB);"
1530 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1531 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
1532 "9010788312004066376x-6609234393368420856x',NULL);"
1533 ));
1534 ASSERT_TRUE(connection->CommitTransaction());
1535 }
1536
1537 TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
1538 sql::Connection connection;
1539 ASSERT_TRUE(connection.OpenInMemory());
1540
1541 SetUpVersion67Database(&connection);
1542
1543 // Columns existing before version 67.
1544 ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
1545 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
1546 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
1547
1548 scoped_ptr<TestDirectoryBackingStore> dbs(
1549 new TestDirectoryBackingStore(GetUsername(), &connection));
1550
1551 ASSERT_FALSE(dbs->needs_column_refresh_);
1552 ASSERT_TRUE(dbs->MigrateVersion67To68());
1553 ASSERT_EQ(68, dbs->GetVersion());
1554 ASSERT_TRUE(dbs->needs_column_refresh_);
1555 }
1556
1557 TEST_F(DirectoryBackingStoreTest, MigrateVersion68To69) {
1558 sql::Connection connection;
1559 ASSERT_TRUE(connection.OpenInMemory());
1560 SetUpVersion68Database(&connection);
1561
1562 {
1563 scoped_ptr<TestDirectoryBackingStore> dbs(
1564 new TestDirectoryBackingStore(GetUsername(), &connection));
1565
1566 ASSERT_FALSE(dbs->needs_column_refresh_);
1567 ASSERT_TRUE(dbs->MigrateVersion68To69());
1568 ASSERT_EQ(69, dbs->GetVersion());
1569 ASSERT_TRUE(dbs->needs_column_refresh_);
1570 }
1571
1572 ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
1573 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
1574 sql::Statement s(connection.GetUniqueStatement("SELECT non_unique_name,"
1575 "is_del, is_dir, id, specifics, server_specifics FROM metas "
1576 "WHERE metahandle = 2"));
1577 ASSERT_TRUE(s.Step());
1578 ASSERT_EQ("Deleted Item", s.ColumnString(0));
1579 ASSERT_TRUE(s.ColumnBool(1));
1580 ASSERT_FALSE(s.ColumnBool(2));
1581 ASSERT_EQ("s_ID_2", s.ColumnString(3));
1582 sync_pb::EntitySpecifics specifics;
1583 specifics.ParseFromArray(s.ColumnBlob(4), s.ColumnByteLength(4));
1584 ASSERT_TRUE(specifics.has_bookmark());
1585 ASSERT_EQ("http://www.google.com/", specifics.bookmark().url());
1586 ASSERT_EQ("AASGASGA", specifics.bookmark().favicon());
1587 specifics.ParseFromArray(s.ColumnBlob(5), s.ColumnByteLength(5));
1588 ASSERT_TRUE(specifics.has_bookmark());
1589 ASSERT_EQ("http://www.google.com/2", specifics.bookmark().url());
1590 ASSERT_EQ("ASADGADGADG", specifics.bookmark().favicon());
1591 ASSERT_FALSE(s.Step());
1592 }
1593
1594 TEST_F(DirectoryBackingStoreTest, MigrateVersion69To70) {
1595 sql::Connection connection;
1596 ASSERT_TRUE(connection.OpenInMemory());
1597 SetUpVersion69Database(&connection);
1598
1599 ASSERT_TRUE(connection.DoesColumnExist("metas", "singleton_tag"));
1600 ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_server_tag"));
1601 ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_client_tag"));
1602
1603 {
1604 scoped_ptr<TestDirectoryBackingStore> dbs(
1605 new TestDirectoryBackingStore(GetUsername(), &connection));
1606
1607 ASSERT_FALSE(dbs->needs_column_refresh_);
1608 ASSERT_TRUE(dbs->MigrateVersion69To70());
1609 ASSERT_EQ(70, dbs->GetVersion());
1610 ASSERT_TRUE(dbs->needs_column_refresh_);
1611 }
1612
1613 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
1614 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
1615 sql::Statement s(connection.GetUniqueStatement("SELECT id"
1616 " FROM metas WHERE unique_server_tag = 'google_chrome'"));
1617 ASSERT_TRUE(s.Step());
1618 EXPECT_EQ("s_ID_7", s.ColumnString(0));
1619 }
1620
1621 TEST_F(DirectoryBackingStoreTest, MigrateVersion70To71) {
1622 sql::Connection connection;
1623 ASSERT_TRUE(connection.OpenInMemory());
1624 SetUpVersion70Database(&connection);
1625
1626 ASSERT_TRUE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
1627 ASSERT_TRUE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
1628 ASSERT_FALSE(connection.DoesTableExist("models"));
1629
1630 {
1631 scoped_ptr<TestDirectoryBackingStore> dbs(
1632 new TestDirectoryBackingStore(GetUsername(), &connection));
1633
1634 ASSERT_FALSE(dbs->needs_column_refresh_);
1635 ASSERT_TRUE(dbs->MigrateVersion70To71());
1636 ASSERT_EQ(71, dbs->GetVersion());
1637 ASSERT_FALSE(dbs->needs_column_refresh_);
1638 }
1639
1640 ASSERT_FALSE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
1641 ASSERT_FALSE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
1642 ASSERT_TRUE(connection.DoesTableExist("models"));
1643 ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended"));
1644 ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
1645 ASSERT_TRUE(connection.DoesColumnExist("models", "model_id"));
1646
1647 sql::Statement s(connection.GetUniqueStatement("SELECT model_id, "
1648 "initial_sync_ended, last_download_timestamp FROM models"));
1649 ASSERT_TRUE(s.Step());
1650 std::string model_id = s.ColumnString(0);
1651 EXPECT_EQ("C2881000", base::HexEncode(model_id.data(), model_id.size()))
1652 << "Model ID is expected to be the empty BookmarkSpecifics proto.";
1653 EXPECT_TRUE(s.ColumnBool(1));
1654 EXPECT_EQ(694, s.ColumnInt64(2));
1655 ASSERT_FALSE(s.Step());
1656 }
1657
1658
1659 TEST_F(DirectoryBackingStoreTest, MigrateVersion71To72) {
1660 sql::Connection connection;
1661 ASSERT_TRUE(connection.OpenInMemory());
1662 SetUpVersion71Database(&connection);
1663
1664 ASSERT_TRUE(connection.DoesTableExist("extended_attributes"));
1665
1666 {
1667 scoped_ptr<TestDirectoryBackingStore> dbs(
1668 new TestDirectoryBackingStore(GetUsername(), &connection));
1669
1670 ASSERT_FALSE(dbs->needs_column_refresh_);
1671 ASSERT_TRUE(dbs->MigrateVersion71To72());
1672 ASSERT_EQ(72, dbs->GetVersion());
1673 ASSERT_FALSE(dbs->needs_column_refresh_);
1674 }
1675
1676 ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
1677 }
1678
1679 TEST_F(DirectoryBackingStoreTest, MigrateVersion72To73) {
1680 sql::Connection connection;
1681 ASSERT_TRUE(connection.OpenInMemory());
1682 SetUpVersion72Database(&connection);
1683
1684 ASSERT_FALSE(connection.DoesColumnExist("share_info", "notification_state"));
1685
1686 {
1687 scoped_ptr<TestDirectoryBackingStore> dbs(
1688 new TestDirectoryBackingStore(GetUsername(), &connection));
1689
1690 ASSERT_FALSE(dbs->needs_column_refresh_);
1691 ASSERT_TRUE(dbs->MigrateVersion72To73());
1692 ASSERT_EQ(73, dbs->GetVersion());
1693 ASSERT_FALSE(dbs->needs_column_refresh_);
1694 }
1695
1696 ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
1697 }
1698
1699 TEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) {
1700 sql::Connection connection;
1701 ASSERT_TRUE(connection.OpenInMemory());
1702 SetUpVersion73Database(&connection);
1703
1704 ASSERT_FALSE(
1705 connection.DoesColumnExist("share_info", "autofill_migration_state"));
1706 ASSERT_FALSE(
1707 connection.DoesColumnExist("share_info",
1708 "bookmarks_added_during_autofill_migration"));
1709 ASSERT_FALSE(
1710 connection.DoesColumnExist("share_info", "autofill_migration_time"));
1711 ASSERT_FALSE(
1712 connection.DoesColumnExist("share_info",
1713 "autofill_entries_added_during_migration"));
1714
1715 ASSERT_FALSE(
1716 connection.DoesColumnExist("share_info",
1717 "autofill_profiles_added_during_migration"));
1718
1719 {
1720 scoped_ptr<TestDirectoryBackingStore> dbs(
1721 new TestDirectoryBackingStore(GetUsername(), &connection));
1722
1723 ASSERT_FALSE(dbs->needs_column_refresh_);
1724 ASSERT_TRUE(dbs->MigrateVersion73To74());
1725 ASSERT_EQ(74, dbs->GetVersion());
1726 ASSERT_FALSE(dbs->needs_column_refresh_);
1727 }
1728
1729 ASSERT_TRUE(
1730 connection.DoesColumnExist("share_info", "autofill_migration_state"));
1731 ASSERT_TRUE(
1732 connection.DoesColumnExist("share_info",
1733 "bookmarks_added_during_autofill_migration"));
1734 ASSERT_TRUE(
1735 connection.DoesColumnExist("share_info", "autofill_migration_time"));
1736 ASSERT_TRUE(
1737 connection.DoesColumnExist("share_info",
1738 "autofill_entries_added_during_migration"));
1739
1740 ASSERT_TRUE(
1741 connection.DoesColumnExist("share_info",
1742 "autofill_profiles_added_during_migration"));
1743 }
1744
1745 TEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) {
1746 sql::Connection connection;
1747 ASSERT_TRUE(connection.OpenInMemory());
1748 SetUpVersion74Database(&connection);
1749
1750 ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker"));
1751 ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
1752
1753 {
1754 scoped_ptr<TestDirectoryBackingStore> dbs(
1755 new TestDirectoryBackingStore(GetUsername(), &connection));
1756
1757 ASSERT_FALSE(dbs->needs_column_refresh_);
1758 ASSERT_TRUE(dbs->MigrateVersion74To75());
1759 ASSERT_EQ(75, dbs->GetVersion());
1760 ASSERT_FALSE(dbs->needs_column_refresh_);
1761 }
1762
1763 ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
1764 ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
1765 }
1766
1767 TEST_F(DirectoryBackingStoreTest, MigrateVersion75To76) {
1768 sql::Connection connection;
1769 ASSERT_TRUE(connection.OpenInMemory());
1770 SetUpVersion75Database(&connection);
1771
1772 ASSERT_TRUE(
1773 connection.DoesColumnExist("share_info", "autofill_migration_state"));
1774 ASSERT_TRUE(connection.DoesColumnExist("share_info",
1775 "bookmarks_added_during_autofill_migration"));
1776 ASSERT_TRUE(
1777 connection.DoesColumnExist("share_info", "autofill_migration_time"));
1778 ASSERT_TRUE(connection.DoesColumnExist("share_info",
1779 "autofill_entries_added_during_migration"));
1780 ASSERT_TRUE(connection.DoesColumnExist("share_info",
1781 "autofill_profiles_added_during_migration"));
1782
1783 scoped_ptr<TestDirectoryBackingStore> dbs(
1784 new TestDirectoryBackingStore(GetUsername(), &connection));
1785 ASSERT_FALSE(dbs->needs_column_refresh_);
1786 ASSERT_TRUE(dbs->MigrateVersion75To76());
1787 ASSERT_EQ(76, dbs->GetVersion());
1788 ASSERT_TRUE(dbs->needs_column_refresh_);
1789 // Cannot actual refresh columns due to version 76 not containing all
1790 // necessary columns.
1791 }
1792
1793 TEST_F(DirectoryBackingStoreTest, MigrateVersion76To77) {
1794 sql::Connection connection;
1795 ASSERT_TRUE(connection.OpenInMemory());
1796 SetUpVersion76Database(&connection);
1797
1798 scoped_ptr<TestDirectoryBackingStore> dbs(
1799 new TestDirectoryBackingStore(GetUsername(), &connection));
1800 ASSERT_FALSE(dbs->needs_column_refresh_);
1801
1802 EXPECT_EQ(GetExpectedLegacyMetaProtoTimes(INCLUDE_DELETED_ITEMS),
1803 GetMetaProtoTimes(dbs->db_.get()));
1804 // Since the proto times are expected to be in a legacy format, they may not
1805 // be compatible with ProtoTimeToTime, so we don't call ExpectTimes().
1806
1807 ASSERT_TRUE(dbs->MigrateVersion76To77());
1808 ASSERT_EQ(77, dbs->GetVersion());
1809
1810 EXPECT_EQ(GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS),
1811 GetMetaProtoTimes(dbs->db_.get()));
1812 // Cannot actually load entries due to version 77 not having all required
1813 // columns.
1814 ASSERT_FALSE(dbs->needs_column_refresh_);
1815 }
1816
1817 TEST_F(DirectoryBackingStoreTest, MigrateVersion77To78) {
1818 sql::Connection connection;
1819 ASSERT_TRUE(connection.OpenInMemory());
1820 SetUpVersion77Database(&connection);
1821
1822 ASSERT_FALSE(connection.DoesColumnExist("metas", "BASE_SERVER_SPECIFICS"));
1823
1824 {
1825 scoped_ptr<TestDirectoryBackingStore> dbs(
1826 new TestDirectoryBackingStore(GetUsername(), &connection));
1827 ASSERT_FALSE(dbs->needs_column_refresh_);
1828 ASSERT_TRUE(dbs->MigrateVersion77To78());
1829 ASSERT_EQ(78, dbs->GetVersion());
1830
1831 ASSERT_FALSE(dbs->needs_column_refresh_);
1832 }
1833
1834 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
1835 }
1836
1837 TEST_P(MigrationTest, ToCurrentVersion) {
1838 sql::Connection connection;
1839 ASSERT_TRUE(connection.OpenInMemory());
1840 switch (GetParam()) {
1841 case 67:
1842 SetUpVersion67Database(&connection);
1843 break;
1844 case 68:
1845 SetUpVersion68Database(&connection);
1846 break;
1847 case 69:
1848 SetUpVersion69Database(&connection);
1849 break;
1850 case 70:
1851 SetUpVersion70Database(&connection);
1852 break;
1853 case 71:
1854 SetUpVersion71Database(&connection);
1855 break;
1856 case 72:
1857 SetUpVersion72Database(&connection);
1858 break;
1859 case 73:
1860 SetUpVersion73Database(&connection);
1861 break;
1862 case 74:
1863 SetUpVersion74Database(&connection);
1864 break;
1865 case 75:
1866 SetUpVersion75Database(&connection);
1867 break;
1868 case 76:
1869 SetUpVersion76Database(&connection);
1870 break;
1871 case 77:
1872 SetUpVersion77Database(&connection);
1873 break;
1874 default:
1875 // If you see this error, it may mean that you've increased the
1876 // database version number but you haven't finished adding unit tests
1877 // for the database migration code. You need to need to supply a
1878 // SetUpVersionXXDatabase function with a dump of the test database
1879 // at the old schema. Here's one way to do that:
1880 // 1. Start on a clean tree (with none of your pending schema changes).
1881 // 2. Set a breakpoint in this function and run the unit test.
1882 // 3. Allow this test to run to completion (step out of the call),
1883 // without allowing ~MigrationTest to execute.
1884 // 4. Examine this->temp_dir_ to determine the location of the
1885 // test database (it is currently of the version you need).
1886 // 5. Dump this using the sqlite3 command line tool:
1887 // > .output foo_dump.sql
1888 // > .dump
1889 // 6. Replace the timestamp columns with META_PROTO_TIMES(x) (or
1890 // LEGACY_META_PROTO_TIMES(x) if before Version 77).
1891 FAIL() << "Need to supply database dump for version " << GetParam();
1892 }
1893
1894 syncable::Directory::KernelLoadInfo dir_info;
1895 MetahandlesIndex index;
1896 STLElementDeleter<MetahandlesIndex> index_deleter(&index);
1897
1898 {
1899 scoped_ptr<TestDirectoryBackingStore> dbs(
1900 new TestDirectoryBackingStore(GetUsername(), &connection));
1901 ASSERT_EQ(OPENED, dbs->Load(&index, &dir_info));
1902 ASSERT_FALSE(dbs->needs_column_refresh_);
1903 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
1904 }
1905
1906 // Columns deleted in Version 67.
1907 ASSERT_FALSE(connection.DoesColumnExist("metas", "name"));
1908 ASSERT_FALSE(connection.DoesColumnExist("metas", "unsanitized_name"));
1909 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_name"));
1910
1911 // Columns added in Version 68.
1912 ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
1913 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
1914
1915 // Columns deleted in Version 68.
1916 ASSERT_FALSE(connection.DoesColumnExist("metas", "is_bookmark_object"));
1917 ASSERT_FALSE(connection.DoesColumnExist("metas",
1918 "server_is_bookmark_object"));
1919 ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_favicon"));
1920 ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_url"));
1921 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_bookmark_url"));
1922
1923 // Renamed a column in Version 70
1924 ASSERT_FALSE(connection.DoesColumnExist("metas", "singleton_tag"));
1925 ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
1926 ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
1927
1928 // Removed extended attributes in Version 72.
1929 ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
1930
1931 // Columns added in Version 73.
1932 ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
1933
1934 // Column replaced in version 75.
1935 ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
1936 ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
1937
1938 // Columns removed in version 76.
1939 ASSERT_FALSE(
1940 connection.DoesColumnExist("share_info", "autofill_migration_state"));
1941 ASSERT_FALSE(connection.DoesColumnExist("share_info",
1942 "bookmarks_added_during_autofill_migration"));
1943 ASSERT_FALSE(
1944 connection.DoesColumnExist("share_info", "autofill_migration_time"));
1945 ASSERT_FALSE(connection.DoesColumnExist("share_info",
1946 "autofill_entries_added_during_migration"));
1947 ASSERT_FALSE(connection.DoesColumnExist("share_info",
1948 "autofill_profiles_added_during_migration"));
1949
1950 // Column added in version 78.
1951 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
1952
1953 // Check download_progress state (v75 migration)
1954 ASSERT_EQ(694,
1955 dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
1956 .timestamp_token_for_migration());
1957 ASSERT_FALSE(
1958 dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
1959 .has_token());
1960 ASSERT_EQ(32904,
1961 dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
1962 .data_type_id());
1963 ASSERT_FALSE(
1964 dir_info.kernel_info.download_progress[syncable::THEMES]
1965 .has_timestamp_token_for_migration());
1966 ASSERT_TRUE(
1967 dir_info.kernel_info.download_progress[syncable::THEMES]
1968 .has_token());
1969 ASSERT_TRUE(
1970 dir_info.kernel_info.download_progress[syncable::THEMES]
1971 .token().empty());
1972 ASSERT_EQ(41210,
1973 dir_info.kernel_info.download_progress[syncable::THEMES]
1974 .data_type_id());
1975
1976 // Check metas
1977 EXPECT_EQ(GetExpectedMetaProtoTimes(DONT_INCLUDE_DELETED_ITEMS),
1978 GetMetaProtoTimes(&connection));
1979 ExpectTimes(index, GetExpectedMetaTimes());
1980
1981 MetahandlesIndex::iterator it = index.begin();
1982 ASSERT_TRUE(it != index.end());
1983 ASSERT_EQ(1, (*it)->ref(META_HANDLE));
1984 EXPECT_TRUE((*it)->ref(ID).IsRoot());
1985
1986 ASSERT_TRUE(++it != index.end());
1987 ASSERT_EQ(6, (*it)->ref(META_HANDLE));
1988 EXPECT_TRUE((*it)->ref(IS_DIR));
1989 EXPECT_TRUE((*it)->ref(SERVER_IS_DIR));
1990 EXPECT_FALSE(
1991 (*it)->ref(SPECIFICS).bookmark().has_url());
1992 EXPECT_FALSE(
1993 (*it)->ref(SERVER_SPECIFICS).bookmark().has_url());
1994 EXPECT_FALSE(
1995 (*it)->ref(SPECIFICS).bookmark().has_favicon());
1996 EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).bookmark().has_favicon());
1997
1998 ASSERT_TRUE(++it != index.end());
1999 ASSERT_EQ(7, (*it)->ref(META_HANDLE));
2000 EXPECT_EQ("google_chrome", (*it)->ref(UNIQUE_SERVER_TAG));
2001 EXPECT_FALSE((*it)->ref(SPECIFICS).has_bookmark());
2002 EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
2003
2004 ASSERT_TRUE(++it != index.end());
2005 ASSERT_EQ(8, (*it)->ref(META_HANDLE));
2006 EXPECT_EQ("google_chrome_bookmarks", (*it)->ref(UNIQUE_SERVER_TAG));
2007 EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
2008 EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
2009
2010 ASSERT_TRUE(++it != index.end());
2011 ASSERT_EQ(9, (*it)->ref(META_HANDLE));
2012 EXPECT_EQ("bookmark_bar", (*it)->ref(UNIQUE_SERVER_TAG));
2013 EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
2014 EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
2015
2016 ASSERT_TRUE(++it != index.end());
2017 ASSERT_EQ(10, (*it)->ref(META_HANDLE));
2018 EXPECT_FALSE((*it)->ref(IS_DEL));
2019 EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
2020 EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
2021 EXPECT_FALSE((*it)->ref(SPECIFICS).bookmark().has_url());
2022 EXPECT_FALSE(
2023 (*it)->ref(SPECIFICS).bookmark().has_favicon());
2024 EXPECT_FALSE(
2025 (*it)->ref(SERVER_SPECIFICS).bookmark().has_url());
2026 EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).bookmark().has_favicon());
2027 EXPECT_EQ("other_bookmarks", (*it)->ref(UNIQUE_SERVER_TAG));
2028 EXPECT_EQ("Other Bookmarks", (*it)->ref(NON_UNIQUE_NAME));
2029 EXPECT_EQ("Other Bookmarks", (*it)->ref(SERVER_NON_UNIQUE_NAME));
2030
2031 ASSERT_TRUE(++it != index.end());
2032 ASSERT_EQ(11, (*it)->ref(META_HANDLE));
2033 EXPECT_FALSE((*it)->ref(IS_DEL));
2034 EXPECT_FALSE((*it)->ref(IS_DIR));
2035 EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
2036 EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
2037 EXPECT_EQ("http://dev.chromium.org/",
2038 (*it)->ref(SPECIFICS).bookmark().url());
2039 EXPECT_EQ("AGATWA",
2040 (*it)->ref(SPECIFICS).bookmark().favicon());
2041 EXPECT_EQ("http://dev.chromium.org/other",
2042 (*it)->ref(SERVER_SPECIFICS).bookmark().url());
2043 EXPECT_EQ("AFAGVASF",
2044 (*it)->ref(SERVER_SPECIFICS).bookmark().favicon());
2045 EXPECT_EQ("", (*it)->ref(UNIQUE_SERVER_TAG));
2046 EXPECT_EQ("Home (The Chromium Projects)", (*it)->ref(NON_UNIQUE_NAME));
2047 EXPECT_EQ("Home (The Chromium Projects)", (*it)->ref(SERVER_NON_UNIQUE_NAME));
2048
2049 ASSERT_TRUE(++it != index.end());
2050 ASSERT_EQ(12, (*it)->ref(META_HANDLE));
2051 EXPECT_FALSE((*it)->ref(IS_DEL));
2052 EXPECT_TRUE((*it)->ref(IS_DIR));
2053 EXPECT_EQ("Extra Bookmarks", (*it)->ref(NON_UNIQUE_NAME));
2054 EXPECT_EQ("Extra Bookmarks", (*it)->ref(SERVER_NON_UNIQUE_NAME));
2055 EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
2056 EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
2057 EXPECT_FALSE(
2058 (*it)->ref(SPECIFICS).bookmark().has_url());
2059 EXPECT_FALSE(
2060 (*it)->ref(SERVER_SPECIFICS).bookmark().has_url());
2061 EXPECT_FALSE(
2062 (*it)->ref(SPECIFICS).bookmark().has_favicon());
2063 EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).bookmark().has_favicon());
2064
2065 ASSERT_TRUE(++it != index.end());
2066 ASSERT_EQ(13, (*it)->ref(META_HANDLE));
2067
2068 ASSERT_TRUE(++it != index.end());
2069 ASSERT_EQ(14, (*it)->ref(META_HANDLE));
2070
2071 ASSERT_TRUE(++it == index.end());
2072 }
2073
2074 INSTANTIATE_TEST_CASE_P(DirectoryBackingStore, MigrationTest,
2075 testing::Range(67, kCurrentDBVersion));
2076
2077 TEST_F(DirectoryBackingStoreTest, ModelTypeIds) {
2078 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
2079 std::string model_id =
2080 TestDirectoryBackingStore::ModelTypeEnumToModelId(ModelTypeFromInt(i));
2081 EXPECT_EQ(i,
2082 TestDirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(),
2083 model_id.size()));
2084 }
2085 }
2086
2087 // TODO(109668): This had to be disabled because the latest API will
2088 // intentionally crash when a database is this badly corrupted.
2089 TEST_F(DirectoryBackingStoreTest, DISABLED_Corruption) {
2090 {
2091 scoped_ptr<OnDiskDirectoryBackingStore> dbs(
2092 new OnDiskDirectoryBackingStore(GetUsername(), GetDatabasePath()));
2093 EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
2094 }
2095 std::string bad_data("BAD DATA");
2096 EXPECT_TRUE(file_util::WriteFile(GetDatabasePath(), bad_data.data(),
2097 bad_data.size()));
2098 {
2099 scoped_ptr<OnDiskDirectoryBackingStore> dbs(
2100 new OnDiskDirectoryBackingStore(GetUsername(), GetDatabasePath()));
2101
2102 EXPECT_FALSE(LoadAndIgnoreReturnedData(dbs.get()));
2103 }
2104 }
2105
2106 TEST_F(DirectoryBackingStoreTest, DeleteEntries) {
2107 sql::Connection connection;
2108 ASSERT_TRUE(connection.OpenInMemory());
2109
2110 SetUpCurrentDatabaseAndCheckVersion(&connection);
2111 scoped_ptr<TestDirectoryBackingStore> dbs(
2112 new TestDirectoryBackingStore(GetUsername(), &connection));
2113 MetahandlesIndex index;
2114 Directory::KernelLoadInfo kernel_load_info;
2115 STLElementDeleter<MetahandlesIndex> index_deleter(&index);
2116
2117 dbs->Load(&index, &kernel_load_info);
2118 size_t initial_size = index.size();
2119 ASSERT_LT(0U, initial_size) << "Test requires entries to delete.";
2120 int64 first_to_die = (*index.begin())->ref(META_HANDLE);
2121 MetahandleSet to_delete;
2122 to_delete.insert(first_to_die);
2123 EXPECT_TRUE(dbs->DeleteEntries(to_delete));
2124
2125 STLDeleteElements(&index);
2126 dbs->LoadEntries(&index);
2127
2128 EXPECT_EQ(initial_size - 1, index.size());
2129 bool delete_failed = false;
2130 for (MetahandlesIndex::iterator it = index.begin(); it != index.end();
2131 ++it) {
2132 if ((*it)->ref(META_HANDLE) == first_to_die) {
2133 delete_failed = true;
2134 break;
2135 }
2136 }
2137 EXPECT_FALSE(delete_failed);
2138
2139 to_delete.clear();
2140 for (MetahandlesIndex::iterator it = index.begin(); it != index.end();
2141 ++it) {
2142 to_delete.insert((*it)->ref(META_HANDLE));
2143 }
2144
2145 EXPECT_TRUE(dbs->DeleteEntries(to_delete));
2146
2147 STLDeleteElements(&index);
2148 dbs->LoadEntries(&index);
2149 EXPECT_EQ(0U, index.size());
2150 }
2151
2152 TEST_F(DirectoryBackingStoreTest, GenerateCacheGUID) {
2153 const std::string& guid1 = TestDirectoryBackingStore::GenerateCacheGUID();
2154 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID();
2155 EXPECT_EQ(24U, guid1.size());
2156 EXPECT_EQ(24U, guid2.size());
2157 // In theory this test can fail, but it won't before the universe
2158 // dies of heat death.
2159 EXPECT_NE(guid1, guid2);
2160 }
2161
2162 } // namespace syncable
OLDNEW
« no previous file with comments | « chrome/browser/sync/syncable/directory_backing_store.cc ('k') | chrome/browser/sync/syncable/directory_change_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698