Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
| 9 #include "base/guid.h" | 9 #include "base/guid.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 | 32 |
| 33 using autofill::AutofillProfile; | 33 using autofill::AutofillProfile; |
| 34 using autofill::AutofillTable; | 34 using autofill::AutofillTable; |
| 35 using autofill::CreditCard; | 35 using autofill::CreditCard; |
| 36 using base::ASCIIToUTF16; | 36 using base::ASCIIToUTF16; |
| 37 using base::Time; | 37 using base::Time; |
| 38 | 38 |
| 39 namespace { | 39 namespace { |
| 40 | 40 |
| 41 void AutofillProfile31FromStatement(const sql::Statement& s, | |
| 42 AutofillProfile* profile, | |
| 43 base::string16* label, | |
| 44 int* unique_id, | |
| 45 int64* date_modified) { | |
| 46 DCHECK(profile); | |
| 47 DCHECK(label); | |
| 48 DCHECK(unique_id); | |
| 49 DCHECK(date_modified); | |
| 50 *label = s.ColumnString16(0); | |
| 51 *unique_id = s.ColumnInt(1); | |
| 52 profile->SetRawInfo(autofill::NAME_FIRST, s.ColumnString16(2)); | |
| 53 profile->SetRawInfo(autofill::NAME_MIDDLE, s.ColumnString16(3)); | |
| 54 profile->SetRawInfo(autofill::NAME_LAST, s.ColumnString16(4)); | |
| 55 profile->SetRawInfo(autofill::EMAIL_ADDRESS, s.ColumnString16(5)); | |
| 56 profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(6)); | |
| 57 profile->SetRawInfo(autofill::ADDRESS_HOME_LINE1, s.ColumnString16(7)); | |
| 58 profile->SetRawInfo(autofill::ADDRESS_HOME_LINE2, s.ColumnString16(8)); | |
| 59 profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(9)); | |
| 60 profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(10)); | |
| 61 profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(11)); | |
| 62 profile->SetInfo( | |
| 63 autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY), | |
| 64 s.ColumnString16(12), "en-US"); | |
| 65 profile->SetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13)); | |
| 66 *date_modified = s.ColumnInt64(15); | |
| 67 profile->set_guid(s.ColumnString(16)); | |
| 68 EXPECT_TRUE(base::IsValidGUID(profile->guid())); | |
| 69 } | |
| 70 | |
| 71 void AutofillProfile33FromStatement(const sql::Statement& s, | |
| 72 AutofillProfile* profile, | |
| 73 int64* date_modified) { | |
| 74 DCHECK(profile); | |
| 75 DCHECK(date_modified); | |
| 76 profile->set_guid(s.ColumnString(0)); | |
| 77 EXPECT_TRUE(base::IsValidGUID(profile->guid())); | |
| 78 profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(1)); | |
| 79 profile->SetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS, | |
| 80 s.ColumnString16(2)); | |
| 81 profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(3)); | |
| 82 profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(4)); | |
| 83 profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(5)); | |
| 84 profile->SetInfo( | |
| 85 autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY), | |
| 86 s.ColumnString16(6), "en-US"); | |
| 87 *date_modified = s.ColumnInt64(7); | |
| 88 } | |
| 89 | |
| 90 void CreditCard31FromStatement(const sql::Statement& s, | |
| 91 CreditCard* credit_card, | |
| 92 base::string16* label, | |
| 93 int* unique_id, | |
| 94 std::string* encrypted_number, | |
| 95 int64* date_modified) { | |
| 96 DCHECK(credit_card); | |
| 97 DCHECK(label); | |
| 98 DCHECK(unique_id); | |
| 99 DCHECK(encrypted_number); | |
| 100 DCHECK(date_modified); | |
| 101 *label = s.ColumnString16(0); | |
| 102 *unique_id = s.ColumnInt(1); | |
| 103 credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(2)); | |
| 104 credit_card->SetRawInfo(autofill::CREDIT_CARD_TYPE, s.ColumnString16(3)); | |
| 105 credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(5)); | |
| 106 credit_card->SetRawInfo( | |
| 107 autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(6)); | |
| 108 int encrypted_number_len = s.ColumnByteLength(10); | |
| 109 if (encrypted_number_len) { | |
| 110 encrypted_number->resize(encrypted_number_len); | |
| 111 memcpy(&(*encrypted_number)[0], s.ColumnBlob(10), encrypted_number_len); | |
| 112 } | |
| 113 *date_modified = s.ColumnInt64(12); | |
| 114 credit_card->set_guid(s.ColumnString(13)); | |
| 115 EXPECT_TRUE(base::IsValidGUID(credit_card->guid())); | |
| 116 } | |
| 117 | |
| 118 void CreditCard32FromStatement(const sql::Statement& s, | |
| 119 CreditCard* credit_card, | |
| 120 std::string* encrypted_number, | |
| 121 int64* date_modified) { | |
| 122 DCHECK(credit_card); | |
| 123 DCHECK(encrypted_number); | |
| 124 DCHECK(date_modified); | |
| 125 credit_card->set_guid(s.ColumnString(0)); | |
| 126 EXPECT_TRUE(base::IsValidGUID(credit_card->guid())); | |
| 127 credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(1)); | |
| 128 credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(2)); | |
| 129 credit_card->SetRawInfo( | |
| 130 autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(3)); | |
| 131 int encrypted_number_len = s.ColumnByteLength(4); | |
| 132 if (encrypted_number_len) { | |
| 133 encrypted_number->resize(encrypted_number_len); | |
| 134 memcpy(&(*encrypted_number)[0], s.ColumnBlob(4), encrypted_number_len); | |
| 135 } | |
| 136 *date_modified = s.ColumnInt64(5); | |
| 137 } | |
| 138 | |
| 139 void CheckHasBackupData(sql::MetaTable* meta_table) { | |
| 140 std::string value; | |
| 141 EXPECT_TRUE(meta_table->GetValue( | |
| 142 "Default Search Provider ID Backup", &value)); | |
| 143 EXPECT_TRUE(meta_table->GetValue( | |
| 144 "Default Search Provider ID Backup Signature", &value)); | |
| 145 } | |
| 146 | |
| 147 void CheckNoBackupData(const sql::Connection& connection, | |
| 148 sql::MetaTable* meta_table) { | |
| 149 std::string value; | |
| 150 EXPECT_FALSE(meta_table->GetValue( | |
| 151 "Default Search Provider ID Backup", &value)); | |
| 152 EXPECT_FALSE(meta_table->GetValue( | |
| 153 "Default Search Provider ID Backup Signature", &value)); | |
| 154 EXPECT_FALSE(connection.DoesTableExist("keywords_backup")); | |
| 155 } | |
| 156 | |
| 157 std::string RemoveQuotes(const std::string& has_quotes) { | 41 std::string RemoveQuotes(const std::string& has_quotes) { |
| 158 std::string no_quotes; | 42 std::string no_quotes; |
| 159 // SQLite quotes: http://www.sqlite.org/lang_keywords.html | 43 // SQLite quotes: http://www.sqlite.org/lang_keywords.html |
| 160 base::RemoveChars(has_quotes, "\"[]`", &no_quotes); | 44 base::RemoveChars(has_quotes, "\"[]`", &no_quotes); |
| 161 return no_quotes; | 45 return no_quotes; |
| 162 } | 46 } |
| 163 | 47 |
| 164 } // anonymous namespace | 48 } // anonymous namespace |
| 165 | 49 |
| 166 // The WebDatabaseMigrationTest encapsulates testing of database migrations. | 50 // The WebDatabaseMigrationTest encapsulates testing of database migrations. |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 ASSERT_TRUE(connection.Execute(contents.data())); | 144 ASSERT_TRUE(connection.Execute(contents.data())); |
| 261 } | 145 } |
| 262 | 146 |
| 263 // Tests that migrating from the golden files version_XX.sql results in the same | 147 // Tests that migrating from the golden files version_XX.sql results in the same |
| 264 // schema as migrating from an empty database. | 148 // schema as migrating from an empty database. |
| 265 TEST_F(WebDatabaseMigrationTest, VersionXxSqlFilesAreGolden) { | 149 TEST_F(WebDatabaseMigrationTest, VersionXxSqlFilesAreGolden) { |
| 266 DoMigration(); | 150 DoMigration(); |
| 267 sql::Connection connection; | 151 sql::Connection connection; |
| 268 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 152 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
| 269 const std::string& expected_schema = RemoveQuotes(connection.GetSchema()); | 153 const std::string& expected_schema = RemoveQuotes(connection.GetSchema()); |
| 270 static const int kFirstVersion = 53; | 154 for (int i = WebDatabase::kDeprecatedVersionNumber + 1; |
| 271 for (int i = kFirstVersion; i < kCurrentTestedVersionNumber; ++i) { | 155 i < kCurrentTestedVersionNumber; ++i) { |
| 156 // We don't test version 52 because there's a slight discrepancy in the | |
| 157 // initialization code and the migration code (relating to schema | |
| 158 // formatting). Fixing the bug is possible, but would require updating every | |
| 159 // version_nn.sql file. | |
|
Peter Kasting
2015/02/26 22:33:19
So why not do that? There aren't so many of these
Evan Stade
2015/02/26 22:37:19
That's somewhat orthogonal. This wasn't being test
Peter Kasting
2015/02/26 22:40:08
OK... seems like something that would be nice to f
| |
| 160 if (i == 52) | |
| 161 continue; | |
| 162 | |
| 272 connection.Raze(); | 163 connection.Raze(); |
| 273 const base::FilePath& file_name = base::FilePath::FromUTF8Unsafe( | 164 const base::FilePath& file_name = base::FilePath::FromUTF8Unsafe( |
| 274 "version_" + base::IntToString(i) + ".sql"); | 165 "version_" + base::IntToString(i) + ".sql"); |
| 275 ASSERT_NO_FATAL_FAILURE(LoadDatabase(file_name.value())) | 166 ASSERT_NO_FATAL_FAILURE(LoadDatabase(file_name.value())) |
| 276 << "Failed to load " << file_name.MaybeAsASCII(); | 167 << "Failed to load " << file_name.MaybeAsASCII(); |
| 277 DoMigration(); | 168 DoMigration(); |
| 278 EXPECT_EQ(expected_schema, RemoveQuotes(connection.GetSchema())); | 169 EXPECT_EQ(expected_schema, RemoveQuotes(connection.GetSchema())) |
| 170 << "For version " << i; | |
| 279 } | 171 } |
| 280 } | 172 } |
| 281 | 173 |
| 282 // Tests that the all migrations from an empty database succeed. | 174 // Tests that the all migrations from an empty database succeed. |
| 283 TEST_F(WebDatabaseMigrationTest, MigrateEmptyToCurrent) { | 175 TEST_F(WebDatabaseMigrationTest, MigrateEmptyToCurrent) { |
| 284 DoMigration(); | 176 DoMigration(); |
| 285 | 177 |
| 286 // Verify post-conditions. These are expectations for current version of the | 178 // Verify post-conditions. These are expectations for current version of the |
| 287 // database. | 179 // database. |
| 288 { | 180 { |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 306 EXPECT_TRUE(connection.DoesTableExist("token_service")); | 198 EXPECT_TRUE(connection.DoesTableExist("token_service")); |
| 307 // The web_apps and web_apps_icons tables are obsolete as of version 58. | 199 // The web_apps and web_apps_icons tables are obsolete as of version 58. |
| 308 EXPECT_FALSE(connection.DoesTableExist("web_apps")); | 200 EXPECT_FALSE(connection.DoesTableExist("web_apps")); |
| 309 EXPECT_FALSE(connection.DoesTableExist("web_app_icons")); | 201 EXPECT_FALSE(connection.DoesTableExist("web_app_icons")); |
| 310 // The web_intents and web_intents_defaults tables are obsolete as of | 202 // The web_intents and web_intents_defaults tables are obsolete as of |
| 311 // version 58. | 203 // version 58. |
| 312 EXPECT_FALSE(connection.DoesTableExist("web_intents")); | 204 EXPECT_FALSE(connection.DoesTableExist("web_intents")); |
| 313 EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); | 205 EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); |
| 314 } | 206 } |
| 315 } | 207 } |
| 208 // Check that current version is forced to compatible version before migration, | |
| 209 // if the former is smaller. | |
| 210 TEST_F(WebDatabaseMigrationTest, MigrateVersion45CompatibleToCurrent) { | |
| 211 ASSERT_NO_FATAL_FAILURE( | |
| 212 LoadDatabase(FILE_PATH_LITERAL("version_45_compatible.sql"))); | |
| 316 | 213 |
| 317 // Tests that absent Autofill tables do not create any problems when migrating | 214 // Verify pre-conditions. These are expectations for version 45 of the |
| 318 // from a DB written by the earliest publicly released version of Chrome. | |
| 319 TEST_F(WebDatabaseMigrationTest, MigrateVersion20ToCurrent) { | |
| 320 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_20.sql"))); | |
| 321 | |
| 322 // Verify pre-conditions. | |
| 323 { | |
| 324 sql::Connection connection; | |
| 325 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 326 | |
| 327 EXPECT_FALSE(connection.DoesTableExist("autofill")); | |
| 328 EXPECT_FALSE(connection.DoesTableExist("autofill_profiles")); | |
| 329 EXPECT_FALSE(connection.DoesTableExist("credit_cards")); | |
| 330 } | |
| 331 | |
| 332 DoMigration(); | |
| 333 | |
| 334 // Verify post-conditions. These are expectations for current version of the | |
| 335 // database. | 215 // database. |
| 336 { | 216 { |
| 337 sql::Connection connection; | 217 sql::Connection connection; |
| 338 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 218 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
| 219 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 339 | 220 |
| 340 // Check version. | 221 sql::MetaTable meta_table; |
| 341 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | 222 // Database is actually version 45 but the version field states 40. |
| 342 | 223 ASSERT_TRUE(meta_table.Init(&connection, 40, 45)); |
| 343 // Mostly this test just verifies that no SQL errors occur during migration; | |
| 344 // but might as well verify that the tables were created as well. | |
| 345 EXPECT_TRUE(connection.DoesTableExist("autofill")); | |
| 346 EXPECT_TRUE(connection.DoesTableExist("autofill_profiles")); | |
| 347 EXPECT_TRUE(connection.DoesTableExist("credit_cards")); | |
| 348 } | |
| 349 } | |
| 350 | |
| 351 // Tests that rows with empty values get removed from the autofill tables. | |
| 352 TEST_F(WebDatabaseMigrationTest, MigrateVersion21ToCurrent) { | |
| 353 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_21.sql"))); | |
| 354 | |
| 355 // Verify pre-conditions. | |
| 356 { | |
| 357 sql::Connection connection; | |
| 358 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 359 | |
| 360 // Both empty and non-empty values are allowed in a version 21 database. | |
| 361 sql::Statement s_autofill(connection.GetUniqueStatement( | |
| 362 "SELECT name, value, value_lower, pair_id, count FROM autofill")); | |
| 363 sql::Statement s_dates(connection.GetUniqueStatement( | |
| 364 "SELECT pair_id, date_created FROM autofill_dates")); | |
| 365 | |
| 366 // An entry with a non-empty value. | |
| 367 ASSERT_TRUE(s_autofill.Step()); | |
| 368 EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0)); | |
| 369 EXPECT_EQ(ASCIIToUTF16("John Doe"), s_autofill.ColumnString16(1)); | |
| 370 EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2)); | |
| 371 EXPECT_EQ(10, s_autofill.ColumnInt(3)); | |
| 372 EXPECT_EQ(1, s_autofill.ColumnInt(4)); | |
| 373 ASSERT_TRUE(s_dates.Step()); | |
| 374 EXPECT_EQ(10, s_dates.ColumnInt(0)); | |
| 375 EXPECT_EQ(1384299100, s_dates.ColumnInt64(1)); | |
| 376 | |
| 377 // An entry with an empty value. | |
| 378 ASSERT_TRUE(s_autofill.Step()); | |
| 379 EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0)); | |
| 380 EXPECT_EQ(base::string16(), s_autofill.ColumnString16(1)); | |
| 381 EXPECT_EQ(base::string16(), s_autofill.ColumnString16(2)); | |
| 382 EXPECT_EQ(11, s_autofill.ColumnInt(3)); | |
| 383 EXPECT_EQ(1, s_autofill.ColumnInt(4)); | |
| 384 ASSERT_TRUE(s_dates.Step()); | |
| 385 EXPECT_EQ(11, s_dates.ColumnInt(0)); | |
| 386 EXPECT_EQ(1384299200, s_dates.ColumnInt64(1)); | |
| 387 | |
| 388 // Another entry with a non-empty value. | |
| 389 ASSERT_TRUE(s_autofill.Step()); | |
| 390 EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0)); | |
| 391 EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(1)); | |
| 392 EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(2)); | |
| 393 EXPECT_EQ(20, s_autofill.ColumnInt(3)); | |
| 394 EXPECT_EQ(3, s_autofill.ColumnInt(4)); | |
| 395 ASSERT_TRUE(s_dates.Step()); | |
| 396 EXPECT_EQ(20, s_dates.ColumnInt(0)); | |
| 397 EXPECT_EQ(1384299300, s_dates.ColumnInt64(1)); | |
| 398 ASSERT_TRUE(s_dates.Step()); | |
| 399 EXPECT_EQ(20, s_dates.ColumnInt(0)); | |
| 400 EXPECT_EQ(1384299301, s_dates.ColumnInt64(1)); | |
| 401 | |
| 402 // Another entry with an empty value. | |
| 403 ASSERT_TRUE(s_autofill.Step()); | |
| 404 EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0)); | |
| 405 EXPECT_EQ(base::string16(), s_autofill.ColumnString16(1)); | |
| 406 EXPECT_EQ(base::string16(), s_autofill.ColumnString16(2)); | |
| 407 EXPECT_EQ(21, s_autofill.ColumnInt(3)); | |
| 408 EXPECT_EQ(4, s_autofill.ColumnInt(4)); | |
| 409 ASSERT_TRUE(s_dates.Step()); | |
| 410 EXPECT_EQ(21, s_dates.ColumnInt(0)); | |
| 411 EXPECT_EQ(1384299401, s_dates.ColumnInt64(1)); | |
| 412 ASSERT_TRUE(s_dates.Step()); | |
| 413 EXPECT_EQ(21, s_dates.ColumnInt(0)); | |
| 414 EXPECT_EQ(1384299400, s_dates.ColumnInt64(1)); | |
| 415 ASSERT_TRUE(s_dates.Step()); | |
| 416 EXPECT_EQ(21, s_dates.ColumnInt(0)); | |
| 417 EXPECT_EQ(1384299403, s_dates.ColumnInt64(1)); | |
| 418 ASSERT_TRUE(s_dates.Step()); | |
| 419 EXPECT_EQ(21, s_dates.ColumnInt(0)); | |
| 420 EXPECT_EQ(1384299402, s_dates.ColumnInt64(1)); | |
| 421 | |
| 422 // No more entries expected. | |
| 423 ASSERT_FALSE(s_autofill.Step()); | |
| 424 ASSERT_FALSE(s_dates.Step()); | |
| 425 } | 224 } |
| 426 | 225 |
| 427 DoMigration(); | 226 DoMigration(); |
| 428 | |
| 429 // Verify post-conditions. These are expectations for current version of the | |
| 430 // database. | |
| 431 { | |
| 432 sql::Connection connection; | |
| 433 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 434 | |
| 435 // Check version. | |
| 436 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 437 | |
| 438 // Entries with empty values should have been dropped. The remaining | |
| 439 // entries should have been preserved. | |
| 440 sql::Statement s( | |
| 441 connection.GetUniqueStatement( | |
| 442 "SELECT name, value, value_lower, date_created, date_last_used," | |
| 443 " count " | |
| 444 "FROM autofill " | |
| 445 "ORDER BY name, value ASC")); | |
| 446 | |
| 447 // "jane@example.com" | |
| 448 ASSERT_TRUE(s.Step()); | |
| 449 EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0)); | |
| 450 EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(1)); | |
| 451 EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(2)); | |
| 452 EXPECT_EQ(1384299300, s.ColumnInt64(3)); | |
| 453 EXPECT_EQ(1384299301, s.ColumnInt64(4)); | |
| 454 EXPECT_EQ(3, s.ColumnInt(5)); | |
| 455 | |
| 456 // "John Doe" | |
| 457 ASSERT_TRUE(s.Step()); | |
| 458 EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0)); | |
| 459 EXPECT_EQ(ASCIIToUTF16("John Doe"), s.ColumnString16(1)); | |
| 460 EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2)); | |
| 461 EXPECT_EQ(1384299100, s.ColumnInt64(3)); | |
| 462 EXPECT_EQ(1384299100, s.ColumnInt64(4)); | |
| 463 EXPECT_EQ(1, s.ColumnInt(5)); | |
| 464 | |
| 465 // No more entries expected. | |
| 466 ASSERT_FALSE(s.Step()); | |
| 467 } | |
| 468 } | |
| 469 | |
| 470 // Tests that the |credit_card| table gets added to the schema for a version 22 | |
| 471 // database. | |
| 472 TEST_F(WebDatabaseMigrationTest, MigrateVersion22ToCurrent) { | |
| 473 // This schema is taken from a build prior to the addition of the | |
| 474 // |credit_card| table. Version 22 of the schema. Contrast this with the | |
| 475 // corrupt version below. | |
| 476 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_22.sql"))); | |
| 477 | |
| 478 // Verify pre-conditions. | |
| 479 { | |
| 480 sql::Connection connection; | |
| 481 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 482 | |
| 483 // No |credit_card| table prior to version 23. | |
| 484 ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 485 ASSERT_FALSE( | |
| 486 connection.DoesColumnExist("credit_cards", "card_number_encrypted")); | |
| 487 } | |
| 488 | |
| 489 DoMigration(); | |
| 490 | |
| 491 // Verify post-conditions. These are expectations for current version of the | |
| 492 // database. | |
| 493 { | |
| 494 sql::Connection connection; | |
| 495 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 496 | |
| 497 // Check version. | |
| 498 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 499 | |
| 500 // |credit_card| table now exists. | |
| 501 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 502 EXPECT_TRUE( | |
| 503 connection.DoesColumnExist("credit_cards", "card_number_encrypted")); | |
| 504 } | |
| 505 } | |
| 506 | |
| 507 // Tests that the |credit_card| table gets added to the schema for a corrupt | |
| 508 // version 22 database. The corruption is that the |credit_cards| table exists | |
| 509 // but the schema version number was not set correctly to 23 or later. This | |
| 510 // test exercises code introduced to fix bug http://crbug.com/50699 that | |
| 511 // resulted from the corruption. | |
| 512 TEST_F(WebDatabaseMigrationTest, MigrateVersion22CorruptedToCurrent) { | |
| 513 // This schema is taken from a build after the addition of the |credit_card| | |
| 514 // table. Due to a bug in the migration logic the version is set incorrectly | |
| 515 // to 22 (it should have been updated to 23 at least). | |
| 516 ASSERT_NO_FATAL_FAILURE( | |
| 517 LoadDatabase(FILE_PATH_LITERAL("version_22_corrupt.sql"))); | |
| 518 | |
| 519 // Verify pre-conditions. These are expectations for corrupt version 22 of | |
| 520 // the database. | |
| 521 { | |
| 522 sql::Connection connection; | |
| 523 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 524 | |
| 525 // Columns existing and not existing before current version. | |
| 526 ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id")); | |
| 527 ASSERT_TRUE( | |
| 528 connection.DoesColumnExist("credit_cards", "card_number_encrypted")); | |
| 529 ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 530 } | |
| 531 | |
| 532 DoMigration(); | |
| 533 | |
| 534 // Verify post-conditions. These are expectations for current version of the | |
| 535 // database. | |
| 536 { | |
| 537 sql::Connection connection; | |
| 538 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 539 | |
| 540 // Check version. | |
| 541 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 542 | |
| 543 | |
| 544 // Columns existing and not existing before version 25. | |
| 545 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id")); | |
| 546 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 547 EXPECT_TRUE( | |
| 548 connection.DoesColumnExist("credit_cards", "card_number_encrypted")); | |
| 549 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 550 } | |
| 551 } | |
| 552 | |
| 553 // Tests that the |keywords| |created_by_policy| column gets added to the schema | |
| 554 // for a version 25 database. | |
| 555 TEST_F(WebDatabaseMigrationTest, MigrateVersion25ToCurrent) { | |
| 556 // This schema is taken from a build prior to the addition of the |keywords| | |
| 557 // |created_by_policy| column. | |
| 558 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_25.sql"))); | |
| 559 | |
| 560 // Verify pre-conditions. These are expectations for version 25 of the | |
| 561 // database. | |
| 562 { | |
| 563 sql::Connection connection; | |
| 564 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 565 } | |
| 566 | |
| 567 DoMigration(); | |
| 568 | |
| 569 // Verify post-conditions. These are expectations for current version of the | |
| 570 // database. | |
| 571 { | |
| 572 sql::Connection connection; | |
| 573 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 574 | |
| 575 // Check version. | |
| 576 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 577 | |
| 578 // |keywords| |created_by_policy| column should have been added. | |
| 579 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 580 EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); | |
| 581 } | |
| 582 } | |
| 583 | |
| 584 // Tests that the credit_cards.billing_address column is changed from a string | |
| 585 // to an int whilst preserving the associated billing address. This version of | |
| 586 // the test makes sure a stored label is converted to an ID. | |
| 587 TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) { | |
| 588 // This schema is taken from a build prior to the change of column type for | |
| 589 // credit_cards.billing_address from string to int. | |
| 590 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql"))); | |
| 591 | |
| 592 // Verify pre-conditions. These are expectations for version 26 of the | |
| 593 // database. | |
| 594 { | |
| 595 sql::Connection connection; | |
| 596 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 597 | |
| 598 // Columns existing and not existing before current version. | |
| 599 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); | |
| 600 | |
| 601 std::string stmt = "INSERT INTO autofill_profiles" | |
| 602 "(label, unique_id, first_name, middle_name, last_name, email," | |
| 603 " company_name, address_line_1, address_line_2, city, state, zipcode," | |
| 604 " country, phone, fax)" | |
| 605 "VALUES ('Home',1,'','','','','','','','','','','','','')"; | |
| 606 sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); | |
| 607 ASSERT_TRUE(s.Run()); | |
| 608 | |
| 609 // Insert a CC linked to an existing address. | |
| 610 std::string stmt2 = "INSERT INTO credit_cards" | |
| 611 "(label, unique_id, name_on_card, type, card_number," | |
| 612 " expiration_month, expiration_year, verification_code, billing_address," | |
| 613 " shipping_address, card_number_encrypted, verification_code_encrypted)" | |
| 614 "VALUES ('label',2,'Jack','Visa','1234',2,2012,'','Home','','','')"; | |
| 615 sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str())); | |
| 616 ASSERT_TRUE(s2.Run()); | |
| 617 | |
| 618 // |billing_address| is a string. | |
| 619 std::string stmt3 = "SELECT billing_address FROM credit_cards"; | |
| 620 sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str())); | |
| 621 ASSERT_TRUE(s3.Step()); | |
| 622 EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT); | |
| 623 } | |
| 624 | |
| 625 DoMigration(); | |
| 626 | |
| 627 // Verify post-conditions. These are expectations for current version of the | |
| 628 // database. | |
| 629 { | |
| 630 sql::Connection connection; | |
| 631 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 632 | |
| 633 // Check version. | |
| 634 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 635 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); | |
| 636 | |
| 637 // Verify the credit card data is converted. | |
| 638 sql::Statement s(connection.GetUniqueStatement( | |
| 639 "SELECT guid, name_on_card, expiration_month, expiration_year, " | |
| 640 "card_number_encrypted, date_modified " | |
| 641 "FROM credit_cards")); | |
| 642 ASSERT_TRUE(s.Step()); | |
| 643 EXPECT_EQ("Jack", s.ColumnString(1)); | |
| 644 EXPECT_EQ(2, s.ColumnInt(2)); | |
| 645 EXPECT_EQ(2012, s.ColumnInt(3)); | |
| 646 // Column 5 is encrypted number blob. | |
| 647 // Column 6 is date_modified. | |
| 648 } | |
| 649 } | |
| 650 | |
| 651 // Tests that the credit_cards.billing_address column is changed from a string | |
| 652 // to an int whilst preserving the associated billing address. This version of | |
| 653 // the test makes sure a stored string ID is converted to an integer ID. | |
| 654 TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringIDs) { | |
| 655 // This schema is taken from a build prior to the change of column type for | |
| 656 // credit_cards.billing_address from string to int. | |
| 657 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql"))); | |
| 658 | |
| 659 // Verify pre-conditions. These are expectations for version 26 of the | |
| 660 // database. | |
| 661 { | |
| 662 sql::Connection connection; | |
| 663 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 664 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); | |
| 665 | |
| 666 std::string stmt = "INSERT INTO autofill_profiles" | |
| 667 "(label, unique_id, first_name, middle_name, last_name, email," | |
| 668 " company_name, address_line_1, address_line_2, city, state, zipcode," | |
| 669 " country, phone, fax)" | |
| 670 "VALUES ('Home',1,'','','','','','','','','','','','','')"; | |
| 671 sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); | |
| 672 ASSERT_TRUE(s.Run()); | |
| 673 | |
| 674 // Insert a CC linked to an existing address. | |
| 675 std::string stmt2 = "INSERT INTO credit_cards" | |
| 676 "(label, unique_id, name_on_card, type, card_number," | |
| 677 " expiration_month, expiration_year, verification_code, billing_address," | |
| 678 " shipping_address, card_number_encrypted, verification_code_encrypted)" | |
| 679 "VALUES ('label',2,'Jack','Visa','1234',2,2012,'','1','','','')"; | |
| 680 sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str())); | |
| 681 ASSERT_TRUE(s2.Run()); | |
| 682 | |
| 683 // |billing_address| is a string. | |
| 684 std::string stmt3 = "SELECT billing_address FROM credit_cards"; | |
| 685 sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str())); | |
| 686 ASSERT_TRUE(s3.Step()); | |
| 687 EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT); | |
| 688 } | |
| 689 | |
| 690 DoMigration(); | |
| 691 | 227 |
| 692 // Verify post-conditions. These are expectations for current version of the | 228 // Verify post-conditions. These are expectations for current version of the |
| 693 // database. | 229 // database. |
| 694 { | 230 { |
| 695 sql::Connection connection; | 231 sql::Connection connection; |
| 696 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 232 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
| 697 | |
| 698 // Check version. | |
| 699 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 700 | |
| 701 // |keywords| |created_by_policy| column should have been added. | |
| 702 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 703 EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); | |
| 704 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); | |
| 705 | |
| 706 // Verify the credit card data is converted. | |
| 707 sql::Statement s(connection.GetUniqueStatement( | |
| 708 "SELECT guid, name_on_card, expiration_month, expiration_year, " | |
| 709 "card_number_encrypted, date_modified " | |
| 710 "FROM credit_cards")); | |
| 711 ASSERT_TRUE(s.Step()); | |
| 712 EXPECT_EQ("Jack", s.ColumnString(1)); | |
| 713 EXPECT_EQ(2, s.ColumnInt(2)); | |
| 714 EXPECT_EQ(2012, s.ColumnInt(3)); | |
| 715 // Column 5 is encrypted credit card number blo b. | |
| 716 // Column 6 is date_modified. | |
| 717 } | |
| 718 } | |
| 719 | |
| 720 // Makes sure instant_url is added correctly to keywords. | |
| 721 TEST_F(WebDatabaseMigrationTest, MigrateVersion27ToCurrent) { | |
| 722 // Initialize the database. | |
| 723 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_27.sql"))); | |
| 724 | |
| 725 // Verify pre-conditions. These are expectations for version 27 of the | |
| 726 // database. | |
| 727 { | |
| 728 sql::Connection connection; | |
| 729 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 730 | |
| 731 ASSERT_FALSE(connection.DoesColumnExist("keywords", "instant_url")); | |
| 732 } | |
| 733 | |
| 734 DoMigration(); | |
| 735 | |
| 736 // Verify post-conditions. These are expectations for current version of the | |
| 737 // database. | |
| 738 { | |
| 739 sql::Connection connection; | |
| 740 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 741 | |
| 742 // Check version. | |
| 743 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 744 | |
| 745 // Make sure supports_instant (added in Version 28) was ultimately dropped | |
| 746 // again and instant_url was added. | |
| 747 EXPECT_FALSE(connection.DoesColumnExist("keywords", "supports_instant")); | |
| 748 EXPECT_TRUE(connection.DoesColumnExist("keywords", "instant_url")); | |
| 749 | |
| 750 // Check that instant_url is empty. | |
| 751 std::string stmt = "SELECT instant_url FROM keywords"; | |
| 752 sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); | |
| 753 ASSERT_TRUE(s.Step()); | |
| 754 EXPECT_EQ(std::string(), s.ColumnString(0)); | |
| 755 | |
| 756 // Verify the data made it over. | |
| 757 stmt = "SELECT " + KeywordTable::GetKeywordColumns() + " FROM keywords"; | |
| 758 sql::Statement s2(connection.GetUniqueStatement(stmt.c_str())); | |
| 759 ASSERT_TRUE(s2.Step()); | |
| 760 EXPECT_EQ(2, s2.ColumnInt(0)); | |
| 761 EXPECT_EQ("Google", s2.ColumnString(1)); | |
| 762 EXPECT_EQ("google.com", s2.ColumnString(2)); | |
| 763 EXPECT_EQ("http://www.google.com/favicon.ico", s2.ColumnString(3)); | |
| 764 EXPECT_EQ("{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}"\ | |
| 765 "{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}"\ | |
| 766 "&q={searchTerms}", | |
| 767 s2.ColumnString(4)); | |
| 768 EXPECT_TRUE(s2.ColumnBool(5)); | |
| 769 EXPECT_EQ(std::string(), s2.ColumnString(6)); | |
| 770 EXPECT_EQ(0, s2.ColumnInt(7)); | |
| 771 EXPECT_EQ(0, s2.ColumnInt(8)); | |
| 772 EXPECT_EQ(std::string("UTF-8"), s2.ColumnString(9)); | |
| 773 EXPECT_TRUE(s2.ColumnBool(10)); | |
| 774 EXPECT_EQ(std::string("{google:baseSuggestURL}search?client=chrome&hl=" | |
| 775 "{language}&q={searchTerms}"), s2.ColumnString(11)); | |
| 776 EXPECT_EQ(1, s2.ColumnInt(12)); | |
| 777 EXPECT_FALSE(s2.ColumnBool(13)); | |
| 778 EXPECT_EQ(std::string(), s2.ColumnString(14)); | |
| 779 EXPECT_EQ(0, s2.ColumnInt(15)); | |
| 780 EXPECT_EQ(std::string(), s2.ColumnString(16)); | |
| 781 } | |
| 782 } | |
| 783 | |
| 784 // Makes sure date_modified is added correctly to autofill_profiles and | |
| 785 // credit_cards. | |
| 786 TEST_F(WebDatabaseMigrationTest, MigrateVersion29ToCurrent) { | |
| 787 // Initialize the database. | |
| 788 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_29.sql"))); | |
| 789 | |
| 790 // Verify pre-conditions. These are expectations for version 29 of the | |
| 791 // database. | |
| 792 { | |
| 793 sql::Connection connection; | |
| 794 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 795 | |
| 796 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", | |
| 797 "date_modified")); | |
| 798 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", | |
| 799 "date_modified")); | |
| 800 } | |
| 801 | |
| 802 Time pre_creation_time = Time::Now(); | |
| 803 DoMigration(); | |
| 804 Time post_creation_time = Time::Now(); | |
| 805 | |
| 806 // Verify post-conditions. These are expectations for current version of the | |
| 807 // database. | |
| 808 { | |
| 809 sql::Connection connection; | |
| 810 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 811 | |
| 812 // Check version. | |
| 813 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 814 | |
| 815 // Check that the columns were created. | |
| 816 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 817 "date_modified")); | |
| 818 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", | |
| 819 "date_modified")); | |
| 820 | |
| 821 sql::Statement s_profiles(connection.GetUniqueStatement( | |
| 822 "SELECT date_modified FROM autofill_profiles ")); | |
| 823 ASSERT_TRUE(s_profiles.is_valid()); | |
| 824 while (s_profiles.Step()) { | |
| 825 EXPECT_GE(s_profiles.ColumnInt64(0), | |
| 826 pre_creation_time.ToTimeT()); | |
| 827 EXPECT_LE(s_profiles.ColumnInt64(0), | |
| 828 post_creation_time.ToTimeT()); | |
| 829 } | |
| 830 EXPECT_TRUE(s_profiles.Succeeded()); | |
| 831 | |
| 832 sql::Statement s_credit_cards(connection.GetUniqueStatement( | |
| 833 "SELECT date_modified FROM credit_cards ")); | |
| 834 ASSERT_TRUE(s_credit_cards.is_valid()); | |
| 835 while (s_credit_cards.Step()) { | |
| 836 EXPECT_GE(s_credit_cards.ColumnInt64(0), | |
| 837 pre_creation_time.ToTimeT()); | |
| 838 EXPECT_LE(s_credit_cards.ColumnInt64(0), | |
| 839 post_creation_time.ToTimeT()); | |
| 840 } | |
| 841 EXPECT_TRUE(s_credit_cards.Succeeded()); | |
| 842 } | |
| 843 } | |
| 844 | |
| 845 // Makes sure guids are added to autofill_profiles and credit_cards tables. | |
| 846 TEST_F(WebDatabaseMigrationTest, MigrateVersion30ToCurrent) { | |
| 847 // Initialize the database. | |
| 848 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_30.sql"))); | |
| 849 | |
| 850 // Verify pre-conditions. These are expectations for version 29 of the | |
| 851 // database. | |
| 852 { | |
| 853 sql::Connection connection; | |
| 854 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 855 | |
| 856 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 857 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 858 } | |
| 859 | |
| 860 DoMigration(); | |
| 861 | |
| 862 // Verify post-conditions. These are expectations for current version of the | |
| 863 // database. | |
| 864 { | |
| 865 sql::Connection connection; | |
| 866 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 867 | |
| 868 // Check version. | |
| 869 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 870 | |
| 871 ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 872 ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 873 | |
| 874 // Check that guids are non-null, non-empty, conforms to guid format, and | |
| 875 // are different. | |
| 876 sql::Statement s( | |
| 877 connection.GetUniqueStatement("SELECT guid FROM autofill_profiles")); | |
| 878 | |
| 879 ASSERT_TRUE(s.Step()); | |
| 880 std::string guid1 = s.ColumnString(0); | |
| 881 EXPECT_TRUE(base::IsValidGUID(guid1)); | |
| 882 | |
| 883 ASSERT_TRUE(s.Step()); | |
| 884 std::string guid2 = s.ColumnString(0); | |
| 885 EXPECT_TRUE(base::IsValidGUID(guid2)); | |
| 886 | |
| 887 EXPECT_NE(guid1, guid2); | |
| 888 } | |
| 889 } | |
| 890 | |
| 891 // Removes unique IDs and make GUIDs the primary key. Also removes unused | |
| 892 // columns. | |
| 893 TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) { | |
| 894 // Initialize the database. | |
| 895 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_31.sql"))); | |
| 896 | |
| 897 // Verify pre-conditions. These are expectations for version 30 of the | |
| 898 // database. | |
| 899 AutofillProfile profile; | |
| 900 base::string16 profile_label; | |
| 901 int profile_unique_id = 0; | |
| 902 int64 profile_date_modified = 0; | |
| 903 CreditCard credit_card; | |
| 904 base::string16 cc_label; | |
| 905 int cc_unique_id = 0; | |
| 906 std::string cc_number_encrypted; | |
| 907 int64 cc_date_modified = 0; | |
| 908 { | |
| 909 sql::Connection connection; | |
| 910 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 911 | |
| 912 // Verify existence of columns we'll be changing. | |
| 913 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 914 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "unique_id")); | |
| 915 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 916 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id")); | |
| 917 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "type")); | |
| 918 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "card_number")); | |
| 919 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", | |
| 920 "verification_code")); | |
| 921 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); | |
| 922 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "shipping_address")); | |
| 923 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", | |
| 924 "verification_code_encrypted")); | |
| 925 | |
| 926 // Fetch data in the database prior to migration. | |
| 927 sql::Statement s1( | |
| 928 connection.GetUniqueStatement( | |
| 929 "SELECT label, unique_id, first_name, middle_name, last_name, " | |
| 930 "email, company_name, address_line_1, address_line_2, city, state, " | |
| 931 "zipcode, country, phone, fax, date_modified, guid " | |
| 932 "FROM autofill_profiles")); | |
| 933 ASSERT_TRUE(s1.Step()); | |
| 934 EXPECT_NO_FATAL_FAILURE(AutofillProfile31FromStatement( | |
| 935 s1, &profile, &profile_label, &profile_unique_id, | |
| 936 &profile_date_modified)); | |
| 937 | |
| 938 sql::Statement s2( | |
| 939 connection.GetUniqueStatement( | |
| 940 "SELECT label, unique_id, name_on_card, type, card_number, " | |
| 941 "expiration_month, expiration_year, verification_code, " | |
| 942 "billing_address, shipping_address, card_number_encrypted, " | |
| 943 "verification_code_encrypted, date_modified, guid " | |
| 944 "FROM credit_cards")); | |
| 945 ASSERT_TRUE(s2.Step()); | |
| 946 EXPECT_NO_FATAL_FAILURE(CreditCard31FromStatement(s2, | |
| 947 &credit_card, | |
| 948 &cc_label, | |
| 949 &cc_unique_id, | |
| 950 &cc_number_encrypted, | |
| 951 &cc_date_modified)); | |
| 952 | |
| 953 EXPECT_NE(profile_unique_id, cc_unique_id); | |
| 954 EXPECT_NE(profile.guid(), credit_card.guid()); | |
| 955 } | |
| 956 | |
| 957 DoMigration(); | |
| 958 | |
| 959 // Verify post-conditions. These are expectations for current version of the | |
| 960 // database. | |
| 961 { | |
| 962 sql::Connection connection; | |
| 963 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 964 | |
| 965 // Check version. | |
| 966 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 967 | |
| 968 // Verify existence of columns we'll be changing. | |
| 969 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 970 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "unique_id")); | |
| 971 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); | |
| 972 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id")); | |
| 973 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "type")); | |
| 974 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "card_number")); | |
| 975 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", | |
| 976 "verification_code")); | |
| 977 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); | |
| 978 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", | |
| 979 "shipping_address")); | |
| 980 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", | |
| 981 "verification_code_encrypted")); | |
| 982 | |
| 983 // Verify data in the database after the migration. | |
| 984 sql::Statement s1( | |
| 985 connection.GetUniqueStatement( | |
| 986 "SELECT guid, company_name, street_address, city, state, zipcode," | |
| 987 " country_code, date_modified " | |
| 988 "FROM autofill_profiles")); | |
| 989 ASSERT_TRUE(s1.Step()); | |
| 990 | |
| 991 AutofillProfile profile_a; | |
| 992 int64 profile_date_modified_a = 0; | |
| 993 EXPECT_NO_FATAL_FAILURE(AutofillProfile33FromStatement( | |
| 994 s1, &profile_a, &profile_date_modified_a)); | |
| 995 EXPECT_EQ(profile.guid(), profile_a.guid()); | |
| 996 EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME), | |
| 997 profile_a.GetRawInfo(autofill::COMPANY_NAME)); | |
| 998 EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE1), | |
| 999 profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE1)); | |
| 1000 EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE2), | |
| 1001 profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE2)); | |
| 1002 EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_CITY), | |
| 1003 profile_a.GetRawInfo(autofill::ADDRESS_HOME_CITY)); | |
| 1004 EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_STATE), | |
| 1005 profile_a.GetRawInfo(autofill::ADDRESS_HOME_STATE)); | |
| 1006 EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_ZIP), | |
| 1007 profile_a.GetRawInfo(autofill::ADDRESS_HOME_ZIP)); | |
| 1008 EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY), | |
| 1009 profile_a.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY)); | |
| 1010 EXPECT_EQ(profile_date_modified, profile_date_modified_a); | |
| 1011 | |
| 1012 sql::Statement s2( | |
| 1013 connection.GetUniqueStatement( | |
| 1014 "SELECT guid, name_on_card, expiration_month, " | |
| 1015 "expiration_year, card_number_encrypted, date_modified " | |
| 1016 "FROM credit_cards")); | |
| 1017 ASSERT_TRUE(s2.Step()); | |
| 1018 | |
| 1019 CreditCard credit_card_a; | |
| 1020 base::string16 cc_label_a; | |
| 1021 std::string cc_number_encrypted_a; | |
| 1022 int64 cc_date_modified_a = 0; | |
| 1023 EXPECT_NO_FATAL_FAILURE(CreditCard32FromStatement(s2, | |
| 1024 &credit_card_a, | |
| 1025 &cc_number_encrypted_a, | |
| 1026 &cc_date_modified_a)); | |
| 1027 EXPECT_EQ(credit_card, credit_card_a); | |
| 1028 EXPECT_EQ(cc_label, cc_label_a); | |
| 1029 EXPECT_EQ(cc_number_encrypted, cc_number_encrypted_a); | |
| 1030 EXPECT_EQ(cc_date_modified, cc_date_modified_a); | |
| 1031 } | |
| 1032 } | |
| 1033 | |
| 1034 // Factor |autofill_profiles| address information separately from name, email, | |
| 1035 // and phone. | |
| 1036 TEST_F(WebDatabaseMigrationTest, MigrateVersion32ToCurrent) { | |
| 1037 // Initialize the database. | |
| 1038 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_32.sql"))); | |
| 1039 | |
| 1040 // Verify pre-conditions. These are expectations for version 32 of the | |
| 1041 // database. | |
| 1042 { | |
| 1043 sql::Connection connection; | |
| 1044 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1045 | |
| 1046 // Verify existence of columns we'll be changing. | |
| 1047 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 1048 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "label")); | |
| 1049 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "first_name")); | |
| 1050 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "middle_name")); | |
| 1051 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "last_name")); | |
| 1052 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "email")); | |
| 1053 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1054 "company_name")); | |
| 1055 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1056 "address_line_1")); | |
| 1057 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1058 "address_line_2")); | |
| 1059 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); | |
| 1060 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); | |
| 1061 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); | |
| 1062 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); | |
| 1063 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "phone")); | |
| 1064 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "fax")); | |
| 1065 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1066 "date_modified")); | |
| 1067 | |
| 1068 EXPECT_FALSE(connection.DoesTableExist("autofill_profile_names")); | |
| 1069 EXPECT_FALSE(connection.DoesTableExist("autofill_profile_emails")); | |
| 1070 EXPECT_FALSE(connection.DoesTableExist("autofill_profile_phones")); | |
| 1071 | |
| 1072 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "label")); | |
| 1073 } | |
| 1074 | |
| 1075 DoMigration(); | |
| 1076 | |
| 1077 // Verify post-conditions. These are expectations for current version of the | |
| 1078 // database. | |
| 1079 { | |
| 1080 sql::Connection connection; | |
| 1081 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1082 | |
| 1083 // Check version. | |
| 1084 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1085 | |
| 1086 // Verify changes to columns. | |
| 1087 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 1088 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "label")); | |
| 1089 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "first_name")); | |
| 1090 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", | |
| 1091 "middle_name")); | |
| 1092 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "last_name")); | |
| 1093 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "email")); | |
| 1094 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1095 "company_name")); | |
| 1096 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1097 "street_address")); | |
| 1098 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); | |
| 1099 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); | |
| 1100 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); | |
| 1101 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1102 "country_code")); | |
| 1103 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "phone")); | |
| 1104 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "fax")); | |
| 1105 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1106 "date_modified")); | |
| 1107 | |
| 1108 // New "names" table. | |
| 1109 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", "guid")); | |
| 1110 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", | |
| 1111 "first_name")); | |
| 1112 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", | |
| 1113 "middle_name")); | |
| 1114 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", | |
| 1115 "last_name")); | |
| 1116 | |
| 1117 // New "emails" table. | |
| 1118 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "guid")); | |
| 1119 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "email")); | |
| 1120 | |
| 1121 // New "phones" table. | |
| 1122 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "guid")); | |
| 1123 EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", | |
| 1124 "number")); | |
| 1125 | |
| 1126 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "label")); | |
| 1127 | |
| 1128 // Verify data in the database after the migration. | |
| 1129 sql::Statement s1( | |
| 1130 connection.GetUniqueStatement( | |
| 1131 "SELECT guid, company_name, street_address, city, state, zipcode, " | |
| 1132 " country_code, date_modified " | |
| 1133 "FROM autofill_profiles")); | |
| 1134 | |
| 1135 // John Doe. | |
| 1136 ASSERT_TRUE(s1.Step()); | |
| 1137 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s1.ColumnString(0)); | |
| 1138 EXPECT_EQ(ASCIIToUTF16("Doe Enterprises"), s1.ColumnString16(1)); | |
| 1139 EXPECT_EQ(ASCIIToUTF16("1 Main St\n" | |
| 1140 "Apt 1"), | |
| 1141 s1.ColumnString16(2)); | |
| 1142 EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); | |
| 1143 EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); | |
| 1144 EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); | |
| 1145 EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); | |
| 1146 EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); | |
| 1147 | |
| 1148 // John P. Doe. | |
| 1149 // Gets merged during migration from 35 to 37 due to multi-valued fields. | |
| 1150 | |
| 1151 // Dave Smith. | |
| 1152 ASSERT_TRUE(s1.Step()); | |
| 1153 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s1.ColumnString(0)); | |
| 1154 EXPECT_EQ(base::string16(), s1.ColumnString16(1)); | |
| 1155 EXPECT_EQ(ASCIIToUTF16("2 Main Street"), s1.ColumnString16(2)); | |
| 1156 EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); | |
| 1157 EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); | |
| 1158 EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); | |
| 1159 EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); | |
| 1160 EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); | |
| 1161 | |
| 1162 // Dave Smith (Part 2). | |
| 1163 ASSERT_TRUE(s1.Step()); | |
| 1164 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s1.ColumnString(0)); | |
| 1165 EXPECT_EQ(base::string16(), s1.ColumnString16(1)); | |
| 1166 EXPECT_EQ(ASCIIToUTF16("2 Main St"), s1.ColumnString16(2)); | |
| 1167 EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); | |
| 1168 EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); | |
| 1169 EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); | |
| 1170 EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); | |
| 1171 EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); | |
| 1172 | |
| 1173 // Alfred E Newman. | |
| 1174 // Gets culled during migration from 35 to 36 due to incomplete address. | |
| 1175 | |
| 1176 // 3 Main St. | |
| 1177 ASSERT_TRUE(s1.Step()); | |
| 1178 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s1.ColumnString(0)); | |
| 1179 EXPECT_EQ(base::string16(), s1.ColumnString16(1)); | |
| 1180 EXPECT_EQ(ASCIIToUTF16("3 Main St"), s1.ColumnString16(2)); | |
| 1181 EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); | |
| 1182 EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); | |
| 1183 EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); | |
| 1184 EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); | |
| 1185 EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); | |
| 1186 | |
| 1187 // That should be all. | |
| 1188 EXPECT_FALSE(s1.Step()); | |
| 1189 | |
| 1190 sql::Statement s2( | |
| 1191 connection.GetUniqueStatement( | |
| 1192 "SELECT guid, first_name, middle_name, last_name " | |
| 1193 "FROM autofill_profile_names")); | |
| 1194 | |
| 1195 // John Doe. | |
| 1196 ASSERT_TRUE(s2.Step()); | |
| 1197 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); | |
| 1198 EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); | |
| 1199 EXPECT_EQ(base::string16(), s2.ColumnString16(2)); | |
| 1200 EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); | |
| 1201 | |
| 1202 // John P. Doe. Note same guid as above due to merging of multi-valued | |
| 1203 // fields. | |
| 1204 ASSERT_TRUE(s2.Step()); | |
| 1205 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); | |
| 1206 EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); | |
| 1207 EXPECT_EQ(ASCIIToUTF16("P."), s2.ColumnString16(2)); | |
| 1208 EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); | |
| 1209 | |
| 1210 // Dave Smith. | |
| 1211 ASSERT_TRUE(s2.Step()); | |
| 1212 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s2.ColumnString(0)); | |
| 1213 EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); | |
| 1214 EXPECT_EQ(base::string16(), s2.ColumnString16(2)); | |
| 1215 EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); | |
| 1216 | |
| 1217 // Dave Smith (Part 2). | |
| 1218 ASSERT_TRUE(s2.Step()); | |
| 1219 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s2.ColumnString(0)); | |
| 1220 EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); | |
| 1221 EXPECT_EQ(base::string16(), s2.ColumnString16(2)); | |
| 1222 EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); | |
| 1223 | |
| 1224 // Alfred E Newman. | |
| 1225 // Gets culled during migration from 35 to 36 due to incomplete address. | |
| 1226 | |
| 1227 // 3 Main St. | |
| 1228 ASSERT_TRUE(s2.Step()); | |
| 1229 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s2.ColumnString(0)); | |
| 1230 EXPECT_EQ(base::string16(), s2.ColumnString16(1)); | |
| 1231 EXPECT_EQ(base::string16(), s2.ColumnString16(2)); | |
| 1232 EXPECT_EQ(base::string16(), s2.ColumnString16(3)); | |
| 1233 | |
| 1234 // Should be all. | |
| 1235 EXPECT_FALSE(s2.Step()); | |
| 1236 | |
| 1237 sql::Statement s3( | |
| 1238 connection.GetUniqueStatement( | |
| 1239 "SELECT guid, email " | |
| 1240 "FROM autofill_profile_emails")); | |
| 1241 | |
| 1242 // John Doe. | |
| 1243 ASSERT_TRUE(s3.Step()); | |
| 1244 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s3.ColumnString(0)); | |
| 1245 EXPECT_EQ(ASCIIToUTF16("john@doe.com"), s3.ColumnString16(1)); | |
| 1246 | |
| 1247 // John P. Doe. | |
| 1248 // Gets culled during migration from 35 to 37 due to merging of John Doe and | |
| 1249 // John P. Doe addresses. | |
| 1250 | |
| 1251 // 2 Main Street. | |
| 1252 ASSERT_TRUE(s3.Step()); | |
| 1253 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s3.ColumnString(0)); | |
| 1254 EXPECT_EQ(base::string16(), s3.ColumnString16(1)); | |
| 1255 | |
| 1256 // 2 Main St. | |
| 1257 ASSERT_TRUE(s3.Step()); | |
| 1258 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s3.ColumnString(0)); | |
| 1259 EXPECT_EQ(base::string16(), s3.ColumnString16(1)); | |
| 1260 | |
| 1261 // Alfred E Newman. | |
| 1262 // Gets culled during migration from 35 to 36 due to incomplete address. | |
| 1263 | |
| 1264 // 3 Main St. | |
| 1265 ASSERT_TRUE(s3.Step()); | |
| 1266 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s3.ColumnString(0)); | |
| 1267 EXPECT_EQ(base::string16(), s3.ColumnString16(1)); | |
| 1268 | |
| 1269 // Should be all. | |
| 1270 EXPECT_FALSE(s3.Step()); | |
| 1271 | |
| 1272 sql::Statement s4( | |
| 1273 connection.GetUniqueStatement( | |
| 1274 "SELECT guid, number " | |
| 1275 "FROM autofill_profile_phones")); | |
| 1276 | |
| 1277 // John Doe phone. | |
| 1278 ASSERT_TRUE(s4.Step()); | |
| 1279 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); | |
| 1280 EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(1)); | |
| 1281 | |
| 1282 // John Doe fax. | |
| 1283 // Gets culled after fax type removed. | |
| 1284 | |
| 1285 // John P. Doe phone. | |
| 1286 // Gets culled during migration from 35 to 37 due to merging of John Doe and | |
| 1287 // John P. Doe addresses. | |
| 1288 | |
| 1289 // John P. Doe fax. | |
| 1290 // Gets culled during migration from 35 to 37 due to merging of John Doe and | |
| 1291 // John P. Doe addresses. | |
| 1292 | |
| 1293 // 2 Main Street phone. | |
| 1294 ASSERT_TRUE(s4.Step()); | |
| 1295 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); | |
| 1296 EXPECT_EQ(base::string16(), s4.ColumnString16(1)); | |
| 1297 | |
| 1298 // 2 Main Street fax. | |
| 1299 // Gets culled after fax type removed. | |
| 1300 | |
| 1301 // 2 Main St phone. | |
| 1302 ASSERT_TRUE(s4.Step()); | |
| 1303 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); | |
| 1304 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. | |
| 1305 EXPECT_EQ(base::string16(), s4.ColumnString16(2)); | |
| 1306 | |
| 1307 // 2 Main St fax. | |
| 1308 // Gets culled after fax type removed. | |
| 1309 | |
| 1310 // Note no phone or fax for Alfred E Newman. | |
| 1311 | |
| 1312 // 3 Main St phone. | |
| 1313 ASSERT_TRUE(s4.Step()); | |
| 1314 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); | |
| 1315 EXPECT_EQ(base::string16(), s4.ColumnString16(1)); | |
| 1316 | |
| 1317 // 2 Main St fax. | |
| 1318 // Gets culled after fax type removed. | |
| 1319 | |
| 1320 // Should be all. | |
| 1321 EXPECT_FALSE(s4.Step()); | |
| 1322 } | |
| 1323 } | |
| 1324 | |
| 1325 // Adds a column for the autofill profile's country code. | |
| 1326 TEST_F(WebDatabaseMigrationTest, MigrateVersion33ToCurrent) { | |
| 1327 // Initialize the database. | |
| 1328 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_33.sql"))); | |
| 1329 | |
| 1330 // Verify pre-conditions. These are expectations for version 33 of the | |
| 1331 // database. | |
| 1332 { | |
| 1333 sql::Connection connection; | |
| 1334 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1335 | |
| 1336 EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", | |
| 1337 "country_code")); | |
| 1338 | |
| 1339 // Check that the country value is the one we expect. | |
| 1340 sql::Statement s( | |
| 1341 connection.GetUniqueStatement("SELECT country FROM autofill_profiles")); | |
| 1342 | |
| 1343 ASSERT_TRUE(s.Step()); | |
| 1344 std::string country = s.ColumnString(0); | |
| 1345 EXPECT_EQ("United States", country); | |
| 1346 } | |
| 1347 | |
| 1348 DoMigration(); | |
| 1349 | |
| 1350 // Verify post-conditions. These are expectations for current version of the | |
| 1351 // database. | |
| 1352 { | |
| 1353 sql::Connection connection; | |
| 1354 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1355 | |
| 1356 // Check version. | |
| 1357 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1358 | |
| 1359 ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1360 "country_code")); | |
| 1361 | |
| 1362 // Check that the country code is properly converted. | |
| 1363 sql::Statement s(connection.GetUniqueStatement( | |
| 1364 "SELECT country_code FROM autofill_profiles")); | |
| 1365 | |
| 1366 ASSERT_TRUE(s.Step()); | |
| 1367 std::string country_code = s.ColumnString(0); | |
| 1368 EXPECT_EQ("US", country_code); | |
| 1369 } | |
| 1370 } | |
| 1371 | |
| 1372 // Cleans up bad country code "UK" in favor of good country code "GB". | |
| 1373 TEST_F(WebDatabaseMigrationTest, MigrateVersion34ToCurrent) { | |
| 1374 // Initialize the database. | |
| 1375 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_34.sql"))); | |
| 1376 | |
| 1377 // Verify pre-conditions. These are expectations for version 34 of the | |
| 1378 // database. | |
| 1379 { | |
| 1380 sql::Connection connection; | |
| 1381 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1382 | |
| 1383 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1384 "country_code")); | |
| 1385 | |
| 1386 // Check that the country_code value is the one we expect. | |
| 1387 sql::Statement s( | |
| 1388 connection.GetUniqueStatement("SELECT country_code " | |
| 1389 "FROM autofill_profiles")); | |
| 1390 | |
| 1391 ASSERT_TRUE(s.Step()); | |
| 1392 std::string country_code = s.ColumnString(0); | |
| 1393 EXPECT_EQ("UK", country_code); | |
| 1394 | |
| 1395 // Should have only one. | |
| 1396 ASSERT_FALSE(s.Step()); | |
| 1397 } | |
| 1398 | |
| 1399 DoMigration(); | |
| 1400 | |
| 1401 // Verify post-conditions. These are expectations for current version of the | |
| 1402 // database. | |
| 1403 { | |
| 1404 sql::Connection connection; | |
| 1405 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1406 | |
| 1407 // Check version. | |
| 1408 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1409 | |
| 1410 ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", | |
| 1411 "country_code")); | |
| 1412 | |
| 1413 // Check that the country_code code is properly converted. | |
| 1414 sql::Statement s(connection.GetUniqueStatement( | |
| 1415 "SELECT country_code FROM autofill_profiles")); | |
| 1416 | |
| 1417 ASSERT_TRUE(s.Step()); | |
| 1418 std::string country_code = s.ColumnString(0); | |
| 1419 EXPECT_EQ("GB", country_code); | |
| 1420 | |
| 1421 // Should have only one. | |
| 1422 ASSERT_FALSE(s.Step()); | |
| 1423 } | |
| 1424 } | |
| 1425 | |
| 1426 // Cleans up invalid profiles based on more agressive merging. Filters out | |
| 1427 // profiles that are subsets of other profiles, and profiles with invalid email, | |
| 1428 // state, and incomplete address. | |
| 1429 TEST_F(WebDatabaseMigrationTest, MigrateVersion35ToCurrent) { | |
| 1430 // Initialize the database. | |
| 1431 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_35.sql"))); | |
| 1432 | |
| 1433 // Verify pre-conditions. These are expectations for version 34 of the | |
| 1434 // database. | |
| 1435 { | |
| 1436 sql::Connection connection; | |
| 1437 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1438 | |
| 1439 EXPECT_FALSE(connection.DoesTableExist("autofill_profiles_trash")); | |
| 1440 ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 1441 | |
| 1442 // Check that there are 6 profiles prior to merge. | |
| 1443 sql::Statement s( | |
| 1444 connection.GetUniqueStatement("SELECT guid FROM autofill_profiles")); | |
| 1445 int i = 0; | |
| 1446 while (s.Step()) | |
| 1447 ++i; | |
| 1448 EXPECT_EQ(6, i); | |
| 1449 } | |
| 1450 | |
| 1451 DoMigration(); | |
| 1452 | |
| 1453 // Verify post-conditions. These are expectations for current version of the | |
| 1454 // database. | |
| 1455 { | |
| 1456 sql::Connection connection; | |
| 1457 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1458 | |
| 1459 // Check version. | |
| 1460 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1461 | |
| 1462 ASSERT_TRUE(connection.DoesTableExist("autofill_profiles_trash")); | |
| 1463 ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles_trash", "guid")); | |
| 1464 ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); | |
| 1465 | |
| 1466 // Verify data in the database after the migration. | |
| 1467 sql::Statement s1( | |
| 1468 connection.GetUniqueStatement( | |
| 1469 "SELECT guid, company_name, street_address, city, state, zipcode," | |
| 1470 " country_code, date_modified " | |
| 1471 "FROM autofill_profiles")); | |
| 1472 | |
| 1473 // John Doe. | |
| 1474 ASSERT_TRUE(s1.Step()); | |
| 1475 EXPECT_EQ("00000000-0000-0000-0000-000000000001", s1.ColumnString(0)); | |
| 1476 EXPECT_EQ(ASCIIToUTF16("Acme Inc."), s1.ColumnString16(1)); | |
| 1477 EXPECT_EQ(ASCIIToUTF16("1 Main Street\n" | |
| 1478 "Apt 2"), | |
| 1479 s1.ColumnString16(2)); | |
| 1480 EXPECT_EQ(ASCIIToUTF16("San Francisco"), s1.ColumnString16(3)); | |
| 1481 EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); | |
| 1482 EXPECT_EQ(ASCIIToUTF16("94102"), s1.ColumnString16(5)); | |
| 1483 EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); | |
| 1484 EXPECT_EQ(1300131704, s1.ColumnInt64(7)); | |
| 1485 | |
| 1486 // That should be it. | |
| 1487 ASSERT_FALSE(s1.Step()); | |
| 1488 | |
| 1489 // Check that there 5 trashed profile after the merge. | |
| 1490 sql::Statement s2( | |
| 1491 connection.GetUniqueStatement("SELECT guid " | |
| 1492 "FROM autofill_profiles_trash")); | |
| 1493 ASSERT_TRUE(s2.Step()); | |
| 1494 EXPECT_EQ("00000000-0000-0000-0000-000000000002", s2.ColumnString(0)); | |
| 1495 | |
| 1496 ASSERT_TRUE(s2.Step()); | |
| 1497 EXPECT_EQ("00000000-0000-0000-0000-000000000003", s2.ColumnString(0)); | |
| 1498 | |
| 1499 ASSERT_TRUE(s2.Step()); | |
| 1500 EXPECT_EQ("00000000-0000-0000-0000-000000000004", s2.ColumnString(0)); | |
| 1501 | |
| 1502 ASSERT_TRUE(s2.Step()); | |
| 1503 EXPECT_EQ("00000000-0000-0000-0000-000000000005", s2.ColumnString(0)); | |
| 1504 | |
| 1505 ASSERT_TRUE(s2.Step()); | |
| 1506 EXPECT_EQ("00000000-0000-0000-0000-000000000006", s2.ColumnString(0)); | |
| 1507 | |
| 1508 // That should be it. | |
| 1509 ASSERT_FALSE(s2.Step()); | |
| 1510 } | |
| 1511 } | |
| 1512 | |
| 1513 // Tests that the |keywords| |last_modified| column gets added to the schema for | |
| 1514 // a version 37 database. | |
| 1515 TEST_F(WebDatabaseMigrationTest, MigrateVersion37ToCurrent) { | |
| 1516 // This schema is taken from a build prior to the addition of the |keywords| | |
| 1517 // |last_modified| column. | |
| 1518 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_37.sql"))); | |
| 1519 | |
| 1520 // Verify pre-conditions. These are expectations for version 37 of the | |
| 1521 // database. | |
| 1522 { | |
| 1523 sql::Connection connection; | |
| 1524 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1525 | |
| 1526 // Columns existing and not existing before current version. | |
| 1527 ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 1528 ASSERT_FALSE(connection.DoesColumnExist("keywords", "last_modified")); | |
| 1529 } | |
| 1530 | |
| 1531 DoMigration(); | |
| 1532 | |
| 1533 // Verify post-conditions. These are expectations for current version of the | |
| 1534 // database. | |
| 1535 { | |
| 1536 sql::Connection connection; | |
| 1537 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1538 | |
| 1539 // Check version. | |
| 1540 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1541 | |
| 1542 // |keywords| |last_modified| column should have been added. | |
| 1543 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 1544 EXPECT_TRUE(connection.DoesColumnExist("keywords", "last_modified")); | |
| 1545 } | |
| 1546 } | |
| 1547 | |
| 1548 // Tests that the |keywords| |sync_guid| column gets added to the schema for | |
| 1549 // a version 38 database. | |
| 1550 TEST_F(WebDatabaseMigrationTest, MigrateVersion38ToCurrent) { | |
| 1551 // This schema is taken from a build prior to the addition of the |keywords| | |
| 1552 // |sync_guid| column. | |
| 1553 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_38.sql"))); | |
| 1554 | |
| 1555 // Verify pre-conditions. These are expectations for version 38 of the | |
| 1556 // database. | |
| 1557 { | |
| 1558 sql::Connection connection; | |
| 1559 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1560 | |
| 1561 // Columns existing and not existing before current version. | |
| 1562 ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 1563 ASSERT_FALSE(connection.DoesColumnExist("keywords", "sync_guid")); | |
| 1564 } | |
| 1565 | |
| 1566 DoMigration(); | |
| 1567 | |
| 1568 // Verify post-conditions. These are expectations for current version of the | |
| 1569 // database. | |
| 1570 { | |
| 1571 sql::Connection connection; | |
| 1572 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1573 | |
| 1574 // Check version. | |
| 1575 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1576 | |
| 1577 // |keywords| |sync_guid| column should have been added. | |
| 1578 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | |
| 1579 EXPECT_TRUE(connection.DoesColumnExist("keywords", "sync_guid")); | |
| 1580 } | |
| 1581 } | |
| 1582 | |
| 1583 // Tests that no backup data is added to a version 39 database. | |
| 1584 TEST_F(WebDatabaseMigrationTest, MigrateVersion39ToCurrent) { | |
| 1585 // This schema is taken from a build prior to the addition of the default | |
| 1586 // search provider backup field to the meta table. | |
| 1587 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_39.sql"))); | |
| 1588 | |
| 1589 // Verify pre-conditions. These are expectations for version 39 of the | |
| 1590 // database. | |
| 1591 { | |
| 1592 sql::Connection connection; | |
| 1593 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1594 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1595 | |
| 1596 sql::MetaTable meta_table; | |
| 1597 ASSERT_TRUE(meta_table.Init(&connection, 39, 39)); | |
| 1598 | |
| 1599 int64 default_search_provider_id = 0; | |
| 1600 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1601 &default_search_provider_id)); | |
| 1602 | |
| 1603 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1604 } | |
| 1605 | |
| 1606 DoMigration(); | |
| 1607 | |
| 1608 // Verify post-conditions. These are expectations for current version of the | |
| 1609 // database. | |
| 1610 { | |
| 1611 sql::Connection connection; | |
| 1612 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1613 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | 233 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); |
| 1614 | 234 |
| 1615 // Check version. | 235 // Check version. |
| 1616 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | 236 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); |
| 1617 | |
| 1618 sql::MetaTable meta_table; | |
| 1619 ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, | |
| 1620 kCurrentTestedVersionNumber)); | |
| 1621 | |
| 1622 int64 default_search_provider_id = 0; | |
| 1623 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1624 &default_search_provider_id)); | |
| 1625 EXPECT_NE(0, default_search_provider_id); | |
| 1626 | |
| 1627 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1628 } | |
| 1629 } | |
| 1630 | |
| 1631 // Tests that the backup data is removed from the database. | |
| 1632 TEST_F(WebDatabaseMigrationTest, MigrateVersion40ToCurrent) { | |
| 1633 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_40.sql"))); | |
| 1634 | |
| 1635 // Verify pre-conditions. These are expectations for version 40 of the | |
| 1636 // database. | |
| 1637 { | |
| 1638 sql::Connection connection; | |
| 1639 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1640 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1641 | |
| 1642 sql::MetaTable meta_table; | |
| 1643 ASSERT_TRUE(meta_table.Init(&connection, 40, 40)); | |
| 1644 | |
| 1645 int64 default_search_provider_id = 0; | |
| 1646 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1647 &default_search_provider_id)); | |
| 1648 | |
| 1649 EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); | |
| 1650 } | |
| 1651 | |
| 1652 DoMigration(); | |
| 1653 | |
| 1654 // Verify post-conditions. These are expectations for current version of the | |
| 1655 // database. | |
| 1656 { | |
| 1657 sql::Connection connection; | |
| 1658 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1659 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1660 | |
| 1661 // Check version. | |
| 1662 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1663 | |
| 1664 sql::MetaTable meta_table; | |
| 1665 ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, | |
| 1666 kCurrentTestedVersionNumber)); | |
| 1667 | |
| 1668 int64 default_search_provider_id = 0; | |
| 1669 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1670 &default_search_provider_id)); | |
| 1671 EXPECT_NE(0, default_search_provider_id); | |
| 1672 | |
| 1673 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1674 } | |
| 1675 } | |
| 1676 | |
| 1677 // Tests that the backup data is removed from the database. | |
| 1678 TEST_F(WebDatabaseMigrationTest, MigrateVersion41ToCurrent) { | |
| 1679 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_41.sql"))); | |
| 1680 | |
| 1681 // Verify pre-conditions. These are expectations for version 41 of the | |
| 1682 // database. | |
| 1683 { | |
| 1684 sql::Connection connection; | |
| 1685 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1686 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1687 | |
| 1688 sql::MetaTable meta_table; | |
| 1689 ASSERT_TRUE(meta_table.Init(&connection, 41, 41)); | |
| 1690 | |
| 1691 int64 default_search_provider_id = 0; | |
| 1692 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1693 &default_search_provider_id)); | |
| 1694 | |
| 1695 EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); | |
| 1696 } | |
| 1697 | |
| 1698 DoMigration(); | |
| 1699 | |
| 1700 // Verify post-conditions. These are expectations for current version of the | |
| 1701 // database. | |
| 1702 { | |
| 1703 sql::Connection connection; | |
| 1704 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1705 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1706 | |
| 1707 // Check version. | |
| 1708 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1709 | |
| 1710 sql::MetaTable meta_table; | |
| 1711 ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, | |
| 1712 kCurrentTestedVersionNumber)); | |
| 1713 | |
| 1714 int64 default_search_provider_id = 0; | |
| 1715 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1716 &default_search_provider_id)); | |
| 1717 EXPECT_NE(0, default_search_provider_id); | |
| 1718 | |
| 1719 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1720 } | |
| 1721 } | |
| 1722 | |
| 1723 // Tests that the backup data is removed from the database. | |
| 1724 TEST_F(WebDatabaseMigrationTest, MigrateVersion42ToCurrent) { | |
| 1725 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_42.sql"))); | |
| 1726 | |
| 1727 // Verify pre-conditions. These are expectations for version 42 of the | |
| 1728 // database. | |
| 1729 { | |
| 1730 sql::Connection connection; | |
| 1731 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1732 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1733 | |
| 1734 sql::MetaTable meta_table; | |
| 1735 ASSERT_TRUE(meta_table.Init(&connection, 42, 42)); | |
| 1736 | |
| 1737 int64 default_search_provider_id = 0; | |
| 1738 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1739 &default_search_provider_id)); | |
| 1740 | |
| 1741 EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); | |
| 1742 | |
| 1743 EXPECT_FALSE(connection.DoesTableExist("keywords_backup")); | |
| 1744 } | |
| 1745 | |
| 1746 DoMigration(); | |
| 1747 | |
| 1748 // Verify post-conditions. These are expectations for current version of the | |
| 1749 // database. | |
| 1750 { | |
| 1751 sql::Connection connection; | |
| 1752 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1753 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1754 | |
| 1755 // Check version. | |
| 1756 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1757 | |
| 1758 sql::MetaTable meta_table; | |
| 1759 ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, | |
| 1760 kCurrentTestedVersionNumber)); | |
| 1761 | |
| 1762 int64 default_search_provider_id = 0; | |
| 1763 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1764 &default_search_provider_id)); | |
| 1765 EXPECT_NE(0, default_search_provider_id); | |
| 1766 | |
| 1767 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1768 } | |
| 1769 } | |
| 1770 | |
| 1771 // Tests that the backup data is removed from the database. | |
| 1772 TEST_F(WebDatabaseMigrationTest, MigrateVersion43ToCurrent) { | |
| 1773 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_43.sql"))); | |
| 1774 | |
| 1775 int64 previous_default_search_provider_id; | |
| 1776 | |
| 1777 // Verify pre-conditions. These are expectations for version 43 of the | |
| 1778 // database. | |
| 1779 { | |
| 1780 sql::Connection connection; | |
| 1781 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1782 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1783 | |
| 1784 sql::MetaTable meta_table; | |
| 1785 ASSERT_TRUE(meta_table.Init(&connection, 43, 43)); | |
| 1786 | |
| 1787 int64 default_search_provider_id = 0; | |
| 1788 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1789 &default_search_provider_id)); | |
| 1790 EXPECT_NE(default_search_provider_id, 0); | |
| 1791 previous_default_search_provider_id = default_search_provider_id; | |
| 1792 | |
| 1793 EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); | |
| 1794 EXPECT_TRUE(connection.DoesTableExist("keywords_backup")); | |
| 1795 } | |
| 1796 | |
| 1797 DoMigration(); | |
| 1798 | |
| 1799 // Verify post-conditions. These are expectations for current version of the | |
| 1800 // database. | |
| 1801 { | |
| 1802 sql::Connection connection; | |
| 1803 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1804 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1805 | |
| 1806 // Check version. | |
| 1807 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1808 | |
| 1809 sql::MetaTable meta_table; | |
| 1810 ASSERT_TRUE(meta_table.Init( | |
| 1811 &connection, | |
| 1812 kCurrentTestedVersionNumber, | |
| 1813 kCurrentTestedVersionNumber)); | |
| 1814 | |
| 1815 int64 default_search_provider_id = 0; | |
| 1816 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 1817 &default_search_provider_id)); | |
| 1818 // Default search provider ID should not change. | |
| 1819 EXPECT_EQ(previous_default_search_provider_id, default_search_provider_id); | |
| 1820 | |
| 1821 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1822 } | |
| 1823 } | |
| 1824 | |
| 1825 // Tests that the |autogenerate_keyword| and |logo_id| columns get removed from | |
| 1826 // the keyword table schema for a version 45 database. | |
| 1827 TEST_F(WebDatabaseMigrationTest, MigrateVersion44ToCurrent) { | |
| 1828 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_44.sql"))); | |
| 1829 | |
| 1830 // Verify pre-conditions. These are expectations for version 44 of the | |
| 1831 // database. | |
| 1832 { | |
| 1833 sql::Connection connection; | |
| 1834 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1835 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1836 | |
| 1837 sql::MetaTable meta_table; | |
| 1838 ASSERT_TRUE(meta_table.Init(&connection, 44, 44)); | |
| 1839 | |
| 1840 ASSERT_TRUE(connection.DoesColumnExist("keywords", "autogenerate_keyword")); | |
| 1841 ASSERT_TRUE(connection.DoesColumnExist("keywords", "logo_id")); | |
| 1842 } | |
| 1843 | |
| 1844 DoMigration(); | |
| 1845 | |
| 1846 // Verify post-conditions. These are expectations for current version of the | |
| 1847 // database. | |
| 1848 { | |
| 1849 sql::Connection connection; | |
| 1850 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1851 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1852 | |
| 1853 // Check version. | |
| 1854 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1855 | |
| 1856 sql::MetaTable meta_table; | |
| 1857 ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, | |
| 1858 kCurrentTestedVersionNumber)); | |
| 1859 | |
| 1860 // We should have removed this obsolete key. | |
| 1861 std::string default_search_provider_backup; | |
| 1862 EXPECT_FALSE(meta_table.GetValue("Default Search Provider Backup", | |
| 1863 &default_search_provider_backup)); | |
| 1864 | |
| 1865 // Two columns should have been removed. | |
| 1866 EXPECT_FALSE(connection.DoesColumnExist("keywords", | |
| 1867 "autogenerate_keyword")); | |
| 1868 EXPECT_FALSE(connection.DoesColumnExist("keywords", "logo_id")); | |
| 1869 | |
| 1870 // Backup data should have been removed. | |
| 1871 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 1872 } | |
| 1873 } | |
| 1874 | |
| 1875 // Previously, this tested that the web_intents and web_intents_defaults tables | |
| 1876 // were modified to include "scheme" columns. Since the web_intents and | |
| 1877 // web_intents_defaults tables are now obsolete, this test checks to ensure that | |
| 1878 // they are properly removed. | |
| 1879 TEST_F(WebDatabaseMigrationTest, MigrateVersion45ToCurrent) { | |
| 1880 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_45.sql"))); | |
| 1881 | |
| 1882 // Verify pre-conditions. These are expectations for version 45 of the | |
| 1883 // database. | |
| 1884 { | |
| 1885 sql::Connection connection; | |
| 1886 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1887 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1888 | |
| 1889 sql::MetaTable meta_table; | |
| 1890 ASSERT_TRUE(meta_table.Init(&connection, 45, 45)); | |
| 1891 | |
| 1892 ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents")); | |
| 1893 ASSERT_FALSE(connection.DoesColumnExist( | |
| 1894 "scheme", "web_intents_defaults")); | |
| 1895 } | |
| 1896 | |
| 1897 DoMigration(); | |
| 1898 | |
| 1899 // Verify post-conditions. These are expectations for current version of the | |
| 1900 // database. | |
| 1901 { | |
| 1902 sql::Connection connection; | |
| 1903 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1904 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1905 | |
| 1906 // Check version. | |
| 1907 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1908 | |
| 1909 sql::MetaTable meta_table; | |
| 1910 ASSERT_TRUE(meta_table.Init( | |
| 1911 &connection, | |
| 1912 kCurrentTestedVersionNumber, | |
| 1913 kCurrentTestedVersionNumber)); | |
| 1914 | |
| 1915 // finally ensure the migration code cleaned up after itself | |
| 1916 EXPECT_FALSE(connection.DoesTableExist("web_intents")); | |
| 1917 EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); | |
| 1918 } | |
| 1919 } | |
| 1920 | |
| 1921 // Previously, this tested that the web_intents and web_intents_defaults tables | |
| 1922 // were modified to include "scheme" columns. Since the web_intents and | |
| 1923 // web_intents_defaults tables are now obsolete, this test checks to ensure that | |
| 1924 // they are properly removed. | |
| 1925 TEST_F(WebDatabaseMigrationTest, MigrateVersion45InvalidToCurrent) { | |
| 1926 ASSERT_NO_FATAL_FAILURE( | |
| 1927 LoadDatabase(FILE_PATH_LITERAL("version_45_invalid.sql"))); | |
| 1928 | |
| 1929 // Verify pre-conditions. These are expectations for version 45 of the | |
| 1930 // database. | |
| 1931 { | |
| 1932 sql::Connection connection; | |
| 1933 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1934 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1935 | |
| 1936 sql::MetaTable meta_table; | |
| 1937 ASSERT_TRUE(meta_table.Init(&connection, 45, 45)); | |
| 1938 | |
| 1939 ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents")); | |
| 1940 ASSERT_FALSE(connection.DoesColumnExist( | |
| 1941 "scheme", "web_intents_defaults")); | |
| 1942 } | |
| 1943 | |
| 1944 DoMigration(); | |
| 1945 | |
| 1946 // Verify post-conditions. These are expectations for current version of the | |
| 1947 // database. | |
| 1948 { | |
| 1949 sql::Connection connection; | |
| 1950 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1951 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1952 | |
| 1953 // Check version. | |
| 1954 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1955 | |
| 1956 sql::MetaTable meta_table; | |
| 1957 ASSERT_TRUE(meta_table.Init( | |
| 1958 &connection, | |
| 1959 kCurrentTestedVersionNumber, | |
| 1960 kCurrentTestedVersionNumber)); | |
| 1961 | |
| 1962 EXPECT_FALSE(connection.DoesTableExist("web_intents")); | |
| 1963 EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); | |
| 1964 } | |
| 1965 } | |
| 1966 | |
| 1967 // Check that current version is forced to compatible version before migration, | |
| 1968 // if the former is smaller. | |
| 1969 TEST_F(WebDatabaseMigrationTest, MigrateVersion45CompatibleToCurrent) { | |
| 1970 ASSERT_NO_FATAL_FAILURE( | |
| 1971 LoadDatabase(FILE_PATH_LITERAL("version_45_compatible.sql"))); | |
| 1972 | |
| 1973 // Verify pre-conditions. These are expectations for version 45 of the | |
| 1974 // database. | |
| 1975 { | |
| 1976 sql::Connection connection; | |
| 1977 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1978 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1979 | |
| 1980 sql::MetaTable meta_table; | |
| 1981 // Database is actually version 45 but the version field states 40. | |
| 1982 ASSERT_TRUE(meta_table.Init(&connection, 40, 45)); | |
| 1983 } | |
| 1984 | |
| 1985 DoMigration(); | |
| 1986 | |
| 1987 // Verify post-conditions. These are expectations for current version of the | |
| 1988 // database. | |
| 1989 { | |
| 1990 sql::Connection connection; | |
| 1991 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 1992 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 1993 | |
| 1994 // Check version. | |
| 1995 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 1996 EXPECT_LE(45, VersionFromConnection(&connection)); | 237 EXPECT_LE(45, VersionFromConnection(&connection)); |
| 1997 } | 238 } |
| 1998 } | 239 } |
| 1999 | 240 |
| 2000 // Tests that the |alternate_urls| column is added to the keyword table schema | 241 // Versions below 52 are deprecated. This verifies that old databases are razed. |
| 2001 // for a version 47 database. | 242 TEST_F(WebDatabaseMigrationTest, RazeDeprecatedVersionAndReinit) { |
| 2002 TEST_F(WebDatabaseMigrationTest, MigrateVersion46ToCurrent) { | |
| 2003 ASSERT_NO_FATAL_FAILURE( | |
| 2004 LoadDatabase(FILE_PATH_LITERAL("version_46.sql"))); | |
| 2005 | |
| 2006 // Verify pre-conditions. These are expectations for version 46 of the | |
| 2007 // database. | |
| 2008 { | |
| 2009 sql::Connection connection; | |
| 2010 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2011 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2012 | |
| 2013 sql::MetaTable meta_table; | |
| 2014 ASSERT_TRUE(meta_table.Init(&connection, 46, 46)); | |
| 2015 | |
| 2016 ASSERT_FALSE(connection.DoesColumnExist("keywords", "alternate_urls")); | |
| 2017 ASSERT_FALSE(connection.DoesColumnExist("keywords_backup", | |
| 2018 "alternate_urls")); | |
| 2019 } | |
| 2020 | |
| 2021 DoMigration(); | |
| 2022 | |
| 2023 // Verify post-conditions. These are expectations for current version of the | |
| 2024 // database. | |
| 2025 { | |
| 2026 sql::Connection connection; | |
| 2027 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2028 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2029 | |
| 2030 // Check version. | |
| 2031 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 2032 | |
| 2033 // A new column should have been created. | |
| 2034 EXPECT_TRUE(connection.DoesColumnExist("keywords", "alternate_urls")); | |
| 2035 } | |
| 2036 } | |
| 2037 | |
| 2038 // Tests that the backup data is removed from the database. | |
| 2039 TEST_F(WebDatabaseMigrationTest, MigrateVersion47ToCurrent) { | |
| 2040 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_47.sql"))); | |
| 2041 | |
| 2042 // Verify pre-conditions. These are expectations for version 47 of the | |
| 2043 // database. | |
| 2044 { | |
| 2045 sql::Connection connection; | |
| 2046 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2047 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2048 | |
| 2049 sql::MetaTable meta_table; | |
| 2050 ASSERT_TRUE(meta_table.Init(&connection, 47, 47)); | |
| 2051 | |
| 2052 int64 default_search_provider_id = 0; | |
| 2053 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 2054 &default_search_provider_id)); | |
| 2055 EXPECT_NE(0, default_search_provider_id); | |
| 2056 | |
| 2057 EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); | |
| 2058 EXPECT_TRUE(connection.DoesTableExist("keywords_backup")); | |
| 2059 } | |
| 2060 | |
| 2061 DoMigration(); | |
| 2062 | |
| 2063 // Verify post-conditions. These are expectations for current version of the | |
| 2064 // database. | |
| 2065 { | |
| 2066 sql::Connection connection; | |
| 2067 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2068 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2069 | |
| 2070 // Check version. | |
| 2071 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 2072 | |
| 2073 sql::MetaTable meta_table; | |
| 2074 ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, | |
| 2075 kCurrentTestedVersionNumber)); | |
| 2076 | |
| 2077 int64 default_search_provider_id = 0; | |
| 2078 EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, | |
| 2079 &default_search_provider_id)); | |
| 2080 EXPECT_NE(0, default_search_provider_id); | |
| 2081 | |
| 2082 EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); | |
| 2083 } | |
| 2084 } | |
| 2085 | |
| 2086 // Tests that the |search_terms_replacement_key| column is added to the keyword | |
| 2087 // table schema for a version 49 database. | |
| 2088 TEST_F(WebDatabaseMigrationTest, MigrateVersion48ToCurrent) { | |
| 2089 ASSERT_NO_FATAL_FAILURE( | |
| 2090 LoadDatabase(FILE_PATH_LITERAL("version_48.sql"))); | |
| 2091 | |
| 2092 // Verify pre-conditions. These are expectations for version 48 of the | |
| 2093 // database. | |
| 2094 { | |
| 2095 sql::Connection connection; | |
| 2096 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2097 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2098 | |
| 2099 sql::MetaTable meta_table; | |
| 2100 ASSERT_TRUE(meta_table.Init(&connection, 48, 48)); | |
| 2101 | |
| 2102 ASSERT_FALSE(connection.DoesColumnExist("keywords", | |
| 2103 "search_terms_replacement_key")); | |
| 2104 } | |
| 2105 | |
| 2106 DoMigration(); | |
| 2107 | |
| 2108 // Verify post-conditions. These are expectations for current version of the | |
| 2109 // database. | |
| 2110 { | |
| 2111 sql::Connection connection; | |
| 2112 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2113 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2114 | |
| 2115 // Check version. | |
| 2116 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 2117 | |
| 2118 // A new column should have been created. | |
| 2119 EXPECT_TRUE(connection.DoesColumnExist("keywords", | |
| 2120 "search_terms_replacement_key")); | |
| 2121 } | |
| 2122 } | |
| 2123 | |
| 2124 // Tests that the |origin| column is added to the autofill_profiles and | |
| 2125 // credit_cards table schemas for a version 50 database. | |
| 2126 TEST_F(WebDatabaseMigrationTest, MigrateVersion49ToCurrent) { | |
| 2127 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_49.sql"))); | |
| 2128 | |
| 2129 // Verify pre-conditions. These are expectations for version 49 of the | |
| 2130 // database. | |
| 2131 { | |
| 2132 sql::Connection connection; | |
| 2133 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2134 | |
| 2135 ASSERT_FALSE(connection.DoesColumnExist("autofill_profiles", "origin")); | |
| 2136 ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "origin")); | |
| 2137 } | |
| 2138 | |
| 2139 DoMigration(); | |
| 2140 | |
| 2141 // Verify post-conditions. These are expectations for current version of the | |
| 2142 // database. | |
| 2143 { | |
| 2144 sql::Connection connection; | |
| 2145 ASSERT_TRUE(connection.Open(GetDatabasePath())); | |
| 2146 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | |
| 2147 | |
| 2148 // Check version. | |
| 2149 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | |
| 2150 | |
| 2151 // A new column should have been created in both tables. | |
| 2152 EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "origin")); | |
| 2153 EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "origin")); | |
| 2154 } | |
| 2155 } | |
| 2156 | |
| 2157 // Tests that the columns |image_url|, |search_url_post_params|, | |
| 2158 // |suggest_url_post_params|, |instant_url_post_params|, and | |
| 2159 // |image_url_post_params| are added to the keyword table schema for a version | |
| 2160 // 50 database. | |
| 2161 TEST_F(WebDatabaseMigrationTest, MigrateVersion50ToCurrent) { | |
| 2162 ASSERT_NO_FATAL_FAILURE( | 243 ASSERT_NO_FATAL_FAILURE( |
| 2163 LoadDatabase(FILE_PATH_LITERAL("version_50.sql"))); | 244 LoadDatabase(FILE_PATH_LITERAL("version_50.sql"))); |
| 2164 | 245 |
| 2165 // Verify pre-conditions. These are expectations for version 50 of the | 246 // Verify pre-conditions. These are expectations for version 50 of the |
| 2166 // database. | 247 // database. |
| 2167 { | 248 { |
| 2168 sql::Connection connection; | 249 sql::Connection connection; |
| 2169 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 250 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
| 2170 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); | 251 ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); |
| 2171 | 252 |
| (...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2878 | 959 |
| 2879 // Check version. | 960 // Check version. |
| 2880 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | 961 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); |
| 2881 | 962 |
| 2882 EXPECT_TRUE(connection.DoesColumnExist("unmasked_credit_cards", | 963 EXPECT_TRUE(connection.DoesColumnExist("unmasked_credit_cards", |
| 2883 "use_count")); | 964 "use_count")); |
| 2884 EXPECT_TRUE(connection.DoesColumnExist("unmasked_credit_cards", | 965 EXPECT_TRUE(connection.DoesColumnExist("unmasked_credit_cards", |
| 2885 "use_date")); | 966 "use_date")); |
| 2886 } | 967 } |
| 2887 } | 968 } |
| OLD | NEW |