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

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc

Issue 10416002: Seculative resource prefetching for URLs CL. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Resolving conflicts. Created 8 years, 6 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: 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..92a4ba928067fc12ea4c4485674ff2ef2dce58d5
--- /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_TRUE(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_TRUE(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

Powered by Google App Engine
This is Rietveld 408576698