OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/sync_file_system/drive/metadata_db_migration_util.h" | |
6 | |
7 #include "base/files/scoped_temp_dir.h" | |
8 #include "base/string_util.h" | |
9 #include "base/strings/string_number_conversions.h" | |
10 #include "chrome/browser/sync_file_system/drive_metadata_store.h" | |
11 #include "googleurl/src/gurl.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 #include "third_party/leveldatabase/src/include/leveldb/db.h" | |
14 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | |
15 #include "webkit/common/fileapi/file_system_util.h" | |
16 #include "webkit/fileapi/syncable/syncable_file_system_util.h" | |
17 | |
18 #define FPL FILE_PATH_LITERAL | |
19 | |
20 namespace sync_file_system { | |
21 namespace drive { | |
22 | |
23 TEST(DriveMetadataDBMigrationUtilTest, AddWapiFilePrefix) { | |
24 EXPECT_EQ("file:xxx", AddWapiFilePrefix("xxx")); | |
25 EXPECT_EQ("file:yyy", AddWapiFilePrefix("file:yyy")); | |
26 EXPECT_EQ("folder:zzz", AddWapiFilePrefix("folder:zzz")); | |
27 } | |
28 | |
29 TEST(DriveMetadataDBMigrationUtilTest, AddWapiFolderPrefix) { | |
30 EXPECT_EQ("folder:xxx", AddWapiFolderPrefix("xxx")); | |
31 EXPECT_EQ("file:yyy", AddWapiFolderPrefix("file:yyy")); | |
32 EXPECT_EQ("folder:zzz", AddWapiFolderPrefix("folder:zzz")); | |
33 } | |
34 | |
35 TEST(DriveMetadataDBMigrationUtilTest, AddWapiIdPrefix) { | |
36 DriveMetadata_ResourceType type_file = | |
37 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE; | |
38 DriveMetadata_ResourceType type_folder = | |
39 DriveMetadata_ResourceType_RESOURCE_TYPE_FOLDER; | |
40 | |
41 EXPECT_EQ("file:xxx", AddWapiIdPrefix("xxx", type_file)); | |
42 EXPECT_EQ("folder:xxx", AddWapiIdPrefix("xxx", type_folder)); | |
43 EXPECT_EQ("file:yyy", AddWapiIdPrefix("file:yyy", type_file)); | |
44 EXPECT_EQ("file:yyy", AddWapiIdPrefix("file:yyy", type_folder)); | |
45 EXPECT_EQ("folder:zzz", AddWapiIdPrefix("folder:zzz", type_file)); | |
46 EXPECT_EQ("folder:zzz", AddWapiIdPrefix("folder:zzz", type_folder)); | |
47 } | |
48 | |
49 TEST(DriveMetadataDBMigrationUtilTest, RemoveWapiIdPrefix) { | |
50 EXPECT_EQ("xxx", RemoveWapiIdPrefix("xxx")); | |
51 EXPECT_EQ("yyy", RemoveWapiIdPrefix("file:yyy")); | |
52 EXPECT_EQ("zzz", RemoveWapiIdPrefix("folder:zzz")); | |
kinuko
2013/05/28 15:09:20
nit: should we also test something like "foo:xxx"
nhiroki
2013/05/29 04:10:18
Done.
| |
53 } | |
54 | |
55 TEST(DriveMetadataDBMigrationUtilTest, MigrationFromV1) { | |
56 const char kDatabaseVersionKey[] = "VERSION"; | |
57 const char kChangeStampKey[] = "CHANGE_STAMP"; | |
58 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; | |
59 const char kDriveMetadataKeyPrefix[] = "METADATA: "; | |
60 const char kMetadataKeySeparator = ' '; | |
61 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; | |
62 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; | |
63 | |
64 const GURL kOrigin1("chrome-extension://example1"); | |
65 const GURL kOrigin2("chrome-extension://example2"); | |
66 | |
67 const std::string kSyncRootResourceId("folder:sync_root_resource_id"); | |
68 const std::string kResourceId1("folder:hoge"); | |
69 const std::string kResourceId2("folder:fuga"); | |
70 const std::string kFileResourceId("file:piyo"); | |
71 const base::FilePath kFile(FPL("foo bar")); | |
72 const std::string kFileMD5("file_md5"); | |
73 | |
74 const char kV1ServiceName[] = "drive"; | |
75 ASSERT_TRUE(RegisterSyncableFileSystem(kV1ServiceName)); | |
76 | |
77 base::ScopedTempDir base_dir; | |
78 leveldb::Options options; | |
79 options.create_if_missing = true; | |
80 leveldb::DB* db_ptr = NULL; | |
81 std::string db_dir = fileapi::FilePathToString( | |
82 base_dir.path().Append(DriveMetadataStore::kDatabaseName)); | |
83 leveldb::Status status = leveldb::DB::Open(options, db_dir, &db_ptr); | |
84 | |
85 scoped_ptr<leveldb::DB> db(db_ptr); | |
86 ASSERT_TRUE(status.ok()); | |
87 | |
88 // Setup the database with the scheme version 1. | |
89 leveldb::WriteBatch batch; | |
90 batch.Put(kDatabaseVersionKey, "1"); | |
91 batch.Put(kChangeStampKey, "1"); | |
92 batch.Put(kSyncRootDirectoryKey, kSyncRootResourceId); | |
93 | |
94 fileapi::FileSystemURL url = | |
95 CreateSyncableFileSystemURL(kOrigin1, kV1ServiceName, kFile); | |
96 | |
97 // Setup drive metadata. | |
98 DriveMetadata drive_metadata; | |
99 drive_metadata.set_resource_id(kFileResourceId); | |
100 drive_metadata.set_md5_checksum(kFileMD5); | |
101 drive_metadata.set_conflicted(false); | |
102 drive_metadata.set_to_be_fetched(false); | |
103 std::string metadata_string; | |
104 drive_metadata.SerializeToString(&metadata_string); | |
105 std::string metadata_key = kDriveMetadataKeyPrefix + kOrigin1.spec() + | |
106 kMetadataKeySeparator + url.path().AsUTF8Unsafe(); | |
107 batch.Put(metadata_key, metadata_string); | |
108 | |
109 // Setup incremental sync origin and disabled origin. | |
110 batch.Put(kDriveIncrementalSyncOriginKeyPrefix + kOrigin1.spec(), | |
111 kResourceId1); | |
112 batch.Put(kDriveDisabledOriginKeyPrefix + kOrigin2.spec(), | |
113 kResourceId2); | |
114 | |
115 status = db->Write(leveldb::WriteOptions(), &batch); | |
116 EXPECT_EQ(SYNC_STATUS_OK, LevelDBStatusToSyncStatusCode(status)); | |
117 EXPECT_TRUE(RevokeSyncableFileSystem(kV1ServiceName)); | |
118 | |
119 // Migrate the database. | |
120 drive::MigrateDatabaseFromV1ToV2(db.get()); | |
121 | |
122 scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions())); | |
123 | |
124 // Verify DB scheme version. | |
125 int64 database_version = 0; | |
126 itr->Seek(kDatabaseVersionKey); | |
127 EXPECT_TRUE(itr->Valid()); | |
128 EXPECT_TRUE(base::StringToInt64(itr->value().ToString(), &database_version)); | |
129 EXPECT_EQ(2, database_version); | |
130 | |
131 // Verify the sync root directory. | |
132 itr->Seek(kSyncRootDirectoryKey); | |
133 EXPECT_TRUE(itr->Valid()); | |
134 EXPECT_EQ(RemoveWapiIdPrefix(kSyncRootResourceId), itr->value().ToString()); | |
135 | |
136 // Verify metadata. | |
137 itr->Seek(kDriveMetadataKeyPrefix); | |
138 EXPECT_TRUE(itr->Valid()); | |
139 DriveMetadata metadata; | |
140 EXPECT_TRUE(metadata.ParseFromString(itr->value().ToString())); | |
141 EXPECT_EQ(RemoveWapiIdPrefix(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 incremental sync origins. | |
147 itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); | |
148 EXPECT_TRUE(itr->Valid()); | |
149 EXPECT_EQ(RemoveWapiIdPrefix(kResourceId1), itr->value().ToString()); | |
150 | |
151 // Verify incremental sync origins. | |
kinuko
2013/05/28 15:09:20
incremental -> disabled
nhiroki
2013/05/29 04:10:18
Done.
| |
152 itr->Seek(kDriveDisabledOriginKeyPrefix); | |
153 EXPECT_TRUE(itr->Valid()); | |
154 EXPECT_EQ(RemoveWapiIdPrefix(kResourceId2), itr->value().ToString()); | |
155 } | |
156 | |
157 } // namespace drive | |
158 } // namespace sync_file_system | |
OLD | NEW |