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

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

Issue 2255813002: AddEngagementBudget and SpendBudget added to BudgetDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added expiration check in SpendBudget Created 4 years, 4 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/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 a8b7930d15f183c1396d3ba93667fe375bba6dba..465f5ab02a720593a9c0cbb673ea6bbec4e46db9 100644
--- a/chrome/browser/budget_service/budget_database_unittest.cc
+++ b/chrome/browser/budget_service/budget_database_unittest.cc
@@ -20,6 +20,7 @@ namespace {
const double kDefaultBudget1 = 1.234;
const double kDefaultBudget2 = 2.345;
const double kDefaultExpirationInHours = 72;
+const double kDefaultEngagement = 30.0;
const char kTestOrigin[] = "https://example.com";
@@ -36,7 +37,7 @@ class BudgetDatabaseTest : public ::testing::Test {
// is written to. Use GetBudgetDetails() to pre-populate the cache.
void SetUp() override { GetBudgetDetails(); }
- void AddBudgetComplete(base::Closure run_loop_closure, bool success) {
+ void WriteBudgetComplete(base::Closure run_loop_closure, bool success) {
success_ = success;
run_loop_closure.Run();
}
@@ -45,12 +46,33 @@ class BudgetDatabaseTest : public ::testing::Test {
bool AddBudget(const GURL& origin, double amount) {
base::RunLoop run_loop;
db_.AddBudget(origin, amount,
- base::Bind(&BudgetDatabaseTest::AddBudgetComplete,
+ 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;
+ db_.SpendBudget(origin, amount,
+ base::Bind(&BudgetDatabaseTest::WriteBudgetComplete,
+ base::Unretained(this), run_loop.QuitClosure()));
+ run_loop.Run();
+ return success_;
+ }
+
void GetBudgetDetailsComplete(
base::Closure run_loop_closure,
bool success,
@@ -162,3 +184,72 @@ TEST_F(BudgetDatabaseTest, ReadAndWriteTest) {
// has been removed.
EXPECT_FALSE(IsCached(origin));
}
+
+TEST_F(BudgetDatabaseTest, AddEngagementBudgetTest) {
+ const GURL origin(kTestOrigin);
+ base::SimpleTestClock* clock = SetClockForTesting();
+
+ // Add a chunk of budget to a non-existant origin. This should add the full
+ // amount of engagement.
+ ASSERT_TRUE(AddEngagementBudget(origin, kDefaultEngagement));
+
+ // Get the budget.
+ GetBudgetDetails();
+
johnme 2016/08/19 18:48:36 Nit: remove newline, since the ASSERTs below are t
harkness 2016/08/22 13:46:26 Done.
+ // The budget should include a full share of the engagement. Just check the
+ // value of the budget state at the start of the list for the total budget.
+ const auto& expected_value = expectation();
johnme 2016/08/19 18:48:36 Nit: Don't bother caching this reference; the comp
harkness 2016/08/22 13:46:26 Made prediction_ protected, it just makes the code
+ ASSERT_TRUE(success_);
+ ASSERT_EQ(2U, expected_value.size());
+ ASSERT_EQ(kDefaultEngagement, expectation().begin()->budget_at);
johnme 2016/08/19 18:48:36 s/expectation()/expected_value/ since you've cache
harkness 2016/08/22 13:46:26 Directly accesses prediction_ now.
+
+ // Advance time 1 day and add more engagement budget.
+ clock->Advance(base::TimeDelta::FromDays(1));
+ ASSERT_TRUE(AddEngagementBudget(origin, kDefaultEngagement));
+ GetBudgetDetails();
johnme 2016/08/19 18:48:36 Add newline before getBudgetDetails()
harkness 2016/08/22 13:46:26 Done.
+
johnme 2016/08/19 18:48:36 Ditto remove newline
harkness 2016/08/22 13:46:26 Done.
+ // The budget should now have 1 full share plus 1/3 share.
+ ASSERT_TRUE(success_);
+ ASSERT_EQ(3U, expectation().size());
+ ASSERT_DOUBLE_EQ(kDefaultEngagement * 4 / 3,
johnme 2016/08/19 18:48:36 Might be nice to re-test the other 2 values too, t
harkness 2016/08/22 13:46:26 Good idea on converting the member to be a vector.
+ expectation().begin()->budget_at);
+}
+
+TEST_F(BudgetDatabaseTest, SpendBudgetTest) {
+ const GURL origin(kTestOrigin);
+ base::SimpleTestClock* clock = SetClockForTesting();
+ base::Time starting_time = clock->Now();
+
+ // Intialize the budget with several chunks.
+ ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
+ clock->Advance(base::TimeDelta::FromDays(1));
+ ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
+ clock->Advance(base::TimeDelta::FromDays(1));
+ ASSERT_TRUE(AddBudget(origin, kDefaultBudget1));
+
+ // Reset the clock then spend an amount of budget less than kDefaultBudget.
+ clock->SetNow(starting_time);
+ ASSERT_TRUE(SpendBudget(origin, 1));
+ GetBudgetDetails();
+
+ // There should still be three chunks of budget of size kDefaultBudget-1,
+ // kDefaultBudget, and kDefaultBudget.
+ ASSERT_EQ(4U, expectation().size());
+ ASSERT_DOUBLE_EQ(kDefaultBudget1 * 3 - 1, expectation().begin()->budget_at);
johnme 2016/08/19 18:48:36 Ditto with checking the other values in expectatio
harkness 2016/08/22 13:46:26 Done.
+
+ // 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));
+ GetBudgetDetails();
+ ASSERT_EQ(2U, expectation().size());
+ ASSERT_DOUBLE_EQ(kDefaultBudget1 - 1, expectation().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));
johnme 2016/08/19 18:48:36 After this, check that the budget hasn't changed?
harkness 2016/08/22 13:46:26 Done.
+
+ // 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.
+ clock->Advance(base::TimeDelta::FromDays(6));
+ EXPECT_FALSE(SpendBudget(origin, 0.01));
+}

Powered by Google App Engine
This is Rietveld 408576698