web_database_migration_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/guid.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/path_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/keyword_table.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/logins_table.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/token_service_table.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/web_apps_table.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_intents_table.h" 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_country.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_type.h" 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_change.h" 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_entry.h" 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_table.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::AutofillProfile; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::AutofillTable; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::CreditCard; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillProfile31FromStatement(const sql::Statement& s, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile, 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16* label, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* unique_id, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(label); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(unique_id); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *label = s.ColumnString16(0); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *unique_id = s.ColumnInt(1); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::NAME_FIRST, s.ColumnString16(2)); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::NAME_MIDDLE, s.ColumnString16(3)); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::NAME_LAST, s.ColumnString16(4)); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::EMAIL_ADDRESS, s.ColumnString16(5)); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(6)); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_LINE1, s.ColumnString16(7)); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_LINE2, s.ColumnString16(8)); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(9)); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(10)); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(11)); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetInfo( 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::ADDRESS_HOME_COUNTRY, s.ColumnString16(12), "en-US"); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(15); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid(s.ColumnString(16)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(profile->guid())); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillProfile33FromStatement(const sql::Statement& s, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid(s.ColumnString(0)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(profile->guid())); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(1)); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_LINE1, s.ColumnString16(2)); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_LINE2, s.ColumnString16(3)); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(4)); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(5)); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(6)); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetInfo( 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::ADDRESS_HOME_COUNTRY, s.ColumnString16(7), "en-US"); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(8); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreditCard31FromStatement(const sql::Statement& s, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16* label, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* unique_id, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* encrypted_number, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(credit_card); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(label); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(unique_id); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(encrypted_number); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *label = s.ColumnString16(0); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *unique_id = s.ColumnInt(1); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(2)); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_TYPE, s.ColumnString16(3)); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(5)); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo( 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(6)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int encrypted_number_len = s.ColumnByteLength(10); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (encrypted_number_len) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encrypted_number->resize(encrypted_number_len); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(&(*encrypted_number)[0], s.ColumnBlob(10), encrypted_number_len); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(12); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid(s.ColumnString(13)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(credit_card->guid())); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreditCard32FromStatement(const sql::Statement& s, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* encrypted_number, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(credit_card); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(encrypted_number); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid(s.ColumnString(0)); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(credit_card->guid())); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(1)); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(2)); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo( 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(3)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int encrypted_number_len = s.ColumnByteLength(4); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (encrypted_number_len) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encrypted_number->resize(encrypted_number_len); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(&(*encrypted_number)[0], s.ColumnBlob(4), encrypted_number_len); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(5); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CheckHasBackupData(sql::MetaTable* meta_table) { 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string value; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table->GetValue( 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup", &value)); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table->GetValue( 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup Signature", &value)); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CheckNoBackupData(const sql::Connection& connection, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::MetaTable* meta_table) { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string value; 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(meta_table->GetValue( 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup", &value)); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(meta_table->GetValue( 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup Signature", &value)); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("keywords_backup")); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // anonymous namespace 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The WebDatabaseMigrationTest encapsulates testing of database migrations. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specifically, these tests are intended to exercise any schema changes in 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the WebDatabase and data migrations that occur in 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |WebDatabase::MigrateOldVersionsAsNeeded()|. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebDatabaseMigrationTest : public testing::Test { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDatabaseMigrationTest() {} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebDatabaseMigrationTest() {} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Load the database via the WebDatabase class and migrate the database to 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the current version. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DoMigration() { 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(joi): This whole unit test file needs to stay in //chrome 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for now, as it needs to know about all the different table 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // types. Once all webdata datatypes have been componentized, this 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // could move to components_unittests. 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillTable autofill_table("en-US"); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeywordTable keyword_table; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoginsTable logins_table; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TokenServiceTable token_service_table; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAppsTable web_apps_table; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebIntentsTable web_intents_table; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebDatabase db; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&autofill_table); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&keyword_table); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&logins_table); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&token_service_table); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&web_apps_table); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&web_intents_table); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This causes the migration to occur. 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(sql::INIT_OK, db.Init(GetDatabasePath())); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Current tested version number. When adding a migration in 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |WebDatabase::MigrateOldVersionsAsNeeded()| and changing the version number 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |kCurrentVersionNumber| this value should change to reflect the new version 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // number and a new migration test added below. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kCurrentTestedVersionNumber; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath GetDatabasePath() { 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::CharType kWebDatabaseFilename[] = 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("TestWebDatabase.sqlite3"); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return temp_dir_.path().Append(base::FilePath(kWebDatabaseFilename)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The textual contents of |file| are read from 210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // "components/test/data/web_database" and returned in the string |contents|. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the file exists and is read successfully, false otherwise. 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetWebDatabaseData(const base::FilePath& file, std::string* contents) { 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath source_path; 214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PathService::Get(base::DIR_SOURCE_ROOT, &source_path); 215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("components"); 216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("test"); 217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("data"); 218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("web_database"); 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.Append(file); 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return base::PathExists(source_path) && 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch file_util::ReadFileToString(source_path, contents); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int VersionFromConnection(sql::Connection* connection) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get version. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection->GetUniqueStatement( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT value FROM meta WHERE key='version'")); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!s.Step()) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return s.ColumnInt(0); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The sql files located in "chrome/test/data/web_database" were generated by 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launching the Chromium application prior to schema change, then using the 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sqlite3 command-line application to dump the contents of the "Web Data" 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Like this: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // > .output version_nn.sql 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // > .dump 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void LoadDatabase(const base::FilePath::StringType& file); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 51; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebDatabaseMigrationTest::LoadDatabase( 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::StringType& file) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string contents; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(GetWebDatabaseData(base::FilePath(file), &contents)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Execute(contents.data())); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the all migrations from an empty database succeed. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateEmptyToCurrent) { 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that expected tables are present. 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("autofill")); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("autofill_dates")); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("autofill_profiles")); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("credit_cards")); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("keywords")); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The logins table is obsolete. (We used to store saved passwords here.) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("logins")); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("meta")); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("token_service")); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("web_app_icons")); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("web_apps")); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("web_intents")); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("web_intents_defaults")); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |credit_card| table gets added to the schema for a version 22 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// database. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion22ToCurrent) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |credit_card| table. Version 22 of the schema. Contrast this with the 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // corrupt version below. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_22.sql"))); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No |credit_card| table prior to version 23. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "guid")); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |credit_card| table now exists. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |credit_card| table gets added to the schema for a corrupt 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version 22 database. The corruption is that the |credit_cards| table exists 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// but the schema version number was not set correctly to 23 or later. This 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test exercises code introduced to fix bug http://crbug.com/50699 that 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// resulted from the corruption. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion22CorruptedToCurrent) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build after the addition of the |credit_card| 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // table. Due to a bug in the migration logic the version is set incorrectly 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to 22 (it should have been updated to 23 at least). 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_22_corrupt.sql"))); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for corrupt version 22 of 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the database. 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id")); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before version 25. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id")); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |keywords| |created_by_policy| column gets added to the schema 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for a version 25 database. 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion25ToCurrent) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the |keywords| 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |created_by_policy| column. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_25.sql"))); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 25 of the 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |created_by_policy| column should have been added. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the credit_cards.billing_address column is changed from a string 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to an int whilst preserving the associated billing address. This version of 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the test makes sure a stored label is converted to an ID. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the change of column type for 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // credit_cards.billing_address from string to int. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql"))); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 26 of the 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt = "INSERT INTO autofill_profiles" 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, first_name, middle_name, last_name, email," 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " company_name, address_line_1, address_line_2, city, state, zipcode," 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " country, phone, fax)" 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('Home',1,'','','','','','','','','','','','','')"; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Run()); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert a CC linked to an existing address. 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt2 = "INSERT INTO credit_cards" 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, name_on_card, type, card_number," 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " expiration_month, expiration_year, verification_code, billing_address," 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " shipping_address, card_number_encrypted, verification_code_encrypted)" 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('label',2,'Jack','Visa','1234',2,2012,'','Home','','','')"; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str())); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Run()); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |billing_address| is a string. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt3 = "SELECT billing_address FROM credit_cards"; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str())); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the credit card data is converted. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Jack", s.ColumnString(1)); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, s.ColumnInt(2)); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2012, s.ColumnInt(3)); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 5 is encrypted number blob. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 6 is date_modified. 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the credit_cards.billing_address column is changed from a string 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to an int whilst preserving the associated billing address. This version of 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the test makes sure a stored string ID is converted to an integer ID. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringIDs) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the change of column type for 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // credit_cards.billing_address from string to int. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql"))); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 26 of the 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt = "INSERT INTO autofill_profiles" 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, first_name, middle_name, last_name, email," 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " company_name, address_line_1, address_line_2, city, state, zipcode," 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " country, phone, fax)" 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('Home',1,'','','','','','','','','','','','','')"; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Run()); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert a CC linked to an existing address. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt2 = "INSERT INTO credit_cards" 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, name_on_card, type, card_number," 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " expiration_month, expiration_year, verification_code, billing_address," 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " shipping_address, card_number_encrypted, verification_code_encrypted)" 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('label',2,'Jack','Visa','1234',2,2012,'','1','','','')"; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str())); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Run()); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |billing_address| is a string. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt3 = "SELECT billing_address FROM credit_cards"; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str())); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |created_by_policy| column should have been added. 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the credit card data is converted. 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Jack", s.ColumnString(1)); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, s.ColumnInt(2)); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2012, s.ColumnInt(3)); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 5 is encrypted credit card number blo b. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 6 is date_modified. 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure instant_url is added correctly to keywords. 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion27ToCurrent) { 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_27.sql"))); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 27 of the 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "instant_url")); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure supports_instant (added in Version 28) was ultimately dropped 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // again and instant_url was added. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("keywords", "supports_instant")); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "instant_url")); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that instant_url is empty. 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt = "SELECT instant_url FROM keywords"; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s.ColumnString(0)); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the data made it over. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stmt = "SELECT " + KeywordTable::GetKeywordColumns() + " FROM keywords"; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2(connection.GetUniqueStatement(stmt.c_str())); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, s2.ColumnInt(0)); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Google", s2.ColumnString(1)); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("google.com", s2.ColumnString(2)); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://www.google.com/favicon.ico", s2.ColumnString(3)); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}"\ 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}"\ 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&q={searchTerms}", 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s2.ColumnString(4)); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s2.ColumnBool(5)); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s2.ColumnString(6)); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(7)); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(8)); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string("UTF-8"), s2.ColumnString(9)); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s2.ColumnBool(10)); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string("{google:baseSuggestURL}search?client=chrome&hl=" 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{language}&q={searchTerms}"), s2.ColumnString(11)); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, s2.ColumnInt(12)); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //EXPECT_EQ(false, s2.ColumnBool(13)); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s2.ColumnString(14)); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(15)); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s2.ColumnString(16)); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure date_modified is added correctly to autofill_profiles and 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// credit_cards. 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion29ToCurrent) { 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_29.sql"))); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 29 of the 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_creation_time = Time::Now(); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_creation_time = Time::Now(); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the columns were created. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_profiles(connection.GetUniqueStatement( 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles ")); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_profiles.is_valid()); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (s_profiles.Step()) { 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_profiles.ColumnInt64(0), 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_creation_time.ToTimeT()); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_profiles.ColumnInt64(0), 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_creation_time.ToTimeT()); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s_profiles.Succeeded()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_credit_cards(connection.GetUniqueStatement( 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards ")); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards.is_valid()); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (s_credit_cards.Step()) { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_credit_cards.ColumnInt64(0), 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_creation_time.ToTimeT()); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_credit_cards.ColumnInt64(0), 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_creation_time.ToTimeT()); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s_credit_cards.Succeeded()); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure guids are added to autofill_profiles and credit_cards tables. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion30ToCurrent) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_30.sql"))); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 29 of the 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "guid")); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "guid")); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that guids are non-null, non-empty, conforms to guid format, and 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are different. 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT guid FROM autofill_profiles")); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid1 = s.ColumnString(0); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(guid1)); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid2 = s.ColumnString(0); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(guid2)); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(guid1, guid2); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Removes unique IDs and make GUIDs the primary key. Also removes unused 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// columns. 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_31.sql"))); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 30 of the 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile; 720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 profile_label; 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int profile_unique_id = 0; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 profile_date_modified = 0; 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard credit_card; 724c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 cc_label; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cc_unique_id = 0; 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cc_number_encrypted; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 cc_date_modified = 0; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existence of columns we'll be changing. 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "unique_id")); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id")); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "type")); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "card_number")); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code")); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "shipping_address")); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code_encrypted")); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fetch data in the database prior to migration. 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT label, unique_id, first_name, middle_name, last_name, " 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "email, company_name, address_line_1, address_line_2, city, state, " 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "zipcode, country, phone, fax, date_modified, guid " 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(AutofillProfile31FromStatement( 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s1, &profile, &profile_label, &profile_unique_id, 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_date_modified)); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT label, unique_id, name_on_card, type, card_number, " 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "expiration_month, expiration_year, verification_code, " 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "billing_address, shipping_address, card_number_encrypted, " 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code_encrypted, date_modified, guid " 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CreditCard31FromStatement(s2, 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &credit_card, 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_label, 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_unique_id, 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_number_encrypted, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_date_modified)); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(profile_unique_id, cc_unique_id); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(profile.guid(), credit_card.guid()); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existence of columns we'll be changing. 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "unique_id")); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id")); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "type")); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "card_number")); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code")); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "shipping_address")); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code_encrypted")); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify data in the database after the migration. 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, company_name, address_line_1, address_line_2, " 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "city, state, zipcode, country, date_modified " 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile_a; 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 profile_date_modified_a = 0; 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(AutofillProfile33FromStatement( 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s1, &profile_a, &profile_date_modified_a)); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile.guid(), profile_a.guid()); 816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME), 817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::COMPANY_NAME)); 818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE1), 819c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE1)); 820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE2), 821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE2)); 822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_CITY), 823c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_CITY)); 824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_STATE), 825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_STATE)); 826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_ZIP), 827c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_ZIP)); 828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY), 829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY)); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_date_modified, profile_date_modified_a); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, " 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "expiration_year, card_number_encrypted, date_modified " 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard credit_card_a; 840c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 cc_label_a; 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cc_number_encrypted_a; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 cc_date_modified_a = 0; 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CreditCard32FromStatement(s2, 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &credit_card_a, 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_number_encrypted_a, 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_date_modified_a)); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card, credit_card_a); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cc_label, cc_label_a); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cc_number_encrypted, cc_number_encrypted_a); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cc_date_modified, cc_date_modified_a); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Factor |autofill_profiles| address information separately from name, email, 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and phone. 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion32ToCurrent) { 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_32.sql"))); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 32 of the 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existence of columns we'll be changing. 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "label")); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "first_name")); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "middle_name")); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "last_name")); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "email")); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "company_name")); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "address_line_1")); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "address_line_2")); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "phone")); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "fax")); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profile_names")); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profile_emails")); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profile_phones")); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "label")); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify changes to columns. 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "label")); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "first_name")); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "middle_name")); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "last_name")); 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "email")); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "company_name")); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "address_line_1")); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "address_line_2")); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "phone")); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "fax")); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New "names" table. 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", "guid")); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "first_name")); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "middle_name")); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "last_name")); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New "emails" table. 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "guid")); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "email")); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New "phones" table. 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "guid")); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "type")); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "number")); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "label")); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify data in the database after the migration. 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, company_name, address_line_1, address_line_2, " 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "city, state, zipcode, country, date_modified " 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s1.ColumnString(0)); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Doe Enterprises"), s1.ColumnString16(1)); 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1 Main St"), s1.ColumnString16(2)); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Apt 1"), s1.ColumnString16(3)); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("United States"), s1.ColumnString16(7)); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(8)); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe. 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets merged during migration from 35 to 37 due to multi-valued fields. 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith. 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s1.ColumnString(0)); 975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(1)); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2 Main Street"), s1.ColumnString16(2)); 977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(3)); 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("United States"), s1.ColumnString16(7)); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(8)); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith (Part 2). 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s1.ColumnString(0)); 987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(1)); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2 Main St"), s1.ColumnString16(2)); 989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(3)); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("United States"), s1.ColumnString16(7)); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(8)); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alfred E Newman. 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 36 due to incomplete address. 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St. 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s1.ColumnString(0)); 1002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(1)); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("3 Main St"), s1.ColumnString16(2)); 1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(3)); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("United States"), s1.ColumnString16(7)); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(8)); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That should be all. 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s1.Step()); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, first_name, middle_name, last_name " 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profile_names")); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); 1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe. Note same guid as above due to merging of multi-valued 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fields. 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("P."), s2.ColumnString16(2)); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith. 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s2.ColumnString(0)); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); 1038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith (Part 2). 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s2.ColumnString(0)); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); 1045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alfred E Newman. 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 36 due to incomplete address. 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St. 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s2.ColumnString(0)); 1054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(1)); 1055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 1056c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(3)); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be all. 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s2.Step()); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s3( 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, email " 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profile_emails")); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s3.ColumnString(0)); 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john@doe.com"), s3.ColumnString16(1)); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe. 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 37 due to merging of John Doe and 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe addresses. 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main Street. 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s3.ColumnString(0)); 1078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s3.ColumnString16(1)); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St. 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s3.ColumnString(0)); 1083c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s3.ColumnString16(1)); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alfred E Newman. 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 36 due to incomplete address. 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St. 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s3.ColumnString(0)); 1091c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s3.ColumnString16(1)); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be all. 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s3.Step()); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s4( 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, type, number " 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profile_phones")); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe phone. 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(2)); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe fax. 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe phone. 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 37 due to merging of John Doe and 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe addresses. 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe fax. 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 37 due to merging of John Doe and 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe addresses. 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main Street phone. 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. 1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s4.ColumnString16(2)); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main Street fax. 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St phone. 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. 1131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s4.ColumnString16(2)); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St fax. 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note no phone or fax for Alfred E Newman. 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St phone. 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. 1142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s4.ColumnString16(2)); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St fax. 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be all. 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s4.Step()); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Adds a column for the autofill profile's country code. 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion33ToCurrent) { 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_33.sql"))); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 33 of the 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country value is the one we expect. 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT country FROM autofill_profiles")); 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country = s.ColumnString(0); 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("United States", country); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country code is properly converted. 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT country_code FROM autofill_profiles")); 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country_code = s.ColumnString(0); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", country_code); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cleans up bad country code "UK" in favor of good country code "GB". 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion34ToCurrent) { 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_34.sql"))); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 34 of the 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country_code value is the one we expect. 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT country_code " 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country_code = s.ColumnString(0); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("UK", country_code); 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have only one. 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s.Step()); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country_code code is properly converted. 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT country_code FROM autofill_profiles")); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country_code = s.ColumnString(0); 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("GB", country_code); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have only one. 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s.Step()); 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cleans up invalid profiles based on more agressive merging. Filters out 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// profiles that are subsets of other profiles, and profiles with invalid email, 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state, and incomplete address. 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion35ToCurrent) { 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_35.sql"))); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 34 of the 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profiles_trash")); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that there are 6 profiles prior to merge. 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT guid FROM autofill_profiles")); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i = 0; 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (s.Step()) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++i; 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(6, i); 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesTableExist("autofill_profiles_trash")); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles_trash", "guid")); 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify data in the database after the migration. 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, company_name, address_line_1, address_line_2, " 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "city, state, zipcode, country, date_modified " 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", s1.ColumnString(0)); 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Acme Inc."), s1.ColumnString16(1)); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1 Main Street"), s1.ColumnString16(2)); 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Apt 2"), s1.ColumnString16(3)); 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("San Francisco"), s1.ColumnString16(4)); 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94102"), s1.ColumnString16(6)); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("United States"), s1.ColumnString16(7)); 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1300131704, s1.ColumnInt64(8)); 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That should be it. 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s1.Step()); 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that there 5 trashed profile after the merge. 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT guid " 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles_trash")); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000002", s2.ColumnString(0)); 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000003", s2.ColumnString(0)); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000004", s2.ColumnString(0)); 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000005", s2.ColumnString(0)); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000006", s2.ColumnString(0)); 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That should be it. 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s2.Step()); 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |keywords| |last_modified| column gets added to the schema for 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a version 37 database. 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion37ToCurrent) { 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the |keywords| 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |last_modified| column. 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_37.sql"))); 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 37 of the 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "last_modified")); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |last_modified| column should have been added. 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "last_modified")); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |keywords| |sync_guid| column gets added to the schema for 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a version 38 database. 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion38ToCurrent) { 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the |keywords| 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |sync_guid| column. 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_38.sql"))); 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 38 of the 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "sync_guid")); 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |sync_guid| column should have been added. 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "sync_guid")); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that no backup data is added to a version 39 database. 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion39ToCurrent) { 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the default 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // search provider backup field to the meta table. 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_39.sql"))); 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 39 of the 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 39, 39)); 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 14512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion40ToCurrent) { 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_40.sql"))); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 40 of the 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 40, 40)); 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion41ToCurrent) { 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_41.sql"))); 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 41 of the 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 41, 41)); 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion42ToCurrent) { 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_42.sql"))); 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 42 of the 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 42, 42)); 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("keywords_backup")); 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion43ToCurrent) { 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_43.sql"))); 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 previous_default_search_provider_id; 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 43 of the 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 43, 43)); 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(default_search_provider_id, 0); 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_default_search_provider_id = default_search_provider_id; 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 16202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("keywords_backup")); 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init( 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &connection, 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber, 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default search provider ID should not change. 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(previous_default_search_provider_id, default_search_provider_id); 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |autogenerate_keyword| and |logo_id| columns get removed from 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the keyword table schema for a version 45 database. 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion44ToCurrent) { 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_44.sql"))); 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 44 of the 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 44, 44)); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "autogenerate_keyword")); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "logo_id")); 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have removed this obsolete key. 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string default_search_provider_backup; 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(meta_table.GetValue("Default Search Provider Backup", 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_backup)); 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two columns should have been removed. 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("keywords", 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "autogenerate_keyword")); 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("keywords", "logo_id")); 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Backup data should have been removed. 16972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the web_intents and web_intents_defaults tables are 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// modified to include "scheme" columns. 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion45ToCurrent) { 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_45.sql"))); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 45 of the 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 45, 45)); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents")); 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist( 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "scheme", "web_intents_defaults")); 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init( 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &connection, 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber, 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A new "scheme" column should have been added to each web_intents table. 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("web_intents", "scheme")); 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("web_intents_defaults", "scheme")); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existing user data was copied. 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT * FROM web_intents")); 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://poodles.com/fuzzer", s1.ColumnString(0)); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("fuzz"), s1.ColumnString16(1)); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("poodle/*"), s1.ColumnString16(2)); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Poodle Fuzzer"), s1.ColumnString16(3)); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("window"), s1.ColumnString16(4)); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(5)); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s1.Step()); 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now we want to verify existing user data was copied 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT * FROM web_intents_defaults")); 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("fuzz", s2.ColumnString(0)); 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("poodle/*"), s2.ColumnString16(1)); 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(2)); 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(3)); 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(4)); 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("http://poodles.com/fuzzer"), s2.ColumnString16(5)); 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(6)); 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s2.Step()); 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // finally ensure the migration code cleaned up after itself 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("old_web_intents")); 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("old_web_intents_defaults")); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the web_intents and web_intents_defaults tables are 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// modified to include "scheme" columns. 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion45InvalidToCurrent) { 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_45_invalid.sql"))); 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 45 of the 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 45, 45)); 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents")); 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist( 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "scheme", "web_intents_defaults")); 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init( 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &connection, 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber, 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A new "scheme" column should have been added to each web_intents table. 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("web_intents", "scheme")); 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("web_intents_defaults", "scheme")); 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existing user data was copied. 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT * FROM web_intents")); 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s1.Step()); // Basically should be empty at this point. 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now we want to verify existing user data was copied 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT * FROM web_intents_defaults")); 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We were able to create the new tables, but unable to copy any data 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Given the initial bad state of the tables. 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s2.Step()); 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finally ensure the migration code cleaned up after itself. 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("old_web_intents")); 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("old_web_intents_defaults")); 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check that current version is forced to compatible version before migration, 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// if the former is smaller. 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion45CompatibleToCurrent) { 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_45_compatible.sql"))); 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 45 of the 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Database is actually version 45 but the version field states 40. 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 40, 45)); 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(45, VersionFromConnection(&connection)); 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |alternate_urls| column is added to the keyword table schema 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for a version 47 database. 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion46ToCurrent) { 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_46.sql"))); 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 46 of the 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 46, 46)); 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "alternate_urls")); 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords_backup", 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "alternate_urls")); 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A new column should have been created. 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "alternate_urls")); 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 19112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion47ToCurrent) { 19122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_47.sql"))); 19132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify pre-conditions. These are expectations for version 47 of the 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 19222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 47, 47)); 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 default_search_provider_id = 0; 19252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 19262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &default_search_provider_id)); 19272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 19282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 19302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("keywords_backup")); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 19342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 19362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // database. 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Connection connection; 19392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check version. 19432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 19442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::MetaTable meta_table; 19462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 19472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kCurrentTestedVersionNumber)); 19482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 default_search_provider_id = 0; 19502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 19512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &default_search_provider_id)); 19522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 19532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the |search_terms_replacement_key| column is added to the keyword 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// table schema for a version 49 database. 19602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion48ToCurrent) { 19612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_48.sql"))); 19632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify pre-conditions. These are expectations for version 48 of the 19652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // database. 19662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 19672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Connection connection; 19682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::MetaTable meta_table; 19722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 48, 48)); 19732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", 19752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "search_terms_replacement_key")); 19762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A new column should have been created. 19912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", 19922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "search_terms_replacement_key")); 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that the |origin| column is added to the autofill_profiles and 1997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// credit_cards table schemas for a version 50 database. 1998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion49ToCurrent) { 1999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_49.sql"))); 2000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify pre-conditions. These are expectations for version 49 of the 2002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // database. 2003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 2004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sql::Connection connection; 2005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("autofill_profiles", "origin")); 2008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "origin")); 2009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DoMigration(); 2012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // database. 2015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 2016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sql::Connection connection; 2017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check version. 2021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A new column should have been created in both tables. 2024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "origin")); 2025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "origin")); 2026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2028