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

Unified Diff: components/sync/syncable/directory_backing_store_unittest.cc

Issue 2342133002: [sync] Verify existence of the root when loading DirectoryBackingStore (Closed)
Patch Set: include syncable_id, fix comment Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/sync/syncable/directory_backing_store.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync/syncable/directory_backing_store_unittest.cc
diff --git a/components/sync/syncable/directory_backing_store_unittest.cc b/components/sync/syncable/directory_backing_store_unittest.cc
index 7f45eda8218c8b437c90d4e52fa3e6550ca77866..df72b316e16ffd23dbc8b54217065538696d44eb 100644
--- a/components/sync/syncable/directory_backing_store_unittest.cc
+++ b/components/sync/syncable/directory_backing_store_unittest.cc
@@ -78,6 +78,7 @@ class MigrationTest : public testing::TestWithParam<int> {
&kernel_load_info) == OPENED;
}
+ void SetUpCorruptedRootDatabase(sql::Connection* connection);
void SetUpVersion67Database(sql::Connection* connection);
void SetUpVersion68Database(sql::Connection* connection);
void SetUpVersion69Database(sql::Connection* connection);
@@ -410,6 +411,51 @@ void ExpectTimes(const Directory::MetahandlesMap& handles_map,
} // namespace
+void MigrationTest::SetUpCorruptedRootDatabase(sql::Connection* connection) {
+ ASSERT_TRUE(connection->is_open());
+ ASSERT_TRUE(connection->BeginTransaction());
+ ASSERT_TRUE(connection->Execute(
+ "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
+ "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
+ "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
+ "base_version bigint default -1,server_version bigint default 0,"
+ "mtime bigint default 0,server_mtime bigint default 0,"
+ "ctime bigint default 0,server_ctime bigint default 0,"
+ "server_position_in_parent bigint default 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 default 0,"
+ "is_del bit default 0,is_dir bit default 0,"
+ "is_bookmark_object bit default 0,server_is_dir bit default 0,"
+ "server_is_del bit default 0,server_is_bookmark_object bit default 0,"
+ "name varchar(255), " /* COLLATE PATHNAME, */
+ "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */
+ "non_unique_name varchar,"
+ "server_name varchar(255)," /* COLLATE PATHNAME */
+ "server_non_unique_name varchar,"
+ "bookmark_url varchar,server_bookmark_url varchar,"
+ "singleton_tag varchar,bookmark_favicon blob,"
+ "server_bookmark_favicon blob);"
+ "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(
+ 1) ",0,0,'r2','r2','r','r','r',0,0,0,1,0,0,0,0,NULL,"
+ "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);"
+ "CREATE TABLE share_info (id VARCHAR(128) primary key, "
+ "last_sync_timestamp INT, name VARCHAR(128), "
+ "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
+ "db_create_version VARCHAR(128), db_create_time int, "
+ "next_id bigint default -2, cache_guid VARCHAR(32));"
+ "INSERT INTO share_info VALUES('nick@chromium.org',694,"
+ "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
+ "'Unknown',1263522064,-65542,"
+ "'9010788312004066376x-6609234393368420856x');"
+ "CREATE TABLE share_version (id VARCHAR(128) primary key, data "
+ "INT);"
+ "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
+ ASSERT_TRUE(connection->CommitTransaction());
+}
+
void MigrationTest::SetUpVersion67Database(sql::Connection* connection) {
// This is a version 67 database dump whose contents were backformed from
// the contents of the version 68 database dump (the v68 migration was
@@ -3570,6 +3616,23 @@ TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) {
&kernel_load_info));
}
+TEST_F(DirectoryBackingStoreTest, DetectCorruptedRoot) {
+ sql::Connection connection;
+ ASSERT_TRUE(connection.OpenInMemory());
+ SetUpCorruptedRootDatabase(&connection);
+
+ std::unique_ptr<TestDirectoryBackingStore> dbs(
+ new TestDirectoryBackingStore(GetUsername(), &connection));
+
+ Directory::MetahandlesMap handles_map;
+ JournalIndex delete_journals;
+ MetahandleSet metahandles_to_purge;
+ Directory::KernelLoadInfo kernel_load_info;
+ ASSERT_EQ(FAILED_DATABASE_CORRUPT,
+ dbs->Load(&handles_map, &delete_journals, &metahandles_to_purge,
+ &kernel_load_info));
+}
+
TEST_P(MigrationTest, ToCurrentVersion) {
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
« no previous file with comments | « components/sync/syncable/directory_backing_store.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698