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

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 60923002: [sync] Allow FakeURLFetcher to return an arbitrary URLRequestStatus (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Set correct net::Error, update example. Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/precache/core/precache_fetcher.h" 5 #include "components/precache/core/precache_fetcher.h"
6 6
7 #include <list> 7 #include <list>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "components/precache/core/precache_switches.h" 17 #include "components/precache/core/precache_switches.h"
18 #include "components/precache/core/proto/precache.pb.h" 18 #include "components/precache/core/proto/precache.pb.h"
19 #include "net/http/http_response_headers.h" 19 #include "net/http/http_response_headers.h"
20 #include "net/http/http_status_code.h" 20 #include "net/http/http_status_code.h"
21 #include "net/url_request/test_url_fetcher_factory.h" 21 #include "net/url_request/test_url_fetcher_factory.h"
22 #include "net/url_request/url_request_status.h"
22 #include "net/url_request/url_request_test_util.h" 23 #include "net/url_request/url_request_test_util.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 namespace precache { 26 namespace precache {
26 27
27 namespace { 28 namespace {
28 29
29 class TestURLFetcherCallback { 30 class TestURLFetcherCallback {
30 public: 31 public:
31 scoped_ptr<net::FakeURLFetcher> CreateURLFetcher( 32 scoped_ptr<net::FakeURLFetcher> CreateURLFetcher(
32 const GURL& url, net::URLFetcherDelegate* delegate, 33 const GURL& url, net::URLFetcherDelegate* delegate,
33 const std::string& response_data, net::HttpStatusCode response_code) { 34 const std::string& response_data, net::HttpStatusCode response_code,
34 scoped_ptr<net::FakeURLFetcher> fetcher( 35 net::URLRequestStatus::Status status) {
35 new net::FakeURLFetcher(url, delegate, response_data, response_code)); 36 scoped_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher(
37 url, delegate, response_data, response_code, status));
36 38
37 if (response_code == net::HTTP_OK) { 39 if (response_code == net::HTTP_OK) {
38 scoped_refptr<net::HttpResponseHeaders> download_headers = 40 scoped_refptr<net::HttpResponseHeaders> download_headers =
39 new net::HttpResponseHeaders(""); 41 new net::HttpResponseHeaders("");
40 download_headers->AddHeader("Content-Type: text/html"); 42 download_headers->AddHeader("Content-Type: text/html");
41 fetcher->set_response_headers(download_headers); 43 fetcher->set_response_headers(download_headers);
42 } 44 }
43 45
44 requested_urls_.insert(url); 46 requested_urls_.insert(url);
45 return fetcher.Pass(); 47 return fetcher.Pass();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 config.add_whitelisted_starting_url("http://bad-manifest.com"); 119 config.add_whitelisted_starting_url("http://bad-manifest.com");
118 config.add_whitelisted_starting_url("http://good-manifest.com"); 120 config.add_whitelisted_starting_url("http://good-manifest.com");
119 config.add_whitelisted_starting_url("http://not-in-top-4.com"); 121 config.add_whitelisted_starting_url("http://not-in-top-4.com");
120 config.set_maximum_rank_starting_url(4); 122 config.set_maximum_rank_starting_url(4);
121 123
122 PrecacheManifest good_manifest; 124 PrecacheManifest good_manifest;
123 good_manifest.add_resource()->set_url(kResourceFetchFailureURL); 125 good_manifest.add_resource()->set_url(kResourceFetchFailureURL);
124 good_manifest.add_resource(); // Resource with no URL, should not be fetched. 126 good_manifest.add_resource(); // Resource with no URL, should not be fetched.
125 good_manifest.add_resource()->set_url(kGoodResourceURL); 127 good_manifest.add_resource()->set_url(kGoodResourceURL);
126 128
127 factory_.SetFakeResponse(GURL(kConfigURL), 129 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
128 config.SerializeAsString(), 130 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
129 net::HTTP_OK); 131 factory_.SetFakeResponse(GURL(kManifestFetchFailureURL), "",
130 factory_.SetFakeResponse(GURL(kManifestFetchFailureURL), 132 net::HTTP_INTERNAL_SERVER_ERROR,
131 "", 133 net::URLRequestStatus::FAILED);
132 net::HTTP_INTERNAL_SERVER_ERROR); 134 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK,
133 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK); 135 net::URLRequestStatus::SUCCESS);
134 factory_.SetFakeResponse(GURL(kGoodManifestURL), 136 factory_.SetFakeResponse(GURL(kGoodManifestURL),
135 good_manifest.SerializeAsString(), net::HTTP_OK); 137 good_manifest.SerializeAsString(), net::HTTP_OK,
138 net::URLRequestStatus::SUCCESS);
136 factory_.SetFakeResponse(GURL(kResourceFetchFailureURL), 139 factory_.SetFakeResponse(GURL(kResourceFetchFailureURL),
137 "", 140 "", net::HTTP_INTERNAL_SERVER_ERROR,
138 net::HTTP_INTERNAL_SERVER_ERROR); 141 net::URLRequestStatus::FAILED);
139 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK); 142 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
143 net::URLRequestStatus::SUCCESS);
140 144
141 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(), 145 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(),
142 &precache_delegate_); 146 &precache_delegate_);
143 precache_fetcher.Start(); 147 precache_fetcher.Start();
144 148
145 base::MessageLoop::current()->RunUntilIdle(); 149 base::MessageLoop::current()->RunUntilIdle();
146 150
147 std::multiset<GURL> expected_requested_urls; 151 std::multiset<GURL> expected_requested_urls;
148 expected_requested_urls.insert(GURL(kConfigURL)); 152 expected_requested_urls.insert(GURL(kConfigURL));
149 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); 153 expected_requested_urls.insert(GURL(kManifestFetchFailureURL));
150 expected_requested_urls.insert(GURL(kBadManifestURL)); 154 expected_requested_urls.insert(GURL(kBadManifestURL));
151 expected_requested_urls.insert(GURL(kGoodManifestURL)); 155 expected_requested_urls.insert(GURL(kGoodManifestURL));
152 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); 156 expected_requested_urls.insert(GURL(kResourceFetchFailureURL));
153 expected_requested_urls.insert(GURL(kGoodResourceURL)); 157 expected_requested_urls.insert(GURL(kGoodResourceURL));
154 158
155 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 159 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
156 160
157 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 161 EXPECT_TRUE(precache_delegate_.was_on_done_called());
158 } 162 }
159 163
160 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { 164 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
161 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 165 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
162 switches::kPrecacheConfigSettingsURL, kConfigURL); 166 switches::kPrecacheConfigSettingsURL, kConfigURL);
163 167
164 std::list<GURL> starting_urls(1, GURL("http://starting-url.com")); 168 std::list<GURL> starting_urls(1, GURL("http://starting-url.com"));
165 169
166 factory_.SetFakeResponse(GURL(kConfigURL), 170 factory_.SetFakeResponse(GURL(kConfigURL), "",
167 "", 171 net::HTTP_INTERNAL_SERVER_ERROR,
168 net::HTTP_INTERNAL_SERVER_ERROR); 172 net::URLRequestStatus::FAILED);
169 173
170 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(), 174 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(),
171 &precache_delegate_); 175 &precache_delegate_);
172 precache_fetcher.Start(); 176 precache_fetcher.Start();
173 177
174 base::MessageLoop::current()->RunUntilIdle(); 178 base::MessageLoop::current()->RunUntilIdle();
175 179
176 std::multiset<GURL> expected_requested_urls; 180 std::multiset<GURL> expected_requested_urls;
177 expected_requested_urls.insert(GURL(kConfigURL)); 181 expected_requested_urls.insert(GURL(kConfigURL));
178 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 182 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
179 183
180 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 184 EXPECT_TRUE(precache_delegate_.was_on_done_called());
181 } 185 }
182 186
183 TEST_F(PrecacheFetcherTest, BadConfig) { 187 TEST_F(PrecacheFetcherTest, BadConfig) {
184 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 188 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
185 switches::kPrecacheConfigSettingsURL, kConfigURL); 189 switches::kPrecacheConfigSettingsURL, kConfigURL);
186 190
187 std::list<GURL> starting_urls(1, GURL("http://starting-url.com")); 191 std::list<GURL> starting_urls(1, GURL("http://starting-url.com"));
188 192
189 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK); 193 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
194 net::URLRequestStatus::SUCCESS);
190 195
191 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(), 196 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(),
192 &precache_delegate_); 197 &precache_delegate_);
193 precache_fetcher.Start(); 198 precache_fetcher.Start();
194 199
195 base::MessageLoop::current()->RunUntilIdle(); 200 base::MessageLoop::current()->RunUntilIdle();
196 201
197 std::multiset<GURL> expected_requested_urls; 202 std::multiset<GURL> expected_requested_urls;
198 expected_requested_urls.insert(GURL(kConfigURL)); 203 expected_requested_urls.insert(GURL(kConfigURL));
199 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 204 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
200 205
201 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 206 EXPECT_TRUE(precache_delegate_.was_on_done_called());
202 } 207 }
203 208
204 TEST_F(PrecacheFetcherTest, Cancel) { 209 TEST_F(PrecacheFetcherTest, Cancel) {
205 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 210 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
206 switches::kPrecacheConfigSettingsURL, kConfigURL); 211 switches::kPrecacheConfigSettingsURL, kConfigURL);
207 212
208 std::list<GURL> starting_urls(1, GURL("http://starting-url.com")); 213 std::list<GURL> starting_urls(1, GURL("http://starting-url.com"));
209 214
210 PrecacheConfigurationSettings config; 215 PrecacheConfigurationSettings config;
211 config.add_whitelisted_starting_url("http://starting-url.com"); 216 config.add_whitelisted_starting_url("http://starting-url.com");
212 config.set_maximum_rank_starting_url(1); 217 config.set_maximum_rank_starting_url(1);
213 218
214 factory_.SetFakeResponse(GURL(kConfigURL), 219 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
215 config.SerializeAsString(), 220 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
216 net::HTTP_OK);
217 221
218 scoped_ptr<PrecacheFetcher> precache_fetcher(new PrecacheFetcher( 222 scoped_ptr<PrecacheFetcher> precache_fetcher(new PrecacheFetcher(
219 starting_urls, request_context_.get(), &precache_delegate_)); 223 starting_urls, request_context_.get(), &precache_delegate_));
220 precache_fetcher->Start(); 224 precache_fetcher->Start();
221 225
222 // Destroy the PrecacheFetcher to cancel precaching. This should not cause 226 // Destroy the PrecacheFetcher to cancel precaching. This should not cause
223 // OnDone to be called on the precache delegate. 227 // OnDone to be called on the precache delegate.
224 precache_fetcher.reset(); 228 precache_fetcher.reset();
225 229
226 base::MessageLoop::current()->RunUntilIdle(); 230 base::MessageLoop::current()->RunUntilIdle();
227 231
228 std::multiset<GURL> expected_requested_urls; 232 std::multiset<GURL> expected_requested_urls;
229 expected_requested_urls.insert(GURL(kConfigURL)); 233 expected_requested_urls.insert(GURL(kConfigURL));
230 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 234 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
231 235
232 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 236 EXPECT_FALSE(precache_delegate_.was_on_done_called());
233 } 237 }
234 238
235 #if defined(PRECACHE_CONFIG_SETTINGS_URL) 239 #if defined(PRECACHE_CONFIG_SETTINGS_URL)
236 240
237 // If the default precache configuration settings URL is defined, then test that 241 // If the default precache configuration settings URL is defined, then test that
238 // it works with the PrecacheFetcher. 242 // it works with the PrecacheFetcher.
239 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { 243 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
240 std::list<GURL> starting_urls(1, GURL("http://starting-url.com")); 244 std::list<GURL> starting_urls(1, GURL("http://starting-url.com"));
241 245
242 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), 246 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL),
243 PrecacheConfigurationSettings().SerializeAsString(), 247 PrecacheConfigurationSettings().SerializeAsString(),
244 net::HTTP_OK); 248 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
245 249
246 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(), 250 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(),
247 &precache_delegate_); 251 &precache_delegate_);
248 precache_fetcher.Start(); 252 precache_fetcher.Start();
249 253
250 base::MessageLoop::current()->RunUntilIdle(); 254 base::MessageLoop::current()->RunUntilIdle();
251 255
252 std::multiset<GURL> expected_requested_urls; 256 std::multiset<GURL> expected_requested_urls;
253 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); 257 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL));
254 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 258 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
(...skipping 13 matching lines...) Expand all
268 272
269 std::list<GURL> starting_urls(1, GURL("http://starting-url.com")); 273 std::list<GURL> starting_urls(1, GURL("http://starting-url.com"));
270 274
271 PrecacheConfigurationSettings config; 275 PrecacheConfigurationSettings config;
272 config.add_whitelisted_starting_url("http://starting-url.com"); 276 config.add_whitelisted_starting_url("http://starting-url.com");
273 config.set_maximum_rank_starting_url(1); 277 config.set_maximum_rank_starting_url(1);
274 278
275 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX 279 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX
276 "http%253A%252F%252Fstarting-url.com%252F"); 280 "http%253A%252F%252Fstarting-url.com%252F");
277 281
278 factory_.SetFakeResponse(GURL(kConfigURL), 282 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
279 config.SerializeAsString(), 283 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
280 net::HTTP_OK); 284 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
281 factory_.SetFakeResponse(manifest_url, 285 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
282 PrecacheManifest().SerializeAsString(),
283 net::HTTP_OK);
284 286
285 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(), 287 PrecacheFetcher precache_fetcher(starting_urls, request_context_.get(),
286 &precache_delegate_); 288 &precache_delegate_);
287 precache_fetcher.Start(); 289 precache_fetcher.Start();
288 290
289 base::MessageLoop::current()->RunUntilIdle(); 291 base::MessageLoop::current()->RunUntilIdle();
290 292
291 std::multiset<GURL> expected_requested_urls; 293 std::multiset<GURL> expected_requested_urls;
292 expected_requested_urls.insert(GURL(kConfigURL)); 294 expected_requested_urls.insert(GURL(kConfigURL));
293 expected_requested_urls.insert(manifest_url); 295 expected_requested_urls.insert(manifest_url);
294 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 296 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
295 297
296 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 298 EXPECT_TRUE(precache_delegate_.was_on_done_called());
297 } 299 }
298 300
299 #endif // PRECACHE_MANIFEST_URL_PREFIX 301 #endif // PRECACHE_MANIFEST_URL_PREFIX
300 302
301 } // namespace 303 } // namespace
302 304
303 } // namespace precache 305 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698