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

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

Issue 211523002: Add AttachmentMetadata to Sync's EntryKernel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 void SetUpVersion77Database(sql::Connection* connection); 67 void SetUpVersion77Database(sql::Connection* connection);
68 void SetUpVersion78Database(sql::Connection* connection); 68 void SetUpVersion78Database(sql::Connection* connection);
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 78
78 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) { 79 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) {
79 SetUpVersion86Database(connection); // Prepopulates data. 80 SetUpVersion87Database(connection); // Prepopulates data.
80 scoped_ptr<TestDirectoryBackingStore> dbs( 81 scoped_ptr<TestDirectoryBackingStore> dbs(
81 new TestDirectoryBackingStore(GetUsername(), connection)); 82 new TestDirectoryBackingStore(GetUsername(), connection));
82 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); 83 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
83 84
84 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 85 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
85 ASSERT_FALSE(dbs->needs_column_refresh_); 86 ASSERT_FALSE(dbs->needs_column_refresh_);
86 } 87 }
87 88
88 private: 89 private:
89 base::ScopedTempDir temp_dir_; 90 base::ScopedTempDir temp_dir_;
(...skipping 2437 matching lines...) Expand 10 before | Expand all | Expand 10 after
2527 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birt" 2528 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birt"
2528 "hday TEXT, db_create_version TEXT, db_create_time INT, next_id INT de" 2529 "hday TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
2529 "fault -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB" 2530 "fault -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB"
2530 ");" 2531 ");"
2531 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.or" 2532 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.or"
2532 "g','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-13107" 2533 "g','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-13107"
2533 "8,'9010788312004066376x-6609234393368420856x',NULL,NULL);")); 2534 "8,'9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2534 ASSERT_TRUE(connection->CommitTransaction()); 2535 ASSERT_TRUE(connection->CommitTransaction());
2535 } 2536 }
2536 2537
2538 void MigrationTest::SetUpVersion87Database(sql::Connection* connection) {
2539 ASSERT_TRUE(connection->is_open());
2540 ASSERT_TRUE(connection->BeginTransaction());
2541 ASSERT_TRUE(connection->Execute(
2542 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2543 "INSERT INTO 'share_version' VALUES('nick@chromium.org',87);"
2544 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr"
2545 "ansaction_version BIGINT default 0);"
2546 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
2547 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2548 "_version bigint default -1,server_version bigint default 0,local_exte"
2549 "rnal_id bigint default 0,transaction_version bigint default 0,mtime b"
2550 "igint default 0,server_mtime bigint default 0,ctime bigint default 0,"
2551 "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v"
2552 "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_"
2553 "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d"
2554 "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d"
2555 "el bit default 0,non_unique_name varchar,server_non_unique_name varch"
2556 "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo"
2557 "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s"
2558 "pecifics blob,server_unique_position blob,unique_position blob,attach"
2559 "ment_metadata blob);"
2560 "INSERT INTO 'metas' VALUES(1,-1,0,0,0,1263522064000,1263522064000,126352"
2561 "2064000,1263522064000,'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X''"
2562 ",X'',X'',NULL,X'2200',X'2200',NULL);"
2563 "INSERT INTO 'metas' VALUES(6,694,694,6,0,1260924017000,1260924017000,126"
2564 "0924017000,1260924017000,'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The "
2565 "Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D6532"
2566 "73625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFFF"
2567 "FFC000006754307476346749735A5734654D653273625336557753582F77673D',X'2"
2568 "2247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582F"
2569 "77673D',NULL);"
2570 "INSERT INTO 'metas' VALUES(7,663,663,0,0,1253212875000,1253212875000,125"
2571 "3212875000,1253212875000,'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome'"
2572 ",'Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'22"
2573 "00',NULL);"
2574 "INSERT INTO 'metas' VALUES(8,664,664,0,0,1253212875000,1253212875000,125"
2575 "3212875000,1253212875000,'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Book"
2576 "marks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'C"
2577 "2881000',NULL,X'2200',X'2200',NULL);"
2578 "INSERT INTO 'metas' VALUES(9,665,665,1,0,1253212875000,1253212875000,125"
2579 "3212875000,1253212875000,'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Book"
2580 "mark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C28810"
2581 "00',NULL,X'2200',X'2200',NULL);"
2582 "INSERT INTO 'metas' VALUES(10,666,666,2,0,1253212875000,1253212875000,12"
2583 "53212875000,1253212875000,'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Ot"
2584 "her Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C288100"
2585 "0',X'C2881000',NULL,X'2200',X'2200',NULL);"
2586 "INSERT INTO 'metas' VALUES(11,683,683,8,0,1263522094000,1263522094000,12"
2587 "63522094000,1263522094000,'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Ho"
2588 "me (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL,"
2589 "X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C288102"
2590 "20A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741"
2591 "',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F746"
2592 "8657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D6"
2593 "23579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF000005051"
2594 "4C784A456D623579366267644237646A7A2B62314130346E493D',NULL);"
2595 "INSERT INTO 'metas' VALUES(12,685,685,9,0,1263522151000,1263522151000,12"
2596 "63522151000,1263522151000,'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Ex"
2597 "tra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6F"
2598 "616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'2224"
2599 "80000000000000007867626A704A646134635A6F616C376A49513338734B463248377"
2600 "73D',X'222480000000000000007867626A704A646134635A6F616C376A4951333873"
2601 "4B46324837773D',NULL);"
2602 "INSERT INTO 'metas' VALUES(13,687,687,10,0,1263522198000,1263522198000,1"
2603 "263522198000,1263522198000,'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I"
2604 "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | "
2605 "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142"
2606 "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156"
2607 "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',"
2608 "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464"
2609 "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304"
2610 "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650"
2611 "4179672B304A614A514B3452384A413D',NULL);"
2612 "INSERT INTO 'metas' VALUES(14,692,692,11,0,1263522238000,1263522238000,1"
2613 "263522238000,1263522238000,'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T"
2614 "he WebKit Open Source Project','The WebKit Open Source Project',NULL,"
2615 "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2"
2616 "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101"
2617 "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222"
2618 "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C"
2619 "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315"
2620 "9552F6E644C553D',NULL);"
2621 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA"
2622 "IL,base_version bigint default -1,server_version bigint default 0,loc"
2623 "al_external_id bigint default 0,transaction_version bigint default 0,"
2624 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def"
2625 "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare"
2626 "nt_id varchar(255) default 'r',server_parent_id varchar(255) default "
2627 "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de"
2628 "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv"
2629 "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam"
2630 "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un"
2631 "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s"
2632 "erver_specifics blob,server_unique_position blob,unique_position blob"
2633 ",attachment_metadata blob);"
2634 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2635 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau"
2636 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);"
2637 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2638 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'"
2639 "9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2640 ASSERT_TRUE(connection->CommitTransaction());
2641 }
2642
2537 TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) { 2643 TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
2538 sql::Connection connection; 2644 sql::Connection connection;
2539 ASSERT_TRUE(connection.OpenInMemory()); 2645 ASSERT_TRUE(connection.OpenInMemory());
2540 2646
2541 SetUpVersion67Database(&connection); 2647 SetUpVersion67Database(&connection);
2542 2648
2543 // Columns existing before version 67. 2649 // Columns existing before version 67.
2544 ASSERT_TRUE(connection.DoesColumnExist("metas", "name")); 2650 ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
2545 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name")); 2651 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
2546 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name")); 2652 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
2991 scoped_ptr<TestDirectoryBackingStore> dbs( 3097 scoped_ptr<TestDirectoryBackingStore> dbs(
2992 new TestDirectoryBackingStore(GetUsername(), &connection)); 3098 new TestDirectoryBackingStore(GetUsername(), &connection));
2993 ASSERT_TRUE(dbs->MigrateVersion85To86()); 3099 ASSERT_TRUE(dbs->MigrateVersion85To86());
2994 EXPECT_EQ(86, dbs->GetVersion()); 3100 EXPECT_EQ(86, dbs->GetVersion());
2995 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_position")); 3101 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_position"));
2996 EXPECT_TRUE(connection.DoesColumnExist("metas", "server_unique_position")); 3102 EXPECT_TRUE(connection.DoesColumnExist("metas", "server_unique_position"));
2997 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_bookmark_tag")); 3103 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_bookmark_tag"));
2998 ASSERT_TRUE(dbs->needs_column_refresh_); 3104 ASSERT_TRUE(dbs->needs_column_refresh_);
2999 } 3105 }
3000 3106
3107 TEST_F(DirectoryBackingStoreTest, MigrateVersion86To87) {
3108 sql::Connection connection;
3109 EXPECT_TRUE(connection.OpenInMemory());
3110 SetUpVersion86Database(&connection);
3111 EXPECT_FALSE(connection.DoesColumnExist("metas", "attachment_metadata"));
3112
3113 scoped_ptr<TestDirectoryBackingStore> dbs(
3114 new TestDirectoryBackingStore(GetUsername(), &connection));
3115 EXPECT_TRUE(dbs->MigrateVersion86To87());
3116 EXPECT_EQ(87, dbs->GetVersion());
3117 EXPECT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata"));
3118 EXPECT_TRUE(dbs->needs_column_refresh_);
3119 }
3120
3001 // The purpose of this test case is to make it easier to get a dump of the 3121 // The purpose of this test case is to make it easier to get a dump of the
3002 // database so you can implement a SetUpVersionYDatabase method. Here's what 3122 // database so you can implement a SetUpVersionYDatabase method. Here's what
3003 // you should do: 3123 // you should do:
3004 // 3124 //
3005 // 1. Say you're going from version X to version Y. Write the migration 3125 // 1. Say you're going from version X to version Y. Write the migration
3006 // method MigrateVersionXToY. 3126 // method MigrateVersionXToY.
3007 // 2. Update the test below to call SetUpVersionXDatabase and then 3127 // 2. Update the test below to call SetUpVersionXDatabase and then
3008 // MigrateVersionXToY. You now have a database at version Y. Let's dump it. 3128 // MigrateVersionXToY. You now have a database at version Y. Let's dump it.
3009 // 3. Set a breakpoint to stop execution just after the connection is 3129 // 3. Set a breakpoint to stop execution just after the connection is
3010 // destroyed. Examine temp_dir_ to find the version Y database that was 3130 // destroyed. Examine temp_dir_ to find the version Y database that was
3011 // created on disk. E.g. (gdb) p temp_dir_.path().value().c_str() 3131 // created on disk. E.g. (gdb) p temp_dir_.path().value().c_str()
3012 // 4. Dump the database using the sqlite3 command line tool: 3132 // 4. Dump the database using the sqlite3 command line tool:
3013 // > .output foo_dump.sql 3133 // > .output foo_dump.sql
3014 // > .dump 3134 // > .dump
3015 // 5. Replace the timestamp columns with META_PROTO_TIMES(x) (or 3135 // 5. Replace the timestamp columns with META_PROTO_TIMES(x) (or
3016 // LEGACY_META_PROTO_TIMES(x) if before Version 77). Use this dump to write 3136 // LEGACY_META_PROTO_TIMES(x) if before Version 77). Use this dump to write
3017 // a SetupVersionYDatabase method. 3137 // a SetupVersionYDatabase method.
3018 TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) { 3138 TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) {
3019 { 3139 {
3020 sql::Connection connection; 3140 sql::Connection connection;
3021 ASSERT_TRUE(connection.Open(GetDatabasePath())); 3141 ASSERT_TRUE(connection.Open(GetDatabasePath()));
3022 SetUpVersion85Database(&connection); // Update this. 3142 SetUpVersion86Database(&connection); // Update this.
3023 3143
3024 scoped_ptr<TestDirectoryBackingStore> dbs( 3144 scoped_ptr<TestDirectoryBackingStore> dbs(
3025 new TestDirectoryBackingStore(GetUsername(), &connection)); 3145 new TestDirectoryBackingStore(GetUsername(), &connection));
3026 ASSERT_TRUE(dbs->MigrateVersion85To86()); // Update this. 3146 ASSERT_TRUE(dbs->MigrateVersion86To87()); // Update this.
3027 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 3147 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
3028 EXPECT_EQ(86, dbs->GetVersion()); // Update this. 3148 EXPECT_EQ(87, dbs->GetVersion()); // Update this.
3029 ASSERT_FALSE(dbs->needs_column_refresh_); 3149 ASSERT_FALSE(dbs->needs_column_refresh_);
3030 } 3150 }
3031 // Set breakpoint here. 3151 // Set breakpoint here.
3032 } 3152 }
3033 3153
3034 TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) { 3154 TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) {
3035 sql::Connection connection; 3155 sql::Connection connection;
3036 ASSERT_TRUE(connection.OpenInMemory()); 3156 ASSERT_TRUE(connection.OpenInMemory());
3037 SetUpVersion86Database(&connection); 3157 SetUpVersion86Database(&connection);
3038 3158
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
3114 break; 3234 break;
3115 case 84: 3235 case 84:
3116 SetUpVersion84Database(&connection); 3236 SetUpVersion84Database(&connection);
3117 break; 3237 break;
3118 case 85: 3238 case 85:
3119 SetUpVersion85Database(&connection); 3239 SetUpVersion85Database(&connection);
3120 break; 3240 break;
3121 case 86: 3241 case 86:
3122 SetUpVersion86Database(&connection); 3242 SetUpVersion86Database(&connection);
3123 break; 3243 break;
3244 case 87:
3245 SetUpVersion87Database(&connection);
3246 break;
3124 default: 3247 default:
3125 // If you see this error, it may mean that you've increased the 3248 // If you see this error, it may mean that you've increased the
3126 // database version number but you haven't finished adding unit tests 3249 // database version number but you haven't finished adding unit tests
3127 // for the database migration code. You need to need to supply a 3250 // for the database migration code. You need to need to supply a
3128 // SetUpVersionYDatabase function with a dump of the test database 3251 // SetUpVersionYDatabase function with a dump of the test database
3129 // at the new schema. See the MigrateToLatestAndDump test case. 3252 // at the new schema. See the MigrateToLatestAndDump test case.
3130 FAIL() << "Need to supply database dump for version " << GetParam(); 3253 FAIL() << "Need to supply database dump for version " << GetParam();
3131 } 3254 }
3132 3255
3133 syncable::Directory::KernelLoadInfo dir_info; 3256 syncable::Directory::KernelLoadInfo dir_info;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3200 ASSERT_TRUE(connection.DoesTableExist("deleted_metas")); 3323 ASSERT_TRUE(connection.DoesTableExist("deleted_metas"));
3201 3324
3202 // Column removed in version 85. 3325 // Column removed in version 85.
3203 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended")); 3326 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended"));
3204 3327
3205 // Columns removed in version 86. 3328 // Columns removed in version 86.
3206 ASSERT_FALSE(connection.DoesColumnExist("metas", "next_id")); 3329 ASSERT_FALSE(connection.DoesColumnExist("metas", "next_id"));
3207 ASSERT_FALSE(connection.DoesColumnExist("metas", "prev_id")); 3330 ASSERT_FALSE(connection.DoesColumnExist("metas", "prev_id"));
3208 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent")); 3331 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent"));
3209 3332
3333 // Column added in version 87.
3334 ASSERT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata"));
3335
3210 // Check download_progress state (v75 migration) 3336 // Check download_progress state (v75 migration)
3211 ASSERT_EQ(694, 3337 ASSERT_EQ(694,
3212 dir_info.kernel_info.download_progress[BOOKMARKS] 3338 dir_info.kernel_info.download_progress[BOOKMARKS]
3213 .timestamp_token_for_migration()); 3339 .timestamp_token_for_migration());
3214 ASSERT_FALSE( 3340 ASSERT_FALSE(
3215 dir_info.kernel_info.download_progress[BOOKMARKS] 3341 dir_info.kernel_info.download_progress[BOOKMARKS]
3216 .has_token()); 3342 .has_token());
3217 ASSERT_EQ(32904, 3343 ASSERT_EQ(32904,
3218 dir_info.kernel_info.download_progress[BOOKMARKS] 3344 dir_info.kernel_info.download_progress[BOOKMARKS]
3219 .data_type_id()); 3345 .data_type_id());
(...skipping 15 matching lines...) Expand all
3235 GetMetaProtoTimes(&connection)); 3361 GetMetaProtoTimes(&connection));
3236 ExpectTimes(handles_map, GetExpectedMetaTimes()); 3362 ExpectTimes(handles_map, GetExpectedMetaTimes());
3237 3363
3238 Directory::MetahandlesMap::iterator it = handles_map.find(1); 3364 Directory::MetahandlesMap::iterator it = handles_map.find(1);
3239 ASSERT_TRUE(it != handles_map.end()); 3365 ASSERT_TRUE(it != handles_map.end());
3240 ASSERT_EQ(1, it->second->ref(META_HANDLE)); 3366 ASSERT_EQ(1, it->second->ref(META_HANDLE));
3241 EXPECT_TRUE(it->second->ref(ID).IsRoot()); 3367 EXPECT_TRUE(it->second->ref(ID).IsRoot());
3242 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3368 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3243 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3369 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3244 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3370 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3371 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3245 3372
3246 // Items 2, 4, and 5 were deleted. 3373 // Items 2, 4, and 5 were deleted.
3247 it = handles_map.find(2); 3374 it = handles_map.find(2);
3248 ASSERT_TRUE(it == handles_map.end()); 3375 ASSERT_TRUE(it == handles_map.end());
3249 it = handles_map.find(4); 3376 it = handles_map.find(4);
3250 ASSERT_TRUE(it == handles_map.end()); 3377 ASSERT_TRUE(it == handles_map.end());
3251 it = handles_map.find(5); 3378 it = handles_map.find(5);
3252 ASSERT_TRUE(it == handles_map.end()); 3379 ASSERT_TRUE(it == handles_map.end());
3253 3380
3254 it = handles_map.find(6); 3381 it = handles_map.find(6);
3255 ASSERT_EQ(6, it->second->ref(META_HANDLE)); 3382 ASSERT_EQ(6, it->second->ref(META_HANDLE));
3256 EXPECT_TRUE(it->second->ref(IS_DIR)); 3383 EXPECT_TRUE(it->second->ref(IS_DIR));
3257 EXPECT_TRUE(it->second->ref(SERVER_IS_DIR)); 3384 EXPECT_TRUE(it->second->ref(SERVER_IS_DIR));
3258 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3385 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3259 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3386 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3260 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3387 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3261 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3388 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3262 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3389 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3263 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3390 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3264 EXPECT_EQ(UniquePosition::kSuffixLength, 3391 EXPECT_EQ(UniquePosition::kSuffixLength,
3265 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3392 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3393 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3266 3394
3267 it = handles_map.find(7); 3395 it = handles_map.find(7);
3268 ASSERT_EQ(7, it->second->ref(META_HANDLE)); 3396 ASSERT_EQ(7, it->second->ref(META_HANDLE));
3269 EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG)); 3397 EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG));
3270 EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark()); 3398 EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark());
3271 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3399 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3272 // Make sure we didn't assign positions to google_chrome. 3400 // Make sure we didn't assign positions to google_chrome.
3273 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3401 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3274 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3402 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3275 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3403 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3404 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3276 3405
3277 it = handles_map.find(8); 3406 it = handles_map.find(8);
3278 ASSERT_EQ(8, it->second->ref(META_HANDLE)); 3407 ASSERT_EQ(8, it->second->ref(META_HANDLE));
3279 EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG)); 3408 EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3280 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3409 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3281 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3410 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3282 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_8"); 3411 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_8");
3283 // Make sure we didn't mistake the bookmark root node for a real bookmark. 3412 // Make sure we didn't mistake the bookmark root node for a real bookmark.
3284 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3413 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3285 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3414 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3286 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3415 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3416 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3287 3417
3288 it = handles_map.find(9); 3418 it = handles_map.find(9);
3289 ASSERT_EQ(9, it->second->ref(META_HANDLE)); 3419 ASSERT_EQ(9, it->second->ref(META_HANDLE));
3290 EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG)); 3420 EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG));
3291 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3421 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3292 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3422 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3293 // Make sure we didn't assign positions to bookmark_bar. 3423 // Make sure we didn't assign positions to bookmark_bar.
3294 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3424 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3295 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3425 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3296 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3426 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3427 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3297 3428
3298 it = handles_map.find(10); 3429 it = handles_map.find(10);
3299 ASSERT_EQ(10, it->second->ref(META_HANDLE)); 3430 ASSERT_EQ(10, it->second->ref(META_HANDLE));
3300 EXPECT_FALSE(it->second->ref(IS_DEL)); 3431 EXPECT_FALSE(it->second->ref(IS_DEL));
3301 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3432 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3302 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3433 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3303 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3434 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3304 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3435 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3305 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3436 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3306 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3437 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3307 EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG)); 3438 EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3308 EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME)); 3439 EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3309 EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME)); 3440 EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3310 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10"); 3441 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10");
3442 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3311 // Make sure we didn't assign positions to server-created folders, either. 3443 // Make sure we didn't assign positions to server-created folders, either.
3312 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3444 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3313 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3445 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3314 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3446 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3447 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3315 3448
3316 it = handles_map.find(11); 3449 it = handles_map.find(11);
3317 ASSERT_EQ(11, it->second->ref(META_HANDLE)); 3450 ASSERT_EQ(11, it->second->ref(META_HANDLE));
3318 EXPECT_FALSE(it->second->ref(IS_DEL)); 3451 EXPECT_FALSE(it->second->ref(IS_DEL));
3319 EXPECT_FALSE(it->second->ref(IS_DIR)); 3452 EXPECT_FALSE(it->second->ref(IS_DIR));
3320 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3453 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3321 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3454 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3322 EXPECT_EQ("http://dev.chromium.org/", 3455 EXPECT_EQ("http://dev.chromium.org/",
3323 it->second->ref(SPECIFICS).bookmark().url()); 3456 it->second->ref(SPECIFICS).bookmark().url());
3324 EXPECT_EQ("AGATWA", it->second->ref(SPECIFICS).bookmark().favicon()); 3457 EXPECT_EQ("AGATWA", it->second->ref(SPECIFICS).bookmark().favicon());
3325 EXPECT_EQ("http://dev.chromium.org/other", 3458 EXPECT_EQ("http://dev.chromium.org/other",
3326 it->second->ref(SERVER_SPECIFICS).bookmark().url()); 3459 it->second->ref(SERVER_SPECIFICS).bookmark().url());
3327 EXPECT_EQ("AFAGVASF", it->second->ref(SERVER_SPECIFICS).bookmark().favicon()); 3460 EXPECT_EQ("AFAGVASF", it->second->ref(SERVER_SPECIFICS).bookmark().favicon());
3328 EXPECT_EQ("", it->second->ref(UNIQUE_SERVER_TAG)); 3461 EXPECT_EQ("", it->second->ref(UNIQUE_SERVER_TAG));
3329 EXPECT_EQ("Home (The Chromium Projects)", it->second->ref(NON_UNIQUE_NAME)); 3462 EXPECT_EQ("Home (The Chromium Projects)", it->second->ref(NON_UNIQUE_NAME));
3330 EXPECT_EQ("Home (The Chromium Projects)", 3463 EXPECT_EQ("Home (The Chromium Projects)",
3331 it->second->ref(SERVER_NON_UNIQUE_NAME)); 3464 it->second->ref(SERVER_NON_UNIQUE_NAME));
3332 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3465 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3333 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3466 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3334 EXPECT_EQ(UniquePosition::kSuffixLength, 3467 EXPECT_EQ(UniquePosition::kSuffixLength,
3335 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3468 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3469 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3336 3470
3337 it = handles_map.find(12); 3471 it = handles_map.find(12);
3338 ASSERT_EQ(12, it->second->ref(META_HANDLE)); 3472 ASSERT_EQ(12, it->second->ref(META_HANDLE));
3339 EXPECT_FALSE(it->second->ref(IS_DEL)); 3473 EXPECT_FALSE(it->second->ref(IS_DEL));
3340 EXPECT_TRUE(it->second->ref(IS_DIR)); 3474 EXPECT_TRUE(it->second->ref(IS_DIR));
3341 EXPECT_EQ("Extra Bookmarks", it->second->ref(NON_UNIQUE_NAME)); 3475 EXPECT_EQ("Extra Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3342 EXPECT_EQ("Extra Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME)); 3476 EXPECT_EQ("Extra Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3343 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3477 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3344 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3478 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3345 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3479 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3346 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3480 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3347 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3481 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3348 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3482 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3349 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3483 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3350 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3484 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3351 EXPECT_EQ(UniquePosition::kSuffixLength, 3485 EXPECT_EQ(UniquePosition::kSuffixLength,
3352 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3486 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3487 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3353 3488
3354 it = handles_map.find(13); 3489 it = handles_map.find(13);
3355 ASSERT_EQ(13, it->second->ref(META_HANDLE)); 3490 ASSERT_EQ(13, it->second->ref(META_HANDLE));
3356 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3491 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3357 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3492 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3358 EXPECT_EQ(UniquePosition::kSuffixLength, 3493 EXPECT_EQ(UniquePosition::kSuffixLength,
3359 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3494 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3495 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3360 3496
3361 it = handles_map.find(14); 3497 it = handles_map.find(14);
3362 ASSERT_EQ(14, it->second->ref(META_HANDLE)); 3498 ASSERT_EQ(14, it->second->ref(META_HANDLE));
3363 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3499 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3364 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3500 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3365 EXPECT_EQ(UniquePosition::kSuffixLength, 3501 EXPECT_EQ(UniquePosition::kSuffixLength,
3366 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3502 it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3503 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3367 3504
3368 ASSERT_EQ(static_cast<size_t>(10), handles_map.size()); 3505 ASSERT_EQ(static_cast<size_t>(10), handles_map.size());
3369 3506
3370 // Make sure that the syncable::Directory and the migration code agree on 3507 // Make sure that the syncable::Directory and the migration code agree on
3371 // which items should or should not have unique position values. This test 3508 // which items should or should not have unique position values. This test
3372 // may become obsolete if the directory's definition of that function 3509 // may become obsolete if the directory's definition of that function
3373 // changes, but, until then, this is a useful test. 3510 // changes, but, until then, this is a useful test.
3374 for (it = handles_map.begin(); it != handles_map.end(); it++) { 3511 for (it = handles_map.begin(); it != handles_map.end(); it++) {
3375 SCOPED_TRACE(it->second->ref(ID)); 3512 SCOPED_TRACE(it->second->ref(ID));
3376 if (it->second->ShouldMaintainPosition()) { 3513 if (it->second->ShouldMaintainPosition()) {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
3520 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID(); 3657 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID();
3521 EXPECT_EQ(24U, guid1.size()); 3658 EXPECT_EQ(24U, guid1.size());
3522 EXPECT_EQ(24U, guid2.size()); 3659 EXPECT_EQ(24U, guid2.size());
3523 // In theory this test can fail, but it won't before the universe 3660 // In theory this test can fail, but it won't before the universe
3524 // dies of heat death. 3661 // dies of heat death.
3525 EXPECT_NE(guid1, guid2); 3662 EXPECT_NE(guid1, guid2);
3526 } 3663 }
3527 3664
3528 } // namespace syncable 3665 } // namespace syncable
3529 } // namespace syncer 3666 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698