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)); |
} |