| OLD | NEW | 
| (Empty) |  | 
 |    1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
 |    2 // Use of this source code is governed by a BSD-style license that can be | 
 |    3 // found in the LICENSE file. | 
 |    4  | 
 |    5 #include "components/offline_pages/background/add_request_task.h" | 
 |    6  | 
 |    7 #include <memory> | 
 |    8  | 
 |    9 #include "base/bind.h" | 
 |   10 #include "base/test/test_simple_task_runner.h" | 
 |   11 #include "base/threading/thread_task_runner_handle.h" | 
 |   12 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 
 |   13 #include "testing/gtest/include/gtest/gtest.h" | 
 |   14  | 
 |   15 namespace offline_pages { | 
 |   16 namespace { | 
 |   17 const int64_t kRequestId1 = 42; | 
 |   18 const int64_t kRequestId2 = 44; | 
 |   19 const GURL kUrl1("http://example.com"); | 
 |   20 const GURL kUrl2("http://otherexample.com"); | 
 |   21 const ClientId kClientId1("download", "1234"); | 
 |   22 const ClientId kClientId2("download", "5678"); | 
 |   23 }  // namespace | 
 |   24  | 
 |   25 class AddRequestTaskTest : public testing::Test { | 
 |   26  public: | 
 |   27   AddRequestTaskTest(); | 
 |   28   ~AddRequestTaskTest() override; | 
 |   29  | 
 |   30   void PumpLoop(); | 
 |   31   void ClearResults(); | 
 |   32  | 
 |   33   void AddRequestDone(ItemActionStatus status); | 
 |   34  | 
 |   35   void GetRequestsCallback( | 
 |   36       bool success, | 
 |   37       std::vector<std::unique_ptr<SavePageRequest>> requests); | 
 |   38  | 
 |   39   bool callback_called() const { return callback_called_; } | 
 |   40  | 
 |   41   ItemActionStatus last_status() const { return status_; } | 
 |   42  | 
 |   43   const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 
 |   44     return requests_; | 
 |   45   } | 
 |   46  | 
 |   47  private: | 
 |   48   bool callback_called_; | 
 |   49   ItemActionStatus status_; | 
 |   50   std::vector<std::unique_ptr<SavePageRequest>> requests_; | 
 |   51   scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 
 |   52   base::ThreadTaskRunnerHandle task_runner_handle_; | 
 |   53 }; | 
 |   54  | 
 |   55 AddRequestTaskTest::AddRequestTaskTest() | 
 |   56     : callback_called_(false), | 
 |   57       status_(ItemActionStatus::NOT_FOUND), | 
 |   58       task_runner_(new base::TestSimpleTaskRunner), | 
 |   59       task_runner_handle_(task_runner_) {} | 
 |   60  | 
 |   61 AddRequestTaskTest::~AddRequestTaskTest() {} | 
 |   62  | 
 |   63 void AddRequestTaskTest::PumpLoop() { | 
 |   64   task_runner_->RunUntilIdle(); | 
 |   65 } | 
 |   66  | 
 |   67 void AddRequestTaskTest::ClearResults() { | 
 |   68   callback_called_ = false; | 
 |   69   status_ = ItemActionStatus::NOT_FOUND; | 
 |   70   requests_.clear(); | 
 |   71 } | 
 |   72  | 
 |   73 void AddRequestTaskTest::AddRequestDone(ItemActionStatus status) { | 
 |   74   status_ = status; | 
 |   75   callback_called_ = true; | 
 |   76 } | 
 |   77  | 
 |   78 void AddRequestTaskTest::GetRequestsCallback( | 
 |   79     bool success, | 
 |   80     std::vector<std::unique_ptr<SavePageRequest>> requests) { | 
 |   81   requests_ = std::move(requests); | 
 |   82 } | 
 |   83  | 
 |   84 TEST_F(AddRequestTaskTest, AddSingleRequest) { | 
 |   85   RequestQueueInMemoryStore store; | 
 |   86   base::Time creation_time = base::Time::Now(); | 
 |   87   SavePageRequest request_1(kRequestId1, kUrl1, kClientId1, creation_time, | 
 |   88                             true); | 
 |   89   AddRequestTask task( | 
 |   90       &store, request_1, | 
 |   91       base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | 
 |   92   task.Run(); | 
 |   93   PumpLoop(); | 
 |   94   EXPECT_TRUE(callback_called()); | 
 |   95   EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | 
 |   96  | 
 |   97   store.GetRequests(base::Bind(&AddRequestTaskTest::GetRequestsCallback, | 
 |   98                                base::Unretained(this))); | 
 |   99   PumpLoop(); | 
 |  100   ASSERT_EQ(1ul, last_requests().size()); | 
 |  101   EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id()); | 
 |  102   EXPECT_EQ(kUrl1, last_requests().at(0)->url()); | 
 |  103   EXPECT_EQ(kClientId1, last_requests().at(0)->client_id()); | 
 |  104   EXPECT_EQ(creation_time, last_requests().at(0)->creation_time()); | 
 |  105   EXPECT_TRUE(last_requests().at(0)->user_requested()); | 
 |  106 } | 
 |  107  | 
 |  108 TEST_F(AddRequestTaskTest, AddMultipleRequests) { | 
 |  109   RequestQueueInMemoryStore store; | 
 |  110   base::Time creation_time_1 = base::Time::Now(); | 
 |  111   SavePageRequest request_1(kRequestId1, kUrl1, kClientId1, creation_time_1, | 
 |  112                             true); | 
 |  113   AddRequestTask task( | 
 |  114       &store, request_1, | 
 |  115       base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | 
 |  116   task.Run(); | 
 |  117   PumpLoop(); | 
 |  118   EXPECT_TRUE(callback_called()); | 
 |  119   EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | 
 |  120  | 
 |  121   ClearResults(); | 
 |  122   base::Time creation_time_2 = base::Time::Now(); | 
 |  123   SavePageRequest request_2(kRequestId2, kUrl2, kClientId2, creation_time_2, | 
 |  124                             true); | 
 |  125   AddRequestTask task_2( | 
 |  126       &store, request_2, | 
 |  127       base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | 
 |  128   task_2.Run(); | 
 |  129   PumpLoop(); | 
 |  130   EXPECT_TRUE(callback_called()); | 
 |  131   EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | 
 |  132  | 
 |  133   store.GetRequests(base::Bind(&AddRequestTaskTest::GetRequestsCallback, | 
 |  134                                base::Unretained(this))); | 
 |  135   PumpLoop(); | 
 |  136   ASSERT_EQ(2ul, last_requests().size()); | 
 |  137   int request_2_index = | 
 |  138       last_requests().at(0)->request_id() == kRequestId2 ? 0 : 1; | 
 |  139   EXPECT_EQ(kRequestId2, last_requests().at(request_2_index)->request_id()); | 
 |  140   EXPECT_EQ(kUrl2, last_requests().at(request_2_index)->url()); | 
 |  141   EXPECT_EQ(kClientId2, last_requests().at(request_2_index)->client_id()); | 
 |  142   EXPECT_EQ(creation_time_2, | 
 |  143             last_requests().at(request_2_index)->creation_time()); | 
 |  144   EXPECT_TRUE(last_requests().at(request_2_index)->user_requested()); | 
 |  145 } | 
 |  146  | 
 |  147 TEST_F(AddRequestTaskTest, AddDuplicateRequest) { | 
 |  148   RequestQueueInMemoryStore store; | 
 |  149   base::Time creation_time_1 = base::Time::Now(); | 
 |  150   SavePageRequest request_1(kRequestId1, kUrl1, kClientId1, creation_time_1, | 
 |  151                             true); | 
 |  152   AddRequestTask task( | 
 |  153       &store, request_1, | 
 |  154       base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | 
 |  155   task.Run(); | 
 |  156   PumpLoop(); | 
 |  157   EXPECT_TRUE(callback_called()); | 
 |  158   EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | 
 |  159  | 
 |  160   ClearResults(); | 
 |  161   base::Time creation_time_2 = base::Time::Now(); | 
 |  162   // This was has the same request ID. | 
 |  163   SavePageRequest request_2(kRequestId1, kUrl2, kClientId2, creation_time_2, | 
 |  164                             true); | 
 |  165   AddRequestTask task_2( | 
 |  166       &store, request_2, | 
 |  167       base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | 
 |  168   task.Run(); | 
 |  169   PumpLoop(); | 
 |  170   EXPECT_TRUE(callback_called()); | 
 |  171   EXPECT_EQ(ItemActionStatus::ALREADY_EXISTS, last_status()); | 
 |  172  | 
 |  173   store.GetRequests(base::Bind(&AddRequestTaskTest::GetRequestsCallback, | 
 |  174                                base::Unretained(this))); | 
 |  175   PumpLoop(); | 
 |  176   ASSERT_EQ(1ul, last_requests().size()); | 
 |  177 } | 
 |  178  | 
 |  179 }  // namespace offline_pages | 
| OLD | NEW |