This source file includes following definitions.
- AutofillProfile31FromStatement
- AutofillProfile33FromStatement
- CreditCard31FromStatement
- CreditCard32FromStatement
- CheckHasBackupData
- CheckNoBackupData
- RemoveQuotes
- SetUp
- DoMigration
- GetDatabasePath
- GetWebDatabaseData
- VersionFromConnection
- LoadDatabase
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
- TEST_F
#include <string>
#include "base/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/guid.h"
#include "base/message_loop/message_loop.h"
#include "base/path_service.h"
#include "base/stl_util.h"
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "base/values.h"
#include "chrome/browser/webdata/keyword_table.h"
#include "chrome/browser/webdata/logins_table.h"
#include "chrome/browser/webdata/web_apps_table.h"
#include "chrome/browser/webdata/web_intents_table.h"
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/credit_card.h"
#include "components/autofill/core/browser/webdata/autofill_change.h"
#include "components/autofill/core/browser/webdata/autofill_entry.h"
#include "components/autofill/core/browser/webdata/autofill_table.h"
#include "components/signin/core/browser/webdata/token_service_table.h"
#include "components/webdata/common/web_database.h"
#include "sql/statement.h"
#include "testing/gtest/include/gtest/gtest.h"
using autofill::AutofillProfile;
using autofill::AutofillTable;
using autofill::CreditCard;
using base::ASCIIToUTF16;
using base::Time;
namespace {
void AutofillProfile31FromStatement(const sql::Statement& s,
AutofillProfile* profile,
base::string16* label,
int* unique_id,
int64* date_modified) {
DCHECK(profile);
DCHECK(label);
DCHECK(unique_id);
DCHECK(date_modified);
*label = s.ColumnString16(0);
*unique_id = s.ColumnInt(1);
profile->SetRawInfo(autofill::NAME_FIRST, s.ColumnString16(2));
profile->SetRawInfo(autofill::NAME_MIDDLE, s.ColumnString16(3));
profile->SetRawInfo(autofill::NAME_LAST, s.ColumnString16(4));
profile->SetRawInfo(autofill::EMAIL_ADDRESS, s.ColumnString16(5));
profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(6));
profile->SetRawInfo(autofill::ADDRESS_HOME_LINE1, s.ColumnString16(7));
profile->SetRawInfo(autofill::ADDRESS_HOME_LINE2, s.ColumnString16(8));
profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(9));
profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(10));
profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(11));
profile->SetInfo(
autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY),
s.ColumnString16(12), "en-US");
profile->SetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13));
*date_modified = s.ColumnInt64(15);
profile->set_guid(s.ColumnString(16));
EXPECT_TRUE(base::IsValidGUID(profile->guid()));
}
void AutofillProfile33FromStatement(const sql::Statement& s,
AutofillProfile* profile,
int64* date_modified) {
DCHECK(profile);
DCHECK(date_modified);
profile->set_guid(s.ColumnString(0));
EXPECT_TRUE(base::IsValidGUID(profile->guid()));
profile->SetRawInfo(autofill::COMPANY_NAME, s.ColumnString16(1));
profile->SetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS,
s.ColumnString16(2));
profile->SetRawInfo(autofill::ADDRESS_HOME_CITY, s.ColumnString16(3));
profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(4));
profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(5));
profile->SetInfo(
autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY),
s.ColumnString16(6), "en-US");
*date_modified = s.ColumnInt64(7);
}
void CreditCard31FromStatement(const sql::Statement& s,
CreditCard* credit_card,
base::string16* label,
int* unique_id,
std::string* encrypted_number,
int64* date_modified) {
DCHECK(credit_card);
DCHECK(label);
DCHECK(unique_id);
DCHECK(encrypted_number);
DCHECK(date_modified);
*label = s.ColumnString16(0);
*unique_id = s.ColumnInt(1);
credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(2));
credit_card->SetRawInfo(autofill::CREDIT_CARD_TYPE, s.ColumnString16(3));
credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(5));
credit_card->SetRawInfo(
autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(6));
int encrypted_number_len = s.ColumnByteLength(10);
if (encrypted_number_len) {
encrypted_number->resize(encrypted_number_len);
memcpy(&(*encrypted_number)[0], s.ColumnBlob(10), encrypted_number_len);
}
*date_modified = s.ColumnInt64(12);
credit_card->set_guid(s.ColumnString(13));
EXPECT_TRUE(base::IsValidGUID(credit_card->guid()));
}
void CreditCard32FromStatement(const sql::Statement& s,
CreditCard* credit_card,
std::string* encrypted_number,
int64* date_modified) {
DCHECK(credit_card);
DCHECK(encrypted_number);
DCHECK(date_modified);
credit_card->set_guid(s.ColumnString(0));
EXPECT_TRUE(base::IsValidGUID(credit_card->guid()));
credit_card->SetRawInfo(autofill::CREDIT_CARD_NAME, s.ColumnString16(1));
credit_card->SetRawInfo(autofill::CREDIT_CARD_EXP_MONTH, s.ColumnString16(2));
credit_card->SetRawInfo(
autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, s.ColumnString16(3));
int encrypted_number_len = s.ColumnByteLength(4);
if (encrypted_number_len) {
encrypted_number->resize(encrypted_number_len);
memcpy(&(*encrypted_number)[0], s.ColumnBlob(4), encrypted_number_len);
}
*date_modified = s.ColumnInt64(5);
}
void CheckHasBackupData(sql::MetaTable* meta_table) {
std::string value;
EXPECT_TRUE(meta_table->GetValue(
"Default Search Provider ID Backup", &value));
EXPECT_TRUE(meta_table->GetValue(
"Default Search Provider ID Backup Signature", &value));
}
void CheckNoBackupData(const sql::Connection& connection,
sql::MetaTable* meta_table) {
std::string value;
EXPECT_FALSE(meta_table->GetValue(
"Default Search Provider ID Backup", &value));
EXPECT_FALSE(meta_table->GetValue(
"Default Search Provider ID Backup Signature", &value));
EXPECT_FALSE(connection.DoesTableExist("keywords_backup"));
}
std::string RemoveQuotes(const std::string& has_quotes) {
static const char kQuotes[] = "\"[]`";
std::string no_quotes;
base::RemoveChars(has_quotes, kQuotes, &no_quotes);
return no_quotes;
}
}
class WebDatabaseMigrationTest : public testing::Test {
public:
WebDatabaseMigrationTest() {}
virtual ~WebDatabaseMigrationTest() {}
virtual void SetUp() {
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
}
void DoMigration() {
AutofillTable autofill_table("en-US");
KeywordTable keyword_table;
LoginsTable logins_table;
TokenServiceTable token_service_table;
WebAppsTable web_apps_table;
WebIntentsTable web_intents_table;
WebDatabase db;
db.AddTable(&autofill_table);
db.AddTable(&keyword_table);
db.AddTable(&logins_table);
db.AddTable(&token_service_table);
db.AddTable(&web_apps_table);
db.AddTable(&web_intents_table);
ASSERT_EQ(sql::INIT_OK, db.Init(GetDatabasePath()));
}
protected:
static const int kCurrentTestedVersionNumber;
base::FilePath GetDatabasePath() {
const base::FilePath::CharType kWebDatabaseFilename[] =
FILE_PATH_LITERAL("TestWebDatabase.sqlite3");
return temp_dir_.path().Append(base::FilePath(kWebDatabaseFilename));
}
bool GetWebDatabaseData(const base::FilePath& file, std::string* contents) {
base::FilePath source_path;
PathService::Get(base::DIR_SOURCE_ROOT, &source_path);
source_path = source_path.AppendASCII("components");
source_path = source_path.AppendASCII("test");
source_path = source_path.AppendASCII("data");
source_path = source_path.AppendASCII("web_database");
source_path = source_path.Append(file);
return base::PathExists(source_path) &&
base::ReadFileToString(source_path, contents);
}
static int VersionFromConnection(sql::Connection* connection) {
sql::Statement s(connection->GetUniqueStatement(
"SELECT value FROM meta WHERE key='version'"));
if (!s.Step())
return 0;
return s.ColumnInt(0);
}
void LoadDatabase(const base::FilePath::StringType& file);
private:
base::ScopedTempDir temp_dir_;
DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest);
};
const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 55;
void WebDatabaseMigrationTest::LoadDatabase(
const base::FilePath::StringType& file) {
std::string contents;
ASSERT_TRUE(GetWebDatabaseData(base::FilePath(file), &contents));
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(connection.Execute(contents.data()));
}
TEST_F(WebDatabaseMigrationTest, VersionXxSqlFilesAreGolden) {
DoMigration();
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
const std::string& expected_schema = RemoveQuotes(connection.GetSchema());
static const int kFirstVersion = 53;
for (int i = kFirstVersion; i < kCurrentTestedVersionNumber; ++i) {
connection.Raze();
const base::FilePath& file_name = base::FilePath::FromUTF8Unsafe(
"version_" + base::IntToString(i) + ".sql");
ASSERT_NO_FATAL_FAILURE(LoadDatabase(file_name.value()))
<< "Failed to load " << file_name.MaybeAsASCII();
DoMigration();
EXPECT_EQ(expected_schema, RemoveQuotes(connection.GetSchema()));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateEmptyToCurrent) {
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesTableExist("autofill"));
EXPECT_FALSE(connection.DoesTableExist("autofill_dates"));
EXPECT_TRUE(connection.DoesTableExist("autofill_profiles"));
EXPECT_TRUE(connection.DoesTableExist("credit_cards"));
EXPECT_TRUE(connection.DoesTableExist("keywords"));
EXPECT_FALSE(connection.DoesTableExist("logins"));
EXPECT_TRUE(connection.DoesTableExist("meta"));
EXPECT_TRUE(connection.DoesTableExist("token_service"));
EXPECT_TRUE(connection.DoesTableExist("web_app_icons"));
EXPECT_TRUE(connection.DoesTableExist("web_apps"));
EXPECT_TRUE(connection.DoesTableExist("web_intents"));
EXPECT_TRUE(connection.DoesTableExist("web_intents_defaults"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion20ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_20.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_FALSE(connection.DoesTableExist("autofill"));
EXPECT_FALSE(connection.DoesTableExist("autofill_profiles"));
EXPECT_FALSE(connection.DoesTableExist("credit_cards"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesTableExist("autofill"));
EXPECT_TRUE(connection.DoesTableExist("autofill_profiles"));
EXPECT_TRUE(connection.DoesTableExist("credit_cards"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion21ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_21.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
sql::Statement s_autofill(connection.GetUniqueStatement(
"SELECT name, value, value_lower, pair_id, count FROM autofill"));
sql::Statement s_dates(connection.GetUniqueStatement(
"SELECT pair_id, date_created FROM autofill_dates"));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("John Doe"), s_autofill.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2));
EXPECT_EQ(10, s_autofill.ColumnInt(3));
EXPECT_EQ(1, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(10, s_dates.ColumnInt(0));
EXPECT_EQ(1384299100, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0));
EXPECT_EQ(base::string16(), s_autofill.ColumnString16(1));
EXPECT_EQ(base::string16(), s_autofill.ColumnString16(2));
EXPECT_EQ(11, s_autofill.ColumnInt(3));
EXPECT_EQ(1, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(11, s_dates.ColumnInt(0));
EXPECT_EQ(1384299200, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(2));
EXPECT_EQ(20, s_autofill.ColumnInt(3));
EXPECT_EQ(3, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(20, s_dates.ColumnInt(0));
EXPECT_EQ(1384299300, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(20, s_dates.ColumnInt(0));
EXPECT_EQ(1384299301, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0));
EXPECT_EQ(base::string16(), s_autofill.ColumnString16(1));
EXPECT_EQ(base::string16(), s_autofill.ColumnString16(2));
EXPECT_EQ(21, s_autofill.ColumnInt(3));
EXPECT_EQ(4, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299401, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299400, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299403, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299402, s_dates.ColumnInt64(1));
ASSERT_FALSE(s_autofill.Step());
ASSERT_FALSE(s_dates.Step());
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::Statement s(
connection.GetUniqueStatement(
"SELECT name, value, value_lower, date_created, date_last_used,"
" count "
"FROM autofill "
"ORDER BY name, value ASC"));
ASSERT_TRUE(s.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(2));
EXPECT_EQ(1384299300, s.ColumnInt64(3));
EXPECT_EQ(1384299301, s.ColumnInt64(4));
EXPECT_EQ(3, s.ColumnInt(5));
ASSERT_TRUE(s.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("John Doe"), s.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2));
EXPECT_EQ(1384299100, s.ColumnInt64(3));
EXPECT_EQ(1384299100, s.ColumnInt64(4));
EXPECT_EQ(1, s.ColumnInt(5));
ASSERT_FALSE(s.Step());
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion22ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_22.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "guid"));
ASSERT_FALSE(
connection.DoesColumnExist("credit_cards", "card_number_encrypted"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid"));
EXPECT_TRUE(
connection.DoesColumnExist("credit_cards", "card_number_encrypted"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion22CorruptedToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_22_corrupt.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id"));
ASSERT_TRUE(
connection.DoesColumnExist("credit_cards", "card_number_encrypted"));
ASSERT_TRUE(connection.DoesColumnExist("keywords", "id"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid"));
EXPECT_TRUE(
connection.DoesColumnExist("credit_cards", "card_number_encrypted"));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "id"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion25ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_25.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "id"));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address"));
std::string stmt = "INSERT INTO autofill_profiles"
"(label, unique_id, first_name, middle_name, last_name, email,"
" company_name, address_line_1, address_line_2, city, state, zipcode,"
" country, phone, fax)"
"VALUES ('Home',1,'','','','','','','','','','','','','')";
sql::Statement s(connection.GetUniqueStatement(stmt.c_str()));
ASSERT_TRUE(s.Run());
std::string stmt2 = "INSERT INTO credit_cards"
"(label, unique_id, name_on_card, type, card_number,"
" expiration_month, expiration_year, verification_code, billing_address,"
" shipping_address, card_number_encrypted, verification_code_encrypted)"
"VALUES ('label',2,'Jack','Visa','1234',2,2012,'','Home','','','')";
sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str()));
ASSERT_TRUE(s2.Run());
std::string stmt3 = "SELECT billing_address FROM credit_cards";
sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str()));
ASSERT_TRUE(s3.Step());
EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT);
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address"));
sql::Statement s(connection.GetUniqueStatement(
"SELECT guid, name_on_card, expiration_month, expiration_year, "
"card_number_encrypted, date_modified "
"FROM credit_cards"));
ASSERT_TRUE(s.Step());
EXPECT_EQ("Jack", s.ColumnString(1));
EXPECT_EQ(2, s.ColumnInt(2));
EXPECT_EQ(2012, s.ColumnInt(3));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringIDs) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_26.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address"));
std::string stmt = "INSERT INTO autofill_profiles"
"(label, unique_id, first_name, middle_name, last_name, email,"
" company_name, address_line_1, address_line_2, city, state, zipcode,"
" country, phone, fax)"
"VALUES ('Home',1,'','','','','','','','','','','','','')";
sql::Statement s(connection.GetUniqueStatement(stmt.c_str()));
ASSERT_TRUE(s.Run());
std::string stmt2 = "INSERT INTO credit_cards"
"(label, unique_id, name_on_card, type, card_number,"
" expiration_month, expiration_year, verification_code, billing_address,"
" shipping_address, card_number_encrypted, verification_code_encrypted)"
"VALUES ('label',2,'Jack','Visa','1234',2,2012,'','1','','','')";
sql::Statement s2(connection.GetUniqueStatement(stmt2.c_str()));
ASSERT_TRUE(s2.Run());
std::string stmt3 = "SELECT billing_address FROM credit_cards";
sql::Statement s3(connection.GetUniqueStatement(stmt3.c_str()));
ASSERT_TRUE(s3.Step());
EXPECT_EQ(s3.ColumnType(0), sql::COLUMN_TYPE_TEXT);
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "id"));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address"));
sql::Statement s(connection.GetUniqueStatement(
"SELECT guid, name_on_card, expiration_month, expiration_year, "
"card_number_encrypted, date_modified "
"FROM credit_cards"));
ASSERT_TRUE(s.Step());
EXPECT_EQ("Jack", s.ColumnString(1));
EXPECT_EQ(2, s.ColumnInt(2));
EXPECT_EQ(2012, s.ColumnInt(3));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion27ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_27.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_FALSE(connection.DoesColumnExist("keywords", "instant_url"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_FALSE(connection.DoesColumnExist("keywords", "supports_instant"));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "instant_url"));
std::string stmt = "SELECT instant_url FROM keywords";
sql::Statement s(connection.GetUniqueStatement(stmt.c_str()));
ASSERT_TRUE(s.Step());
EXPECT_EQ(std::string(), s.ColumnString(0));
stmt = "SELECT " + KeywordTable::GetKeywordColumns() + " FROM keywords";
sql::Statement s2(connection.GetUniqueStatement(stmt.c_str()));
ASSERT_TRUE(s2.Step());
EXPECT_EQ(2, s2.ColumnInt(0));
EXPECT_EQ("Google", s2.ColumnString(1));
EXPECT_EQ("google.com", s2.ColumnString(2));
EXPECT_EQ("http://www.google.com/favicon.ico", s2.ColumnString(3));
EXPECT_EQ("{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}"\
"{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}"\
"&q={searchTerms}",
s2.ColumnString(4));
EXPECT_TRUE(s2.ColumnBool(5));
EXPECT_EQ(std::string(), s2.ColumnString(6));
EXPECT_EQ(0, s2.ColumnInt(7));
EXPECT_EQ(0, s2.ColumnInt(8));
EXPECT_EQ(std::string("UTF-8"), s2.ColumnString(9));
EXPECT_TRUE(s2.ColumnBool(10));
EXPECT_EQ(std::string("{google:baseSuggestURL}search?client=chrome&hl="
"{language}&q={searchTerms}"), s2.ColumnString(11));
EXPECT_EQ(1, s2.ColumnInt(12));
EXPECT_FALSE(s2.ColumnBool(13));
EXPECT_EQ(std::string(), s2.ColumnString(14));
EXPECT_EQ(0, s2.ColumnInt(15));
EXPECT_EQ(std::string(), s2.ColumnString(16));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion29ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_29.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles",
"date_modified"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards",
"date_modified"));
}
Time pre_creation_time = Time::Now();
DoMigration();
Time post_creation_time = Time::Now();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"date_modified"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards",
"date_modified"));
sql::Statement s_profiles(connection.GetUniqueStatement(
"SELECT date_modified FROM autofill_profiles "));
ASSERT_TRUE(s_profiles.is_valid());
while (s_profiles.Step()) {
EXPECT_GE(s_profiles.ColumnInt64(0),
pre_creation_time.ToTimeT());
EXPECT_LE(s_profiles.ColumnInt64(0),
post_creation_time.ToTimeT());
}
EXPECT_TRUE(s_profiles.Succeeded());
sql::Statement s_credit_cards(connection.GetUniqueStatement(
"SELECT date_modified FROM credit_cards "));
ASSERT_TRUE(s_credit_cards.is_valid());
while (s_credit_cards.Step()) {
EXPECT_GE(s_credit_cards.ColumnInt64(0),
pre_creation_time.ToTimeT());
EXPECT_LE(s_credit_cards.ColumnInt64(0),
post_creation_time.ToTimeT());
}
EXPECT_TRUE(s_credit_cards.Succeeded());
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion30ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_30.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "guid"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "guid"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
ASSERT_TRUE(connection.DoesColumnExist("credit_cards", "guid"));
sql::Statement s(
connection.GetUniqueStatement("SELECT guid FROM autofill_profiles"));
ASSERT_TRUE(s.Step());
std::string guid1 = s.ColumnString(0);
EXPECT_TRUE(base::IsValidGUID(guid1));
ASSERT_TRUE(s.Step());
std::string guid2 = s.ColumnString(0);
EXPECT_TRUE(base::IsValidGUID(guid2));
EXPECT_NE(guid1, guid2);
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_31.sql")));
AutofillProfile profile;
base::string16 profile_label;
int profile_unique_id = 0;
int64 profile_date_modified = 0;
CreditCard credit_card;
base::string16 cc_label;
int cc_unique_id = 0;
std::string cc_number_encrypted;
int64 cc_date_modified = 0;
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "unique_id"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "unique_id"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "type"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "card_number"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards",
"verification_code"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "billing_address"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "shipping_address"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards",
"verification_code_encrypted"));
sql::Statement s1(
connection.GetUniqueStatement(
"SELECT label, unique_id, first_name, middle_name, last_name, "
"email, company_name, address_line_1, address_line_2, city, state, "
"zipcode, country, phone, fax, date_modified, guid "
"FROM autofill_profiles"));
ASSERT_TRUE(s1.Step());
EXPECT_NO_FATAL_FAILURE(AutofillProfile31FromStatement(
s1, &profile, &profile_label, &profile_unique_id,
&profile_date_modified));
sql::Statement s2(
connection.GetUniqueStatement(
"SELECT label, unique_id, name_on_card, type, card_number, "
"expiration_month, expiration_year, verification_code, "
"billing_address, shipping_address, card_number_encrypted, "
"verification_code_encrypted, date_modified, guid "
"FROM credit_cards"));
ASSERT_TRUE(s2.Step());
EXPECT_NO_FATAL_FAILURE(CreditCard31FromStatement(s2,
&credit_card,
&cc_label,
&cc_unique_id,
&cc_number_encrypted,
&cc_date_modified));
EXPECT_NE(profile_unique_id, cc_unique_id);
EXPECT_NE(profile.guid(), credit_card.guid());
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "unique_id"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "guid"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "unique_id"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "type"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "card_number"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards",
"verification_code"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards",
"shipping_address"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards",
"verification_code_encrypted"));
sql::Statement s1(
connection.GetUniqueStatement(
"SELECT guid, company_name, street_address, city, state, zipcode,"
" country_code, date_modified "
"FROM autofill_profiles"));
ASSERT_TRUE(s1.Step());
AutofillProfile profile_a;
int64 profile_date_modified_a = 0;
EXPECT_NO_FATAL_FAILURE(AutofillProfile33FromStatement(
s1, &profile_a, &profile_date_modified_a));
EXPECT_EQ(profile.guid(), profile_a.guid());
EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME),
profile_a.GetRawInfo(autofill::COMPANY_NAME));
EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE1),
profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE1));
EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_LINE2),
profile_a.GetRawInfo(autofill::ADDRESS_HOME_LINE2));
EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_CITY),
profile_a.GetRawInfo(autofill::ADDRESS_HOME_CITY));
EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_STATE),
profile_a.GetRawInfo(autofill::ADDRESS_HOME_STATE));
EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_ZIP),
profile_a.GetRawInfo(autofill::ADDRESS_HOME_ZIP));
EXPECT_EQ(profile.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY),
profile_a.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY));
EXPECT_EQ(profile_date_modified, profile_date_modified_a);
sql::Statement s2(
connection.GetUniqueStatement(
"SELECT guid, name_on_card, expiration_month, "
"expiration_year, card_number_encrypted, date_modified "
"FROM credit_cards"));
ASSERT_TRUE(s2.Step());
CreditCard credit_card_a;
base::string16 cc_label_a;
std::string cc_number_encrypted_a;
int64 cc_date_modified_a = 0;
EXPECT_NO_FATAL_FAILURE(CreditCard32FromStatement(s2,
&credit_card_a,
&cc_number_encrypted_a,
&cc_date_modified_a));
EXPECT_EQ(credit_card, credit_card_a);
EXPECT_EQ(cc_label, cc_label_a);
EXPECT_EQ(cc_number_encrypted, cc_number_encrypted_a);
EXPECT_EQ(cc_date_modified, cc_date_modified_a);
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion32ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_32.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "label"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "first_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "middle_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "last_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "email"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"company_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"address_line_1"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"address_line_2"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "phone"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "fax"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"date_modified"));
EXPECT_FALSE(connection.DoesTableExist("autofill_profile_names"));
EXPECT_FALSE(connection.DoesTableExist("autofill_profile_emails"));
EXPECT_FALSE(connection.DoesTableExist("autofill_profile_phones"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "label"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "label"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "first_name"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles",
"middle_name"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "last_name"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "email"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"company_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"street_address"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"country_code"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "phone"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "fax"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"date_modified"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", "guid"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names",
"first_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names",
"middle_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names",
"last_name"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "guid"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "email"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "guid"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones",
"number"));
EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "label"));
sql::Statement s1(
connection.GetUniqueStatement(
"SELECT guid, company_name, street_address, city, state, zipcode, "
" country_code, date_modified "
"FROM autofill_profiles"));
ASSERT_TRUE(s1.Step());
EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s1.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("Doe Enterprises"), s1.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("1 Main St\n"
"Apt 1"),
s1.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6));
EXPECT_EQ(1297882100L, s1.ColumnInt64(7));
ASSERT_TRUE(s1.Step());
EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s1.ColumnString(0));
EXPECT_EQ(base::string16(), s1.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("2 Main Street"), s1.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6));
EXPECT_EQ(1297882100L, s1.ColumnInt64(7));
ASSERT_TRUE(s1.Step());
EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s1.ColumnString(0));
EXPECT_EQ(base::string16(), s1.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("2 Main St"), s1.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6));
EXPECT_EQ(1297882100L, s1.ColumnInt64(7));
ASSERT_TRUE(s1.Step());
EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s1.ColumnString(0));
EXPECT_EQ(base::string16(), s1.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("3 Main St"), s1.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6));
EXPECT_EQ(1297882100L, s1.ColumnInt64(7));
EXPECT_FALSE(s1.Step());
sql::Statement s2(
connection.GetUniqueStatement(
"SELECT guid, first_name, middle_name, last_name "
"FROM autofill_profile_names"));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1));
EXPECT_EQ(base::string16(), s2.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("P."), s2.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s2.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1));
EXPECT_EQ(base::string16(), s2.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s2.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1));
EXPECT_EQ(base::string16(), s2.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s2.ColumnString(0));
EXPECT_EQ(base::string16(), s2.ColumnString16(1));
EXPECT_EQ(base::string16(), s2.ColumnString16(2));
EXPECT_EQ(base::string16(), s2.ColumnString16(3));
EXPECT_FALSE(s2.Step());
sql::Statement s3(
connection.GetUniqueStatement(
"SELECT guid, email "
"FROM autofill_profile_emails"));
ASSERT_TRUE(s3.Step());
EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s3.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("john@doe.com"), s3.ColumnString16(1));
ASSERT_TRUE(s3.Step());
EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s3.ColumnString(0));
EXPECT_EQ(base::string16(), s3.ColumnString16(1));
ASSERT_TRUE(s3.Step());
EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s3.ColumnString(0));
EXPECT_EQ(base::string16(), s3.ColumnString16(1));
ASSERT_TRUE(s3.Step());
EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s3.ColumnString(0));
EXPECT_EQ(base::string16(), s3.ColumnString16(1));
EXPECT_FALSE(s3.Step());
sql::Statement s4(
connection.GetUniqueStatement(
"SELECT guid, number "
"FROM autofill_profile_phones"));
ASSERT_TRUE(s4.Step());
EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(1));
ASSERT_TRUE(s4.Step());
EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0));
EXPECT_EQ(base::string16(), s4.ColumnString16(1));
ASSERT_TRUE(s4.Step());
EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0));
EXPECT_EQ(0, s4.ColumnInt(1));
EXPECT_EQ(base::string16(), s4.ColumnString16(2));
ASSERT_TRUE(s4.Step());
EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0));
EXPECT_EQ(base::string16(), s4.ColumnString16(1));
EXPECT_FALSE(s4.Step());
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion33ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_33.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles",
"country_code"));
sql::Statement s(
connection.GetUniqueStatement("SELECT country FROM autofill_profiles"));
ASSERT_TRUE(s.Step());
std::string country = s.ColumnString(0);
EXPECT_EQ("United States", country);
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles",
"country_code"));
sql::Statement s(connection.GetUniqueStatement(
"SELECT country_code FROM autofill_profiles"));
ASSERT_TRUE(s.Step());
std::string country_code = s.ColumnString(0);
EXPECT_EQ("US", country_code);
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion34ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_34.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles",
"country_code"));
sql::Statement s(
connection.GetUniqueStatement("SELECT country_code "
"FROM autofill_profiles"));
ASSERT_TRUE(s.Step());
std::string country_code = s.ColumnString(0);
EXPECT_EQ("UK", country_code);
ASSERT_FALSE(s.Step());
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles",
"country_code"));
sql::Statement s(connection.GetUniqueStatement(
"SELECT country_code FROM autofill_profiles"));
ASSERT_TRUE(s.Step());
std::string country_code = s.ColumnString(0);
EXPECT_EQ("GB", country_code);
ASSERT_FALSE(s.Step());
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion35ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_35.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_FALSE(connection.DoesTableExist("autofill_profiles_trash"));
ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
sql::Statement s(
connection.GetUniqueStatement("SELECT guid FROM autofill_profiles"));
int i = 0;
while (s.Step())
++i;
EXPECT_EQ(6, i);
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
ASSERT_TRUE(connection.DoesTableExist("autofill_profiles_trash"));
ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles_trash", "guid"));
ASSERT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid"));
sql::Statement s1(
connection.GetUniqueStatement(
"SELECT guid, company_name, street_address, city, state, zipcode,"
" country_code, date_modified "
"FROM autofill_profiles"));
ASSERT_TRUE(s1.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000001", s1.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("Acme Inc."), s1.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("1 Main Street\n"
"Apt 2"),
s1.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("San Francisco"), s1.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("94102"), s1.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("US"), s1.ColumnString16(6));
EXPECT_EQ(1300131704, s1.ColumnInt64(7));
ASSERT_FALSE(s1.Step());
sql::Statement s2(
connection.GetUniqueStatement("SELECT guid "
"FROM autofill_profiles_trash"));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000002", s2.ColumnString(0));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000003", s2.ColumnString(0));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000004", s2.ColumnString(0));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000005", s2.ColumnString(0));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000006", s2.ColumnString(0));
ASSERT_FALSE(s2.Step());
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion37ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_37.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(connection.DoesColumnExist("keywords", "id"));
ASSERT_FALSE(connection.DoesColumnExist("keywords", "last_modified"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "id"));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "last_modified"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion38ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_38.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(connection.DoesColumnExist("keywords", "id"));
ASSERT_FALSE(connection.DoesColumnExist("keywords", "sync_guid"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "id"));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "sync_guid"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion39ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_39.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 39, 39));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(0, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion40ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_40.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 40, 40));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(0, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion41ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_41.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 41, 41));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(0, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion42ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_42.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 42, 42));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table));
EXPECT_FALSE(connection.DoesTableExist("keywords_backup"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(0, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion43ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_43.sql")));
int64 previous_default_search_provider_id;
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 43, 43));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(default_search_provider_id, 0);
previous_default_search_provider_id = default_search_provider_id;
EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table));
EXPECT_TRUE(connection.DoesTableExist("keywords_backup"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(
&connection,
kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_EQ(previous_default_search_provider_id, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion44ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_44.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 44, 44));
ASSERT_TRUE(connection.DoesColumnExist("keywords", "autogenerate_keyword"));
ASSERT_TRUE(connection.DoesColumnExist("keywords", "logo_id"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
std::string default_search_provider_backup;
EXPECT_FALSE(meta_table.GetValue("Default Search Provider Backup",
&default_search_provider_backup));
EXPECT_FALSE(connection.DoesColumnExist("keywords",
"autogenerate_keyword"));
EXPECT_FALSE(connection.DoesColumnExist("keywords", "logo_id"));
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion45ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_45.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 45, 45));
ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents"));
ASSERT_FALSE(connection.DoesColumnExist(
"scheme", "web_intents_defaults"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(
&connection,
kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
EXPECT_TRUE(connection.DoesColumnExist("web_intents", "scheme"));
EXPECT_TRUE(connection.DoesColumnExist("web_intents_defaults", "scheme"));
sql::Statement s1(
connection.GetUniqueStatement("SELECT * FROM web_intents"));
ASSERT_TRUE(s1.Step());
EXPECT_EQ("http://poodles.com/fuzzer", s1.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("fuzz"), s1.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("poodle/*"), s1.ColumnString16(2));
EXPECT_EQ(ASCIIToUTF16("Poodle Fuzzer"), s1.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("window"), s1.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(5));
ASSERT_FALSE(s1.Step());
sql::Statement s2(
connection.GetUniqueStatement("SELECT * FROM web_intents_defaults"));
ASSERT_TRUE(s2.Step());
EXPECT_EQ("fuzz", s2.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("poodle/*"), s2.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(2));
EXPECT_EQ(0, s2.ColumnInt(3));
EXPECT_EQ(0, s2.ColumnInt(4));
EXPECT_EQ(ASCIIToUTF16("http://poodles.com/fuzzer"), s2.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(6));
ASSERT_FALSE(s2.Step());
EXPECT_FALSE(connection.DoesTableExist("old_web_intents"));
EXPECT_FALSE(connection.DoesTableExist("old_web_intents_defaults"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion45InvalidToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_45_invalid.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 45, 45));
ASSERT_FALSE(connection.DoesColumnExist("scheme", "web_intents"));
ASSERT_FALSE(connection.DoesColumnExist(
"scheme", "web_intents_defaults"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(
&connection,
kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
EXPECT_TRUE(connection.DoesColumnExist("web_intents", "scheme"));
EXPECT_TRUE(connection.DoesColumnExist("web_intents_defaults", "scheme"));
sql::Statement s1(
connection.GetUniqueStatement("SELECT * FROM web_intents"));
ASSERT_FALSE(s1.Step());
sql::Statement s2(
connection.GetUniqueStatement("SELECT * FROM web_intents_defaults"));
ASSERT_FALSE(s2.Step());
EXPECT_FALSE(connection.DoesTableExist("old_web_intents"));
EXPECT_FALSE(connection.DoesTableExist("old_web_intents_defaults"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion45CompatibleToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_45_compatible.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 40, 45));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_LE(45, VersionFromConnection(&connection));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion46ToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_46.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 46, 46));
ASSERT_FALSE(connection.DoesColumnExist("keywords", "alternate_urls"));
ASSERT_FALSE(connection.DoesColumnExist("keywords_backup",
"alternate_urls"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "alternate_urls"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion47ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_47.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 47, 47));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(0, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckHasBackupData(&meta_table));
EXPECT_TRUE(connection.DoesTableExist("keywords_backup"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, kCurrentTestedVersionNumber,
kCurrentTestedVersionNumber));
int64 default_search_provider_id = 0;
EXPECT_TRUE(meta_table.GetValue(KeywordTable::kDefaultSearchProviderKey,
&default_search_provider_id));
EXPECT_NE(0, default_search_provider_id);
EXPECT_NO_FATAL_FAILURE(CheckNoBackupData(connection, &meta_table));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion48ToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_48.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 48, 48));
ASSERT_FALSE(connection.DoesColumnExist("keywords",
"search_terms_replacement_key"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords",
"search_terms_replacement_key"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion49ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_49.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_FALSE(connection.DoesColumnExist("autofill_profiles", "origin"));
ASSERT_FALSE(connection.DoesColumnExist("credit_cards", "origin"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "origin"));
EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "origin"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion50ToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_50.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 50, 50));
ASSERT_FALSE(connection.DoesColumnExist("keywords", "image_url"));
ASSERT_FALSE(connection.DoesColumnExist("keywords",
"search_url_post_params"));
ASSERT_FALSE(connection.DoesColumnExist("keywords",
"suggest_url_post_params"));
ASSERT_FALSE(connection.DoesColumnExist("keywords",
"instant_url_post_params"));
ASSERT_FALSE(connection.DoesColumnExist("keywords",
"image_url_post_params"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "image_url"));
EXPECT_TRUE(connection.DoesColumnExist("keywords",
"search_url_post_params"));
EXPECT_TRUE(connection.DoesColumnExist("keywords",
"suggest_url_post_params"));
EXPECT_TRUE(connection.DoesColumnExist("keywords",
"instant_url_post_params"));
EXPECT_TRUE(connection.DoesColumnExist("keywords",
"image_url_post_params"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion52ToCurrent) {
ASSERT_NO_FATAL_FAILURE(
LoadDatabase(FILE_PATH_LITERAL("version_52.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
sql::MetaTable meta_table;
ASSERT_TRUE(meta_table.Init(&connection, 52, 52));
ASSERT_FALSE(connection.DoesColumnExist("keywords", "new_tab_url"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_TRUE(connection.DoesColumnExist("keywords", "new_tab_url"));
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion53ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_53.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(
connection.DoesColumnExist("autofill_profiles", "address_line_1"));
EXPECT_TRUE(
connection.DoesColumnExist("autofill_profiles", "address_line_2"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country"));
EXPECT_FALSE(
connection.DoesColumnExist("autofill_profiles", "street_address"));
EXPECT_FALSE(
connection.DoesColumnExist("autofill_profiles", "dependent_locality"));
EXPECT_FALSE(
connection.DoesColumnExist("autofill_profiles", "sorting_code"));
EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "type"));
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_FALSE(
connection.DoesColumnExist("autofill_profiles", "address_line1"));
EXPECT_FALSE(
connection.DoesColumnExist("autofill_profiles", "address_line2"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "country"));
EXPECT_TRUE(
connection.DoesColumnExist("autofill_profiles", "street_address"));
EXPECT_TRUE(
connection.DoesColumnExist("autofill_profiles", "dependent_locality"));
EXPECT_TRUE(
connection.DoesColumnExist("autofill_profiles", "sorting_code"));
EXPECT_FALSE(connection.DoesColumnExist("autofill_profile_phones", "type"));
sql::Statement s_profiles(
connection.GetUniqueStatement(
"SELECT guid, company_name, street_address, dependent_locality,"
" city, state, zipcode, sorting_code, country_code, date_modified,"
" origin "
"FROM autofill_profiles"));
ASSERT_TRUE(s_profiles.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000001",
s_profiles.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("Google, Inc."), s_profiles.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("1950 Charleston Rd.\n"
"(2nd floor)"),
s_profiles.ColumnString16(2));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("Mountain View"), s_profiles.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("CA"), s_profiles.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("94043"), s_profiles.ColumnString16(6));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7));
EXPECT_EQ(ASCIIToUTF16("US"), s_profiles.ColumnString16(8));
EXPECT_EQ(1386046731, s_profiles.ColumnInt(9));
EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10));
ASSERT_TRUE(s_profiles.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000002",
s_profiles.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("Google!"), s_profiles.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("1600 Amphitheatre Pkwy."),
s_profiles.ColumnString16(2));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3));
EXPECT_EQ(ASCIIToUTF16("Mtn. View"), s_profiles.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("California"), s_profiles.ColumnString16(5));
EXPECT_EQ(ASCIIToUTF16("94043-1234"), s_profiles.ColumnString16(6));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7));
EXPECT_EQ(ASCIIToUTF16("US"), s_profiles.ColumnString16(8));
EXPECT_EQ(1386046800, s_profiles.ColumnInt(9));
EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10));
ASSERT_TRUE(s_profiles.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000003",
s_profiles.ColumnString(0));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("\nOnly line 2???"), s_profiles.ColumnString16(2));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(4));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(5));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(6));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(8));
EXPECT_EQ(1386046834, s_profiles.ColumnInt(9));
EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10));
ASSERT_TRUE(s_profiles.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000004",
s_profiles.ColumnString(0));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(1));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(2));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(3));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(4));
EXPECT_EQ(ASCIIToUTF16("Texas"), s_profiles.ColumnString16(5));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(6));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(7));
EXPECT_EQ(base::string16(), s_profiles.ColumnString16(8));
EXPECT_EQ(1386046847, s_profiles.ColumnInt(9));
EXPECT_EQ(ASCIIToUTF16("Chrome settings"), s_profiles.ColumnString16(10));
EXPECT_FALSE(s_profiles.Step());
sql::Statement s_phones(
connection.GetUniqueStatement(
"SELECT guid, number FROM autofill_profile_phones"));
ASSERT_TRUE(s_phones.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000001", s_phones.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("1.800.555.1234"), s_phones.ColumnString16(1));
ASSERT_TRUE(s_phones.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000001", s_phones.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("+1 (800) 555-4321"), s_phones.ColumnString16(1));
ASSERT_TRUE(s_phones.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000002", s_phones.ColumnString(0));
EXPECT_EQ(base::string16(), s_phones.ColumnString16(1));
ASSERT_TRUE(s_phones.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000003", s_phones.ColumnString(0));
EXPECT_EQ(ASCIIToUTF16("6505557890"), s_phones.ColumnString16(1));
ASSERT_TRUE(s_phones.Step());
EXPECT_EQ("00000000-0000-0000-0000-000000000004", s_phones.ColumnString(0));
EXPECT_EQ(base::string16(), s_phones.ColumnString16(1));
EXPECT_FALSE(s_phones.Step());
}
}
TEST_F(WebDatabaseMigrationTest, MigrateVersion54ToCurrent) {
ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_54.sql")));
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
EXPECT_TRUE(connection.DoesTableExist("autofill_dates"));
EXPECT_FALSE(connection.DoesColumnExist("autofill", "date_created"));
EXPECT_FALSE(connection.DoesColumnExist("autofill", "date_last_used"));
sql::Statement s_autofill(connection.GetUniqueStatement(
"SELECT name, value, value_lower, pair_id, count FROM autofill"));
sql::Statement s_dates(connection.GetUniqueStatement(
"SELECT pair_id, date_created FROM autofill_dates"));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("John Doe"), s_autofill.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2));
EXPECT_EQ(10, s_autofill.ColumnInt(3));
EXPECT_EQ(1, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(10, s_dates.ColumnInt(0));
EXPECT_EQ(1384299100, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s_autofill.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("john doe"), s_autofill.ColumnString16(2));
EXPECT_EQ(11, s_autofill.ColumnInt(3));
EXPECT_EQ(1, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(11, s_dates.ColumnInt(0));
EXPECT_EQ(1384299200, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s_autofill.ColumnString16(2));
EXPECT_EQ(20, s_autofill.ColumnInt(3));
EXPECT_EQ(3, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(20, s_dates.ColumnInt(0));
EXPECT_EQ(1384299300, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(20, s_dates.ColumnInt(0));
EXPECT_EQ(1384299301, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_autofill.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s_autofill.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"),
s_autofill.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"),
s_autofill.ColumnString16(2));
EXPECT_EQ(21, s_autofill.ColumnInt(3));
EXPECT_EQ(4, s_autofill.ColumnInt(4));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299401, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299400, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299403, s_dates.ColumnInt64(1));
ASSERT_TRUE(s_dates.Step());
EXPECT_EQ(21, s_dates.ColumnInt(0));
EXPECT_EQ(1384299402, s_dates.ColumnInt64(1));
ASSERT_FALSE(s_autofill.Step());
ASSERT_FALSE(s_dates.Step());
}
DoMigration();
{
sql::Connection connection;
ASSERT_TRUE(connection.Open(GetDatabasePath()));
ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
EXPECT_FALSE(connection.DoesTableExist("autofill_dates"));
EXPECT_TRUE(connection.DoesColumnExist("autofill", "date_created"));
EXPECT_TRUE(connection.DoesColumnExist("autofill", "date_last_used"));
sql::Statement s(
connection.GetUniqueStatement(
"SELECT name, value, value_lower, date_created, date_last_used,"
" count "
"FROM autofill "
"ORDER BY name, value ASC"));
ASSERT_TRUE(s.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"), s.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("jane.doe@example.org"), s.ColumnString16(2));
EXPECT_EQ(1384299400, s.ColumnInt64(3));
EXPECT_EQ(1384299403, s.ColumnInt64(4));
EXPECT_EQ(4, s.ColumnInt(5));
ASSERT_TRUE(s.Step());
EXPECT_EQ(ASCIIToUTF16("Email"), s.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("jane@example.com"), s.ColumnString16(2));
EXPECT_EQ(1384299300, s.ColumnInt64(3));
EXPECT_EQ(1384299301, s.ColumnInt64(4));
EXPECT_EQ(3, s.ColumnInt(5));
ASSERT_TRUE(s.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("John Doe"), s.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2));
EXPECT_EQ(1384299100, s.ColumnInt64(3));
EXPECT_EQ(1384299100, s.ColumnInt64(4));
EXPECT_EQ(1, s.ColumnInt(5));
ASSERT_TRUE(s.Step());
EXPECT_EQ(ASCIIToUTF16("Name"), s.ColumnString16(0));
EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(1));
EXPECT_EQ(ASCIIToUTF16("john doe"), s.ColumnString16(2));
EXPECT_EQ(1384299200, s.ColumnInt64(3));
EXPECT_EQ(1384299200, s.ColumnInt64(4));
EXPECT_EQ(1, s.ColumnInt(5));
ASSERT_FALSE(s.Step());
}
}