| Index: net/extras/sqlite/sqlite_channel_id_store_unittest.cc
|
| diff --git a/net/extras/sqlite/sqlite_channel_id_store_unittest.cc b/net/extras/sqlite/sqlite_channel_id_store_unittest.cc
|
| index 7c9b223e3e12757e35c20aa8c3a552caa51b0a3b..87f6083cd36d2272f93acca722703985ae26cdd0 100644
|
| --- a/net/extras/sqlite/sqlite_channel_id_store_unittest.cc
|
| +++ b/net/extras/sqlite/sqlite_channel_id_store_unittest.cc
|
| @@ -288,7 +288,7 @@ TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV1) {
|
| sql::Statement smt(db.GetUniqueStatement(
|
| "SELECT value FROM meta WHERE key = \"version\""));
|
| ASSERT_TRUE(smt.Step());
|
| - EXPECT_EQ(5, smt.ColumnInt(0));
|
| + EXPECT_EQ(6, smt.ColumnInt(0));
|
| EXPECT_FALSE(smt.Step());
|
| }
|
| }
|
| @@ -364,7 +364,7 @@ TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV2) {
|
| sql::Statement smt(db.GetUniqueStatement(
|
| "SELECT value FROM meta WHERE key = \"version\""));
|
| ASSERT_TRUE(smt.Step());
|
| - EXPECT_EQ(5, smt.ColumnInt(0));
|
| + EXPECT_EQ(6, smt.ColumnInt(0));
|
| EXPECT_FALSE(smt.Step());
|
| }
|
| }
|
| @@ -442,7 +442,7 @@ TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV3) {
|
| sql::Statement smt(db.GetUniqueStatement(
|
| "SELECT value FROM meta WHERE key = \"version\""));
|
| ASSERT_TRUE(smt.Step());
|
| - EXPECT_EQ(5, smt.ColumnInt(0));
|
| + EXPECT_EQ(6, smt.ColumnInt(0));
|
| EXPECT_FALSE(smt.Step());
|
| }
|
| }
|
| @@ -536,7 +536,83 @@ TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV4) {
|
| sql::Statement smt(db.GetUniqueStatement(
|
| "SELECT value FROM meta WHERE key = \"version\""));
|
| ASSERT_TRUE(smt.Step());
|
| - EXPECT_EQ(5, smt.ColumnInt(0));
|
| + EXPECT_EQ(6, smt.ColumnInt(0));
|
| + EXPECT_FALSE(smt.Step());
|
| + }
|
| + }
|
| +}
|
| +
|
| +TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV5) {
|
| + // Reset the store. We'll be using a different database for this test.
|
| + store_ = NULL;
|
| +
|
| + base::FilePath v5_db_path(temp_dir_.GetPath().AppendASCII("v5db"));
|
| +
|
| + std::string key_data;
|
| + std::string cert_data;
|
| + std::unique_ptr<crypto::ECPrivateKey> key;
|
| + ASSERT_NO_FATAL_FAILURE(ReadTestKeyAndCert(&key_data, &cert_data, &key));
|
| +
|
| + // Create a version 5 database.
|
| + {
|
| + sql::Connection db;
|
| + ASSERT_TRUE(db.Open(v5_db_path));
|
| + ASSERT_TRUE(db.Execute(
|
| + "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY,"
|
| + "value LONGVARCHAR);"
|
| + "INSERT INTO \"meta\" VALUES('version','5');"
|
| + "INSERT INTO \"meta\" VALUES('last_compatible_version','5');"
|
| + "CREATE TABLE channel_id ("
|
| + "host TEXT NOT NULL UNIQUE PRIMARY KEY,"
|
| + "private_key BLOB NOT NULL,"
|
| + "public_key BLOB NOT NULL,"
|
| + "creation_time INTEGER);"));
|
| +
|
| + sql::Statement add_smt(db.GetUniqueStatement(
|
| + "INSERT INTO channel_id (host, private_key, public_key, creation_time) "
|
| + "VALUES (?,?,?,?)"));
|
| + add_smt.BindString(0, "google.com");
|
| + add_smt.BindBlob(1, key_data.data(), key_data.size());
|
| + add_smt.BindBlob(2, "", 0);
|
| + add_smt.BindInt64(3, GetTestCertCreationTime().ToInternalValue());
|
| + ASSERT_TRUE(add_smt.Run());
|
| +
|
| + // Malformed keys will be ignored and not migrated.
|
| + ASSERT_TRUE(
|
| + db.Execute("INSERT INTO \"channel_id\" VALUES("
|
| + "'bar.com',X'AA',X'BB',3000);"));
|
| + }
|
| +
|
| + // Load and test the DB contents twice. First time ensures that we can use
|
| + // the updated values immediately. Second time ensures that the updated
|
| + // values are saved and read correctly on next load.
|
| + for (int i = 0; i < 2; ++i) {
|
| + SCOPED_TRACE(i);
|
| +
|
| + std::vector<std::unique_ptr<DefaultChannelIDStore::ChannelID>> channel_ids;
|
| + store_ = new SQLiteChannelIDStore(v5_db_path,
|
| + base::ThreadTaskRunnerHandle::Get());
|
| +
|
| + // Load the database and ensure the certs can be read.
|
| + Load(&channel_ids);
|
| + ASSERT_EQ(1U, channel_ids.size());
|
| +
|
| + ASSERT_EQ("google.com", channel_ids[0]->server_identifier());
|
| + ASSERT_EQ(GetTestCertCreationTime(), channel_ids[0]->creation_time());
|
| + EXPECT_TRUE(KeysEqual(key.get(), channel_ids[0]->key()));
|
| +
|
| + store_ = NULL;
|
| + // Make sure we wait until the destructor has run.
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Verify the database version is updated.
|
| + {
|
| + sql::Connection db;
|
| + ASSERT_TRUE(db.Open(v5_db_path));
|
| + sql::Statement smt(db.GetUniqueStatement(
|
| + "SELECT value FROM meta WHERE key = \"version\""));
|
| + ASSERT_TRUE(smt.Step());
|
| + EXPECT_EQ(6, smt.ColumnInt(0));
|
| EXPECT_FALSE(smt.Step());
|
| }
|
| }
|
|
|