| Index: chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
|
| diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc b/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b6a7c7235995358ffb5366a34c7e582d1da0a751
|
| --- /dev/null
|
| +++ b/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
|
| @@ -0,0 +1,262 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <set>
|
| +#include <utility>
|
| +#include <vector>
|
| +
|
| +#include "base/message_loop.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/predictors/predictor_database.h"
|
| +#include "chrome/browser/predictors/resource_prefetch_predictor_tables.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "content/public/test/test_browser_thread.h"
|
| +#include "sql/statement.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace predictors {
|
| +
|
| +class ResourcePrefetchPredictorTablesTest : public testing::Test {
|
| + public:
|
| + ResourcePrefetchPredictorTablesTest();
|
| + virtual ~ResourcePrefetchPredictorTablesTest();
|
| + virtual void SetUp() OVERRIDE;
|
| +
|
| + protected:
|
| + void TestGetAllRows();
|
| + void TestUpdateRowsForUrl();
|
| + void TestDeleteRowsForUrls();
|
| + void TestDeleteAllRows();
|
| +
|
| + MessageLoop loop_;
|
| + content::TestBrowserThread db_thread_;
|
| + TestingProfile profile_;
|
| + scoped_ptr<PredictorDatabase> db_;
|
| + scoped_refptr<ResourcePrefetchPredictorTables> tables_;
|
| +
|
| + private:
|
| + // Adds data to the URL table as well as test_url_rows_.
|
| + void InitializeSampleUrlData();
|
| +
|
| + // Checks that the input vectors have the same elements, although they may
|
| + // be in different orders.
|
| + void TestUrlRowVectorsAreEqual(
|
| + const ResourcePrefetchPredictorTables::UrlTableRows& lhs,
|
| + const ResourcePrefetchPredictorTables::UrlTableRows& rhs) const;
|
| +
|
| + ResourcePrefetchPredictorTables::UrlTableRows test_url_rows_;
|
| +};
|
| +
|
| +class ResourcePrefetchPredictorTablesReopenTest
|
| + : public ResourcePrefetchPredictorTablesTest {
|
| + public:
|
| + virtual void SetUp() OVERRIDE {
|
| + // Write data to the table, and then reopen the db.
|
| + ResourcePrefetchPredictorTablesTest::SetUp();
|
| + tables_ = NULL;
|
| + db_.reset(new PredictorDatabase(&profile_));
|
| + loop_.RunAllPending();
|
| + tables_ = db_->resource_prefetch_tables();
|
| + }
|
| +};
|
| +
|
| +ResourcePrefetchPredictorTablesTest::ResourcePrefetchPredictorTablesTest()
|
| + : loop_(MessageLoop::TYPE_DEFAULT),
|
| + db_thread_(content::BrowserThread::DB, &loop_),
|
| + db_(new PredictorDatabase(&profile_)),
|
| + tables_(db_->resource_prefetch_tables()) {
|
| + loop_.RunAllPending();
|
| +}
|
| +
|
| +ResourcePrefetchPredictorTablesTest::~ResourcePrefetchPredictorTablesTest() {
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::SetUp() {
|
| + tables_->DeleteAllRows();
|
| + InitializeSampleUrlData();
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::TestGetAllRows() {
|
| + ResourcePrefetchPredictorTables::UrlTableRows actual_rows;
|
| + tables_->GetAllRows(&actual_rows);
|
| +
|
| + TestUrlRowVectorsAreEqual(test_url_rows_, actual_rows);
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::TestDeleteRowsForUrls() {
|
| + std::vector<GURL> urls_to_delete;
|
| + urls_to_delete.push_back(GURL("http://www.google.com"));
|
| + urls_to_delete.push_back(GURL("http://www.yahoo.com"));
|
| +
|
| + tables_->DeleteRowsForUrls(urls_to_delete);
|
| +
|
| + ResourcePrefetchPredictorTables::UrlTableRows actual_rows;
|
| + tables_->GetAllRows(&actual_rows);
|
| +
|
| + ResourcePrefetchPredictorTables::UrlTableRows expected_rows;
|
| + expected_rows.push_back(test_url_rows_[5]);
|
| + expected_rows.push_back(test_url_rows_[6]);
|
| +
|
| + TestUrlRowVectorsAreEqual(expected_rows, actual_rows);
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::TestUpdateRowsForUrl() {
|
| + ResourcePrefetchPredictorTables::UrlTableRows new_rows;
|
| + new_rows.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/style.css",
|
| + ResourceType::STYLESHEET,
|
| + 6, 2, 0, 1.0));
|
| + new_rows.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/image.png",
|
| + ResourceType::IMAGE,
|
| + 6, 4, 1, 4.2));
|
| + new_rows.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/a.xml",
|
| + ResourceType::LAST_TYPE,
|
| + 1, 0, 0, 6.1));
|
| + new_rows.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.resources.google.com/script.js",
|
| + ResourceType::SCRIPT,
|
| + 12, 0, 0, 8.5));
|
| +
|
| + tables_->UpdateRowsForUrl(GURL("http://www.google.com"), new_rows);
|
| +
|
| + ResourcePrefetchPredictorTables::UrlTableRows actual_rows;
|
| + tables_->GetAllRows(&actual_rows);
|
| +
|
| + ResourcePrefetchPredictorTables::UrlTableRows expected_rows(new_rows);
|
| + expected_rows.push_back(test_url_rows_[5]);
|
| + expected_rows.push_back(test_url_rows_[6]);
|
| + expected_rows.push_back(test_url_rows_[7]);
|
| +
|
| + TestUrlRowVectorsAreEqual(expected_rows, actual_rows);
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::TestDeleteAllRows() {
|
| + tables_->DeleteAllRows();
|
| +
|
| + ResourcePrefetchPredictorTables::UrlTableRows actual_rows;
|
| + tables_->GetAllRows(&actual_rows);
|
| + EXPECT_EQ(0, static_cast<int>(actual_rows.size()));
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::TestUrlRowVectorsAreEqual(
|
| + const ResourcePrefetchPredictorTables::UrlTableRows& lhs,
|
| + const ResourcePrefetchPredictorTables::UrlTableRows& rhs) const {
|
| + EXPECT_EQ(lhs.size(), rhs.size());
|
| +
|
| + std::set<std::pair<GURL, GURL> > resources_seen;
|
| + for (int i = 0; i < static_cast<int>(rhs.size()); ++i) {
|
| + std::pair<GURL, GURL> resource_id = std::make_pair(rhs[i].main_frame_url,
|
| + rhs[i].resource_url);
|
| + EXPECT_EQ(resources_seen.find(resource_id), resources_seen.end());
|
| +
|
| + for (int j = 0; j < static_cast<int>(lhs.size()); ++j) {
|
| + if (rhs[i] == lhs[j]) {
|
| + resources_seen.insert(resource_id);
|
| + break;
|
| + }
|
| + }
|
| + EXPECT_NE(resources_seen.find(resource_id), resources_seen.end());
|
| + }
|
| + EXPECT_EQ(lhs.size(), resources_seen.size());
|
| +}
|
| +
|
| +void ResourcePrefetchPredictorTablesTest::InitializeSampleUrlData() {
|
| + test_url_rows_.clear();
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/style.css",
|
| + ResourceType::STYLESHEET,
|
| + 5, 2, 1, 1.1));
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/script.js",
|
| + ResourceType::SCRIPT,
|
| + 4, 0, 1, 2.1));
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/image.png",
|
| + ResourceType::IMAGE,
|
| + 6, 3, 0, 2.2));
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.google.com/a.font",
|
| + ResourceType::LAST_TYPE,
|
| + 2, 0, 0, 5.1));
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.google.com",
|
| + "http://www.resources.google.com/script.js",
|
| + ResourceType::SCRIPT,
|
| + 11, 0, 0, 8.5));
|
| +
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.reddit.com",
|
| + "http://reddit-resource.com/script1.js",
|
| + ResourceType::SCRIPT,
|
| + 4, 0, 1, 1.0));
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.reddit.com",
|
| + "http://reddit-resource.com/script2.js",
|
| + ResourceType::SCRIPT,
|
| + 2, 0, 0, 2.1));
|
| +
|
| + test_url_rows_.push_back(ResourcePrefetchPredictorTables::UrlTableRow(
|
| + "http://www.yahoo.com",
|
| + "http://www.google.com/image.png",
|
| + ResourceType::IMAGE,
|
| + 20, 1, 0, 10.0));
|
| +
|
| + // Add all the rows to the table.
|
| + tables_->UpdateRowsForUrl(
|
| + GURL("http://www.google.com"),
|
| + ResourcePrefetchPredictorTables::UrlTableRows(
|
| + test_url_rows_.begin(), test_url_rows_.begin() + 5));
|
| + tables_->UpdateRowsForUrl(
|
| + GURL("http://www.reddit.com"),
|
| + ResourcePrefetchPredictorTables::UrlTableRows(
|
| + test_url_rows_.begin() + 5, test_url_rows_.begin() + 7));
|
| + tables_->UpdateRowsForUrl(
|
| + GURL("http://www.yahoo.com"),
|
| + ResourcePrefetchPredictorTables::UrlTableRows(
|
| + test_url_rows_.begin() + 7, test_url_rows_.begin() + 8));
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesTest, GetAllRows) {
|
| + TestGetAllRows();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesTest, UpdateRowsForUrl) {
|
| + TestUpdateRowsForUrl();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesTest, DeleteRowsForUrls) {
|
| + TestDeleteRowsForUrls();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesTest, DeleteAllRows) {
|
| + TestDeleteAllRows();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesReopenTest, GetAllRows) {
|
| + TestGetAllRows();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesReopenTest, UpdateRowsForUrl) {
|
| + TestUpdateRowsForUrl();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteRowsForUrls) {
|
| + TestDeleteRowsForUrls();
|
| +}
|
| +
|
| +TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteAllRows) {
|
| + TestDeleteAllRows();
|
| +}
|
| +
|
| +} // namespace predictors
|
|
|