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

Side by Side Diff: sync/syncable/directory_backing_store_unittest.cc

Issue 395913003: Add server_attachment_metadata field to EntryKernel and sync database. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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
« no previous file with comments | « sync/syncable/directory_backing_store.cc ('k') | sync/syncable/entry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 void SetUpVersion79Database(sql::Connection* connection); 69 void SetUpVersion79Database(sql::Connection* connection);
70 void SetUpVersion80Database(sql::Connection* connection); 70 void SetUpVersion80Database(sql::Connection* connection);
71 void SetUpVersion81Database(sql::Connection* connection); 71 void SetUpVersion81Database(sql::Connection* connection);
72 void SetUpVersion82Database(sql::Connection* connection); 72 void SetUpVersion82Database(sql::Connection* connection);
73 void SetUpVersion83Database(sql::Connection* connection); 73 void SetUpVersion83Database(sql::Connection* connection);
74 void SetUpVersion84Database(sql::Connection* connection); 74 void SetUpVersion84Database(sql::Connection* connection);
75 void SetUpVersion85Database(sql::Connection* connection); 75 void SetUpVersion85Database(sql::Connection* connection);
76 void SetUpVersion86Database(sql::Connection* connection); 76 void SetUpVersion86Database(sql::Connection* connection);
77 void SetUpVersion87Database(sql::Connection* connection); 77 void SetUpVersion87Database(sql::Connection* connection);
78 void SetUpVersion88Database(sql::Connection* connection); 78 void SetUpVersion88Database(sql::Connection* connection);
79 void SetUpVersion89Database(sql::Connection* connection);
79 80
80 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) { 81 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) {
81 SetUpVersion88Database(connection); // Prepopulates data. 82 SetUpVersion89Database(connection); // Prepopulates data.
82 scoped_ptr<TestDirectoryBackingStore> dbs( 83 scoped_ptr<TestDirectoryBackingStore> dbs(
83 new TestDirectoryBackingStore(GetUsername(), connection)); 84 new TestDirectoryBackingStore(GetUsername(), connection));
84 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); 85 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
85 86
86 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 87 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
87 ASSERT_FALSE(dbs->needs_column_refresh_); 88 ASSERT_FALSE(dbs->needs_column_refresh_);
88 } 89 }
89 90
90 private: 91 private:
91 base::ScopedTempDir temp_dir_; 92 base::ScopedTempDir temp_dir_;
(...skipping 2667 matching lines...) Expand 10 before | Expand all | Expand 10 after
2759 ",attachment_metadata blob);" 2760 ",attachment_metadata blob);"
2760 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2761 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2761 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau" 2762 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau"
2762 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);" 2763 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);"
2763 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2764 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2764 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'" 2765 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'"
2765 "9010788312004066376x-6609234393368420856x',NULL,NULL);")); 2766 "9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2766 ASSERT_TRUE(connection->CommitTransaction()); 2767 ASSERT_TRUE(connection->CommitTransaction());
2767 } 2768 }
2768 2769
2770
2771 void MigrationTest::SetUpVersion89Database(sql::Connection* connection) {
2772 ASSERT_TRUE(connection->is_open());
2773 ASSERT_TRUE(connection->BeginTransaction());
2774 ASSERT_TRUE(connection->Execute(
2775 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2776 "INSERT INTO 'share_version' VALUES('nick@chromium.org',89);"
2777 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr"
2778 "ansaction_version BIGINT default 0, context BLOB);"
2779 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1,NULL);"
2780 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2781 "_version bigint default -1,server_version bigint default 0,local_exte"
2782 "rnal_id bigint default 0,transaction_version bigint default 0,mtime b"
2783 "igint default 0,server_mtime bigint default 0,ctime bigint default 0,"
2784 "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v"
2785 "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_"
2786 "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d"
2787 "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d"
2788 "el bit default 0,non_unique_name varchar,server_non_unique_name varch"
2789 "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo"
2790 "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s"
2791 "pecifics blob,server_unique_position blob,unique_position blob,attach"
2792 "ment_metadata blob,server_attachment_metadata blob);"
2793 "INSERT INTO 'metas' VALUES(1,-1,0,0,0,"
2794 META_PROTO_TIMES_VALS(1)
2795 ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',X'',NULL,X'2200'"
2796 ",X'2200',NULL,NULL);"
2797 "INSERT INTO 'metas' VALUES(6,694,694,6,0,"
2798 META_PROTO_TIMES_VALS(6)
2799 ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The Internet','The Internet'"
2800 ",NULL,NULL,X'6754307476346749735A5734654D653273625336557753582F77673D"
2801 "',X'C2881000',X'C2881000',NULL,X'22247FFFFFFFFFC000006754307476346749"
2802 "735A5734654D653273625336557753582F77673D',X'22247FFFFFFFFFC0000067543"
2803 "07476346749735A5734654D653273625336557753582F77673D',NULL,NULL);"
2804 "INSERT INTO 'metas' VALUES(7,663,663,0,0,"
2805 META_PROTO_TIMES_VALS(7)
2806 ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google"
2807 "_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'2200',NULL,NULL);"
2808 "INSERT INTO 'metas' VALUES(8,664,664,0,0,"
2809 META_PROTO_TIMES_VALS(8)
2810 ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Bookmarks','Bookmarks','goog"
2811 "le_chrome_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'"
2812 "2200',NULL,NULL);"
2813 "INSERT INTO 'metas' VALUES(9,665,665,1,0,"
2814 META_PROTO_TIMES_VALS(9)
2815 ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
2816 ",'bookmark_bar',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'2200'"
2817 ",NULL,NULL);"
2818 "INSERT INTO 'metas' VALUES(10,666,666,2,0,"
2819 META_PROTO_TIMES_VALS(10)
2820 ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
2821 "kmarks','other_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'220"
2822 "0',X'2200',NULL,NULL);"
2823 "INSERT INTO 'metas' VALUES(11,683,683,8,0,"
2824 META_PROTO_TIMES_VALS(11)
2825 ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Home (The Chromium Projects"
2826 ")','Home (The Chromium Projects)',NULL,NULL,X'50514C784A456D623579366"
2827 "267644237646A7A2B62314130346E493D',X'C28810220A18687474703A2F2F646576"
2828 "2E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1D687474703"
2829 "A2F2F6465762E6368726F6D69756D2E6F72672F6F7468657212084146414756415346"
2830 "',NULL,X'22247FFFFFFFFFF0000050514C784A456D623579366267644237646A7A2B"
2831 "62314130346E493D',X'22247FFFFFFFFFF0000050514C784A456D623579366267644"
2832 "237646A7A2B62314130346E493D',NULL,NULL);"
2833 "INSERT INTO 'metas' VALUES(12,685,685,9,0,"
2834 META_PROTO_TIMES_VALS(12)
2835 ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Extra Bookmarks','Extra Boo"
2836 "kmarks',NULL,NULL,X'7867626A704A646134635A6F616C376A49513338734B46324"
2837 "837773D',X'C2881000',X'C2881000',NULL,X'222480000000000000007867626A7"
2838 "04A646134635A6F616C376A49513338734B46324837773D',X'222480000000000000"
2839 "007867626A704A646134635A6F616C376A49513338734B46324837773D',NULL,NULL"
2840 ");"
2841 "INSERT INTO 'metas' VALUES(13,687,687,10,0,"
2842 META_PROTO_TIMES_VALS(13)
2843 ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'ICANN | Internet Corporatio"
2844 "n for Assigned Names and Numbers','ICANN | Internet Corporation for A"
2845 "ssigned Names and Numbers',NULL,NULL,X'3142756B572F774176695650417967"
2846 "2B304A614A514B3452384A413D',X'C28810240A15687474703A2F2F7777772E69636"
2847 "16E6E2E636F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F"
2848 "2F7777772E6963616E6E2E636F6D2F120744414146415346',NULL,X'22247FFFFFFF"
2849 "FFF200003142756B572F7741766956504179672B304A614A514B3452384A413D',X'2"
2850 "2247FFFFFFFFFF200003142756B572F7741766956504179672B304A614A514B345238"
2851 "4A413D',NULL,NULL);"
2852 "INSERT INTO 'metas' VALUES(14,692,692,11,0,"
2853 META_PROTO_TIMES_VALS(14)
2854 ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'The WebKit Open Source Proj"
2855 "ect','The WebKit Open Source Project',NULL,NULL,X'5A5678314E797636457"
2856 "9524D3177494F7236563159552F6E644C553D',X'C288101A0A12687474703A2F2F77"
2857 "65626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2F2F7765626"
2858 "B69742E6F72672F781205504E473259',NULL,X'222480000000001000005A5678314"
2859 "E7976364579524D3177494F7236563159552F6E644C553D',X'222480000000001000"
2860 "005A5678314E7976364579524D3177494F7236563159552F6E644C553D',NULL,NULL"
2861 ");"
2862 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA"
2863 "IL,base_version bigint default -1,server_version bigint default 0,loc"
2864 "al_external_id bigint default 0,transaction_version bigint default 0,"
2865 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def"
2866 "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare"
2867 "nt_id varchar(255) default 'r',server_parent_id varchar(255) default "
2868 "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de"
2869 "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv"
2870 "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam"
2871 "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un"
2872 "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s"
2873 "erver_specifics blob,server_unique_position blob,unique_position blob"
2874 ",attachment_metadata blob,server_attachment_metadata blob);"
2875 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2876 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau"
2877 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);"
2878 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2879 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'"
2880 "9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2881 ASSERT_TRUE(connection->CommitTransaction());
2882 }
2883
2884
2769 TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) { 2885 TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
2770 sql::Connection connection; 2886 sql::Connection connection;
2771 ASSERT_TRUE(connection.OpenInMemory()); 2887 ASSERT_TRUE(connection.OpenInMemory());
2772 2888
2773 SetUpVersion67Database(&connection); 2889 SetUpVersion67Database(&connection);
2774 2890
2775 // Columns existing before version 67. 2891 // Columns existing before version 67.
2776 ASSERT_TRUE(connection.DoesColumnExist("metas", "name")); 2892 ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
2777 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name")); 2893 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
2778 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name")); 2894 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
3249 ASSERT_TRUE(connection.OpenInMemory()); 3365 ASSERT_TRUE(connection.OpenInMemory());
3250 SetUpVersion87Database(&connection); 3366 SetUpVersion87Database(&connection);
3251 3367
3252 scoped_ptr<TestDirectoryBackingStore> dbs( 3368 scoped_ptr<TestDirectoryBackingStore> dbs(
3253 new TestDirectoryBackingStore(GetUsername(), &connection)); 3369 new TestDirectoryBackingStore(GetUsername(), &connection));
3254 ASSERT_TRUE(dbs->MigrateVersion87To88()); 3370 ASSERT_TRUE(dbs->MigrateVersion87To88());
3255 ASSERT_EQ(88, dbs->GetVersion()); 3371 ASSERT_EQ(88, dbs->GetVersion());
3256 ASSERT_TRUE(connection.DoesColumnExist("models", "context")); 3372 ASSERT_TRUE(connection.DoesColumnExist("models", "context"));
3257 } 3373 }
3258 3374
3375 TEST_F(DirectoryBackingStoreTest, MigrateVersion88To89) {
3376 sql::Connection connection;
3377 ASSERT_TRUE(connection.OpenInMemory());
3378 SetUpVersion88Database(&connection);
3379 ASSERT_FALSE(
3380 connection.DoesColumnExist("metas", "server_attachment_metadata"));
3381
3382 scoped_ptr<TestDirectoryBackingStore> dbs(
3383 new TestDirectoryBackingStore(GetUsername(), &connection));
3384 ASSERT_TRUE(dbs->MigrateVersion88To89());
3385 ASSERT_EQ(89, dbs->GetVersion());
3386 EXPECT_TRUE(
3387 connection.DoesColumnExist("metas", "server_attachment_metadata"));
3388 EXPECT_TRUE(dbs->needs_column_refresh_);
3389 }
3390
3259 // The purpose of this test case is to make it easier to get a dump of the 3391 // The purpose of this test case is to make it easier to get a dump of the
3260 // database so you can implement a SetUpVersionYDatabase method. Here's what 3392 // database so you can implement a SetUpVersionYDatabase method. Here's what
3261 // you should do: 3393 // you should do:
3262 // 3394 //
3263 // 1. Say you're going from version X to version Y. Write the migration 3395 // 1. Say you're going from version X to version Y. Write the migration
3264 // method MigrateVersionXToY. 3396 // method MigrateVersionXToY.
3265 // 2. Update the test below to call SetUpVersionXDatabase and then 3397 // 2. Update the test below to call SetUpVersionXDatabase and then
3266 // MigrateVersionXToY. You now have a database at version Y. Let's dump it. 3398 // MigrateVersionXToY. You now have a database at version Y. Let's dump it.
3267 // 3. Set a breakpoint to stop execution just after the connection is 3399 // 3. Set a breakpoint to stop execution just after the connection is
3268 // destroyed. Examine temp_dir_ to find the version Y database that was 3400 // destroyed. Examine temp_dir_ to find the version Y database that was
3269 // created on disk. E.g. (gdb) p temp_dir_.path().value().c_str() 3401 // created on disk. E.g. (gdb) p temp_dir_.path().value().c_str()
3270 // 4. Dump the database using the sqlite3 command line tool: 3402 // 4. Dump the database using the sqlite3 command line tool:
3271 // > .output foo_dump.sql 3403 // > .output foo_dump.sql
3272 // > .dump 3404 // > .dump
3273 // 5. Replace the timestamp columns with META_PROTO_TIMES(x) (or 3405 // 5. Replace the timestamp columns with META_PROTO_TIMES(x) (or
3274 // LEGACY_META_PROTO_TIMES(x) if before Version 77). Use this dump to write 3406 // LEGACY_META_PROTO_TIMES(x) if before Version 77). Use this dump to write
3275 // a SetupVersionYDatabase method. 3407 // a SetupVersionYDatabase method.
3276 TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) { 3408 TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) {
3277 { 3409 {
3278 sql::Connection connection; 3410 sql::Connection connection;
3279 ASSERT_TRUE(connection.Open(GetDatabasePath())); 3411 ASSERT_TRUE(connection.Open(GetDatabasePath()));
3280 SetUpVersion87Database(&connection); // Update this. 3412 SetUpVersion88Database(&connection); // Update this.
3281 3413
3282 scoped_ptr<TestDirectoryBackingStore> dbs( 3414 scoped_ptr<TestDirectoryBackingStore> dbs(
3283 new TestDirectoryBackingStore(GetUsername(), &connection)); 3415 new TestDirectoryBackingStore(GetUsername(), &connection));
3284 ASSERT_TRUE(dbs->MigrateVersion87To88()); // Update this. 3416 ASSERT_TRUE(dbs->MigrateVersion88To89()); // Update this.
3285 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 3417 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
3286 EXPECT_EQ(88, dbs->GetVersion()); // Update this. 3418 EXPECT_EQ(89, dbs->GetVersion()); // Update this.
3287 ASSERT_FALSE(dbs->needs_column_refresh_); 3419 ASSERT_FALSE(dbs->needs_column_refresh_);
3288 } 3420 }
3289 // Set breakpoint here. 3421 // Set breakpoint here.
3290 } 3422 }
3291 3423
3292 TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) { 3424 TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) {
3293 sql::Connection connection; 3425 sql::Connection connection;
3294 ASSERT_TRUE(connection.OpenInMemory()); 3426 ASSERT_TRUE(connection.OpenInMemory());
3295 SetUpVersion86Database(&connection); 3427 SetUpVersion86Database(&connection);
3296 3428
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
3378 break; 3510 break;
3379 case 86: 3511 case 86:
3380 SetUpVersion86Database(&connection); 3512 SetUpVersion86Database(&connection);
3381 break; 3513 break;
3382 case 87: 3514 case 87:
3383 SetUpVersion87Database(&connection); 3515 SetUpVersion87Database(&connection);
3384 break; 3516 break;
3385 case 88: 3517 case 88:
3386 SetUpVersion88Database(&connection); 3518 SetUpVersion88Database(&connection);
3387 break; 3519 break;
3520 case 89:
3521 SetUpVersion89Database(&connection);
3522 break;
3388 default: 3523 default:
3389 // If you see this error, it may mean that you've increased the 3524 // If you see this error, it may mean that you've increased the
3390 // database version number but you haven't finished adding unit tests 3525 // database version number but you haven't finished adding unit tests
3391 // for the database migration code. You need to need to supply a 3526 // for the database migration code. You need to need to supply a
3392 // SetUpVersionYDatabase function with a dump of the test database 3527 // SetUpVersionYDatabase function with a dump of the test database
3393 // at the new schema. See the MigrateToLatestAndDump test case. 3528 // at the new schema. See the MigrateToLatestAndDump test case.
3394 FAIL() << "Need to supply database dump for version " << GetParam(); 3529 FAIL() << "Need to supply database dump for version " << GetParam();
3395 } 3530 }
3396 3531
3397 syncable::Directory::KernelLoadInfo dir_info; 3532 syncable::Directory::KernelLoadInfo dir_info;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
3470 ASSERT_FALSE(connection.DoesColumnExist("metas", "next_id")); 3605 ASSERT_FALSE(connection.DoesColumnExist("metas", "next_id"));
3471 ASSERT_FALSE(connection.DoesColumnExist("metas", "prev_id")); 3606 ASSERT_FALSE(connection.DoesColumnExist("metas", "prev_id"));
3472 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent")); 3607 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent"));
3473 3608
3474 // Column added in version 87. 3609 // Column added in version 87.
3475 ASSERT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata")); 3610 ASSERT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata"));
3476 3611
3477 // Column added in version 88. 3612 // Column added in version 88.
3478 ASSERT_TRUE(connection.DoesColumnExist("models", "context")); 3613 ASSERT_TRUE(connection.DoesColumnExist("models", "context"));
3479 3614
3615 // Column added in version 89.
3616 ASSERT_TRUE(
3617 connection.DoesColumnExist("metas", "server_attachment_metadata"));
3618
3480 // Check download_progress state (v75 migration) 3619 // Check download_progress state (v75 migration)
3481 ASSERT_EQ(694, 3620 ASSERT_EQ(694,
3482 dir_info.kernel_info.download_progress[BOOKMARKS] 3621 dir_info.kernel_info.download_progress[BOOKMARKS]
3483 .timestamp_token_for_migration()); 3622 .timestamp_token_for_migration());
3484 ASSERT_FALSE( 3623 ASSERT_FALSE(
3485 dir_info.kernel_info.download_progress[BOOKMARKS] 3624 dir_info.kernel_info.download_progress[BOOKMARKS]
3486 .has_token()); 3625 .has_token());
3487 ASSERT_EQ(32904, 3626 ASSERT_EQ(32904,
3488 dir_info.kernel_info.download_progress[BOOKMARKS] 3627 dir_info.kernel_info.download_progress[BOOKMARKS]
3489 .data_type_id()); 3628 .data_type_id());
(...skipping 16 matching lines...) Expand all
3506 ExpectTimes(handles_map, GetExpectedMetaTimes()); 3645 ExpectTimes(handles_map, GetExpectedMetaTimes());
3507 3646
3508 Directory::MetahandlesMap::iterator it = handles_map.find(1); 3647 Directory::MetahandlesMap::iterator it = handles_map.find(1);
3509 ASSERT_TRUE(it != handles_map.end()); 3648 ASSERT_TRUE(it != handles_map.end());
3510 ASSERT_EQ(1, it->second->ref(META_HANDLE)); 3649 ASSERT_EQ(1, it->second->ref(META_HANDLE));
3511 EXPECT_TRUE(it->second->ref(ID).IsRoot()); 3650 EXPECT_TRUE(it->second->ref(ID).IsRoot());
3512 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3651 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3513 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3652 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3514 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3653 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3515 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3654 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3655 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3516 3656
3517 // Items 2, 4, and 5 were deleted. 3657 // Items 2, 4, and 5 were deleted.
3518 it = handles_map.find(2); 3658 it = handles_map.find(2);
3519 ASSERT_TRUE(it == handles_map.end()); 3659 ASSERT_TRUE(it == handles_map.end());
3520 it = handles_map.find(4); 3660 it = handles_map.find(4);
3521 ASSERT_TRUE(it == handles_map.end()); 3661 ASSERT_TRUE(it == handles_map.end());
3522 it = handles_map.find(5); 3662 it = handles_map.find(5);
3523 ASSERT_TRUE(it == handles_map.end()); 3663 ASSERT_TRUE(it == handles_map.end());
3524 3664
3525 it = handles_map.find(6); 3665 it = handles_map.find(6);
3526 ASSERT_EQ(6, it->second->ref(META_HANDLE)); 3666 ASSERT_EQ(6, it->second->ref(META_HANDLE));
3527 EXPECT_TRUE(it->second->ref(IS_DIR)); 3667 EXPECT_TRUE(it->second->ref(IS_DIR));
3528 EXPECT_TRUE(it->second->ref(SERVER_IS_DIR)); 3668 EXPECT_TRUE(it->second->ref(SERVER_IS_DIR));
3529 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3669 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3530 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3670 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3531 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3671 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3532 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3672 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3533 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3673 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3534 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3674 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3535 EXPECT_EQ(UniquePosition::kSuffixLength, 3675 EXPECT_EQ(UniquePosition::kSuffixLength,
3536 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3676 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3537 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3677 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3678 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3538 3679
3539 it = handles_map.find(7); 3680 it = handles_map.find(7);
3540 ASSERT_EQ(7, it->second->ref(META_HANDLE)); 3681 ASSERT_EQ(7, it->second->ref(META_HANDLE));
3541 EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG)); 3682 EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG));
3542 EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark()); 3683 EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark());
3543 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3684 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3544 // Make sure we didn't assign positions to google_chrome. 3685 // Make sure we didn't assign positions to google_chrome.
3545 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3686 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3546 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3687 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3547 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3688 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3548 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3689 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3690 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3549 3691
3550 it = handles_map.find(8); 3692 it = handles_map.find(8);
3551 ASSERT_EQ(8, it->second->ref(META_HANDLE)); 3693 ASSERT_EQ(8, it->second->ref(META_HANDLE));
3552 EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG)); 3694 EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3553 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3695 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3554 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3696 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3555 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_8"); 3697 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_8");
3556 // Make sure we didn't mistake the bookmark root node for a real bookmark. 3698 // Make sure we didn't mistake the bookmark root node for a real bookmark.
3557 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3699 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3558 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3700 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3559 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3701 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3560 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3702 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3703 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3561 3704
3562 it = handles_map.find(9); 3705 it = handles_map.find(9);
3563 ASSERT_EQ(9, it->second->ref(META_HANDLE)); 3706 ASSERT_EQ(9, it->second->ref(META_HANDLE));
3564 EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG)); 3707 EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG));
3565 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3708 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3566 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3709 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3567 // Make sure we didn't assign positions to bookmark_bar. 3710 // Make sure we didn't assign positions to bookmark_bar.
3568 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3711 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3569 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3712 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3570 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3713 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3571 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3714 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3715 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3572 3716
3573 it = handles_map.find(10); 3717 it = handles_map.find(10);
3574 ASSERT_EQ(10, it->second->ref(META_HANDLE)); 3718 ASSERT_EQ(10, it->second->ref(META_HANDLE));
3575 EXPECT_FALSE(it->second->ref(IS_DEL)); 3719 EXPECT_FALSE(it->second->ref(IS_DEL));
3576 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3720 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3577 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3721 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3578 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3722 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3579 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3723 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3580 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3724 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3581 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3725 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3582 EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG)); 3726 EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3583 EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME)); 3727 EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3584 EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME)); 3728 EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3585 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10"); 3729 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10");
3586 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3730 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3731 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3587 // Make sure we didn't assign positions to server-created folders, either. 3732 // Make sure we didn't assign positions to server-created folders, either.
3588 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3733 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3589 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3734 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3590 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3735 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3591 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3736 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3737 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3592 3738
3593 it = handles_map.find(11); 3739 it = handles_map.find(11);
3594 ASSERT_EQ(11, it->second->ref(META_HANDLE)); 3740 ASSERT_EQ(11, it->second->ref(META_HANDLE));
3595 EXPECT_FALSE(it->second->ref(IS_DEL)); 3741 EXPECT_FALSE(it->second->ref(IS_DEL));
3596 EXPECT_FALSE(it->second->ref(IS_DIR)); 3742 EXPECT_FALSE(it->second->ref(IS_DIR));
3597 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3743 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3598 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3744 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3599 EXPECT_EQ("http://dev.chromium.org/", 3745 EXPECT_EQ("http://dev.chromium.org/",
3600 it->second->ref(SPECIFICS).bookmark().url()); 3746 it->second->ref(SPECIFICS).bookmark().url());
3601 EXPECT_EQ("AGATWA", it->second->ref(SPECIFICS).bookmark().favicon()); 3747 EXPECT_EQ("AGATWA", it->second->ref(SPECIFICS).bookmark().favicon());
(...skipping 20 matching lines...) Expand all
3622 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3768 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3623 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3769 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3624 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3770 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3625 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3771 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3626 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3772 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3627 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3773 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3628 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3774 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3629 EXPECT_EQ(UniquePosition::kSuffixLength, 3775 EXPECT_EQ(UniquePosition::kSuffixLength,
3630 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3776 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3631 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3777 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3778 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3632 3779
3633 it = handles_map.find(13); 3780 it = handles_map.find(13);
3634 ASSERT_EQ(13, it->second->ref(META_HANDLE)); 3781 ASSERT_EQ(13, it->second->ref(META_HANDLE));
3635 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3782 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3636 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3783 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3637 EXPECT_EQ(UniquePosition::kSuffixLength, 3784 EXPECT_EQ(UniquePosition::kSuffixLength,
3638 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3785 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3639 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3786 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3787 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3640 3788
3641 it = handles_map.find(14); 3789 it = handles_map.find(14);
3642 ASSERT_EQ(14, it->second->ref(META_HANDLE)); 3790 ASSERT_EQ(14, it->second->ref(META_HANDLE));
3643 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3791 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3644 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3792 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3645 EXPECT_EQ(UniquePosition::kSuffixLength, 3793 EXPECT_EQ(UniquePosition::kSuffixLength,
3646 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3794 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3647 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3795 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3796 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3648 3797
3649 ASSERT_EQ(static_cast<size_t>(10), handles_map.size()); 3798 ASSERT_EQ(static_cast<size_t>(10), handles_map.size());
3650 3799
3651 // Make sure that the syncable::Directory and the migration code agree on 3800 // Make sure that the syncable::Directory and the migration code agree on
3652 // which items should or should not have unique position values. This test 3801 // which items should or should not have unique position values. This test
3653 // may become obsolete if the directory's definition of that function 3802 // may become obsolete if the directory's definition of that function
3654 // changes, but, until then, this is a useful test. 3803 // changes, but, until then, this is a useful test.
3655 for (it = handles_map.begin(); it != handles_map.end(); it++) { 3804 for (it = handles_map.begin(); it != handles_map.end(); it++) {
3656 SCOPED_TRACE(it->second->ref(ID)); 3805 SCOPED_TRACE(it->second->ref(ID));
3657 if (it->second->ShouldMaintainPosition()) { 3806 if (it->second->ShouldMaintainPosition()) {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
3801 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID(); 3950 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID();
3802 EXPECT_EQ(24U, guid1.size()); 3951 EXPECT_EQ(24U, guid1.size());
3803 EXPECT_EQ(24U, guid2.size()); 3952 EXPECT_EQ(24U, guid2.size());
3804 // In theory this test can fail, but it won't before the universe 3953 // In theory this test can fail, but it won't before the universe
3805 // dies of heat death. 3954 // dies of heat death.
3806 EXPECT_NE(guid1, guid2); 3955 EXPECT_NE(guid1, guid2);
3807 } 3956 }
3808 3957
3809 } // namespace syncable 3958 } // namespace syncable
3810 } // namespace syncer 3959 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/syncable/directory_backing_store.cc ('k') | sync/syncable/entry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698