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

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

Issue 2188953004: Adding more functionality to BudgetDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added DCHECK and removed comment. 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
« no previous file with comments | « chrome/browser/budget_service/budget_database.cc ('k') | no next file » | 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 3d34e06663735018885742b6c7005964a3636db7..f10a2ba9217a73978ed2a924b29be9426fdfa798 100644
--- a/chrome/browser/budget_service/budget_database_unittest.cc
+++ b/chrome/browser/budget_service/budget_database_unittest.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/budget_service/budget_database.h"
#include "base/run_loop.h"
+#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/test/base/testing_profile.h"
@@ -16,13 +17,14 @@
namespace {
-const double kDefaultDebt = -0.72;
const double kDefaultBudget1 = 1.234;
const double kDefaultBudget2 = 2.345;
-const double kDefaultExpiration = 3600000000;
+const double kDefaultExpirationInHours = 72;
const char kTestOrigin[] = "https://example.com";
+} // namespace
+
class BudgetDatabaseTest : public ::testing::Test {
public:
BudgetDatabaseTest()
@@ -30,49 +32,23 @@ class BudgetDatabaseTest : public ::testing::Test {
db_(profile_.GetPath().Append(FILE_PATH_LITERAL("BudgetDabase")),
base::ThreadTaskRunnerHandle::Get()) {}
- void SetBudgetComplete(base::Closure run_loop_closure, bool success) {
- success_ = success;
- run_loop_closure.Run();
- }
-
- // Set up basic default values.
- bool SetBudgetWithDefaultValues() {
- budget_service::Budget budget;
- budget.set_debt(kDefaultDebt);
-
- // Create two chunks and give them default values.
- budget_service::BudgetChunk* budget_chunk = budget.add_budget();
- budget_chunk->set_amount(kDefaultBudget1);
- budget_chunk->set_expiration(kDefaultExpiration);
- budget_chunk = budget.add_budget();
- budget_chunk->set_amount(kDefaultBudget2);
- budget_chunk->set_expiration(kDefaultExpiration + 1);
-
- base::RunLoop run_loop;
- db_.SetValue(GURL(kTestOrigin), budget,
- base::Bind(&BudgetDatabaseTest::SetBudgetComplete,
- base::Unretained(this), run_loop.QuitClosure()));
- run_loop.Run();
-
- return success_;
- }
+ // 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 GetBudgetComplete(base::Closure run_loop_closure,
- bool success,
- std::unique_ptr<budget_service::Budget> budget) {
- budget_ = std::move(budget);
+ void AddBudgetComplete(base::Closure run_loop_closure, bool success) {
success_ = success;
run_loop_closure.Run();
}
- // Excercise the very basic get method.
- std::unique_ptr<budget_service::Budget> GetBudget() {
+ // Add budget to the origin.
+ bool AddBudget(const GURL& origin, double amount) {
base::RunLoop run_loop;
- db_.GetValue(GURL(kTestOrigin),
- base::Bind(&BudgetDatabaseTest::GetBudgetComplete,
- base::Unretained(this), run_loop.QuitClosure()));
+ db_.AddBudget(origin, amount,
+ base::Bind(&BudgetDatabaseTest::AddBudgetComplete,
+ base::Unretained(this), run_loop.QuitClosure()));
run_loop.Run();
- return std::move(budget_);
+ return success_;
}
void GetBudgetDetailsComplete(
@@ -86,6 +62,7 @@ class BudgetDatabaseTest : public ::testing::Test {
run_loop_closure.Run();
}
+ // Get the full set of budget expectations for the origin.
void GetBudgetDetails() {
base::RunLoop run_loop;
db_.GetBudgetDetails(
@@ -100,6 +77,13 @@ class BudgetDatabaseTest : public ::testing::Test {
return expectation_;
}
+ // Setup a test clock so that the tests can control time.
+ base::SimpleTestClock* SetClockForTesting() {
+ base::SimpleTestClock* clock = new base::SimpleTestClock();
+ db_.SetClockForTesting(base::WrapUnique(clock));
+ return clock;
+ }
+
protected:
bool success_;
@@ -113,18 +97,19 @@ class BudgetDatabaseTest : public ::testing::Test {
};
TEST_F(BudgetDatabaseTest, ReadAndWriteTest) {
- ASSERT_TRUE(SetBudgetWithDefaultValues());
- std::unique_ptr<budget_service::Budget> b = GetBudget();
-
- ASSERT_TRUE(success_);
- EXPECT_EQ(kDefaultDebt, b->debt());
- EXPECT_EQ(kDefaultBudget1, b->budget(0).amount());
- EXPECT_EQ(kDefaultBudget2, b->budget(1).amount());
- EXPECT_EQ(kDefaultExpiration, b->budget(0).expiration());
-}
-
-TEST_F(BudgetDatabaseTest, BudgetDetailsTest) {
- ASSERT_TRUE(SetBudgetWithDefaultValues());
+ const GURL origin(kTestOrigin);
+ base::SimpleTestClock* clock = SetClockForTesting();
+ base::TimeDelta expiration(
+ base::TimeDelta::FromHours(kDefaultExpirationInHours));
+ 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 expectation and validate it.
@@ -138,18 +123,17 @@ TEST_F(BudgetDatabaseTest, BudgetDetailsTest) {
// First value should be [total_budget, now]
EXPECT_EQ(kDefaultBudget1 + kDefaultBudget2, iter->first);
// TODO(harkness): This will be "now" in the final version. For now, it's
- // just 0.0.
+ // just 0.
EXPECT_EQ(0, iter->second);
// The next value should be the budget after the first chunk expires.
iter++;
EXPECT_EQ(kDefaultBudget2, iter->first);
- EXPECT_EQ(kDefaultExpiration, iter->second);
+ EXPECT_EQ(expiration_time.ToInternalValue(), iter->second);
// The final value gives the budget of 0.0 after the second chunk expires.
+ expiration_time += base::TimeDelta::FromDays(1);
iter++;
EXPECT_EQ(0, iter->first);
- EXPECT_EQ(kDefaultExpiration + 1, iter->second);
+ EXPECT_EQ(expiration_time.ToInternalValue(), iter->second);
}
-
-} // namespace
« no previous file with comments | « chrome/browser/budget_service/budget_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698