OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2009 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 entry. |
| 4 |
| 5 #include "base/file_util.h" |
| 6 #include "base/test_file_util.h" |
| 7 #include "chrome/browser/sync/syncable/directory_manager.h" |
| 8 #include "chrome/browser/sync/util/user_settings.h" |
| 9 #include "chrome/browser/sync/util/query_helpers.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 |
| 12 using browser_sync::UserSettings; |
| 13 |
| 14 static const wchar_t* kV10UserSettingsDB = L"Version10Settings.sqlite3"; |
| 15 static const wchar_t* kOldStyleSyncDataDB = L"OldStyleSyncData.sqlite3"; |
| 16 |
| 17 class UserSettingsTest : public testing::Test { |
| 18 public: |
| 19 UserSettingsTest() : sync_data_("Some sync data") { } |
| 20 void SetUpVersion10Databases() { |
| 21 CleanUpVersion10Databases(); |
| 22 sqlite3* primer_handle = NULL; |
| 23 ASSERT_EQ(SQLITE_OK, SqliteOpen(kV10UserSettingsDB, |
| 24 &primer_handle)); |
| 25 FilePath old_sync_data(kOldStyleSyncDataDB); |
| 26 |
| 27 ASSERT_EQ(sync_data_.length(), file_util::WriteFile( |
| 28 old_sync_data, sync_data_.data(), sync_data_.length())); |
| 29 |
| 30 // Create settings table. |
| 31 ExecOrDie(primer_handle, "CREATE TABLE settings" |
| 32 " (email, key, value, " |
| 33 " PRIMARY KEY(email, key) ON CONFLICT REPLACE)"); |
| 34 |
| 35 // Create and populate version table. |
| 36 ExecOrDie(primer_handle, "CREATE TABLE db_version ( version )"); |
| 37 ExecOrDie(primer_handle, "INSERT INTO db_version values ( ? )", 10); |
| 38 // Create shares table. |
| 39 ExecOrDie(primer_handle, "CREATE TABLE shares" |
| 40 " (email, share_name, file_name," |
| 41 " PRIMARY KEY(email, share_name) ON CONFLICT REPLACE)"); |
| 42 // Populate a share. |
| 43 ExecOrDie(primer_handle, "INSERT INTO shares values ( ?, ?, ?)", |
| 44 "foo@foo.com", "foo@foo.com", WideToUTF8(kOldStyleSyncDataDB)); |
| 45 sqlite3_close(primer_handle); |
| 46 } |
| 47 |
| 48 void CleanUpVersion10Databases() { |
| 49 ASSERT_TRUE(file_util::DieFileDie(FilePath(kV10UserSettingsDB), false)); |
| 50 ASSERT_TRUE(file_util::DieFileDie(FilePath(kOldStyleSyncDataDB), false)); |
| 51 ASSERT_TRUE(file_util::DieFileDie(FilePath(L"SyncData.sqlite3"), false)); |
| 52 } |
| 53 |
| 54 const std::string& sync_data() const { return sync_data_; } |
| 55 |
| 56 private: |
| 57 std::string sync_data_; |
| 58 }; |
| 59 |
| 60 TEST_F(UserSettingsTest, MigrateFromV10ToV11) { |
| 61 SetUpVersion10Databases(); |
| 62 { |
| 63 // Create a UserSettings, which should trigger migration code. |
| 64 // We do this inside a scoped block so it closes itself and we can poke |
| 65 // around to see what happened later. |
| 66 UserSettings settings; |
| 67 settings.Init(kV10UserSettingsDB); |
| 68 } |
| 69 |
| 70 // Now poke around using sqlite to see if UserSettings migrated properly. |
| 71 sqlite3* handle = NULL; |
| 72 ASSERT_EQ(SQLITE_OK, SqliteOpen(kV10UserSettingsDB, &handle)); |
| 73 ScopedStatement version_query(PrepareQuery(handle, |
| 74 "SELECT version FROM db_version")); |
| 75 ASSERT_EQ(SQLITE_ROW, sqlite3_step(version_query.get())); |
| 76 |
| 77 const int version = sqlite3_column_int(version_query.get(), 0); |
| 78 EXPECT_EQ(11, version); |
| 79 EXPECT_FALSE(file_util::PathExists(kOldStyleSyncDataDB)); |
| 80 |
| 81 std::wstring path(syncable::DirectoryManager::GetSyncDataDatabaseFilename()); |
| 82 |
| 83 std::string contents; |
| 84 ASSERT_TRUE(file_util::ReadFileToString(path, &contents)); |
| 85 EXPECT_EQ(sync_data(), contents); |
| 86 } |
OLD | NEW |