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

Side by Side Diff: components/offline_pages/core/prefetch/prefetch_request_fetcher_unittest.cc

Issue 2873383004: [Offline Prefetch] Send GeneratePageBundleRequest to the server (Closed)
Patch Set: Address more feedback Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/offline_pages/core/prefetch/prefetch_request_fetcher.h" 5 #include "components/offline_pages/core/prefetch/prefetch_request_fetcher.h"
6 6
7 #include "base/message_loop/message_loop.h"
8 #include "base/test/mock_callback.h" 7 #include "base/test/mock_callback.h"
8 #include "components/offline_pages/core/prefetch/prefetch_request_test_base.h"
9 #include "components/offline_pages/core/prefetch/prefetch_types.h"
9 #include "net/http/http_status_code.h" 10 #include "net/http/http_status_code.h"
10 #include "net/url_request/test_url_fetcher_factory.h"
11 #include "net/url_request/url_request_status.h" 11 #include "net/url_request/url_request_status.h"
12 #include "net/url_request/url_request_test_util.h"
13 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "url/gurl.h" 13 #include "url/gurl.h"
16 14
17 using testing::_; 15 using testing::_;
18 using testing::DoAll; 16 using testing::DoAll;
19 using testing::Eq; 17 using testing::Eq;
20 using testing::SaveArg; 18 using testing::SaveArg;
21 19
22 namespace offline_prefetch { 20 namespace offline_pages {
23 21
24 namespace { 22 namespace {
25 const GURL kTestUrl("http://example.com"); 23 const GURL kTestUrl("http://example.com");
26 const char kTestMessage[] = "Testing"; 24 const char kTestMessage[] = "Testing";
27 } // namespace 25 } // namespace
28 26
29 class PrefetchRequestFetcherTest : public testing::Test { 27 class PrefetchRequestFetcherTest : public PrefetchRequestTestBase {
30 public: 28 public:
31 PrefetchRequestFetcherTest() 29 PrefetchRequestStatus RunFetcherWithNetError(net::Error net_error);
32 : request_context_(new net::TestURLRequestContextGetter( 30 PrefetchRequestStatus RunFetcherWithHttpError(int http_error);
33 base::ThreadTaskRunnerHandle::Get())) {} 31 PrefetchRequestStatus RunFetcherWithData(const std::string& response_data,
34 32 std::string* data_received);
35 PrefetchRequestFetcher::Status RunFetcherWithNetError(net::Error net_error);
36 PrefetchRequestFetcher::Status RunFetcherWithHttpError(int http_error);
37 PrefetchRequestFetcher::Status RunFetcherWithData(
38 const std::string& response_data,
39 std::string* data_received);
40
41 private:
42 void RespondWithNetError(int net_error);
43 void RespondWithHttpError(int http_error);
44 void RespondWithData(const std::string& data);
45
46 base::MessageLoop message_loop_;
47 net::TestURLFetcherFactory url_fetcher_factory_;
48 scoped_refptr<net::TestURLRequestContextGetter> request_context_;
49 }; 33 };
50 34
51 void PrefetchRequestFetcherTest::RespondWithNetError(int net_error) { 35 PrefetchRequestStatus PrefetchRequestFetcherTest::RunFetcherWithNetError(
52 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0); 36 net::Error net_error) {
53 DCHECK(url_fetcher);
54 url_fetcher->set_status(net::URLRequestStatus::FromError(net_error));
55 url_fetcher->SetResponseString("");
56 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher);
57 }
58
59 void PrefetchRequestFetcherTest::RespondWithHttpError(int http_error) {
60 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0);
61 DCHECK(url_fetcher);
62 url_fetcher->set_status(net::URLRequestStatus());
63 url_fetcher->set_response_code(http_error);
64 url_fetcher->SetResponseString("");
65 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher);
66 }
67
68 void PrefetchRequestFetcherTest::RespondWithData(const std::string& data) {
69 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0);
70 DCHECK(url_fetcher);
71 url_fetcher->set_status(net::URLRequestStatus());
72 url_fetcher->set_response_code(net::HTTP_OK);
73 url_fetcher->SetResponseString(data);
74 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher);
75 }
76
77 PrefetchRequestFetcher::Status
78 PrefetchRequestFetcherTest::RunFetcherWithNetError(net::Error net_error) {
79 base::MockCallback<PrefetchRequestFetcher::FinishedCallback> callback; 37 base::MockCallback<PrefetchRequestFetcher::FinishedCallback> callback;
80 std::unique_ptr<PrefetchRequestFetcher> fetcher(new PrefetchRequestFetcher( 38 std::unique_ptr<PrefetchRequestFetcher> fetcher(new PrefetchRequestFetcher(
81 kTestUrl, kTestMessage, request_context_, callback.Get())); 39 kTestUrl, kTestMessage, request_context(), callback.Get()));
82 40
83 PrefetchRequestFetcher::Status status; 41 PrefetchRequestStatus status;
84 std::string data; 42 std::string data;
85 EXPECT_CALL(callback, Run(_, _)) 43 EXPECT_CALL(callback, Run(_, _))
86 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&data))); 44 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&data)));
87 RespondWithNetError(net_error); 45 RespondWithNetError(net_error);
88 46
89 EXPECT_TRUE(data.empty()); 47 EXPECT_TRUE(data.empty());
90 return status; 48 return status;
91 } 49 }
92 50
93 PrefetchRequestFetcher::Status 51 PrefetchRequestStatus PrefetchRequestFetcherTest::RunFetcherWithHttpError(
94 PrefetchRequestFetcherTest::RunFetcherWithHttpError(int http_error) { 52 int http_error) {
95 base::MockCallback<PrefetchRequestFetcher::FinishedCallback> callback; 53 base::MockCallback<PrefetchRequestFetcher::FinishedCallback> callback;
96 std::unique_ptr<PrefetchRequestFetcher> fetcher(new PrefetchRequestFetcher( 54 std::unique_ptr<PrefetchRequestFetcher> fetcher(new PrefetchRequestFetcher(
97 kTestUrl, kTestMessage, request_context_, callback.Get())); 55 kTestUrl, kTestMessage, request_context(), callback.Get()));
98 56
99 PrefetchRequestFetcher::Status status; 57 PrefetchRequestStatus status;
100 std::string data; 58 std::string data;
101 EXPECT_CALL(callback, Run(_, _)) 59 EXPECT_CALL(callback, Run(_, _))
102 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&data))); 60 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&data)));
103 RespondWithHttpError(http_error); 61 RespondWithHttpError(http_error);
104 62
105 EXPECT_TRUE(data.empty()); 63 EXPECT_TRUE(data.empty());
106 return status; 64 return status;
107 } 65 }
108 66
109 PrefetchRequestFetcher::Status PrefetchRequestFetcherTest::RunFetcherWithData( 67 PrefetchRequestStatus PrefetchRequestFetcherTest::RunFetcherWithData(
110 const std::string& response_data, 68 const std::string& response_data,
111 std::string* data_received) { 69 std::string* data_received) {
112 base::MockCallback<PrefetchRequestFetcher::FinishedCallback> callback; 70 base::MockCallback<PrefetchRequestFetcher::FinishedCallback> callback;
113 std::unique_ptr<PrefetchRequestFetcher> fetcher(new PrefetchRequestFetcher( 71 std::unique_ptr<PrefetchRequestFetcher> fetcher(new PrefetchRequestFetcher(
114 kTestUrl, kTestMessage, request_context_, callback.Get())); 72 kTestUrl, kTestMessage, request_context(), callback.Get()));
115 73
116 PrefetchRequestFetcher::Status status; 74 PrefetchRequestStatus status;
117 std::string data; 75 std::string data;
118 EXPECT_CALL(callback, Run(_, _)) 76 EXPECT_CALL(callback, Run(_, _))
119 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&data))); 77 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&data)));
120 RespondWithData(response_data); 78 RespondWithData(response_data);
121 79
122 *data_received = data; 80 *data_received = data;
123 return status; 81 return status;
124 } 82 }
125 83
126 TEST_F(PrefetchRequestFetcherTest, NetErrors) { 84 TEST_F(PrefetchRequestFetcherTest, NetErrors) {
127 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_SUSPEND, 85 EXPECT_EQ(PrefetchRequestStatus::SHOULD_SUSPEND,
128 RunFetcherWithNetError(net::ERR_BLOCKED_BY_ADMINISTRATOR)); 86 RunFetcherWithNetError(net::ERR_BLOCKED_BY_ADMINISTRATOR));
129 87
130 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITHOUT_BACKOFF, 88 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITHOUT_BACKOFF,
131 RunFetcherWithNetError(net::ERR_INTERNET_DISCONNECTED)); 89 RunFetcherWithNetError(net::ERR_INTERNET_DISCONNECTED));
132 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITHOUT_BACKOFF, 90 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITHOUT_BACKOFF,
133 RunFetcherWithNetError(net::ERR_NETWORK_CHANGED)); 91 RunFetcherWithNetError(net::ERR_NETWORK_CHANGED));
134 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITHOUT_BACKOFF, 92 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITHOUT_BACKOFF,
135 RunFetcherWithNetError(net::ERR_CONNECTION_RESET)); 93 RunFetcherWithNetError(net::ERR_CONNECTION_RESET));
136 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITHOUT_BACKOFF, 94 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITHOUT_BACKOFF,
137 RunFetcherWithNetError(net::ERR_CONNECTION_CLOSED)); 95 RunFetcherWithNetError(net::ERR_CONNECTION_CLOSED));
138 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITHOUT_BACKOFF, 96 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITHOUT_BACKOFF,
139 RunFetcherWithNetError(net::ERR_CONNECTION_REFUSED)); 97 RunFetcherWithNetError(net::ERR_CONNECTION_REFUSED));
140 } 98 }
141 99
142 TEST_F(PrefetchRequestFetcherTest, HttpErrors) { 100 TEST_F(PrefetchRequestFetcherTest, HttpErrors) {
143 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_SUSPEND, 101 EXPECT_EQ(PrefetchRequestStatus::SHOULD_SUSPEND,
144 RunFetcherWithHttpError(net::HTTP_NOT_IMPLEMENTED)); 102 RunFetcherWithHttpError(net::HTTP_NOT_IMPLEMENTED));
145 103
146 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 104 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
147 RunFetcherWithHttpError(net::HTTP_BAD_REQUEST)); 105 RunFetcherWithHttpError(net::HTTP_BAD_REQUEST));
148 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 106 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
149 RunFetcherWithHttpError(net::HTTP_UNAUTHORIZED)); 107 RunFetcherWithHttpError(net::HTTP_UNAUTHORIZED));
150 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 108 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
151 RunFetcherWithHttpError(net::HTTP_NOT_FOUND)); 109 RunFetcherWithHttpError(net::HTTP_NOT_FOUND));
152 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 110 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
153 RunFetcherWithHttpError(net::HTTP_CONFLICT)); 111 RunFetcherWithHttpError(net::HTTP_CONFLICT));
154 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 112 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
155 RunFetcherWithHttpError(net::HTTP_INTERNAL_SERVER_ERROR)); 113 RunFetcherWithHttpError(net::HTTP_INTERNAL_SERVER_ERROR));
156 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 114 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
157 RunFetcherWithHttpError(net::HTTP_BAD_GATEWAY)); 115 RunFetcherWithHttpError(net::HTTP_BAD_GATEWAY));
158 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 116 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
159 RunFetcherWithHttpError(net::HTTP_SERVICE_UNAVAILABLE)); 117 RunFetcherWithHttpError(net::HTTP_SERVICE_UNAVAILABLE));
160 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 118 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
161 RunFetcherWithHttpError(net::HTTP_GATEWAY_TIMEOUT)); 119 RunFetcherWithHttpError(net::HTTP_GATEWAY_TIMEOUT));
162 } 120 }
163 121
164 TEST_F(PrefetchRequestFetcherTest, EmptyResponse) { 122 TEST_F(PrefetchRequestFetcherTest, EmptyResponse) {
165 std::string data; 123 std::string data;
166 EXPECT_EQ(PrefetchRequestFetcher::Status::SHOULD_RETRY_WITH_BACKOFF, 124 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
167 RunFetcherWithData("", &data)); 125 RunFetcherWithData("", &data));
168 EXPECT_TRUE(data.empty()); 126 EXPECT_TRUE(data.empty());
169 } 127 }
170 128
171 TEST_F(PrefetchRequestFetcherTest, Success) { 129 TEST_F(PrefetchRequestFetcherTest, Success) {
172 std::string data; 130 std::string data;
173 EXPECT_EQ(PrefetchRequestFetcher::Status::SUCCESS, 131 EXPECT_EQ(PrefetchRequestStatus::SUCCESS,
174 RunFetcherWithData("Any data.", &data)); 132 RunFetcherWithData("Any data.", &data));
175 EXPECT_FALSE(data.empty()); 133 EXPECT_FALSE(data.empty());
176 } 134 }
177 135
178 } // namespace offline_prefetch 136 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698