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

Unified Diff: components/offline_pages/background/request_picker_unittest.cc

Issue 2233493003: [Offline Pages] Remove expired requests from the queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing patching error. 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: components/offline_pages/background/request_picker_unittest.cc
diff --git a/components/offline_pages/background/request_picker_unittest.cc b/components/offline_pages/background/request_picker_unittest.cc
index cd74c70db4cc43d4e52c7f8a5e2219bf6e7c12d2..7082481854fa2e18547ba9479748a9f1de59882a 100644
--- a/components/offline_pages/background/request_picker_unittest.cc
+++ b/components/offline_pages/background/request_picker_unittest.cc
@@ -9,6 +9,8 @@
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "components/offline_pages/background/device_conditions.h"
+#include "components/offline_pages/background/offliner_factory.h"
+#include "components/offline_pages/background/offliner_policy.h"
#include "components/offline_pages/background/request_queue.h"
#include "components/offline_pages/background/request_queue_in_memory_store.h"
#include "components/offline_pages/background/save_page_request.h"
@@ -38,6 +40,116 @@ const bool kPreferEarlier = true;
const bool kPreferRetryCount = true;
} // namespace
+class SchedulerStub : public Scheduler {
+ public:
+ SchedulerStub()
+ : schedule_called_(false),
+ unschedule_called_(false),
+ conditions_(false, 0, false) {}
+
+ void Schedule(const TriggerConditions& trigger_conditions) override {
+ schedule_called_ = true;
+ conditions_ = trigger_conditions;
+ }
+
+ // Unschedules the currently scheduled task, if any.
+ void Unschedule() override { unschedule_called_ = true; }
+
+ bool schedule_called() const { return schedule_called_; }
+
+ bool unschedule_called() const { return unschedule_called_; }
+
+ TriggerConditions const* conditions() const { return &conditions_; }
+
+ private:
+ bool schedule_called_;
+ bool unschedule_called_;
+ TriggerConditions conditions_;
+};
+
+class OfflinerStub : public Offliner {
+ public:
+ OfflinerStub()
+ : request_(kRequestId1,
+ kUrl1,
+ kClientId1,
+ base::Time::Now(),
+ kUserRequested),
+ enable_callback_(false),
+ cancel_called_(false) {}
+
+ bool LoadAndSave(const SavePageRequest& request,
+ const CompletionCallback& callback) override {
+ callback_ = callback;
+ request_ = request;
+ // Post the callback on the run loop.
+ if (enable_callback_) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, request, Offliner::RequestStatus::SAVED));
+ }
+ return true;
+ }
+
+ void Cancel() override { cancel_called_ = true; }
+
+ void enable_callback(bool enable) { enable_callback_ = enable; }
+
+ bool cancel_called() { return cancel_called_; }
+
+ private:
+ CompletionCallback callback_;
+ SavePageRequest request_;
+ bool enable_callback_;
+ bool cancel_called_;
+};
+
+class OfflinerFactoryStub : public OfflinerFactory {
+ public:
+ OfflinerFactoryStub() : offliner_(nullptr) {}
+
+ Offliner* GetOffliner(const OfflinerPolicy* policy) override {
+ if (offliner_.get() == nullptr) {
+ offliner_.reset(new OfflinerStub());
+ }
+ return offliner_.get();
+ }
+
+ private:
+ std::unique_ptr<OfflinerStub> offliner_;
+};
+
+class RequestCoordinatorStub : public RequestCoordinator {
+ public:
+ RequestCoordinatorStub()
+ : RequestCoordinator(
+ std::unique_ptr<OfflinerPolicy>(new OfflinerPolicy()),
+ std::unique_ptr<OfflinerFactory>(new OfflinerFactoryStub()),
+ std::unique_ptr<RequestQueue>(
+ new RequestQueue(std::unique_ptr<RequestQueueInMemoryStore>(
+ new RequestQueueInMemoryStore()))),
+ std::unique_ptr<Scheduler>(new SchedulerStub())) {}
+
+ void NotifyRequestsExpired(
+ const std::vector<SavePageRequest>& expired_requests,
+ RequestQueue::UpdateRequestResult result) override {
+ last_request_expiration_result_ = result;
+ last_expired_requests_ = expired_requests;
+ }
+
+ const std::vector<SavePageRequest>& last_expired_requests() {
+ return last_expired_requests_;
+ }
+
+ RequestQueue::UpdateRequestResult last_request_expiration_result() {
+ return last_request_expiration_result_;
+ }
+
+ private:
+ RequestQueue::UpdateRequestResult last_request_expiration_result_;
+ std::vector<SavePageRequest> last_expired_requests_;
+};
+
class RequestPickerTest : public testing::Test {
public:
RequestPickerTest();
@@ -58,11 +170,14 @@ class RequestPickerTest : public testing::Test {
void QueueRequestsAndChooseOne(const SavePageRequest& request1,
const SavePageRequest& request2);
+ RequestCoordinatorStub* GetCoordinator() { return coordinator_.get(); }
+
protected:
// The request queue is simple enough we will use a real queue with a memory
// store instead of a stub.
std::unique_ptr<RequestQueue> queue_;
std::unique_ptr<RequestPicker> picker_;
+ std::unique_ptr<RequestCoordinatorStub> coordinator_;
std::unique_ptr<SavePageRequest> last_picked_;
std::unique_ptr<OfflinerPolicy> policy_;
bool request_queue_empty_called_;
@@ -83,7 +198,9 @@ void RequestPickerTest::SetUp() {
new RequestQueueInMemoryStore());
queue_.reset(new RequestQueue(std::move(store)));
policy_.reset(new OfflinerPolicy());
- picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
+ coordinator_.reset(new RequestCoordinatorStub());
+ picker_.reset(
+ new RequestPicker(queue_.get(), policy_.get(), coordinator_.get()));
request_queue_empty_called_ = false;
}
@@ -143,6 +260,28 @@ TEST_F(RequestPickerTest, PickFromEmptyQueue) {
EXPECT_TRUE(request_queue_empty_called_);
}
+TEST_F(RequestPickerTest, ChooseNonExpiredRequest) {
+ base::Time creation_time = base::Time::Now();
+ base::Time expired_time =
+ creation_time -
+ base::TimeDelta::FromSeconds(kRequestExpirationTimeInSeconds + 60);
+ SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
+ kUserRequested);
+ SavePageRequest request2(kRequestId2, kUrl2, kClientId2, expired_time,
+ kUserRequested);
+
+ QueueRequestsAndChooseOne(request1, request2);
+
+ PumpLoop();
+
+ EXPECT_EQ(kRequestId1, last_picked_->request_id());
+ EXPECT_FALSE(request_queue_empty_called_);
+ EXPECT_EQ(kRequestId2,
+ GetCoordinator()->last_expired_requests()[0].request_id());
+ EXPECT_EQ(RequestQueue::UpdateRequestResult::SUCCESS,
+ GetCoordinator()->last_request_expiration_result());
+}
+
TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) {
policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
kPreferRetryCount, kMaxStartedTries,
@@ -182,7 +321,8 @@ TEST_F(RequestPickerTest, ChooseEarlierRequest) {
policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
!kPreferRetryCount, kMaxStartedTries,
kMaxCompletedTries));
- picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
+ picker_.reset(
+ new RequestPicker(queue_.get(), policy_.get(), coordinator_.get()));
base::Time creation_time1 =
base::Time::Now() - base::TimeDelta::FromSeconds(10);
@@ -204,7 +344,8 @@ TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) {
policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
!kPreferRetryCount, kMaxStartedTries,
kMaxCompletedTries + 1));
- picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
+ picker_.reset(
+ new RequestPicker(queue_.get(), policy_.get(), coordinator_.get()));
base::Time creation_time = base::Time::Now();
SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
@@ -224,7 +365,8 @@ TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) {
policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier,
kPreferRetryCount, kMaxStartedTries,
kMaxCompletedTries + 1));
- picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
+ picker_.reset(
+ new RequestPicker(queue_.get(), policy_.get(), coordinator_.get()));
base::Time creation_time = base::Time::Now();
SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
@@ -244,7 +386,8 @@ TEST_F(RequestPickerTest, ChooseLaterRequest) {
policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier,
!kPreferRetryCount, kMaxStartedTries,
kMaxCompletedTries));
- picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
+ picker_.reset(
+ new RequestPicker(queue_.get(), policy_.get(), coordinator_.get()));
base::Time creation_time1 =
base::Time::Now() - base::TimeDelta::FromSeconds(10);

Powered by Google App Engine
This is Rietveld 408576698