Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Unified Diff: components/password_manager/core/browser/login_database_unittest.cc

Issue 808173002: Add tests for version migration tesing in for LoginDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/password_manager/core/browser/login_database_unittest.cc
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc
index fda25fb27e65d839bed1d54ec4c879b2ce7e46c9..a519895f7b17af657115f258786cfd10fec97a3a 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -38,6 +38,36 @@ PasswordStoreChangeList UpdateChangeForForm(const PasswordForm& form) {
PasswordStoreChange::UPDATE, form));
}
+void FormsAreEqual(const PasswordForm& expected, const PasswordForm& actual) {
+ PasswordForm expected_copy(expected);
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+ // On the Mac we should never be storing passwords in the database.
+ expected_copy.password_value = ASCIIToUTF16("");
+#endif
+ EXPECT_EQ(expected_copy, actual);
+}
+
+void GenerateExamplePasswordForm(PasswordForm* form) {
+ form->origin = GURL("http://accounts.google.com/LoginAuth");
+ form->action = GURL("http://accounts.google.com/Login");
+ form->username_element = ASCIIToUTF16("Email");
+ form->username_value = ASCIIToUTF16("test@gmail.com");
+ form->password_element = ASCIIToUTF16("Passwd");
+ form->password_value = ASCIIToUTF16("test");
+ form->submit_element = ASCIIToUTF16("signIn");
+ form->signon_realm = "http://www.google.com/";
+ form->ssl_valid = false;
+ form->preferred = false;
+ form->scheme = PasswordForm::SCHEME_HTML;
+ form->times_used = 1;
+ form->form_data.name = ASCIIToUTF16("form_name");
+ form->date_synced = base::Time::Now();
+ form->display_name = ASCIIToUTF16("Mr. Smith");
+ form->avatar_url = GURL("https://accounts.google.com/Avatar");
+ form->federation_url = GURL("https://accounts.google.com/federation");
+ form->is_zero_click = true;
+}
+
} // namespace
// Serialization routines for vectors implemented in login_database.cc.
@@ -53,15 +83,6 @@ class LoginDatabaseTest : public testing::Test {
ASSERT_TRUE(db_.Init(file_));
}
- void FormsAreEqual(const PasswordForm& expected, const PasswordForm& actual) {
- PasswordForm expected_copy(expected);
-#if defined(OS_MACOSX) && !defined(OS_IOS)
- // On the Mac we should never be storing passwords in the database.
- expected_copy.password_value = ASCIIToUTF16("");
-#endif
- EXPECT_EQ(expected_copy, actual);
- }
-
void TestNonHTMLFormPSLMatching(const PasswordForm::Scheme& scheme) {
ScopedVector<PasswordForm> result;
@@ -151,24 +172,7 @@ TEST_F(LoginDatabaseTest, Logins) {
// Example password form.
PasswordForm form;
- form.origin = GURL("http://accounts.google.com/LoginAuth");
- form.action = GURL("http://accounts.google.com/Login");
- form.username_element = ASCIIToUTF16("Email");
- form.username_value = ASCIIToUTF16("test@gmail.com");
- form.password_element = ASCIIToUTF16("Passwd");
- form.password_value = ASCIIToUTF16("test");
- form.submit_element = ASCIIToUTF16("signIn");
- form.signon_realm = "http://www.google.com/";
- form.ssl_valid = false;
- form.preferred = false;
- form.scheme = PasswordForm::SCHEME_HTML;
- form.times_used = 1;
- form.form_data.name = ASCIIToUTF16("form_name");
- form.date_synced = base::Time::Now();
- form.display_name = ASCIIToUTF16("Mr. Smith");
- form.avatar_url = GURL("https://accounts.google.com/Avatar");
- form.federation_url = GURL("https://accounts.google.com/federation");
- form.is_zero_click = true;
+ GenerateExamplePasswordForm(&form);
// Add it and make sure it is there and that all the fields were retrieved
// correctly.
@@ -1090,21 +1094,28 @@ TEST_F(LoginDatabaseTest, FilePermissions) {
class LoginDatabaseMigrationTest : public testing::Test {
protected:
- void SetUp() override {
- PathService::Get(base::DIR_SOURCE_ROOT, &database_dump_);
- database_dump_ = database_dump_.AppendASCII("components")
- .AppendASCII("test")
- .AppendASCII("data")
- .AppendASCII("password_manager")
- .AppendASCII("login_db_v8.sql");
+ void SetUp() override {
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+ database_dump_location_ = database_dump_location_.AppendASCII("components")
+ .AppendASCII("test")
+ .AppendASCII("data")
+ .AppendASCII("password_manager");
database_path_ = temp_dir_.path().AppendASCII("test.db");
+ }
+
+ // Creates database of specific |version|.
+ void CreateDatabase(int version) {
+ base::FilePath database_dump;
+ PathService::Get(base::DIR_SOURCE_ROOT, &database_dump);
+ database_dump =
+ database_dump.Append(database_dump_location_)
+ .AppendASCII("login_db_v" + base::IntToString(version) + ".sql");
ASSERT_TRUE(
- sql::test::CreateDatabaseFromSQL(database_path_, database_dump_));
+ sql::test::CreateDatabaseFromSQL(database_path_, database_dump));
}
- void TearDown() override {
+ void DestroyDatabase() {
if (!database_path_.empty())
base::DeleteFile(database_path_, false);
}
@@ -1112,10 +1123,10 @@ class LoginDatabaseMigrationTest : public testing::Test {
// Returns an empty vector on failure. Otherwise returns the values of the
// date_created field from the logins table. The order of the returned rows
// is well-defined.
- std::vector<int64_t> GetDateCreated(const base::FilePath& db_path) {
+ std::vector<int64_t> GetDateCreated() {
sql::Connection db;
std::vector<int64_t> results;
- if (!db.Open(db_path))
+ if (!db.Open(database_path_))
return results;
sql::Statement s(db.GetCachedStatement(
@@ -1137,32 +1148,49 @@ class LoginDatabaseMigrationTest : public testing::Test {
base::FilePath database_path_;
private:
- base::FilePath database_dump_;
+ base::FilePath database_dump_location_;
base::ScopedTempDir temp_dir_;
};
-// Tests the migration of the login database from version 8 to version 9.
-TEST_F(LoginDatabaseMigrationTest, MigrationV8ToV9) {
- // Original date, in seconds since UTC epoch.
- std::vector<int64_t> date_created(GetDateCreated(database_path_));
- ASSERT_EQ(1402955745, date_created[0]);
- ASSERT_EQ(1402950000, date_created[1]);
-
- // Assert that the database was successfully opened and migrated.
- {
- LoginDatabase db;
- ASSERT_TRUE(db.Init(database_path_));
- }
-
- // New date, in microseconds since platform independent epoch.
- std::vector<int64_t> new_date_created(GetDateCreated(database_path_));
- ASSERT_EQ(13047429345000000, new_date_created[0]);
- ASSERT_EQ(13047423600000000, new_date_created[1]);
-
- // Check that the two dates match up.
- for (size_t i = 0; i < date_created.size(); ++i) {
- EXPECT_EQ(base::Time::FromInternalValue(new_date_created[i]),
- base::Time::FromTimeT(date_created[i]));
+// Tests the migration of the login database from version 1 to version
+// kCurrentVersionNumber. This test will fail when kCurrentVersionNumber
+// will be changed to 10, because file login_db_v10.sql doesn't exist.
+// It has to be added in order to fix test.
+TEST_F(LoginDatabaseMigrationTest, MigrationV1ToVCurrent) {
+ for (int version = 1; version < kCurrentVersionNumber; ++version) {
+ CreateDatabase(version);
+ // Original date, in seconds since UTC epoch.
+ std::vector<int64_t> date_created(GetDateCreated());
+ ASSERT_EQ(1402955745, date_created[0]);
+ ASSERT_EQ(1402950000, date_created[1]);
+
+ {
+ // Assert that the database was successfully opened and updated
+ // to current version.
+ LoginDatabase db;
+ ASSERT_TRUE(db.Init(database_path_));
+ // Verifies that the final version can save all the appropriate fields.
+ std::vector<PasswordForm*> result;
+ PasswordForm form;
+ GenerateExamplePasswordForm(&form);
+ db.AddLogin(form);
+ EXPECT_TRUE(db.GetLogins(form, &result));
+ ASSERT_EQ(1U, result.size());
+ FormsAreEqual(form, *result[0]);
+ EXPECT_TRUE(db.RemoveLogin(form));
+ delete result[0];
+ result.clear();
+ }
+ // New date, in microseconds since platform independent epoch.
+ std::vector<int64_t> new_date_created(GetDateCreated());
+ ASSERT_EQ(13047429345000000, new_date_created[0]);
+ ASSERT_EQ(13047423600000000, new_date_created[1]);
+ // Check that the two dates match up.
+ for (size_t i = 0; i < date_created.size(); ++i) {
+ EXPECT_EQ(base::Time::FromInternalValue(new_date_created[i]),
+ base::Time::FromTimeT(date_created[i]));
+ }
+ DestroyDatabase();
}
}
« no previous file with comments | « components/password_manager/core/browser/login_database.cc ('k') | components/test/data/password_manager/login_db_v1.sql » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698