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

Unified Diff: chrome/browser/budget_service/budget_database_unittest.cc

Issue 2272563005: Start plumbing connections from the BudgetManager to the BudgetDatabase (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the task runner Created 4 years, 3 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
« no previous file with comments | « chrome/browser/budget_service/budget_database.cc ('k') | chrome/browser/budget_service/budget_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/budget_service/budget_database_unittest.cc
diff --git a/chrome/browser/budget_service/budget_database_unittest.cc b/chrome/browser/budget_service/budget_database_unittest.cc
index eb83fff049d8e10499ed55705cac50b2d45313f8..f2b67e057f8dd283af87951dfca868706d89f958 100644
--- a/chrome/browser/budget_service/budget_database_unittest.cc
+++ b/chrome/browser/budget_service/budget_database_unittest.cc
@@ -8,6 +8,7 @@
#include "base/test/simple_test_clock.h"
#include "base/threading/thread_task_runner_handle.h"
#include "chrome/browser/budget_service/budget.pb.h"
+#include "chrome/browser/engagement/site_engagement_service.h"
#include "chrome/test/base/testing_profile.h"
#include "components/leveldb_proto/proto_database.h"
#include "components/leveldb_proto/proto_database_impl.h"
@@ -17,8 +18,6 @@
namespace {
-const double kDefaultBudget1 = 1.234;
-const double kDefaultBudget2 = 2.345;
const double kDefaultExpirationInHours = 72;
const double kDefaultEngagement = 30.0;
@@ -30,39 +29,15 @@ class BudgetDatabaseTest : public ::testing::Test {
public:
BudgetDatabaseTest()
: success_(false),
- db_(profile_.GetPath().Append(FILE_PATH_LITERAL("BudgetDabase")),
+ db_(&profile_,
+ profile_.GetPath().Append(FILE_PATH_LITERAL("BudgetDatabase")),
base::ThreadTaskRunnerHandle::Get()) {}
- // The BudgetDatabase assumes that a budget will always be queried before it
- // is written to. Use GetBudgetDetails() to pre-populate the cache.
- void SetUp() override { GetBudgetDetails(); }
-
void WriteBudgetComplete(base::Closure run_loop_closure, bool success) {
success_ = success;
run_loop_closure.Run();
}
- // Add budget to the origin.
- bool AddBudget(const GURL& origin, double amount) {
- base::RunLoop run_loop;
- db_.AddBudget(origin, amount,
- base::Bind(&BudgetDatabaseTest::WriteBudgetComplete,
- base::Unretained(this), run_loop.QuitClosure()));
- run_loop.Run();
- return success_;
- }
-
- // Add engagement based budget to the origin.
- bool AddEngagementBudget(const GURL& origin, double sesScore) {
- base::RunLoop run_loop;
- db_.AddEngagementBudget(
- origin, sesScore,
- base::Bind(&BudgetDatabaseTest::WriteBudgetComplete,
- base::Unretained(this), run_loop.QuitClosure()));
- run_loop.Run();
- return success_;
- }
-
// Spend budget for the origin.
bool SpendBudget(const GURL& origin, double amount) {
base::RunLoop run_loop;
@@ -79,11 +54,6 @@ class BudgetDatabaseTest : public ::testing::Test {
const BudgetDatabase::BudgetPrediction& prediction) {
success_ = success;
// Convert BudgetPrediction to a vector for random access to check values.
- /*
- prediction_.clear();
- for (auto& chunk : prediction)
- prediction_.push_back(chunk);
- */
prediction_.assign(prediction.begin(), prediction.end());
run_loop_closure.Run();
}
@@ -107,8 +77,10 @@ class BudgetDatabaseTest : public ::testing::Test {
return clock;
}
- // Query the database to check if the origin is in the cache.
- bool IsCached(const GURL& origin) { return db_.IsCached(origin); }
+ void SetSiteEngagementScore(const GURL& url, double score) {
+ SiteEngagementService* service = SiteEngagementService::Get(&profile_);
+ service->ResetScoreForURL(url, score);
+ }
protected:
bool success_;
@@ -121,74 +93,14 @@ class BudgetDatabaseTest : public ::testing::Test {
BudgetDatabase db_;
};
-TEST_F(BudgetDatabaseTest, ReadAndWriteTest) {
- const GURL origin(kTestOrigin);
- base::SimpleTestClock* clock = SetClockForTesting();
- base::TimeDelta expiration(
- base::TimeDelta::FromHours(kDefaultExpirationInHours));
- base::Time starting_time = clock->Now();
- base::Time expiration_time = clock->Now() + expiration;
-
- // Add two budget chunks with different expirations (default expiration and
- // default expiration + 1 day).
- ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
- clock->Advance(base::TimeDelta::FromDays(1));
- ASSERT_TRUE(AddBudget(origin, kDefaultBudget2));
-
- // Get the budget.
- GetBudgetDetails();
-
- // Get the prediction and validate it.
- ASSERT_TRUE(success_);
- ASSERT_EQ(3U, prediction_.size());
-
- // Make sure that the correct data is returned.
- // First value should be [total_budget, now]
- EXPECT_EQ(kDefaultBudget1 + kDefaultBudget2, prediction_[0].budget_at);
- EXPECT_EQ(clock->Now(), prediction_[0].time);
-
- // The next value should be the budget after the first chunk expires.
- EXPECT_EQ(kDefaultBudget2, prediction_[1].budget_at);
- EXPECT_EQ(expiration_time, prediction_[1].time);
-
- // The final value gives the budget of 0.0 after the second chunk expires.
- expiration_time += base::TimeDelta::FromDays(1);
- EXPECT_EQ(0, prediction_[2].budget_at);
- EXPECT_EQ(expiration_time, prediction_[2].time);
-
- // Advance the time until the first chunk of budget should be expired.
- clock->SetNow(starting_time +
- base::TimeDelta::FromHours(kDefaultExpirationInHours));
-
- // Get the new budget and check that kDefaultBudget1 has been removed.
- GetBudgetDetails();
- ASSERT_EQ(2U, prediction_.size());
- EXPECT_EQ(kDefaultBudget2, prediction_[0].budget_at);
- EXPECT_EQ(0, prediction_[1].budget_at);
-
- // Advace the time until both chunks of budget should be expired.
- clock->SetNow(starting_time +
- base::TimeDelta::FromHours(kDefaultExpirationInHours) +
- base::TimeDelta::FromDays(1));
-
- GetBudgetDetails();
- ASSERT_EQ(1U, prediction_.size());
- EXPECT_EQ(0, prediction_[0].budget_at);
-
- // Now that the entire budget has expired, check that the entry in the map
- // has been removed.
- EXPECT_FALSE(IsCached(origin));
-}
-
TEST_F(BudgetDatabaseTest, AddEngagementBudgetTest) {
const GURL origin(kTestOrigin);
base::SimpleTestClock* clock = SetClockForTesting();
base::Time expiration_time =
clock->Now() + base::TimeDelta::FromHours(kDefaultExpirationInHours);
- // Add a chunk of budget to a non-existant origin. This should add the full
- // amount of engagement.
- ASSERT_TRUE(AddEngagementBudget(origin, kDefaultEngagement));
+ // Set the default site engagement.
+ SetSiteEngagementScore(origin, kDefaultEngagement);
// The budget should include a full share of the engagement.
GetBudgetDetails();
@@ -200,10 +112,9 @@ TEST_F(BudgetDatabaseTest, AddEngagementBudgetTest) {
// Advance time 1 day and add more engagement budget.
clock->Advance(base::TimeDelta::FromDays(1));
- ASSERT_TRUE(AddEngagementBudget(origin, kDefaultEngagement));
+ GetBudgetDetails();
// The budget should now have 1 full share plus 1/3 share.
- GetBudgetDetails();
ASSERT_TRUE(success_);
ASSERT_EQ(3U, prediction_.size());
ASSERT_DOUBLE_EQ(kDefaultEngagement * 4 / 3, prediction_[0].budget_at);
@@ -216,7 +127,6 @@ TEST_F(BudgetDatabaseTest, AddEngagementBudgetTest) {
// Advance time by 59 minutes and check that no engagement budget is added
// since budget should only be added for > 1 hour increments.
clock->Advance(base::TimeDelta::FromMinutes(59));
- ASSERT_TRUE(AddEngagementBudget(origin, kDefaultEngagement));
// The budget should be the same as before the attempted add.
GetBudgetDetails();
@@ -228,44 +138,47 @@ TEST_F(BudgetDatabaseTest, AddEngagementBudgetTest) {
TEST_F(BudgetDatabaseTest, SpendBudgetTest) {
const GURL origin(kTestOrigin);
base::SimpleTestClock* clock = SetClockForTesting();
- base::Time starting_time = clock->Now();
+
+ // Set the default site engagement.
+ SetSiteEngagementScore(origin, kDefaultEngagement);
// Intialize the budget with several chunks.
- ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
+ GetBudgetDetails();
clock->Advance(base::TimeDelta::FromDays(1));
- ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
+ GetBudgetDetails();
clock->Advance(base::TimeDelta::FromDays(1));
- ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
+ GetBudgetDetails();
- // Reset the clock then spend an amount of budget less than kDefaultBudget.
- clock->SetNow(starting_time);
+ // Spend an amount of budget less than kDefaultEngagement.
ASSERT_TRUE(SpendBudget(origin, 1));
GetBudgetDetails();
- // There should still be three chunks of budget of size kDefaultBudget-1,
- // kDefaultBudget, and kDefaultBudget.
+ // There should still be three chunks of budget of size kDefaultEngagement-1,
+ // kDefaultEngagement, and kDefaultEngagement.
ASSERT_EQ(4U, prediction_.size());
- ASSERT_DOUBLE_EQ(kDefaultBudget1 * 3 - 1, prediction_[0].budget_at);
- ASSERT_DOUBLE_EQ(kDefaultBudget1 * 2, prediction_[1].budget_at);
- ASSERT_DOUBLE_EQ(kDefaultBudget1, prediction_[2].budget_at);
+ ASSERT_DOUBLE_EQ(kDefaultEngagement * 5 / 3 - 1, prediction_[0].budget_at);
+ ASSERT_DOUBLE_EQ(kDefaultEngagement * 2 / 3, prediction_[1].budget_at);
+ ASSERT_DOUBLE_EQ(kDefaultEngagement * 1 / 3, prediction_[2].budget_at);
ASSERT_DOUBLE_EQ(0, prediction_[3].budget_at);
// Now spend enough that it will use up the rest of the first chunk and all of
// the second chunk, but not all of the third chunk.
- ASSERT_TRUE(SpendBudget(origin, kDefaultBudget1 * 2));
+ ASSERT_TRUE(SpendBudget(origin, kDefaultEngagement * 4 / 3));
GetBudgetDetails();
ASSERT_EQ(2U, prediction_.size());
- ASSERT_DOUBLE_EQ(kDefaultBudget1 - 1, prediction_.begin()->budget_at);
+ ASSERT_DOUBLE_EQ(kDefaultEngagement * 1 / 3 - 1,
+ prediction_.begin()->budget_at);
// Validate that the code returns false if SpendBudget tries to spend more
// budget than the origin has.
- EXPECT_FALSE(SpendBudget(origin, kDefaultBudget1));
+ EXPECT_FALSE(SpendBudget(origin, kDefaultEngagement));
GetBudgetDetails();
ASSERT_EQ(2U, prediction_.size());
- ASSERT_DOUBLE_EQ(kDefaultBudget1 - 1, prediction_.begin()->budget_at);
+ ASSERT_DOUBLE_EQ(kDefaultEngagement * 1 / 3 - 1,
+ prediction_.begin()->budget_at);
// Advance time until the last remaining chunk should be expired, then query
- // for what would be a valid amount of budget if the chunks weren't expired.
+ // for the full engagement worth of budget.
clock->Advance(base::TimeDelta::FromDays(6));
- EXPECT_FALSE(SpendBudget(origin, 0.01));
+ EXPECT_TRUE(SpendBudget(origin, kDefaultEngagement));
}
« no previous file with comments | « chrome/browser/budget_service/budget_database.cc ('k') | chrome/browser/budget_service/budget_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698