OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive/metadata_db_migration_util.h" | 5 #include "chrome/browser/sync_file_system/drive/metadata_db_migration_util.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "chrome/browser/sync_file_system/drive_metadata_store.h" | 10 #include "chrome/browser/sync_file_system/drive_metadata_store.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 | 39 |
40 TEST(DriveMetadataDBMigrationUtilTest, RemoveWapiIdPrefix) { | 40 TEST(DriveMetadataDBMigrationUtilTest, RemoveWapiIdPrefix) { |
41 EXPECT_EQ("xxx", RemoveWapiIdPrefix("xxx")); | 41 EXPECT_EQ("xxx", RemoveWapiIdPrefix("xxx")); |
42 EXPECT_EQ("yyy", RemoveWapiIdPrefix("file:yyy")); | 42 EXPECT_EQ("yyy", RemoveWapiIdPrefix("file:yyy")); |
43 EXPECT_EQ("zzz", RemoveWapiIdPrefix("folder:zzz")); | 43 EXPECT_EQ("zzz", RemoveWapiIdPrefix("folder:zzz")); |
44 | 44 |
45 EXPECT_EQ("", RemoveWapiIdPrefix("")); | 45 EXPECT_EQ("", RemoveWapiIdPrefix("")); |
46 EXPECT_EQ("foo:xxx", RemoveWapiIdPrefix("foo:xxx")); | 46 EXPECT_EQ("foo:xxx", RemoveWapiIdPrefix("foo:xxx")); |
47 } | 47 } |
48 | 48 |
| 49 TEST(DriveMetadataDBMigrationUtilTest, MigrationFromV0) { |
| 50 const char kDatabaseVersionKey[] = "VERSION"; |
| 51 const char kChangeStampKey[] = "CHANGE_STAMP"; |
| 52 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; |
| 53 const char kDriveMetadataKeyPrefix[] = "METADATA: "; |
| 54 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; |
| 55 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; |
| 56 |
| 57 const GURL kOrigin1("chrome-extension://example1"); |
| 58 const GURL kOrigin2("chrome-extension://example2"); |
| 59 const std::string kSyncRootResourceId("folder:sync_root_resource_id"); |
| 60 const std::string kResourceId1("folder:hoge"); |
| 61 const std::string kResourceId2("folder:fuga"); |
| 62 const std::string kFileResourceId("file:piyo"); |
| 63 const base::FilePath kFile(FPL("foo bar")); |
| 64 const std::string kFileMD5("file_md5"); |
| 65 |
| 66 const char kV0ServiceName[] = "drive"; |
| 67 ASSERT_TRUE(RegisterSyncableFileSystem(kV0ServiceName)); |
| 68 |
| 69 base::ScopedTempDir base_dir; |
| 70 ASSERT_TRUE(base_dir.CreateUniqueTempDir()); |
| 71 |
| 72 leveldb::Options options; |
| 73 options.create_if_missing = true; |
| 74 leveldb::DB* db_ptr = NULL; |
| 75 std::string db_dir = fileapi::FilePathToString( |
| 76 base_dir.path().Append(DriveMetadataStore::kDatabaseName)); |
| 77 leveldb::Status status = leveldb::DB::Open(options, db_dir, &db_ptr); |
| 78 |
| 79 scoped_ptr<leveldb::DB> db(db_ptr); |
| 80 ASSERT_TRUE(status.ok()); |
| 81 |
| 82 // Setup the database with the scheme version 0. |
| 83 leveldb::WriteBatch batch; |
| 84 batch.Put(kChangeStampKey, "1"); |
| 85 batch.Put(kSyncRootDirectoryKey, kSyncRootResourceId); |
| 86 |
| 87 fileapi::FileSystemURL url = |
| 88 CreateSyncableFileSystemURL(kOrigin1, kV0ServiceName, kFile); |
| 89 |
| 90 // Setup drive metadata. |
| 91 DriveMetadata drive_metadata; |
| 92 drive_metadata.set_resource_id(kFileResourceId); |
| 93 drive_metadata.set_md5_checksum(kFileMD5); |
| 94 drive_metadata.set_conflicted(false); |
| 95 drive_metadata.set_to_be_fetched(false); |
| 96 |
| 97 std::string serialized_url; |
| 98 SerializeSyncableFileSystemURL(url, &serialized_url); |
| 99 std::string metadata_string; |
| 100 drive_metadata.SerializeToString(&metadata_string); |
| 101 batch.Put(kDriveMetadataKeyPrefix + serialized_url, metadata_string); |
| 102 |
| 103 // Setup batch sync origin and incremental sync origin. |
| 104 batch.Put(kDriveBatchSyncOriginKeyPrefix + kOrigin1.spec(), kResourceId1); |
| 105 batch.Put(kDriveIncrementalSyncOriginKeyPrefix + kOrigin2.spec(), |
| 106 kResourceId2); |
| 107 |
| 108 status = db->Write(leveldb::WriteOptions(), &batch); |
| 109 EXPECT_EQ(SYNC_STATUS_OK, LevelDBStatusToSyncStatusCode(status)); |
| 110 EXPECT_TRUE(RevokeSyncableFileSystem(kV0ServiceName)); |
| 111 |
| 112 // Migrate the database. |
| 113 drive::MigrateDatabaseFromV0ToV1(db.get()); |
| 114 |
| 115 scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions())); |
| 116 |
| 117 // Verify DB scheme version. |
| 118 int64 database_version = 0; |
| 119 itr->Seek(kDatabaseVersionKey); |
| 120 EXPECT_TRUE(itr->Valid()); |
| 121 EXPECT_TRUE(base::StringToInt64(itr->value().ToString(), &database_version)); |
| 122 EXPECT_EQ(1, database_version); |
| 123 |
| 124 // Verify the largest changestamp. |
| 125 int64 changestamp = 0; |
| 126 itr->Seek(kChangeStampKey); |
| 127 EXPECT_TRUE(itr->Valid()); |
| 128 EXPECT_TRUE(base::StringToInt64(itr->value().ToString(), &changestamp)); |
| 129 EXPECT_EQ(1, changestamp); |
| 130 |
| 131 // Verify the sync root directory. |
| 132 itr->Seek(kSyncRootDirectoryKey); |
| 133 EXPECT_TRUE(itr->Valid()); |
| 134 EXPECT_EQ(kSyncRootResourceId, itr->value().ToString()); |
| 135 |
| 136 // Verify the metadata. |
| 137 itr->Seek(kDriveMetadataKeyPrefix); |
| 138 EXPECT_TRUE(itr->Valid()); |
| 139 DriveMetadata metadata; |
| 140 EXPECT_TRUE(metadata.ParseFromString(itr->value().ToString())); |
| 141 EXPECT_EQ(kFileResourceId, metadata.resource_id()); |
| 142 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); |
| 143 EXPECT_FALSE(metadata.conflicted()); |
| 144 EXPECT_FALSE(metadata.to_be_fetched()); |
| 145 |
| 146 // Verify the batch sync origin. |
| 147 itr->Seek(kDriveBatchSyncOriginKeyPrefix); |
| 148 EXPECT_TRUE(itr->Valid()); |
| 149 EXPECT_EQ(kResourceId1, itr->value().ToString()); |
| 150 |
| 151 // Verify the incremental sync origin. |
| 152 itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); |
| 153 EXPECT_TRUE(itr->Valid()); |
| 154 EXPECT_EQ(kResourceId2, itr->value().ToString()); |
| 155 } |
| 156 |
49 TEST(DriveMetadataDBMigrationUtilTest, MigrationFromV1) { | 157 TEST(DriveMetadataDBMigrationUtilTest, MigrationFromV1) { |
50 const char kDatabaseVersionKey[] = "VERSION"; | 158 const char kDatabaseVersionKey[] = "VERSION"; |
51 const char kChangeStampKey[] = "CHANGE_STAMP"; | 159 const char kChangeStampKey[] = "CHANGE_STAMP"; |
52 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; | 160 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; |
53 const char kDriveMetadataKeyPrefix[] = "METADATA: "; | 161 const char kDriveMetadataKeyPrefix[] = "METADATA: "; |
54 const char kMetadataKeySeparator = ' '; | 162 const char kMetadataKeySeparator = ' '; |
55 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; | 163 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; |
56 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; | 164 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; |
57 | 165 |
58 const GURL kOrigin1("chrome-extension://example1"); | 166 const GURL kOrigin1("chrome-extension://example1"); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 | 225 |
118 scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions())); | 226 scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions())); |
119 | 227 |
120 // Verify DB scheme version. | 228 // Verify DB scheme version. |
121 int64 database_version = 0; | 229 int64 database_version = 0; |
122 itr->Seek(kDatabaseVersionKey); | 230 itr->Seek(kDatabaseVersionKey); |
123 EXPECT_TRUE(itr->Valid()); | 231 EXPECT_TRUE(itr->Valid()); |
124 EXPECT_TRUE(base::StringToInt64(itr->value().ToString(), &database_version)); | 232 EXPECT_TRUE(base::StringToInt64(itr->value().ToString(), &database_version)); |
125 EXPECT_EQ(2, database_version); | 233 EXPECT_EQ(2, database_version); |
126 | 234 |
| 235 // Verify the largest changestamp. |
| 236 int64 changestamp = 0; |
| 237 itr->Seek(kChangeStampKey); |
| 238 EXPECT_TRUE(itr->Valid()); |
| 239 EXPECT_TRUE(base::StringToInt64(itr->value().ToString(), &changestamp)); |
| 240 EXPECT_EQ(1, changestamp); |
| 241 |
127 // Verify the sync root directory. | 242 // Verify the sync root directory. |
128 itr->Seek(kSyncRootDirectoryKey); | 243 itr->Seek(kSyncRootDirectoryKey); |
129 EXPECT_TRUE(itr->Valid()); | 244 EXPECT_TRUE(itr->Valid()); |
130 EXPECT_EQ(RemoveWapiIdPrefix(kSyncRootResourceId), itr->value().ToString()); | 245 EXPECT_EQ(RemoveWapiIdPrefix(kSyncRootResourceId), itr->value().ToString()); |
131 | 246 |
132 // Verify the metadata. | 247 // Verify the metadata. |
133 itr->Seek(kDriveMetadataKeyPrefix); | 248 itr->Seek(kDriveMetadataKeyPrefix); |
134 EXPECT_TRUE(itr->Valid()); | 249 EXPECT_TRUE(itr->Valid()); |
135 DriveMetadata metadata; | 250 DriveMetadata metadata; |
136 EXPECT_TRUE(metadata.ParseFromString(itr->value().ToString())); | 251 EXPECT_TRUE(metadata.ParseFromString(itr->value().ToString())); |
137 EXPECT_EQ(RemoveWapiIdPrefix(kFileResourceId), metadata.resource_id()); | 252 EXPECT_EQ(RemoveWapiIdPrefix(kFileResourceId), metadata.resource_id()); |
138 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); | 253 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); |
139 EXPECT_FALSE(metadata.conflicted()); | 254 EXPECT_FALSE(metadata.conflicted()); |
140 EXPECT_FALSE(metadata.to_be_fetched()); | 255 EXPECT_FALSE(metadata.to_be_fetched()); |
141 | 256 |
142 // Verify the incremental sync origin. | 257 // Verify the incremental sync origin. |
143 itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); | 258 itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); |
144 EXPECT_TRUE(itr->Valid()); | 259 EXPECT_TRUE(itr->Valid()); |
145 EXPECT_EQ(RemoveWapiIdPrefix(kResourceId1), itr->value().ToString()); | 260 EXPECT_EQ(RemoveWapiIdPrefix(kResourceId1), itr->value().ToString()); |
146 | 261 |
147 // Verify the disabled origin. | 262 // Verify the disabled origin. |
148 itr->Seek(kDriveDisabledOriginKeyPrefix); | 263 itr->Seek(kDriveDisabledOriginKeyPrefix); |
149 EXPECT_TRUE(itr->Valid()); | 264 EXPECT_TRUE(itr->Valid()); |
150 EXPECT_EQ(RemoveWapiIdPrefix(kResourceId2), itr->value().ToString()); | 265 EXPECT_EQ(RemoveWapiIdPrefix(kResourceId2), itr->value().ToString()); |
151 } | 266 } |
152 | 267 |
153 } // namespace drive | 268 } // namespace drive |
154 } // namespace sync_file_system | 269 } // namespace sync_file_system |
OLD | NEW |