| Index: chrome/browser/sync/syncable/directory_backing_store_unittest.cc
|
| diff --git a/chrome/browser/sync/syncable/directory_backing_store_unittest.cc b/chrome/browser/sync/syncable/directory_backing_store_unittest.cc
|
| index d80200f7469931229b5efe877e9ce3076f18268e..d3dae0e30c0a3879d680ea1a1db92d3669994b4b 100644
|
| --- a/chrome/browser/sync/syncable/directory_backing_store_unittest.cc
|
| +++ b/chrome/browser/sync/syncable/directory_backing_store_unittest.cc
|
| @@ -49,6 +49,7 @@ class MigrationTest : public testing::TestWithParam<int> {
|
| void SetUpVersion71Database();
|
| void SetUpVersion72Database();
|
| void SetUpVersion73Database();
|
| + void SetUpVersion74Database();
|
|
|
| void SetUpCurrentDatabaseAndCheckVersion() {
|
| SetUpVersion70Database(); // Prepopulates data.
|
| @@ -847,6 +848,109 @@ void MigrationTest::SetUpVersion73Database() {
|
| ASSERT_TRUE(connection.CommitTransaction());
|
| }
|
|
|
| +void MigrationTest::SetUpVersion74Database() {
|
| + sql::Connection connection;
|
| + ASSERT_TRUE(connection.Open(GetDatabasePath()));
|
| + ASSERT_TRUE(connection.BeginTransaction());
|
| + ASSERT_TRUE(connection.Execute(
|
| + "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
|
| + "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);"
|
| + "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp"
|
| + " INT, initial_sync_ended BOOLEAN default 0);"
|
| + "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
|
| + "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
|
| + "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
|
| + "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
|
| + "tion_state INT default 0, bookmarks_added_during_autofill_migration"
|
| + " INT default 0, autofill_migration_time INT default 0, autofill_ent"
|
| + "ries_added_during_migration INT default 0, autofill_profiles_added_"
|
| + "during_migration INT default 0);"
|
| + "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'"
|
| + ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542"
|
| + ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
|
| + "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas"
|
| + "e_version bigint default -1,server_version bigint default 0,mtime b"
|
| + "igint default 0,server_mtime bigint default 0,ctime bigint default "
|
| + "0,server_ctime bigint default 0,server_position_in_parent bigint de"
|
| + "fault 0,local_external_id bigint default 0,id varchar(255) default "
|
| + "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255"
|
| + ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)"
|
| + " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa"
|
| + "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d"
|
| + "efault 0,server_is_del bit default 0,non_unique_name varchar,server"
|
| + "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie"
|
| + "nt_tag varchar,specifics blob,server_specifics blob);"
|
| + "INSERT INTO 'metas' VALUES(1,-1,0,129079956640320000,0,1290799566403200"
|
| + "00,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'"
|
| + "');"
|
| + "INSERT INTO 'metas' VALUES(2,669,669,128976886618480000,128976886618480"
|
| + "000,128976886618480000,128976886618480000,-2097152,4,'s_ID_2','s_ID"
|
| + "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted "
|
| + "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
|
| + "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67"
|
| + "6F6F676C652E636F6D2F32120B4153414447414447414447');"
|
| + "INSERT INTO 'metas' VALUES(4,681,681,129002163642690000,129002163642690"
|
| + "000,129002163642690000,129002163642690000,-3145728,3,'s_ID_4','s_ID"
|
| + "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W"
|
| + "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6"
|
| + "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E"
|
| + "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636"
|
| + "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
|
| + "INSERT INTO 'metas' VALUES(5,677,677,129001555500000000,129001555500000"
|
| + "000,129001555500000000,129001555500000000,1048576,7,'s_ID_5','s_ID_"
|
| + "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU"
|
| + "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841"
|
| + "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
|
| + "36F6D2F12084147464447415347');"
|
| + "INSERT INTO 'metas' VALUES(6,694,694,129053976170000000,129053976170000"
|
| + "000,129053976170000000,129053976170000000,-4194304,6,'s_ID_6','s_ID"
|
| + "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL"
|
| + ",NULL,X'C2881000',X'C2881000');"
|
| + "INSERT INTO 'metas' VALUES(7,663,663,128976864758480000,128976864758480"
|
| + "000,128976864758480000,128976864758480000,1048576,0,'s_ID_7','r','r"
|
| + "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom"
|
| + "e',NULL,NULL,NULL);"
|
| + "INSERT INTO 'metas' VALUES(8,664,664,128976864758480000,128976864758480"
|
| + "000,128976864758480000,128976864758480000,1048576,0,'s_ID_8','s_ID_"
|
| + "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr"
|
| + "ome_bookmarks',NULL,X'C2881000',X'C2881000');"
|
| + "INSERT INTO 'metas' VALUES(9,665,665,128976864758480000,128976864758480"
|
| + "000,128976864758480000,128976864758480000,1048576,1,'s_ID_9','s_ID_"
|
| + "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
|
| + ",'bookmark_bar',NULL,X'C2881000',X'C2881000');"
|
| + "INSERT INTO 'metas' VALUES(10,666,666,128976864758480000,12897686475848"
|
| + "0000,128976864758480000,128976864758480000,2097152,2,'s_ID_10','s_I"
|
| + "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
|
| + "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
|
| + "INSERT INTO 'metas' VALUES(11,683,683,129079956948440000,12907995694844"
|
| + "0000,129079956948440000,129079956948440000,-1048576,8,'s_ID_11','s_"
|
| + "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec"
|
| + "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747"
|
| + "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810"
|
| + "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120"
|
| + "84146414756415346');"
|
| + "INSERT INTO 'metas' VALUES(12,685,685,129079957513650000,12907995751365"
|
| + "0000,129079957513650000,129079957513650000,0,9,'s_ID_12','s_ID_6','"
|
| + "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo"
|
| + "okmarks',NULL,NULL,X'C2881000',X'C2881000');"
|
| + "INSERT INTO 'metas' VALUES(13,687,687,129079957985300000,12907995798530"
|
| + "0000,129079957985300000,129079957985300000,-917504,10,'s_ID_13','s_"
|
| + "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co"
|
| + "rporation for Assigned Names and Numbers','ICANN | Internet Corpora"
|
| + "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474"
|
| + "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C"
|
| + "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641"
|
| + "5346');"
|
| + "INSERT INTO 'metas' VALUES(14,692,692,129079958383000000,12907995838300"
|
| + "0000,129079958383000000,129079958383000000,1048576,11,'s_ID_14','s_"
|
| + "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr"
|
| + "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687"
|
| + "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474"
|
| + "703A2F2F7765626B69742E6F72672F781205504E473259');"
|
| + ));
|
| + ASSERT_TRUE(connection.CommitTransaction());
|
| +}
|
| +
|
| TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
|
| SetUpVersion67Database();
|
|
|
| @@ -1093,6 +1197,35 @@ TEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) {
|
| "autofill_profiles_added_during_migration"));
|
| }
|
|
|
| +TEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) {
|
| + SetUpVersion74Database();
|
| +
|
| + {
|
| + sql::Connection connection;
|
| + ASSERT_TRUE(connection.Open(GetDatabasePath()));
|
| + ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker"));
|
| + ASSERT_TRUE(connection.DoesColumnExist("models",
|
| + "last_download_timestamp"));
|
| + }
|
| +
|
| + scoped_ptr<DirectoryBackingStore> dbs(
|
| + new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
|
| +
|
| + dbs->BeginLoad();
|
| + ASSERT_FALSE(dbs->needs_column_refresh_);
|
| + ASSERT_TRUE(dbs->MigrateVersion74To75());
|
| + ASSERT_EQ(75, dbs->GetVersion());
|
| + dbs->EndLoad();
|
| + ASSERT_FALSE(dbs->needs_column_refresh_);
|
| +
|
| + sql::Connection connection;
|
| + ASSERT_TRUE(connection.Open(GetDatabasePath()));
|
| +
|
| + ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
|
| + ASSERT_FALSE(connection.DoesColumnExist("models",
|
| + "last_download_timestamp"));
|
| +}
|
| +
|
| TEST_P(MigrationTest, ToCurrentVersion) {
|
| switch (GetParam()) {
|
| case 67:
|
| @@ -1116,6 +1249,9 @@ TEST_P(MigrationTest, ToCurrentVersion) {
|
| case 73:
|
| SetUpVersion73Database();
|
| break;
|
| + case 74:
|
| + SetUpVersion74Database();
|
| + break;
|
| default:
|
| // If you see this error, it may mean that you've increased the
|
| // database version number but you haven't finished adding unit tests
|
| @@ -1178,6 +1314,38 @@ TEST_P(MigrationTest, ToCurrentVersion) {
|
| // Columns added in version 74.
|
| ASSERT_TRUE(connection.DoesColumnExist("share_info",
|
| "autofill_migration_state"));
|
| +
|
| + // Column replaced in version 75.
|
| + ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
|
| + ASSERT_FALSE(connection.DoesColumnExist("models",
|
| + "last_download_timestamp"));
|
| + }
|
| + {
|
| + syncable::Directory::KernelLoadInfo dir_info;
|
| + dbs->LoadInfo(&dir_info);
|
| +
|
| + // Check download_progress state (v75 migration)
|
| + ASSERT_EQ(694,
|
| + dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
|
| + .timestamp_token_for_migration());
|
| + ASSERT_FALSE(
|
| + dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
|
| + .has_token());
|
| + ASSERT_EQ(32904,
|
| + dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
|
| + .data_type_id());
|
| + ASSERT_FALSE(
|
| + dir_info.kernel_info.download_progress[syncable::THEMES]
|
| + .has_timestamp_token_for_migration());
|
| + ASSERT_TRUE(
|
| + dir_info.kernel_info.download_progress[syncable::THEMES]
|
| + .has_token());
|
| + ASSERT_TRUE(
|
| + dir_info.kernel_info.download_progress[syncable::THEMES]
|
| + .token().empty());
|
| + ASSERT_EQ(41210,
|
| + dir_info.kernel_info.download_progress[syncable::THEMES]
|
| + .data_type_id());
|
| }
|
|
|
| MetahandlesIndex index;
|
| @@ -1317,7 +1485,8 @@ TEST_F(DirectoryBackingStoreTest, ModelTypeIds) {
|
| std::string model_id =
|
| DirectoryBackingStore::ModelTypeEnumToModelId(ModelTypeFromInt(i));
|
| EXPECT_EQ(i,
|
| - DirectoryBackingStore::ModelIdToModelTypeEnum(model_id));
|
| + DirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(),
|
| + model_id.size()));
|
| }
|
| }
|
|
|
|
|