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

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

Issue 702893005: Use higher precision to store the login database's date_created field. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clear statement before closing db in unittest. Created 6 years, 1 month 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 d738ab495705fce835490b94dc6298f4b9c0963c..4faaa8c968354a04d8eec941341a5141702b763f 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -8,11 +8,15 @@
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_vector.h"
+#include "base/path_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "components/autofill/core/common/password_form.h"
#include "components/password_manager/core/browser/psl_matching_helper.h"
+#include "sql/connection.h"
+#include "sql/statement.h"
+#include "sql/test/test_helpers.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -927,8 +931,6 @@ TEST_F(LoginDatabaseTest, UpdateLogin) {
form.submit_element = ASCIIToUTF16("submit_element");
form.date_synced = base::Time::Now();
form.date_created = base::Time::Now() - base::TimeDelta::FromDays(1);
- // Remove this line after crbug/374132 is fixed.
- form.date_created = base::Time::FromTimeT(form.date_created.ToTimeT());
form.blacklisted_by_user = true;
form.scheme = PasswordForm::SCHEME_BASIC;
form.type = PasswordForm::TYPE_GENERATED;
@@ -962,4 +964,82 @@ TEST_F(LoginDatabaseTest, FilePermissions) {
}
#endif // defined(OS_POSIX)
+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");
+
+ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+ database_path_ = temp_dir_.path().AppendASCII("test.db");
+ ASSERT_TRUE(
+ sql::test::CreateDatabaseFromSQL(database_path_, database_dump_));
+ }
+
+ void TearDown() override {
+ if (!database_path_.empty())
+ base::DeleteFile(database_path_, false);
+ }
+
+ // 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) {
+ sql::Connection db;
+ std::vector<int64_t> results;
+ if (!db.Open(db_path))
+ return results;
+
+ sql::Statement s(db.GetCachedStatement(
+ SQL_FROM_HERE,
+ "SELECT date_created from logins order by username_value"));
+ if (!s.is_valid()) {
+ db.Close();
+ return results;
+ }
+
+ while (s.Step())
+ results.push_back(s.ColumnInt64(0));
+
+ s.Clear();
+ db.Close();
+ return results;
+ }
+
+ base::FilePath database_path_;
+
+ private:
+ base::FilePath database_dump_;
+ 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]));
+ }
+}
+
} // namespace password_manager
« no previous file with comments | « components/password_manager/core/browser/login_database.cc ('k') | components/test/data/password_manager/login_db_v8.sql » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698