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) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/guid.h" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/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" 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/strings/string_util.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_country.h" 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_type.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_change.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_entry.h" 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_table.h" 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/password_manager/core/browser/webdata/logins_table.h" 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/keyword_table.h" 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/webdata/token_service_table.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::AutofillProfile; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::AutofillTable; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::CreditCard; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 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( 633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY), 643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch s.ColumnString16(12), "en-US"); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(15); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid(s.ColumnString(16)); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(profile->guid())); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillProfile33FromStatement(const sql::Statement& s, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid(s.ColumnString(0)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(profile->guid())); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(1)); 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS, 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s.ColumnString16(2)); 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(3)); 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(4)); 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(5)); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetInfo( 853240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY), 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s.ColumnString16(6), "en-US"); 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) *date_modified = s.ColumnInt64(7); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreditCard31FromStatement(const sql::Statement& s, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card, 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16* label, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* unique_id, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* encrypted_number, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(credit_card); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(label); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(unique_id); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(encrypted_number); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *label = s.ColumnString16(0); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *unique_id = s.ColumnInt(1); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(2)); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_TYPE, s.ColumnString16(3)); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(5)); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo( 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(6)); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int encrypted_number_len = s.ColumnByteLength(10); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (encrypted_number_len) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encrypted_number->resize(encrypted_number_len); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(&(*encrypted_number)[0], s.ColumnBlob(10), encrypted_number_len); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(12); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid(s.ColumnString(13)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(credit_card->guid())); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreditCard32FromStatement(const sql::Statement& s, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* encrypted_number, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* date_modified) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(credit_card); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(encrypted_number); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(date_modified); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid(s.ColumnString(0)); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(credit_card->guid())); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(1)); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(2)); 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card->SetRawInfo( 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(3)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int encrypted_number_len = s.ColumnByteLength(4); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (encrypted_number_len) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encrypted_number->resize(encrypted_number_len); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(&(*encrypted_number)[0], s.ColumnBlob(4), encrypted_number_len); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *date_modified = s.ColumnInt64(5); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CheckHasBackupData(sql::MetaTable* meta_table) { 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string value; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table->GetValue( 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup", &value)); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table->GetValue( 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup Signature", &value)); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CheckNoBackupData(const sql::Connection& connection, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::MetaTable* meta_table) { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string value; 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(meta_table->GetValue( 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup", &value)); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(meta_table->GetValue( 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Default Search Provider ID Backup Signature", &value)); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("keywords_backup")); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstd::string RemoveQuotes(const std::string& has_quotes) { 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string no_quotes; 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // SQLite quotes: http://www.sqlite.org/lang_keywords.html 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RemoveChars(has_quotes, "\"[]`", &no_quotes); 161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return no_quotes; 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // anonymous namespace 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The WebDatabaseMigrationTest encapsulates testing of database migrations. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specifically, these tests are intended to exercise any schema changes in 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the WebDatabase and data migrations that occur in 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |WebDatabase::MigrateOldVersionsAsNeeded()|. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebDatabaseMigrationTest : public testing::Test { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDatabaseMigrationTest() {} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebDatabaseMigrationTest() {} 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Load the database via the WebDatabase class and migrate the database to 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the current version. 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DoMigration() { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(joi): This whole unit test file needs to stay in //chrome 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for now, as it needs to know about all the different table 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // types. Once all webdata datatypes have been componentized, this 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // could move to components_unittests. 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillTable autofill_table("en-US"); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeywordTable keyword_table; 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoginsTable logins_table; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TokenServiceTable token_service_table; 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebDatabase db; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&autofill_table); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&keyword_table); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&logins_table); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db.AddTable(&token_service_table); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This causes the migration to occur. 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(sql::INIT_OK, db.Init(GetDatabasePath())); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Current tested version number. When adding a migration in 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |WebDatabase::MigrateOldVersionsAsNeeded()| and changing the version number 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |kCurrentVersionNumber| this value should change to reflect the new version 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // number and a new migration test added below. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kCurrentTestedVersionNumber; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath GetDatabasePath() { 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::CharType kWebDatabaseFilename[] = 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("TestWebDatabase.sqlite3"); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return temp_dir_.path().Append(base::FilePath(kWebDatabaseFilename)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The textual contents of |file| are read from 215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // "components/test/data/web_database" and returned in the string |contents|. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the file exists and is read successfully, false otherwise. 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetWebDatabaseData(const base::FilePath& file, std::string* contents) { 218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath source_path; 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PathService::Get(base::DIR_SOURCE_ROOT, &source_path); 220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("components"); 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("test"); 222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("data"); 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.AppendASCII("web_database"); 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_path = source_path.Append(file); 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return base::PathExists(source_path) && 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ReadFileToString(source_path, contents); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int VersionFromConnection(sql::Connection* connection) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get version. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection->GetUniqueStatement( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT value FROM meta WHERE key='version'")); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!s.Step()) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return s.ColumnInt(0); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The sql files located in "chrome/test/data/web_database" were generated by 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launching the Chromium application prior to schema change, then using the 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sqlite3 command-line application to dump the contents of the "Web Data" 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Like this: 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // > .output version_nn.sql 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // > .dump 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void LoadDatabase(const base::FilePath::StringType& file); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 58; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebDatabaseMigrationTest::LoadDatabase( 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::StringType& file) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string contents; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(GetWebDatabaseData(base::FilePath(file), &contents)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Execute(contents.data())); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Tests that migrating from the golden files version_XX.sql results in the same 266c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// schema as migrating from an empty database. 267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(WebDatabaseMigrationTest, VersionXxSqlFilesAreGolden) { 268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DoMigration(); 269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch sql::Connection connection; 270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& expected_schema = RemoveQuotes(connection.GetSchema()); 272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static const int kFirstVersion = 53; 273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (int i = kFirstVersion; i < kCurrentTestedVersionNumber; ++i) { 274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch connection.Raze(); 275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::FilePath& file_name = base::FilePath::FromUTF8Unsafe( 276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "version_" + base::IntToString(i) + ".sql"); 277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_NO_FATAL_FAILURE(LoadDatabase(file_name.value())) 278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "Failed to load " << file_name.MaybeAsASCII(); 279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DoMigration(); 280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(expected_schema, RemoveQuotes(connection.GetSchema())); 281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the all migrations from an empty database succeed. 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateEmptyToCurrent) { 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that expected tables are present. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("autofill")); 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The autofill_dates table is obsolete. (It's been merged into the autofill 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // table.) 301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_dates")); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("autofill_profiles")); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("credit_cards")); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("keywords")); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The logins table is obsolete. (We used to store saved passwords here.) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("logins")); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("meta")); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("token_service")); 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The web_apps and web_apps_icons tables are obsolete as of version 58. 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_apps")); 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_app_icons")); 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The web_intents and web_intents_defaults tables are obsolete as of 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // version 58. 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents")); 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Tests that absent Autofill tables do not create any problems when migrating 320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// from a DB written by the earliest publicly released version of Chrome. 321effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(WebDatabaseMigrationTest, MigrateVersion20ToCurrent) { 322effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_20.sql"))); 323effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 324effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Verify pre-conditions. 325effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { 326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch sql::Connection connection; 327effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 328effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(connection.DoesTableExist("autofill")); 330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(connection.DoesTableExist("autofill_profiles")); 331effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(connection.DoesTableExist("credit_cards")); 332effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 333effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DoMigration(); 335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Verify post-conditions. These are expectations for current version of the 337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // database. 338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { 339effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch sql::Connection connection; 340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 342effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Check version. 343effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Mostly this test just verifies that no SQL errors occur during migration; 346effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // but might as well verify that the tables were created as well. 347effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(connection.DoesTableExist("autofill")); 348effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(connection.DoesTableExist("autofill_profiles")); 349effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(connection.DoesTableExist("credit_cards")); 350effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 351effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 352effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Tests that rows with empty values get removed from the autofill tables. 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion21ToCurrent) { 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_21.sql"))); 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify pre-conditions. 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Connection connection; 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Both empty and non-empty values are allowed in a version 21 database. 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s_autofill(connection.GetUniqueStatement( 364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT name, value, value_lower, pair_id, count FROM autofill")); 365a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s_dates(connection.GetUniqueStatement( 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT pair_id, date_created FROM autofill_dates")); 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An entry with a non-empty value. 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0)); 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John Doe"), s_autofill.ColumnString16(1)); 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2)); 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(10, s_autofill.ColumnInt(3)); 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s_autofill.ColumnInt(4)); 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(10, s_dates.ColumnInt(0)); 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299100, s_dates.ColumnInt64(1)); 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An entry with an empty value. 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 381a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0)); 382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::string16(), s_autofill.ColumnString16(1)); 383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::string16(), s_autofill.ColumnString16(2)); 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(11, s_autofill.ColumnInt(3)); 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s_autofill.ColumnInt(4)); 386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(11, s_dates.ColumnInt(0)); 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299200, s_dates.ColumnInt64(1)); 389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 390a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Another entry with a non-empty value. 391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0)); 393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(1)); 394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(2)); 395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(20, s_autofill.ColumnInt(3)); 396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(3, s_autofill.ColumnInt(4)); 397a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 398a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(20, s_dates.ColumnInt(0)); 399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299300, s_dates.ColumnInt64(1)); 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(20, s_dates.ColumnInt(0)); 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299301, s_dates.ColumnInt64(1)); 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Another entry with an empty value. 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0)); 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::string16(), s_autofill.ColumnString16(1)); 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::string16(), s_autofill.ColumnString16(2)); 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_autofill.ColumnInt(3)); 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(4, s_autofill.ColumnInt(4)); 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299401, s_dates.ColumnInt64(1)); 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299400, s_dates.ColumnInt64(1)); 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299403, s_dates.ColumnInt64(1)); 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299402, s_dates.ColumnInt64(1)); 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // No more entries expected. 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(s_autofill.Step()); 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(s_dates.Step()); 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoMigration(); 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // database. 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Connection connection; 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Check version. 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Entries with empty values should have been dropped. The remaining 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // entries should have been preserved. 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s( 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) connection.GetUniqueStatement( 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT name, value, value_lower, date_created, date_last_used," 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) " count " 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "FROM autofill " 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ORDER BY name, value ASC")); 448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "jane@example.com" 450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s.Step()); 451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0)); 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(1)); 453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(2)); 454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299300, s.ColumnInt64(3)); 455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299301, s.ColumnInt64(4)); 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(3, s.ColumnInt(5)); 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "John Doe" 459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s.Step()); 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0)); 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John Doe"), s.ColumnString16(1)); 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2)); 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299100, s.ColumnInt64(3)); 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299100, s.ColumnInt64(4)); 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s.ColumnInt(5)); 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // No more entries expected. 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(s.Step()); 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |credit_card| table gets added to the schema for a version 22 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// database. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion22ToCurrent) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |credit_card| table. Version 22 of the schema. Contrast this with the 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // corrupt version below. 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_22.sql"))); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No |credit_card| table prior to version 23. 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "guid")); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE( 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |credit_card| table now exists. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |credit_card| table gets added to the schema for a corrupt 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version 22 database. The corruption is that the |credit_cards| table exists 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// but the schema version number was not set correctly to 23 or later. This 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test exercises code introduced to fix bug http://crbug.com/50699 that 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// resulted from the corruption. 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion22CorruptedToCurrent) { 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build after the addition of the |credit_card| 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // table. Due to a bug in the migration logic the version is set incorrectly 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to 22 (it should have been updated to 23 at least). 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_22_corrupt.sql"))); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for corrupt version 22 of 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the database. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id")); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before version 25. 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id")); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.DoesColumnExist("credit_cards", "card_number_encrypted")); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |keywords| |created_by_policy| column gets added to the schema 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for a version 25 database. 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion25ToCurrent) { 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the |keywords| 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |created_by_policy| column. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_25.sql"))); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 25 of the 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |created_by_policy| column should have been added. 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the credit_cards.billing_address column is changed from a string 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to an int whilst preserving the associated billing address. This version of 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the test makes sure a stored label is converted to an ID. 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) { 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the change of column type for 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // credit_cards.billing_address from string to int. 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql"))); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 26 of the 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt = "INSERT INTO autofill_profiles" 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, first_name, middle_name, last_name, email," 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " company_name, address_line_1, address_line_2, city, state, zipcode," 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " country, phone, fax)" 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('Home',1,'','','','','','','','','','','','','')"; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Run()); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert a CC linked to an existing address. 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt2 = "INSERT INTO credit_cards" 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, name_on_card, type, card_number," 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " expiration_month, expiration_year, verification_code, billing_address," 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " shipping_address, card_number_encrypted, verification_code_encrypted)" 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('label',2,'Jack','Visa','1234',2,2012,'','Home','','','')"; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str())); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Run()); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |billing_address| is a string. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt3 = "SELECT billing_address FROM credit_cards"; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str())); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the credit card data is converted. 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Jack", s.ColumnString(1)); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, s.ColumnInt(2)); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2012, s.ColumnInt(3)); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 5 is encrypted number blob. 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 6 is date_modified. 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the credit_cards.billing_address column is changed from a string 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to an int whilst preserving the associated billing address. This version of 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the test makes sure a stored string ID is converted to an integer ID. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringIDs) { 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the change of column type for 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // credit_cards.billing_address from string to int. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql"))); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 26 of the 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt = "INSERT INTO autofill_profiles" 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, first_name, middle_name, last_name, email," 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " company_name, address_line_1, address_line_2, city, state, zipcode," 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " country, phone, fax)" 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('Home',1,'','','','','','','','','','','','','')"; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Run()); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert a CC linked to an existing address. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt2 = "INSERT INTO credit_cards" 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(label, unique_id, name_on_card, type, card_number," 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " expiration_month, expiration_year, verification_code, billing_address," 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " shipping_address, card_number_encrypted, verification_code_encrypted)" 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES ('label',2,'Jack','Visa','1234',2,2012,'','1','','','')"; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str())); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Run()); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |billing_address| is a string. 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt3 = "SELECT billing_address FROM credit_cards"; 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str())); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |created_by_policy| column should have been added. 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the credit card data is converted. 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Jack", s.ColumnString(1)); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, s.ColumnInt(2)); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2012, s.ColumnInt(3)); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 5 is encrypted credit card number blo b. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Column 6 is date_modified. 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure instant_url is added correctly to keywords. 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion27ToCurrent) { 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_27.sql"))); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 27 of the 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "instant_url")); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure supports_instant (added in Version 28) was ultimately dropped 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // again and instant_url was added. 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("keywords", "supports_instant")); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "instant_url")); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that instant_url is empty. 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string stmt = "SELECT instant_url FROM keywords"; 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement(stmt.c_str())); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s.ColumnString(0)); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the data made it over. 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stmt = "SELECT " + KeywordTable::GetKeywordColumns() + " FROM keywords"; 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2(connection.GetUniqueStatement(stmt.c_str())); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, s2.ColumnInt(0)); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Google", s2.ColumnString(1)); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("google.com", s2.ColumnString(2)); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://www.google.com/favicon.ico", s2.ColumnString(3)); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}"\ 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}"\ 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&q={searchTerms}", 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s2.ColumnString(4)); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s2.ColumnBool(5)); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s2.ColumnString(6)); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(7)); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(8)); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string("UTF-8"), s2.ColumnString(9)); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s2.ColumnBool(10)); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string("{google:baseSuggestURL}search?client=chrome&hl=" 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{language}&q={searchTerms}"), s2.ColumnString(11)); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, s2.ColumnInt(12)); 779a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(s2.ColumnBool(13)); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s2.ColumnString(14)); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s2.ColumnInt(15)); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), s2.ColumnString(16)); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure date_modified is added correctly to autofill_profiles and 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// credit_cards. 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion29ToCurrent) { 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_29.sql"))); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 29 of the 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_creation_time = Time::Now(); 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_creation_time = Time::Now(); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the columns were created. 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_profiles(connection.GetUniqueStatement( 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles ")); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_profiles.is_valid()); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (s_profiles.Step()) { 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_profiles.ColumnInt64(0), 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_creation_time.ToTimeT()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_profiles.ColumnInt64(0), 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_creation_time.ToTimeT()); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s_profiles.Succeeded()); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_credit_cards(connection.GetUniqueStatement( 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards ")); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards.is_valid()); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (s_credit_cards.Step()) { 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_credit_cards.ColumnInt64(0), 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_creation_time.ToTimeT()); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_credit_cards.ColumnInt64(0), 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_creation_time.ToTimeT()); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s_credit_cards.Succeeded()); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure guids are added to autofill_profiles and credit_cards tables. 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion30ToCurrent) { 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_30.sql"))); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 29 of the 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "guid")); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "guid")); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that guids are non-null, non-empty, conforms to guid format, and 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are different. 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT guid FROM autofill_profiles")); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid1 = s.ColumnString(0); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(guid1)); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid2 = s.ColumnString(0); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::IsValidGUID(guid2)); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(guid1, guid2); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Removes unique IDs and make GUIDs the primary key. Also removes unused 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// columns. 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) { 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_31.sql"))); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 30 of the 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile; 902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 profile_label; 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int profile_unique_id = 0; 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 profile_date_modified = 0; 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard credit_card; 906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 cc_label; 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cc_unique_id = 0; 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cc_number_encrypted; 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 cc_date_modified = 0; 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existence of columns we'll be changing. 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "unique_id")); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id")); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "type")); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "card_number")); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code")); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address")); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "shipping_address")); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code_encrypted")); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fetch data in the database prior to migration. 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT label, unique_id, first_name, middle_name, last_name, " 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "email, company_name, address_line_1, address_line_2, city, state, " 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "zipcode, country, phone, fax, date_modified, guid " 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(AutofillProfile31FromStatement( 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s1, &profile, &profile_label, &profile_unique_id, 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_date_modified)); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT label, unique_id, name_on_card, type, card_number, " 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "expiration_month, expiration_year, verification_code, " 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "billing_address, shipping_address, card_number_encrypted, " 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code_encrypted, date_modified, guid " 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CreditCard31FromStatement(s2, 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &credit_card, 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_label, 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_unique_id, 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_number_encrypted, 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_date_modified)); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(profile_unique_id, cc_unique_id); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(profile.guid(), credit_card.guid()); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existence of columns we'll be changing. 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "unique_id")); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid")); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id")); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "type")); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "card_number")); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code")); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "shipping_address")); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "verification_code_encrypted")); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify data in the database after the migration. 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 988a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "SELECT guid, company_name, street_address, city, state, zipcode," 989a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) " country_code, date_modified " 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile_a; 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 profile_date_modified_a = 0; 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(AutofillProfile33FromStatement( 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s1, &profile_a, &profile_date_modified_a)); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile.guid(), profile_a.guid()); 998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME), 999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::COMPANY_NAME)); 1000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE1), 1001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE1)); 1002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE2), 1003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE2)); 1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_CITY), 1005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_CITY)); 1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_STATE), 1007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_STATE)); 1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_ZIP), 1009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_ZIP)); 1010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY), 1011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_a.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY)); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_date_modified, profile_date_modified_a); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, " 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "expiration_year, card_number_encrypted, date_modified " 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards")); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard credit_card_a; 1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 cc_label_a; 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cc_number_encrypted_a; 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 cc_date_modified_a = 0; 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CreditCard32FromStatement(s2, 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &credit_card_a, 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_number_encrypted_a, 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cc_date_modified_a)); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card, credit_card_a); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cc_label, cc_label_a); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cc_number_encrypted, cc_number_encrypted_a); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cc_date_modified, cc_date_modified_a); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Factor |autofill_profiles| address information separately from name, email, 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and phone. 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion32ToCurrent) { 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_32.sql"))); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 32 of the 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify existence of columns we'll be changing. 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "label")); 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "first_name")); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "middle_name")); 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "last_name")); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "email")); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "company_name")); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "address_line_1")); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "address_line_2")); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "phone")); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "fax")); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profile_names")); 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profile_emails")); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profile_phones")); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "label")); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify changes to columns. 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "label")); 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "first_name")); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "middle_name")); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "last_name")); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "email")); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "company_name")); 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 1099a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "street_address")); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); 1103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 1104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "country_code")); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "phone")); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "fax")); 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "date_modified")); 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New "names" table. 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", "guid")); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "first_name")); 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "middle_name")); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "last_name")); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New "emails" table. 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "guid")); 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "email")); 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New "phones" table. 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "guid")); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "number")); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "label")); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify data in the database after the migration. 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 1133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "SELECT guid, company_name, street_address, city, state, zipcode, " 1134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) " country_code, date_modified " 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s1.ColumnString(0)); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Doe Enterprises"), s1.ColumnString16(1)); 1141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1 Main St\n" 1142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "Apt 1"), 1143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s1.ColumnString16(2)); 1144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); 1145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); 1146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); 1147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); 1148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe. 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets merged during migration from 35 to 37 due to multi-valued fields. 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith. 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s1.ColumnString(0)); 1156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(1)); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2 Main Street"), s1.ColumnString16(2)); 1158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); 1159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); 1160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); 1161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); 1162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith (Part 2). 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s1.ColumnString(0)); 1167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(1)); 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2 Main St"), s1.ColumnString16(2)); 1169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); 1170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); 1171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); 1172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); 1173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alfred E Newman. 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 36 due to incomplete address. 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St. 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s1.ColumnString(0)); 1181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s1.ColumnString16(1)); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("3 Main St"), s1.ColumnString16(2)); 1183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3)); 1184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); 1185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5)); 1186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); 1187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1297882100L, s1.ColumnInt64(7)); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That should be all. 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s1.Step()); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, first_name, middle_name, last_name " 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profile_names")); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); 1201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe. Note same guid as above due to merging of multi-valued 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fields. 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("P."), s2.ColumnString16(2)); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith. 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s2.ColumnString(0)); 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); 1216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dave Smith (Part 2). 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s2.ColumnString(0)); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); 1223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alfred E Newman. 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 36 due to incomplete address. 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St. 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s2.ColumnString(0)); 1232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(1)); 1233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(2)); 1234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s2.ColumnString16(3)); 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be all. 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s2.Step()); 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s3( 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, email " 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profile_emails")); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s3.ColumnString(0)); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john@doe.com"), s3.ColumnString16(1)); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe. 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 37 due to merging of John Doe and 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe addresses. 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main Street. 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s3.ColumnString(0)); 1256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s3.ColumnString16(1)); 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St. 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s3.ColumnString(0)); 1261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s3.ColumnString16(1)); 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alfred E Newman. 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 36 due to incomplete address. 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St. 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s3.Step()); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s3.ColumnString(0)); 1269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s3.ColumnString16(1)); 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be all. 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s3.Step()); 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s4( 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 1276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "SELECT guid, number " 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profile_phones")); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe phone. 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); 1282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(1)); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe fax. 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe phone. 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 37 due to merging of John Doe and 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe addresses. 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe fax. 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled during migration from 35 to 37 due to merging of John Doe and 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John P. Doe addresses. 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main Street phone. 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); 1298a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s4.ColumnString16(1)); 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main Street fax. 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St phone. 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. 1307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), s4.ColumnString16(2)); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St fax. 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note no phone or fax for Alfred E Newman. 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3 Main St phone. 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s4.Step()); 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); 1317a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s4.ColumnString16(1)); 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 Main St fax. 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets culled after fax type removed. 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be all. 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s4.Step()); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Adds a column for the autofill profile's country code. 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion33ToCurrent) { 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_33.sql"))); 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 33 of the 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country value is the one we expect. 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT country FROM autofill_profiles")); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country = s.ColumnString(0); 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("United States", country); 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country code is properly converted. 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT country_code FROM autofill_profiles")); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country_code = s.ColumnString(0); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", country_code); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cleans up bad country code "UK" in favor of good country code "GB". 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion34ToCurrent) { 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_34.sql"))); 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 34 of the 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country_code value is the one we expect. 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT country_code " 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country_code = s.ColumnString(0); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("UK", country_code); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have only one. 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s.Step()); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "country_code")); 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the country_code code is properly converted. 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(connection.GetUniqueStatement( 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT country_code FROM autofill_profiles")); 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s.Step()); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string country_code = s.ColumnString(0); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("GB", country_code); 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have only one. 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s.Step()); 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cleans up invalid profiles based on more agressive merging. Filters out 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// profiles that are subsets of other profiles, and profiles with invalid email, 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state, and incomplete address. 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion35ToCurrent) { 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database. 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_35.sql"))); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 34 of the 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_profiles_trash")); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that there are 6 profiles prior to merge. 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s( 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT guid FROM autofill_profiles")); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i = 0; 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (s.Step()) 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++i; 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(6, i); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesTableExist("autofill_profiles_trash")); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles_trash", "guid")); 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify data in the database after the migration. 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s1( 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement( 1471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "SELECT guid, company_name, street_address, city, state, zipcode," 1472a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) " country_code, date_modified " 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles")); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // John Doe. 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s1.Step()); 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", s1.ColumnString(0)); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Acme Inc."), s1.ColumnString16(1)); 1479a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1 Main Street\n" 1480a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "Apt 2"), 1481a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s1.ColumnString16(2)); 1482a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("San Francisco"), s1.ColumnString16(3)); 1483a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4)); 1484a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94102"), s1.ColumnString16(5)); 1485a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6)); 1486a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1300131704, s1.ColumnInt64(7)); 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That should be it. 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s1.Step()); 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that there 5 trashed profile after the merge. 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s2( 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection.GetUniqueStatement("SELECT guid " 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles_trash")); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000002", s2.ColumnString(0)); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000003", s2.ColumnString(0)); 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000004", s2.ColumnString(0)); 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000005", s2.ColumnString(0)); 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s2.Step()); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000006", s2.ColumnString(0)); 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That should be it. 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(s2.Step()); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |keywords| |last_modified| column gets added to the schema for 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a version 37 database. 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion37ToCurrent) { 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the |keywords| 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |last_modified| column. 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_37.sql"))); 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 37 of the 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "last_modified")); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |last_modified| column should have been added. 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "last_modified")); 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |keywords| |sync_guid| column gets added to the schema for 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a version 38 database. 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion38ToCurrent) { 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the |keywords| 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |sync_guid| column. 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_38.sql"))); 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 38 of the 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Columns existing and not existing before current version. 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "sync_guid")); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |keywords| |sync_guid| column should have been added. 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "sync_guid")); 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that no backup data is added to a version 39 database. 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion39ToCurrent) { 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This schema is taken from a build prior to the addition of the default 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // search provider backup field to the meta table. 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_39.sql"))); 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 39 of the 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 39, 39)); 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion40ToCurrent) { 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_40.sql"))); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 40 of the 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 40, 40)); 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version 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) // Check version. 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion41ToCurrent) { 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_41.sql"))); 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 41 of the 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 41, 41)); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion42ToCurrent) { 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_42.sql"))); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 42 of the 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 42, 42)); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("keywords_backup")); 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion43ToCurrent) { 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_43.sql"))); 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 previous_default_search_provider_id; 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 43 of the 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 43, 43)); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(default_search_provider_id, 0); 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_default_search_provider_id = default_search_provider_id; 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 17962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("keywords_backup")); 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init( 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &connection, 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber, 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 default_search_provider_id = 0; 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_id)); 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default search provider ID should not change. 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(previous_default_search_provider_id, default_search_provider_id); 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |autogenerate_keyword| and |logo_id| columns get removed from 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the keyword table schema for a version 45 database. 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion44ToCurrent) { 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_44.sql"))); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 44 of the 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 44, 44)); 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "autogenerate_keyword")); 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.DoesColumnExist("keywords", "logo_id")); 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have removed this obsolete key. 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string default_search_provider_backup; 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(meta_table.GetValue("Default Search Provider Backup", 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &default_search_provider_backup)); 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two columns should have been removed. 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("keywords", 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "autogenerate_keyword")); 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("keywords", "logo_id")); 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Backup data should have been removed. 18732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Previously, this tested that the web_intents and web_intents_defaults tables 1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// were modified to include "scheme" columns. Since the web_intents and 1879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// web_intents_defaults tables are now obsolete, this test checks to ensure that 1880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// they are properly removed. 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion45ToCurrent) { 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_45.sql"))); 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 45 of the 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 45, 45)); 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents")); 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist( 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "scheme", "web_intents_defaults")); 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init( 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &connection, 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber, 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // finally ensure the migration code cleaned up after itself 1918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents")); 1919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Previously, this tested that the web_intents and web_intents_defaults tables 1924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// were modified to include "scheme" columns. Since the web_intents and 1925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// web_intents_defaults tables are now obsolete, this test checks to ensure that 1926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// they are properly removed. 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion45InvalidToCurrent) { 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_45_invalid.sql"))); 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 45 of the 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 45, 45)); 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents")); 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist( 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "scheme", "web_intents_defaults")); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init( 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &connection, 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber, 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCurrentTestedVersionNumber)); 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents")); 1965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check that current version is forced to compatible version before migration, 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// if the former is smaller. 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion45CompatibleToCurrent) { 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_45_compatible.sql"))); 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 45 of the 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Database is actually version 45 but the version field states 40. 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 40, 45)); 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(45, VersionFromConnection(&connection)); 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the |alternate_urls| column is added to the keyword table schema 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for a version 47 database. 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion46ToCurrent) { 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_46.sql"))); 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 46 of the 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 46, 46)); 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "alternate_urls")); 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords_backup", 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "alternate_urls")); 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A new column should have been created. 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "alternate_urls")); 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the backup data is removed from the database. 20412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion47ToCurrent) { 20422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_47.sql"))); 20432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify pre-conditions. These are expectations for version 47 of the 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table; 20522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 47, 47)); 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 default_search_provider_id = 0; 20552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 20562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &default_search_provider_id)); 20572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 20582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table)); 20602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("keywords_backup")); 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 20642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 20662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // database. 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Connection connection; 20692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 20702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 20712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check version. 20732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 20742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::MetaTable meta_table; 20762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber, 20772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kCurrentTestedVersionNumber)); 20782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 default_search_provider_id = 0; 20802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey, 20812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &default_search_provider_id)); 20822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(0, default_search_provider_id); 20832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table)); 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that the |search_terms_replacement_key| column is added to the keyword 20892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// table schema for a version 49 database. 20902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion48ToCurrent) { 20912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 20922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_48.sql"))); 20932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify pre-conditions. These are expectations for version 48 of the 20952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // database. 20962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 20972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Connection connection; 20982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 20992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 21002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::MetaTable meta_table; 21022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 48, 48)); 21032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", 21052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "search_terms_replacement_key")); 21062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 21072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoMigration(); 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database. 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection connection; 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check version. 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A new column should have been created. 21212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", 21222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "search_terms_replacement_key")); 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that the |origin| column is added to the autofill_profiles and 2127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// credit_cards table schemas for a version 50 database. 2128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion49ToCurrent) { 2129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_49.sql"))); 2130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify pre-conditions. These are expectations for version 49 of the 2132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // database. 2133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 2134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sql::Connection connection; 2135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("autofill_profiles", "origin")); 2138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "origin")); 2139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DoMigration(); 2142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // database. 2145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 2146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sql::Connection connection; 2147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check version. 2151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A new column should have been created in both tables. 2154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "origin")); 2155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "origin")); 2156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Tests that the columns |image_url|, |search_url_post_params|, 21603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// |suggest_url_post_params|, |instant_url_post_params|, and 21613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// |image_url_post_params| are added to the keyword table schema for a version 21623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 50 database. 2163a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion50ToCurrent) { 2164a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 2165a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_50.sql"))); 2166a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2167a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 50 of the 2168a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // database. 2169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 2170a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) sql::Connection connection; 2171a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) sql::MetaTable meta_table; 2175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 50, 50)); 2176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "image_url")); 2178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", 2179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "search_url_post_params")); 2180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", 2181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "suggest_url_post_params")); 2182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", 2183a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "instant_url_post_params")); 2184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", 2185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "image_url_post_params")); 2186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 2187a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2188a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DoMigration(); 2189a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2190a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // database. 2192a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 2193a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) sql::Connection connection; 2194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2195a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2196a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2197a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Check version. 2198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2199a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // New columns should have been created. 2201a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "image_url")); 2202a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", 2203a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "search_url_post_params")); 2204a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", 2205a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "suggest_url_post_params")); 2206a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", 2207a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "instant_url_post_params")); 2208a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", 2209a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "image_url_post_params")); 2210a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 2211a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 22123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Tests that the column |new_tab_url| is added to the keyword table schema for 22143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// a version 52 database. 22153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion52ToCurrent) { 22163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 22173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LoadDatabase(FILE_PATH_LITERAL("version_52.sql"))); 22183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 52 of the 22203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // database. 22213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 22223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) sql::Connection connection; 22233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 22243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 22253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) sql::MetaTable meta_table; 22273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(meta_table.Init(&connection, 52, 52)); 22283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_FALSE(connection.DoesColumnExist("keywords", "new_tab_url")); 22303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 22313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DoMigration(); 22333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 22353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // database. 22363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 22373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) sql::Connection connection; 22383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 22393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 22403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Check version. 22423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 22433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 22443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // New columns should have been created. 22453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("keywords", "new_tab_url")); 22463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 22473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Tests that for a version 54 database, 2250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// (a) The street_address, dependent_locality, and sorting_code columns are 2251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// added to the autofill_profiles table schema. 2252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// (b) The address_line1, address_line2, and country columns are dropped from 2253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// the autofill_profiles table schema. 2254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// (c) The type column is dropped from the autofill_profile_phones schema. 2255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion53ToCurrent) { 2256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_53.sql"))); 2257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 53 of the 2259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // database. 2260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { 2261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) sql::Connection connection; 2262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2263a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE( 2265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "address_line_1")); 2266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE( 2267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "address_line_2")); 2268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); 2269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE( 2270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "street_address")); 2271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE( 2272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "dependent_locality")); 2273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE( 2274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "sorting_code")); 2275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "type")); 2276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 2277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DoMigration(); 2279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // database. 2282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { 2283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) sql::Connection connection; 2284a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Check version. 2288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Columns should have been added and removed appropriately. 2291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE( 2292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "address_line1")); 2293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE( 2294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "address_line2")); 2295a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "country")); 2296a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE( 2297a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "street_address")); 2298a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE( 2299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "dependent_locality")); 2300a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE( 2301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.DoesColumnExist("autofill_profiles", "sorting_code")); 2302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill_profile_phones", "type")); 2303a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Data should have been preserved. 2305a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) sql::Statement s_profiles( 2306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.GetUniqueStatement( 2307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "SELECT guid, company_name, street_address, dependent_locality," 2308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) " city, state, zipcode, sorting_code, country_code, date_modified," 2309a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) " origin " 2310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "FROM autofill_profiles")); 2311a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2312a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Address lines 1 and 2. 2313a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_profiles.Step()); 2314a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", 2315a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s_profiles.ColumnString(0)); 2316a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Google, Inc."), s_profiles.ColumnString16(1)); 2317a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1950 Charleston Rd.\n" 2318a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "(2nd floor)"), 2319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s_profiles.ColumnString16(2)); 2320a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3)); 2321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Mountain View"), s_profiles.ColumnString16(4)); 2322a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("CA"), s_profiles.ColumnString16(5)); 2323a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94043"), s_profiles.ColumnString16(6)); 2324a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7)); 2325a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s_profiles.ColumnString16(8)); 2326a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1386046731, s_profiles.ColumnInt(9)); 2327a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10)); 2328a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2329a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Only address line 1. 2330a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_profiles.Step()); 2331a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000002", 2332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s_profiles.ColumnString(0)); 2333a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Google!"), s_profiles.ColumnString16(1)); 2334a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1600 Amphitheatre Pkwy."), 2335a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s_profiles.ColumnString16(2)); 2336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3)); 2337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Mtn. View"), s_profiles.ColumnString16(4)); 2338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("California"), s_profiles.ColumnString16(5)); 2339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("94043-1234"), s_profiles.ColumnString16(6)); 2340a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7)); 2341a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("US"), s_profiles.ColumnString16(8)); 2342a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1386046800, s_profiles.ColumnInt(9)); 2343a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10)); 2344a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Only address line 2. 2346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_profiles.Step()); 2347a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000003", 2348a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s_profiles.ColumnString(0)); 2349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(1)); 2350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("\nOnly line 2???"), s_profiles.ColumnString16(2)); 2351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3)); 2352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(4)); 2353a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(5)); 2354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(6)); 2355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7)); 2356a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(8)); 2357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1386046834, s_profiles.ColumnInt(9)); 2358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10)); 2359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2360a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // No address lines. 2361a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_profiles.Step()); 2362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000004", 2363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) s_profiles.ColumnString(0)); 2364a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(1)); 2365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(2)); 2366a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3)); 2367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(4)); 2368a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Texas"), s_profiles.ColumnString16(5)); 2369a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(6)); 2370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7)); 2371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_profiles.ColumnString16(8)); 2372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(1386046847, s_profiles.ColumnInt(9)); 2373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10)); 2374a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // That should be it. 2376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(s_profiles.Step()); 2377a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Verify the phone number data as well. 2379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) sql::Statement s_phones( 2380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connection.GetUniqueStatement( 2381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "SELECT guid, number FROM autofill_profile_phones")); 2382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_phones.Step()); 2384a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", s_phones.ColumnString(0)); 2385a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1.800.555.1234"), s_phones.ColumnString16(1)); 2386a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2387a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_phones.Step()); 2388a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", s_phones.ColumnString(0)); 2389a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("+1 (800) 555-4321"), s_phones.ColumnString16(1)); 2390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_phones.Step()); 2392a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000002", s_phones.ColumnString(0)); 2393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_phones.ColumnString16(1)); 2394a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_phones.Step()); 2396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000003", s_phones.ColumnString(0)); 2397a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("6505557890"), s_phones.ColumnString16(1)); 2398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2399a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(s_phones.Step()); 2400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000004", s_phones.ColumnString(0)); 2401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(base::string16(), s_phones.ColumnString16(1)); 2402a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2403a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(s_phones.Step()); 2404a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 2405a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 2406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Tests that migrating from version 54 to version 55 drops the autofill_dates 2408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// table, and merges the appropriate dates into the autofill table. 2409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion54ToCurrent) { 2410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_54.sql"))); 2411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 54 of the 2413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // database. 2414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 2415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Connection connection; 2416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(connection.DoesTableExist("autofill_dates")); 2419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill", "date_created")); 2420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(connection.DoesColumnExist("autofill", "date_last_used")); 2421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify the incoming data. 2423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s_autofill(connection.GetUniqueStatement( 2424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT name, value, value_lower, pair_id, count FROM autofill")); 2425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s_dates(connection.GetUniqueStatement( 2426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT pair_id, date_created FROM autofill_dates")); 2427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An entry with one timestamp. 2429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 2430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0)); 2431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John Doe"), s_autofill.ColumnString16(1)); 2432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2)); 2433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(10, s_autofill.ColumnInt(3)); 2434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s_autofill.ColumnInt(4)); 2435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(10, s_dates.ColumnInt(0)); 2437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299100, s_dates.ColumnInt64(1)); 2438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Another entry with one timestamp, differing from the previous one in case 2440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // only. 2441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 2442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0)); 2443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(1)); 2444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2)); 2445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(11, s_autofill.ColumnInt(3)); 2446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s_autofill.ColumnInt(4)); 2447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(11, s_dates.ColumnInt(0)); 2449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299200, s_dates.ColumnInt64(1)); 2450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An entry with two timestamps (with count > 2; this is realistic). 2452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 2453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0)); 2454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(1)); 2455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(2)); 2456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(20, s_autofill.ColumnInt(3)); 2457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(3, s_autofill.ColumnInt(4)); 2458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(20, s_dates.ColumnInt(0)); 2460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299300, s_dates.ColumnInt64(1)); 2461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(20, s_dates.ColumnInt(0)); 2463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299301, s_dates.ColumnInt64(1)); 2464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An entry with more than two timestamps, which are stored out of order. 2466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_autofill.Step()); 2467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0)); 2468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"), 2469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) s_autofill.ColumnString16(1)); 2470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"), 2471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) s_autofill.ColumnString16(2)); 2472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_autofill.ColumnInt(3)); 2473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(4, s_autofill.ColumnInt(4)); 2474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 2476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299401, s_dates.ColumnInt64(1)); 2477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 2479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299400, s_dates.ColumnInt64(1)); 2480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 2482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299403, s_dates.ColumnInt64(1)); 2483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s_dates.Step()); 2484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(21, s_dates.ColumnInt(0)); 2485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299402, s_dates.ColumnInt64(1)); 2486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // No more entries expected. 2488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(s_autofill.Step()); 2489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(s_dates.Step()); 2490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoMigration(); 2493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 2495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // database. 2496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 2497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Connection connection; 2498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 2499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2500a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Check version. 2502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The autofill_dates table should have been dropped, and its columns should 2505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // have been migrated to the autofill table. 2506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(connection.DoesTableExist("autofill_dates")); 2507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill", "date_created")); 2508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(connection.DoesColumnExist("autofill", "date_last_used")); 2509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Data should have been preserved. Note that it appears out of order 2511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // relative to the previous table, as it's been alphabetized. That's ok. 2512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s( 2513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) connection.GetUniqueStatement( 2514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT name, value, value_lower, date_created, date_last_used," 2515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) " count " 2516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "FROM autofill " 2517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ORDER BY name, value ASC")); 2518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "jane.doe@example.org": Timestamps should be parsed correctly, and only 2520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the first and last should be kept. 2521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s.Step()); 2522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0)); 2523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"), s.ColumnString16(1)); 2524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"), s.ColumnString16(2)); 2525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299400, s.ColumnInt64(3)); 2526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299403, s.ColumnInt64(4)); 2527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(4, s.ColumnInt(5)); 2528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "jane@example.com": Timestamps should be parsed correctly. 2530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s.Step()); 2531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0)); 2532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(1)); 2533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(2)); 2534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299300, s.ColumnInt64(3)); 2535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299301, s.ColumnInt64(4)); 2536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(3, s.ColumnInt(5)); 2537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "John Doe": The single timestamp should be assigned as both the creation 2539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // and the last use timestamp. 2540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s.Step()); 2541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0)); 2542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John Doe"), s.ColumnString16(1)); 2543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2)); 2544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299100, s.ColumnInt64(3)); 2545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299100, s.ColumnInt64(4)); 2546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s.ColumnInt(5)); 2547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2548a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "john doe": Should not be merged with "John Doe" (case-sensitivity). 2549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(s.Step()); 2550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0)); 2551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(1)); 2552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2)); 2553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299200, s.ColumnInt64(3)); 2554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1384299200, s.ColumnInt64(4)); 2555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, s.ColumnInt(5)); 2556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // No more entries expected. 2558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(s.Step()); 2559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2561a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2562a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Tests that migrating from version 55 to version 56 adds the language_code 2563a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// column to autofill_profiles table. 2564a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(WebDatabaseMigrationTest, MigrateVersion55ToCurrent) { 2565a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_55.sql"))); 2566a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2567a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Verify pre-conditions. These are expectations for version 55 of the 2568a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // database. 2569a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { 2570a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch sql::Connection connection; 2571a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 2572a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2573a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2574a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 2575a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch connection.DoesColumnExist("autofill_profiles", "language_code")); 2576a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 2577a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2578a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DoMigration(); 2579a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2580a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Verify post-conditions. These are expectations for current version of the 2581a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // database. 2582a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { 2583a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch sql::Connection connection; 2584a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 2585a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2586a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2587a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Check version. 2588a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2589a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2590a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The language_code column should have been added to autofill_profiles 2591a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // table. 2592a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 2593a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch connection.DoesColumnExist("autofill_profiles", "language_code")); 2594a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2595a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Data should have been preserved. Language code should have been set to 2596a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // empty string. 2597a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch sql::Statement s_profiles( 2598a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch connection.GetUniqueStatement( 2599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "SELECT guid, company_name, street_address, dependent_locality," 2600a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " city, state, zipcode, sorting_code, country_code, date_modified," 2601a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " origin, language_code " 2602a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "FROM autofill_profiles")); 2603a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2604a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(s_profiles.Step()); 2605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ("00000000-0000-0000-0000-000000000001", 2606a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch s_profiles.ColumnString(0)); 2607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("Google Inc"), s_profiles.ColumnString16(1)); 2608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("340 Main St"), 2609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch s_profiles.ColumnString16(2)); 2610a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3)); 2611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("Los Angeles"), s_profiles.ColumnString16(4)); 2612a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("CA"), s_profiles.ColumnString16(5)); 2613a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("90291"), s_profiles.ColumnString16(6)); 2614a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7)); 2615a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("US"), s_profiles.ColumnString16(8)); 2616a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1395948829, s_profiles.ColumnInt(9)); 2617a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10)); 2618a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(std::string(), s_profiles.ColumnString(11)); 2619a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 2620a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // No more entries expected. 2621a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_FALSE(s_profiles.Step()); 2622a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 2623a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 26246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Tests that migrating from version 56 to version 57 adds the full_name 26266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// column to autofill_profile_names table. 26276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(WebDatabaseMigrationTest, MigrateVersion56ToCurrent) { 26286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_56.sql"))); 26296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Verify pre-conditions. These are expectations for version 56 of the 26316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // database. 26326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) { 26336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) sql::Connection connection; 26346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 26356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 26366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE( 26386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) connection.DoesColumnExist("autofill_profile_names", "full_name")); 26396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Verify the starting data. 26416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) sql::Statement s_names( 26426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) connection.GetUniqueStatement( 26436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "SELECT guid, first_name, middle_name, last_name " 26446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "FROM autofill_profile_names")); 26456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(s_names.Step()); 26466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("B41FE6E0-B13E-2A2A-BF0B-29FCE2C3ADBD", s_names.ColumnString(0)); 26476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Jon"), s_names.ColumnString16(1)); 26486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(base::string16(), s_names.ColumnString16(2)); 26496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Smith"), s_names.ColumnString16(3)); 26506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 26516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DoMigration(); 26536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Verify post-conditions. These are expectations for current version of the 26556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // database. 26566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) { 26576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) sql::Connection connection; 26586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(connection.Open(GetDatabasePath())); 26596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 26606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Check version. 26626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 26636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // The full_name column should have been added to autofill_profile_names 26656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // table. 26666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE( 26676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) connection.DoesColumnExist("autofill_profile_names", "full_name")); 26686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Data should have been preserved. Full name should have been set to the 26706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // empty string. 26716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) sql::Statement s_names( 26726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) connection.GetUniqueStatement( 26736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "SELECT guid, first_name, middle_name, last_name, full_name " 26746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "FROM autofill_profile_names")); 26756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(s_names.Step()); 26776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("B41FE6E0-B13E-2A2A-BF0B-29FCE2C3ADBD", s_names.ColumnString(0)); 26786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Jon"), s_names.ColumnString16(1)); 26796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(base::string16(), s_names.ColumnString16(2)); 26806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Smith"), s_names.ColumnString16(3)); 26816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(base::string16(), s_names.ColumnString16(4)); 26826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 26836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // No more entries expected. 26846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(s_names.Step()); 26856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 26866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 2687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Tests that migrating from version 57 to version 58 drops the web_intents and 2689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// web_apps tables. 2690116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(WebDatabaseMigrationTest, MigrateVersion57ToCurrent) { 2691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_57.sql"))); 2692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify pre-conditions. These are expectations for version 57 of the 2694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // database. 2695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 2696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sql::Connection connection; 2697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 2698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(connection.DoesTableExist("web_apps")); 2701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(connection.DoesTableExist("web_app_icons")); 2702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(connection.DoesTableExist("web_intents")); 2703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(connection.DoesTableExist("web_intents_defaults")); 2704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 2705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DoMigration(); 2707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify post-conditions. These are expectations for current version of the 2709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // database. 2710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 2711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sql::Connection connection; 2712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(connection.Open(GetDatabasePath())); 2713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection)); 2714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Check version. 2716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); 2717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_apps")); 2719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_app_icons")); 2720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents")); 2721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(connection.DoesTableExist("web_intents_defaults")); 2722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 2723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 2724