OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/component_updater/test/component_updater_service_unitte st.h" | 5 #include "chrome/browser/component_updater/test/component_updater_service_unitte st.h" |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "chrome/browser/component_updater/test/test_installer.h" | 12 #include "chrome/browser/component_updater/test/test_installer.h" |
13 #include "chrome/common/chrome_paths.h" | 13 #include "chrome/common/chrome_paths.h" |
14 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
15 #include "content/test/net/url_request_prepackaged_interceptor.h" | |
16 #include "libxml/globals.h" | 15 #include "libxml/globals.h" |
17 #include "net/base/upload_bytes_element_reader.h" | 16 #include "net/base/upload_bytes_element_reader.h" |
18 #include "net/url_request/url_fetcher.h" | 17 #include "net/url_request/url_fetcher.h" |
19 #include "url/gurl.h" | 18 #include "url/gurl.h" |
20 | 19 |
21 using content::BrowserThread; | 20 using content::BrowserThread; |
22 | 21 |
23 using ::testing::_; | 22 using ::testing::_; |
24 using ::testing::InSequence; | 23 using ::testing::InSequence; |
25 using ::testing::Mock; | 24 using ::testing::Mock; |
26 | 25 |
27 namespace component_updater { | 26 namespace component_updater { |
28 | 27 |
28 #define POST_INTERCEPT_SCHEME "http" | |
29 #define POST_INTERCEPT_HOSTNAME "localhost2" | |
30 #define POST_INTERCEPT_PATH "/update2" | |
31 | |
29 MockComponentObserver::MockComponentObserver() { | 32 MockComponentObserver::MockComponentObserver() { |
30 } | 33 } |
31 | 34 |
32 MockComponentObserver::~MockComponentObserver() { | 35 MockComponentObserver::~MockComponentObserver() { |
33 } | 36 } |
34 | 37 |
35 TestConfigurator::TestConfigurator() | 38 TestConfigurator::TestConfigurator() |
36 : times_(1), | 39 : times_(1), |
37 recheck_time_(0), | 40 recheck_time_(0), |
38 ondemand_time_(0), | 41 ondemand_time_(0), |
(...skipping 29 matching lines...) Expand all Loading... | |
68 | 71 |
69 int TestConfigurator::MinimumReCheckWait() { | 72 int TestConfigurator::MinimumReCheckWait() { |
70 return recheck_time_; | 73 return recheck_time_; |
71 } | 74 } |
72 | 75 |
73 int TestConfigurator::OnDemandDelay() { | 76 int TestConfigurator::OnDemandDelay() { |
74 return ondemand_time_; | 77 return ondemand_time_; |
75 } | 78 } |
76 | 79 |
77 GURL TestConfigurator::UpdateUrl() { | 80 GURL TestConfigurator::UpdateUrl() { |
78 return GURL("http://localhost/upd"); | 81 return GURL(POST_INTERCEPT_SCHEME "://" |
82 POST_INTERCEPT_HOSTNAME POST_INTERCEPT_PATH); | |
79 } | 83 } |
80 | 84 |
81 GURL TestConfigurator::PingUrl() { | 85 GURL TestConfigurator::PingUrl() { |
82 return GURL("http://localhost2/update2"); | 86 return UpdateUrl(); |
83 } | 87 } |
84 | 88 |
85 const char* TestConfigurator::ExtraRequestParams() { return "extra=foo"; } | 89 const char* TestConfigurator::ExtraRequestParams() { return "extra=foo"; } |
86 | 90 |
87 size_t TestConfigurator::UrlSizeLimit() { return 256; } | 91 size_t TestConfigurator::UrlSizeLimit() { return 256; } |
88 | 92 |
89 net::URLRequestContextGetter* TestConfigurator::RequestContext() { | 93 net::URLRequestContextGetter* TestConfigurator::RequestContext() { |
90 return context_.get(); | 94 return context_.get(); |
91 } | 95 } |
92 | 96 |
(...skipping 22 matching lines...) Expand all Loading... | |
115 void TestConfigurator::SetComponentUpdateService(ComponentUpdateService* cus) { | 119 void TestConfigurator::SetComponentUpdateService(ComponentUpdateService* cus) { |
116 cus_ = cus; | 120 cus_ = cus; |
117 } | 121 } |
118 | 122 |
119 void TestConfigurator::SetQuitClosure(const base::Closure& quit_closure) { | 123 void TestConfigurator::SetQuitClosure(const base::Closure& quit_closure) { |
120 quit_closure_ = quit_closure; | 124 quit_closure_ = quit_closure; |
121 } | 125 } |
122 | 126 |
123 | 127 |
124 InterceptorFactory::InterceptorFactory() | 128 InterceptorFactory::InterceptorFactory() |
125 : URLRequestPostInterceptorFactory("http", "localhost2") {} | 129 : URLRequestPostInterceptorFactory(POST_INTERCEPT_SCHEME, |
130 POST_INTERCEPT_HOSTNAME) {} | |
126 | 131 |
127 InterceptorFactory::~InterceptorFactory() {} | 132 InterceptorFactory::~InterceptorFactory() {} |
128 | 133 |
129 URLRequestPostInterceptor* InterceptorFactory::CreateInterceptor() { | 134 URLRequestPostInterceptor* InterceptorFactory::CreateInterceptor() { |
130 return URLRequestPostInterceptorFactory::CreateInterceptor("/update2"); | 135 return URLRequestPostInterceptorFactory::CreateInterceptor( |
136 base::FilePath::FromUTF8Unsafe(POST_INTERCEPT_PATH)); | |
131 } | 137 } |
132 | 138 |
133 class PartialMatch : public URLRequestPostInterceptor::RequestMatcher { | 139 class PartialMatch : public URLRequestPostInterceptor::RequestMatcher { |
134 public: | 140 public: |
135 explicit PartialMatch(const std::string& expected) : expected_(expected) {} | 141 explicit PartialMatch(const std::string& expected) : expected_(expected) {} |
136 virtual bool Match(const std::string& actual) const OVERRIDE { | 142 virtual bool Match(const std::string& actual) const OVERRIDE { |
137 return actual.find(expected_) != std::string::npos; | 143 return actual.find(expected_) != std::string::npos; |
138 } | 144 } |
139 | 145 |
140 private: | 146 private: |
(...skipping 15 matching lines...) Expand all Loading... | |
156 test_data_dir_ = test_data_dir_.AppendASCII("components"); | 162 test_data_dir_ = test_data_dir_.AppendASCII("components"); |
157 | 163 |
158 net::URLFetcher::SetEnableInterceptionForTests(true); | 164 net::URLFetcher::SetEnableInterceptionForTests(true); |
159 } | 165 } |
160 | 166 |
161 ComponentUpdaterTest::~ComponentUpdaterTest() { | 167 ComponentUpdaterTest::~ComponentUpdaterTest() { |
162 net::URLFetcher::SetEnableInterceptionForTests(false); | 168 net::URLFetcher::SetEnableInterceptionForTests(false); |
163 } | 169 } |
164 | 170 |
165 void ComponentUpdaterTest::SetUp() { | 171 void ComponentUpdaterTest::SetUp() { |
172 get_interceptor_.reset(new GetInterceptor); | |
166 interceptor_factory_.reset(new InterceptorFactory); | 173 interceptor_factory_.reset(new InterceptorFactory); |
174 post_interceptor_ = interceptor_factory_->CreateInterceptor(); | |
175 EXPECT_TRUE(post_interceptor_); | |
167 } | 176 } |
168 | 177 |
169 void ComponentUpdaterTest::TearDown() { | 178 void ComponentUpdaterTest::TearDown() { |
170 interceptor_factory_.reset(); | 179 interceptor_factory_.reset(); |
180 get_interceptor_.reset(); | |
171 xmlCleanupGlobals(); | 181 xmlCleanupGlobals(); |
172 } | 182 } |
173 | 183 |
174 ComponentUpdateService* ComponentUpdaterTest::component_updater() { | 184 ComponentUpdateService* ComponentUpdaterTest::component_updater() { |
175 return component_updater_.get(); | 185 return component_updater_.get(); |
176 } | 186 } |
177 | 187 |
178 // Makes the full path to a component updater test file. | 188 // Makes the full path to a component updater test file. |
179 const base::FilePath ComponentUpdaterTest::test_file(const char* file) { | 189 const base::FilePath ComponentUpdaterTest::test_file(const char* file) { |
180 return test_data_dir_.AppendASCII(file); | 190 return test_data_dir_.AppendASCII(file); |
(...skipping 20 matching lines...) Expand all Loading... | |
201 } | 211 } |
202 com->version = version; | 212 com->version = version; |
203 com->installer = installer; | 213 com->installer = installer; |
204 return component_updater_->RegisterComponent(*com); | 214 return component_updater_->RegisterComponent(*com); |
205 } | 215 } |
206 | 216 |
207 void ComponentUpdaterTest::RunThreads() { | 217 void ComponentUpdaterTest::RunThreads() { |
208 base::RunLoop runloop; | 218 base::RunLoop runloop; |
209 test_configurator()->SetQuitClosure(runloop.QuitClosure()); | 219 test_configurator()->SetQuitClosure(runloop.QuitClosure()); |
210 runloop.Run(); | 220 runloop.Run(); |
221 RunThreadsUntilIdle(); | |
waffles
2013/11/18 22:15:59
Are you certain that this is safe?
runloop.Run()
Sorin Jianu
2013/11/19 04:25:45
I am not sure about it and I removed the call.
waffles
2013/11/19 18:33:58
Ok, looks like it was needed after all? (As mentio
| |
211 } | 222 } |
212 | 223 |
213 void ComponentUpdaterTest::RunThreadsUntilIdle() { | 224 void ComponentUpdaterTest::RunThreadsUntilIdle() { |
214 base::RunLoop().RunUntilIdle(); | 225 base::RunLoop().RunUntilIdle(); |
215 } | 226 } |
216 | 227 |
217 ComponentUpdateService::Status OnDemandTester::OnDemand( | 228 ComponentUpdateService::Status OnDemandTester::OnDemand( |
218 ComponentUpdateService* cus, const std::string& component_id) { | 229 ComponentUpdateService* cus, const std::string& component_id) { |
219 return cus->OnDemandUpdate(component_id); | 230 return cus->OnDemandUpdate(component_id); |
220 } | 231 } |
221 | 232 |
222 // Verify that our test fixture work and the component updater can | 233 // Verify that our test fixture work and the component updater can |
223 // be created and destroyed with no side effects. | 234 // be created and destroyed with no side effects. |
224 TEST_F(ComponentUpdaterTest, VerifyFixture) { | 235 TEST_F(ComponentUpdaterTest, VerifyFixture) { |
225 EXPECT_TRUE(component_updater() != NULL); | 236 EXPECT_TRUE(component_updater() != NULL); |
226 } | 237 } |
227 | 238 |
228 // Verify that the component updater can be caught in a quick | 239 // Verify that the component updater can be caught in a quick |
229 // start-shutdown situation. Failure of this test will be a crash. | 240 // start-shutdown situation. Failure of this test will be a crash. |
230 TEST_F(ComponentUpdaterTest, StartStop) { | 241 TEST_F(ComponentUpdaterTest, StartStop) { |
231 component_updater()->Start(); | 242 component_updater()->Start(); |
232 RunThreadsUntilIdle(); | 243 RunThreadsUntilIdle(); |
233 component_updater()->Stop(); | 244 component_updater()->Stop(); |
234 } | 245 } |
235 | 246 |
236 // Verify that when the server has no updates, we go back to sleep and | 247 // Verify that when the server has no updates, we go back to sleep and |
237 // the COMPONENT_UPDATER_STARTED and COMPONENT_UPDATER_SLEEPING notifications | 248 // the COMPONENT_UPDATER_STARTED and COMPONENT_UPDATER_SLEEPING notifications |
238 // are generated. No pings are sent. | 249 // are generated. No pings are sent. |
239 TEST_F(ComponentUpdaterTest, CheckCrxSleep) { | 250 TEST_F(ComponentUpdaterTest, CheckCrxSleep) { |
240 URLRequestPostInterceptor* post_interceptor( | 251 MockComponentObserver observer; |
241 interceptor_factory_->CreateInterceptor()); | |
242 EXPECT_TRUE(post_interceptor != NULL); | |
243 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
244 "event eventtype"))); | |
245 | 252 |
246 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 253 EXPECT_CALL(observer, |
254 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | |
255 .Times(1); | |
256 EXPECT_CALL(observer, | |
257 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | |
258 .Times(2); | |
259 EXPECT_CALL(observer, | |
260 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | |
261 .Times(2); | |
247 | 262 |
248 MockComponentObserver observer; | 263 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
264 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
265 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
266 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
249 | 267 |
250 TestInstaller installer; | 268 TestInstaller installer; |
251 CrxComponent com; | 269 CrxComponent com; |
252 com.observer = &observer; | 270 com.observer = &observer; |
253 EXPECT_EQ(ComponentUpdateService::kOk, | 271 EXPECT_EQ(ComponentUpdateService::kOk, |
254 RegisterComponent(&com, | 272 RegisterComponent(&com, |
255 kTestComponent_abag, | 273 kTestComponent_abag, |
256 Version("1.1"), | 274 Version("1.1"), |
257 &installer)); | 275 &installer)); |
258 | 276 |
259 const GURL expected_update_url( | |
260 "http://localhost/upd?extra=foo" | |
261 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D1.1%26fp%3D%26uc"); | |
262 | |
263 interceptor.SetResponse(expected_update_url, | |
264 test_file("updatecheck_reply_1.xml")); | |
265 | |
266 // We loop twice, but there are no updates so we expect two sleep messages. | 277 // We loop twice, but there are no updates so we expect two sleep messages. |
267 test_configurator()->SetLoopCount(2); | 278 test_configurator()->SetLoopCount(2); |
268 | |
269 EXPECT_CALL(observer, | |
270 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | |
271 .Times(1); | |
272 component_updater()->Start(); | 279 component_updater()->Start(); |
273 | |
274 EXPECT_CALL(observer, | |
275 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | |
276 .Times(2); | |
277 | |
278 EXPECT_CALL(observer, | |
279 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | |
280 .Times(2); | |
281 RunThreads(); | 280 RunThreads(); |
282 | 281 |
283 EXPECT_EQ(2, interceptor.GetHitCount()); | |
284 | |
285 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 282 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
286 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); | 283 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); |
287 | 284 |
285 // Expect to see the two update check requests and no other requests, | |
286 // including pings. | |
287 EXPECT_EQ(2, post_interceptor_->GetHitCount()) | |
288 << post_interceptor_->GetRequestsAsString(); | |
289 EXPECT_EQ(2, post_interceptor_->GetCount()) | |
290 << post_interceptor_->GetRequestsAsString(); | |
291 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
292 "<app appid=\"abagagagagagagagagagagagagagagag\" version=\"1.1\">" | |
293 "<updatecheck /></app>")) | |
294 << post_interceptor_->GetRequestsAsString(); | |
295 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
296 "<app appid=\"abagagagagagagagagagagagagagagag\" version=\"1.1\">" | |
297 "<updatecheck /></app>")) | |
298 << post_interceptor_->GetRequestsAsString(); | |
299 | |
288 component_updater()->Stop(); | 300 component_updater()->Stop(); |
289 | 301 |
290 // Loop twice again but this case we simulate a server error by returning | 302 // Loop twice again but this case we simulate a server error by returning |
291 // an empty file. | 303 // an empty file. Expect the behavior of the service to be the same as before. |
292 | |
293 interceptor.SetResponse(expected_update_url, | |
294 test_file("updatecheck_reply_empty")); | |
295 | |
296 test_configurator()->SetLoopCount(2); | |
297 | |
298 EXPECT_CALL(observer, | 304 EXPECT_CALL(observer, |
299 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 305 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
300 .Times(1); | 306 .Times(1); |
301 component_updater()->Start(); | |
302 | |
303 EXPECT_CALL(observer, | 307 EXPECT_CALL(observer, |
304 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 308 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
305 .Times(2); | 309 .Times(2); |
306 EXPECT_CALL(observer, | 310 EXPECT_CALL(observer, |
307 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 311 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
308 .Times(2); | 312 .Times(2); |
313 | |
314 post_interceptor_->Reset(); | |
315 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
316 "updatecheck"), test_file("updatecheck_reply_empty"))); | |
317 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
318 "updatecheck"), test_file("updatecheck_reply_empty"))); | |
319 | |
320 test_configurator()->SetLoopCount(2); | |
321 component_updater()->Start(); | |
309 RunThreads(); | 322 RunThreads(); |
310 | 323 |
311 EXPECT_EQ(0, post_interceptor->GetHitCount()) | |
312 << post_interceptor->GetRequestsAsString(); | |
313 EXPECT_EQ(0, post_interceptor->GetMissCount()) | |
314 << post_interceptor->GetRequestsAsString(); | |
315 | |
316 EXPECT_EQ(4, interceptor.GetHitCount()); | |
317 | |
318 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 324 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
319 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); | 325 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); |
320 | 326 |
327 EXPECT_EQ(2, post_interceptor_->GetHitCount()) | |
328 << post_interceptor_->GetRequestsAsString(); | |
329 EXPECT_EQ(2, post_interceptor_->GetCount()) | |
330 << post_interceptor_->GetRequestsAsString(); | |
331 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
332 "<app appid=\"abagagagagagagagagagagagagagagag\" version=\"1.1\">" | |
333 "<updatecheck /></app>")) | |
334 << post_interceptor_->GetRequestsAsString(); | |
335 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
336 "<app appid=\"abagagagagagagagagagagagagagagag\" version=\"1.1\">" | |
337 "<updatecheck /></app>")) | |
338 << post_interceptor_->GetRequestsAsString(); | |
339 | |
321 component_updater()->Stop(); | 340 component_updater()->Stop(); |
322 } | 341 } |
323 | 342 |
324 // Verify that we can check for updates and install one component. Besides | 343 // Verify that we can check for updates and install one component. Besides |
325 // the notifications above COMPONENT_UPDATE_FOUND and COMPONENT_UPDATE_READY | 344 // the notifications above COMPONENT_UPDATE_FOUND and COMPONENT_UPDATE_READY |
326 // should have been fired. We do two loops so the second time around there | 345 // should have been fired. We do two loops so the second time around there |
327 // should be nothing left to do. | 346 // should be nothing left to do. |
328 // We also check that only 3 non-ping network requests are issued: | 347 // We also check that the following network requests are issued: |
329 // 1- manifest check | 348 // 1- manifest check |
330 // 2- download crx | 349 // 2- download crx |
331 // 3- second manifest check. | 350 // 3- ping |
332 // Only one ping is sent. | 351 // 4- second manifest check. |
333 TEST_F(ComponentUpdaterTest, InstallCrx) { | 352 TEST_F(ComponentUpdaterTest, InstallCrx) { |
334 URLRequestPostInterceptor* post_interceptor( | |
335 interceptor_factory_->CreateInterceptor()); | |
336 EXPECT_TRUE(post_interceptor != NULL); | |
337 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
338 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">" | |
339 "<o:event eventtype=\"3\" eventresult=\"1\" " | |
340 "previousversion=\"0.9\" nextversion=\"1.0\"/></o:app>"))); | |
341 | |
342 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | |
343 | |
344 MockComponentObserver observer1; | 353 MockComponentObserver observer1; |
345 { | 354 { |
346 InSequence seq; | 355 InSequence seq; |
347 EXPECT_CALL(observer1, | 356 EXPECT_CALL(observer1, |
348 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 357 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
349 .Times(1); | 358 .Times(1); |
350 EXPECT_CALL(observer1, | 359 EXPECT_CALL(observer1, |
351 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0)) | 360 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0)) |
352 .Times(1); | 361 .Times(1); |
353 EXPECT_CALL(observer1, | 362 EXPECT_CALL(observer1, |
(...skipping 26 matching lines...) Expand all Loading... | |
380 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 389 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
381 .Times(1); | 390 .Times(1); |
382 EXPECT_CALL(observer2, | 391 EXPECT_CALL(observer2, |
383 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 392 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
384 .Times(1); | 393 .Times(1); |
385 EXPECT_CALL(observer2, | 394 EXPECT_CALL(observer2, |
386 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 395 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
387 .Times(1); | 396 .Times(1); |
388 } | 397 } |
389 | 398 |
399 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
400 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
401 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); | |
402 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
403 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
404 | |
405 get_interceptor_->SetResponse( | |
406 GURL(expected_crx_url), | |
407 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
408 | |
390 TestInstaller installer1; | 409 TestInstaller installer1; |
391 CrxComponent com1; | 410 CrxComponent com1; |
392 com1.observer = &observer1; | 411 com1.observer = &observer1; |
393 RegisterComponent(&com1, kTestComponent_jebg, Version("0.9"), &installer1); | 412 RegisterComponent(&com1, kTestComponent_jebg, Version("0.9"), &installer1); |
394 TestInstaller installer2; | 413 TestInstaller installer2; |
395 CrxComponent com2; | 414 CrxComponent com2; |
396 com2.observer = &observer2; | 415 com2.observer = &observer2; |
397 RegisterComponent(&com2, kTestComponent_abag, Version("2.2"), &installer2); | 416 RegisterComponent(&com2, kTestComponent_abag, Version("2.2"), &installer2); |
398 | 417 |
399 const GURL expected_update_url_1( | |
400 "http://localhost/upd?extra=foo" | |
401 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc" | |
402 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc"); | |
403 | |
404 const GURL expected_update_url_2( | |
405 "http://localhost/upd?extra=foo" | |
406 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc" | |
407 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D1.0%26fp%3D%26uc"); | |
408 | |
409 interceptor.SetResponse(expected_update_url_1, | |
410 test_file("updatecheck_reply_1.xml")); | |
411 interceptor.SetResponse(expected_update_url_2, | |
412 test_file("updatecheck_reply_1.xml")); | |
413 interceptor.SetResponse(GURL(expected_crx_url), | |
414 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
415 | |
416 test_configurator()->SetLoopCount(2); | 418 test_configurator()->SetLoopCount(2); |
417 | |
418 component_updater()->Start(); | 419 component_updater()->Start(); |
419 RunThreads(); | 420 RunThreads(); |
420 | 421 |
421 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); | 422 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); |
422 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count()); | 423 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count()); |
423 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); | 424 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); |
424 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); | 425 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); |
425 | 426 |
426 EXPECT_EQ(3, interceptor.GetHitCount()); | 427 // Expect three request in total: two update checks and one ping. |
428 EXPECT_EQ(3, post_interceptor_->GetHitCount()) | |
429 << post_interceptor_->GetRequestsAsString(); | |
430 EXPECT_EQ(3, post_interceptor_->GetCount()) | |
431 << post_interceptor_->GetRequestsAsString(); | |
427 | 432 |
428 EXPECT_EQ(1, post_interceptor->GetHitCount()) | 433 // Expect one component download. |
429 << post_interceptor->GetRequestsAsString(); | 434 EXPECT_EQ(1, get_interceptor_->GetHitCount()); |
430 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 435 |
431 << post_interceptor->GetRequestsAsString(); | 436 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
437 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
438 "<updatecheck /></app>")) | |
439 << post_interceptor_->GetRequestsAsString(); | |
440 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
441 "<app appid=\"abagagagagagagagagagagagagagagag\" version=\"2.2\">" | |
442 "<updatecheck /></app>")) | |
443 << post_interceptor_->GetRequestsAsString(); | |
444 | |
445 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
446 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" " | |
447 "version=\"0.9\" nextversion=\"1.0\">" | |
448 "<event eventtype=\"3\" eventresult=\"1\"/></app>")) | |
449 << post_interceptor_->GetRequestsAsString(); | |
450 | |
451 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
452 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">" | |
453 "<updatecheck /></app>")); | |
454 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
455 "<app appid=\"abagagagagagagagagagagagagagagag\" version=\"2.2\">" | |
456 "<updatecheck /></app>")) | |
457 << post_interceptor_->GetRequestsAsString(); | |
432 | 458 |
433 component_updater()->Stop(); | 459 component_updater()->Stop(); |
434 } | 460 } |
435 | 461 |
436 // This test checks that the "prodversionmin" value is handled correctly. In | 462 // This test checks that the "prodversionmin" value is handled correctly. In |
437 // particular there should not be an install because the minimum product | 463 // particular there should not be an install because the minimum product |
438 // version is much higher than of chrome. | 464 // version is much higher than of chrome. |
439 TEST_F(ComponentUpdaterTest, ProdVersionCheck) { | 465 TEST_F(ComponentUpdaterTest, ProdVersionCheck) { |
440 URLRequestPostInterceptor* post_interceptor( | 466 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
441 interceptor_factory_->CreateInterceptor()); | 467 "updatecheck"), test_file("updatecheck_reply_2.xml"))); |
442 EXPECT_TRUE(post_interceptor != NULL); | |
443 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
444 "event eventtype"))); | |
445 | 468 |
446 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 469 get_interceptor_->SetResponse( |
470 GURL(expected_crx_url), | |
471 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
447 | 472 |
448 TestInstaller installer; | 473 TestInstaller installer; |
449 CrxComponent com; | 474 CrxComponent com; |
450 RegisterComponent(&com, kTestComponent_jebg, Version("0.9"), &installer); | 475 RegisterComponent(&com, kTestComponent_jebg, Version("0.9"), &installer); |
451 | 476 |
452 const GURL expected_update_url( | |
453 "http://localhost/upd?extra=foo&x=id%3D" | |
454 "jebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc"); | |
455 | |
456 interceptor.SetResponse(expected_update_url, | |
457 test_file("updatecheck_reply_2.xml")); | |
458 interceptor.SetResponse(GURL(expected_crx_url), | |
459 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
460 | |
461 test_configurator()->SetLoopCount(1); | 477 test_configurator()->SetLoopCount(1); |
462 component_updater()->Start(); | 478 component_updater()->Start(); |
463 RunThreads(); | 479 RunThreads(); |
464 | 480 |
465 EXPECT_EQ(0, post_interceptor->GetHitCount()) | 481 // Expect one update check and no ping. |
466 << post_interceptor->GetRequestsAsString(); | 482 EXPECT_EQ(1, post_interceptor_->GetHitCount()) |
467 EXPECT_EQ(1, interceptor.GetHitCount()); | 483 << post_interceptor_->GetRequestsAsString(); |
484 EXPECT_EQ(1, post_interceptor_->GetCount()) | |
485 << post_interceptor_->GetRequestsAsString(); | |
486 | |
487 // Expect no download to occur. | |
488 EXPECT_EQ(0, get_interceptor_->GetHitCount()); | |
468 | 489 |
469 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 490 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
470 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); | 491 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); |
471 | 492 |
472 component_updater()->Stop(); | 493 component_updater()->Stop(); |
473 } | 494 } |
474 | 495 |
475 // Test that a update check due to an on demand call can cause installs. | 496 // Test that a update check due to an on demand call can cause installs. |
476 // Here is the timeline: | 497 // Here is the timeline: |
477 // - First loop: we return a reply that indicates no update, so | 498 // - First loop: we return a reply that indicates no update, so |
478 // nothing happens. | 499 // nothing happens. |
479 // - We make an on demand call. | 500 // - We make an on demand call. |
480 // - This triggers a second loop, which has a reply that triggers an install. | 501 // - This triggers a second loop, which has a reply that triggers an install. |
481 TEST_F(ComponentUpdaterTest, OnDemandUpdate) { | 502 TEST_F(ComponentUpdaterTest, OnDemandUpdate) { |
482 URLRequestPostInterceptor* post_interceptor( | |
483 interceptor_factory_->CreateInterceptor()); | |
484 EXPECT_TRUE(post_interceptor != NULL); | |
485 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
486 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">" | |
487 "<o:event eventtype=\"3\" eventresult=\"1\" " | |
488 "previousversion=\"0.9\" nextversion=\"1.0\"/></o:app>"))); | |
489 | |
490 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | |
491 | |
492 MockComponentObserver observer1; | 503 MockComponentObserver observer1; |
493 { | 504 { |
494 InSequence seq; | 505 InSequence seq; |
495 EXPECT_CALL(observer1, | 506 EXPECT_CALL(observer1, |
496 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 507 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
497 .Times(1); | 508 .Times(1); |
498 EXPECT_CALL(observer1, | 509 EXPECT_CALL(observer1, |
499 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 510 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
500 .Times(1); | 511 .Times(1); |
501 EXPECT_CALL(observer1, | 512 EXPECT_CALL(observer1, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
534 OnEvent(ComponentObserver::COMPONENT_UPDATE_READY, 0)) | 545 OnEvent(ComponentObserver::COMPONENT_UPDATE_READY, 0)) |
535 .Times(1); | 546 .Times(1); |
536 EXPECT_CALL(observer2, | 547 EXPECT_CALL(observer2, |
537 OnEvent(ComponentObserver::COMPONENT_UPDATED, 0)) | 548 OnEvent(ComponentObserver::COMPONENT_UPDATED, 0)) |
538 .Times(1); | 549 .Times(1); |
539 EXPECT_CALL(observer2, | 550 EXPECT_CALL(observer2, |
540 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 551 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
541 .Times(1); | 552 .Times(1); |
542 } | 553 } |
543 | 554 |
555 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
556 "updatecheck"), test_file("updatecheck_reply_empty"))); | |
557 | |
558 get_interceptor_->SetResponse( | |
559 GURL(expected_crx_url), | |
560 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
561 | |
544 TestInstaller installer1; | 562 TestInstaller installer1; |
545 CrxComponent com1; | 563 CrxComponent com1; |
546 com1.observer = &observer1; | 564 com1.observer = &observer1; |
547 RegisterComponent(&com1, kTestComponent_abag, Version("2.2"), &installer1); | 565 RegisterComponent(&com1, kTestComponent_abag, Version("2.2"), &installer1); |
548 TestInstaller installer2; | 566 TestInstaller installer2; |
549 CrxComponent com2; | 567 CrxComponent com2; |
550 com2.observer = &observer2; | 568 com2.observer = &observer2; |
551 RegisterComponent(&com2, kTestComponent_jebg, Version("0.9"), &installer2); | 569 RegisterComponent(&com2, kTestComponent_jebg, Version("0.9"), &installer2); |
552 | 570 |
553 const GURL expected_update_url_1( | |
554 "http://localhost/upd?extra=foo" | |
555 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc" | |
556 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc"); | |
557 | |
558 const GURL expected_update_url_2( | |
559 "http://localhost/upd?extra=foo" | |
560 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc" | |
561 "%26installsource%3Dondemand" | |
562 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc"); | |
563 | |
564 interceptor.SetResponse(expected_update_url_1, | |
565 test_file("updatecheck_reply_empty")); | |
566 interceptor.SetResponse(expected_update_url_2, | |
567 test_file("updatecheck_reply_1.xml")); | |
568 interceptor.SetResponse(GURL(expected_crx_url), | |
569 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
570 // No update normally. | 571 // No update normally. |
571 test_configurator()->SetLoopCount(1); | 572 test_configurator()->SetLoopCount(1); |
572 component_updater()->Start(); | 573 component_updater()->Start(); |
573 RunThreads(); | 574 RunThreads(); |
574 component_updater()->Stop(); | 575 component_updater()->Stop(); |
575 | 576 |
577 EXPECT_EQ(1, post_interceptor_->GetHitCount()) | |
578 << post_interceptor_->GetRequestsAsString(); | |
579 EXPECT_EQ(1, post_interceptor_->GetCount()) | |
580 << post_interceptor_->GetRequestsAsString(); | |
581 | |
582 EXPECT_EQ(0, get_interceptor_->GetHitCount()); | |
583 | |
576 // Update after an on-demand check is issued. | 584 // Update after an on-demand check is issued. |
585 post_interceptor_->Reset(); | |
586 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
587 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
588 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); | |
589 | |
577 EXPECT_EQ(ComponentUpdateService::kOk, | 590 EXPECT_EQ(ComponentUpdateService::kOk, |
578 OnDemandTester::OnDemand(component_updater(), | 591 OnDemandTester::OnDemand(component_updater(), |
579 GetCrxComponentID(com2))); | 592 GetCrxComponentID(com2))); |
580 test_configurator()->SetLoopCount(1); | 593 test_configurator()->SetLoopCount(1); |
581 component_updater()->Start(); | 594 component_updater()->Start(); |
582 RunThreads(); | 595 RunThreads(); |
583 | 596 |
584 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); | 597 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); |
585 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count()); | 598 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count()); |
586 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); | 599 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); |
587 EXPECT_EQ(1, static_cast<TestInstaller*>(com2.installer)->install_count()); | 600 EXPECT_EQ(1, static_cast<TestInstaller*>(com2.installer)->install_count()); |
588 | 601 |
589 EXPECT_EQ(3, interceptor.GetHitCount()); | 602 EXPECT_EQ(2, post_interceptor_->GetHitCount()) |
603 << post_interceptor_->GetRequestsAsString(); | |
604 EXPECT_EQ(2, post_interceptor_->GetCount()) | |
605 << post_interceptor_->GetRequestsAsString(); | |
606 | |
607 EXPECT_EQ(1, get_interceptor_->GetHitCount()); | |
608 | |
609 // Expect the update check to contain an "ondemand" request for the | |
610 // second component (com2) and a normal request for the other component. | |
611 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
612 "<app appid=\"abagagagagagagagagagagagagagagag\" " | |
613 "version=\"2.2\"><updatecheck /></app>")) | |
614 << post_interceptor_->GetRequestsAsString(); | |
615 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
616 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" " | |
617 "version=\"0.9\" installsource=\"ondemand\"><updatecheck /></app>")) | |
618 << post_interceptor_->GetRequestsAsString(); | |
619 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
620 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" " | |
621 "version=\"0.9\" nextversion=\"1.0\">" | |
622 "<event eventtype=\"3\" eventresult=\"1\"/></app>")) | |
623 << post_interceptor_->GetRequestsAsString(); | |
590 | 624 |
591 // Also check what happens if previous check too soon. | 625 // Also check what happens if previous check too soon. |
592 test_configurator()->SetOnDemandTime(60 * 60); | 626 test_configurator()->SetOnDemandTime(60 * 60); |
593 EXPECT_EQ(ComponentUpdateService::kError, | 627 EXPECT_EQ(ComponentUpdateService::kError, |
594 OnDemandTester::OnDemand(component_updater(), | 628 OnDemandTester::OnDemand(component_updater(), |
595 GetCrxComponentID(com2))); | 629 GetCrxComponentID(com2))); |
596 // Okay, now reset to 0 for the other tests. | 630 // Okay, now reset to 0 for the other tests. |
597 test_configurator()->SetOnDemandTime(0); | 631 test_configurator()->SetOnDemandTime(0); |
598 component_updater()->Stop(); | 632 component_updater()->Stop(); |
599 | 633 |
(...skipping 19 matching lines...) Expand all Loading... | |
619 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 653 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
620 .Times(1); | 654 .Times(1); |
621 EXPECT_CALL(observer2, | 655 EXPECT_CALL(observer2, |
622 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 656 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
623 .Times(1); | 657 .Times(1); |
624 EXPECT_CALL(observer2, | 658 EXPECT_CALL(observer2, |
625 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 659 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
626 .Times(1); | 660 .Times(1); |
627 } | 661 } |
628 | 662 |
629 const GURL expected_update_url_3( | 663 // No update: error from no server response |
630 "http://localhost/upd?extra=foo" | 664 post_interceptor_->Reset(); |
631 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D1.0%26fp%3D%26uc" | 665 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
632 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc"); | 666 "updatecheck"), test_file("updatecheck_reply_empty"))); |
633 | 667 |
634 // No update: error from no server response | |
635 interceptor.SetResponse(expected_update_url_3, | |
636 test_file("updatecheck_reply_empty")); | |
637 test_configurator()->SetLoopCount(1); | 668 test_configurator()->SetLoopCount(1); |
638 component_updater()->Start(); | 669 component_updater()->Start(); |
639 EXPECT_EQ(ComponentUpdateService::kOk, | 670 EXPECT_EQ(ComponentUpdateService::kOk, |
640 OnDemandTester::OnDemand(component_updater(), | 671 OnDemandTester::OnDemand(component_updater(), |
641 GetCrxComponentID(com2))); | 672 GetCrxComponentID(com2))); |
673 RunThreads(); | |
674 component_updater()->Stop(); | |
642 | 675 |
643 RunThreads(); | 676 EXPECT_EQ(1, post_interceptor_->GetHitCount()) |
644 | 677 << post_interceptor_->GetRequestsAsString(); |
645 component_updater()->Stop(); | 678 EXPECT_EQ(1, post_interceptor_->GetCount()) |
679 << post_interceptor_->GetRequestsAsString(); | |
646 | 680 |
647 // No update: already updated to 1.0 so nothing new | 681 // No update: already updated to 1.0 so nothing new |
648 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1)); | 682 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1)); |
649 { | 683 { |
650 InSequence seq; | 684 InSequence seq; |
651 EXPECT_CALL(observer1, | 685 EXPECT_CALL(observer1, |
652 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 686 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
653 .Times(1); | 687 .Times(1); |
654 EXPECT_CALL(observer1, | 688 EXPECT_CALL(observer1, |
655 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 689 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
656 .Times(1); | 690 .Times(1); |
657 EXPECT_CALL(observer1, | 691 EXPECT_CALL(observer1, |
658 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 692 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
659 .Times(1); | 693 .Times(1); |
660 } | 694 } |
661 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer2)); | 695 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer2)); |
662 { | 696 { |
663 InSequence seq; | 697 InSequence seq; |
664 EXPECT_CALL(observer2, | 698 EXPECT_CALL(observer2, |
665 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 699 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
666 .Times(1); | 700 .Times(1); |
667 EXPECT_CALL(observer2, | 701 EXPECT_CALL(observer2, |
668 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 702 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
669 .Times(1); | 703 .Times(1); |
670 EXPECT_CALL(observer2, | 704 EXPECT_CALL(observer2, |
671 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 705 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
672 .Times(1); | 706 .Times(1); |
673 } | 707 } |
674 | 708 |
675 interceptor.SetResponse(expected_update_url_3, | 709 post_interceptor_->Reset(); |
676 test_file("updatecheck_reply_1.xml")); | 710 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
711 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
712 | |
677 test_configurator()->SetLoopCount(1); | 713 test_configurator()->SetLoopCount(1); |
678 component_updater()->Start(); | 714 component_updater()->Start(); |
679 EXPECT_EQ(ComponentUpdateService::kOk, | 715 EXPECT_EQ(ComponentUpdateService::kOk, |
680 OnDemandTester::OnDemand(component_updater(), | 716 OnDemandTester::OnDemand(component_updater(), |
681 GetCrxComponentID(com2))); | 717 GetCrxComponentID(com2))); |
682 | |
683 RunThreads(); | 718 RunThreads(); |
684 | 719 |
685 EXPECT_EQ(1, post_interceptor->GetHitCount()) | 720 EXPECT_EQ(1, post_interceptor_->GetHitCount()) |
686 << post_interceptor->GetRequestsAsString(); | 721 << post_interceptor_->GetRequestsAsString(); |
687 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 722 EXPECT_EQ(1, post_interceptor_->GetCount()) |
688 << post_interceptor->GetRequestsAsString(); | 723 << post_interceptor_->GetRequestsAsString(); |
689 | 724 |
690 component_updater()->Stop(); | 725 component_updater()->Stop(); |
691 } | 726 } |
692 | 727 |
693 // Verify that a previously registered component can get re-registered | 728 // Verify that a previously registered component can get re-registered |
694 // with a different version. | 729 // with a different version. |
695 TEST_F(ComponentUpdaterTest, CheckReRegistration) { | 730 TEST_F(ComponentUpdaterTest, CheckReRegistration) { |
696 URLRequestPostInterceptor* post_interceptor( | |
697 interceptor_factory_->CreateInterceptor()); | |
698 EXPECT_TRUE(post_interceptor != NULL); | |
699 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
700 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">" | |
701 "<o:event eventtype=\"3\" eventresult=\"1\" " | |
702 "previousversion=\"0.9\" nextversion=\"1.0\"/></o:app>"))); | |
703 | |
704 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | |
705 | |
706 MockComponentObserver observer1; | 731 MockComponentObserver observer1; |
707 { | 732 { |
708 InSequence seq; | 733 InSequence seq; |
709 EXPECT_CALL(observer1, | 734 EXPECT_CALL(observer1, |
710 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 735 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
711 .Times(1); | 736 .Times(1); |
712 EXPECT_CALL(observer1, | 737 EXPECT_CALL(observer1, |
713 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0)) | 738 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0)) |
714 .Times(1); | 739 .Times(1); |
715 EXPECT_CALL(observer1, | 740 EXPECT_CALL(observer1, |
(...skipping 26 matching lines...) Expand all Loading... | |
742 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 767 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
743 .Times(1); | 768 .Times(1); |
744 EXPECT_CALL(observer2, | 769 EXPECT_CALL(observer2, |
745 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 770 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
746 .Times(1); | 771 .Times(1); |
747 EXPECT_CALL(observer2, | 772 EXPECT_CALL(observer2, |
748 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 773 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
749 .Times(1); | 774 .Times(1); |
750 } | 775 } |
751 | 776 |
777 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
778 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
779 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); | |
780 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
781 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
782 | |
783 get_interceptor_->SetResponse( | |
784 GURL(expected_crx_url), | |
785 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
786 | |
752 TestInstaller installer1; | 787 TestInstaller installer1; |
753 CrxComponent com1; | 788 CrxComponent com1; |
754 com1.observer = &observer1; | 789 com1.observer = &observer1; |
755 RegisterComponent(&com1, kTestComponent_jebg, Version("0.9"), &installer1); | 790 RegisterComponent(&com1, kTestComponent_jebg, Version("0.9"), &installer1); |
756 TestInstaller installer2; | 791 TestInstaller installer2; |
757 CrxComponent com2; | 792 CrxComponent com2; |
758 com2.observer = &observer2; | 793 com2.observer = &observer2; |
759 RegisterComponent(&com2, kTestComponent_abag, Version("2.2"), &installer2); | 794 RegisterComponent(&com2, kTestComponent_abag, Version("2.2"), &installer2); |
760 | 795 |
761 // Start with 0.9, and update to 1.0 | 796 // Loop twice to issue two checks: (1) with original 0.9 version, update to |
762 const GURL expected_update_url_1( | 797 // 1.0, and do the second check (2) with the updated 1.0 version. |
763 "http://localhost/upd?extra=foo" | |
764 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc" | |
765 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc"); | |
766 | |
767 const GURL expected_update_url_2( | |
768 "http://localhost/upd?extra=foo" | |
769 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc" | |
770 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D1.0%26fp%3D%26uc"); | |
771 | |
772 interceptor.SetResponse(expected_update_url_1, | |
773 test_file("updatecheck_reply_1.xml")); | |
774 interceptor.SetResponse(expected_update_url_2, | |
775 test_file("updatecheck_reply_1.xml")); | |
776 interceptor.SetResponse(GURL(expected_crx_url), | |
777 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
778 | |
779 // Loop twice to issue two checks: (1) with original 0.9 version | |
780 // and (2) with the updated 1.0 version. | |
781 test_configurator()->SetLoopCount(2); | 798 test_configurator()->SetLoopCount(2); |
782 | |
783 component_updater()->Start(); | 799 component_updater()->Start(); |
784 RunThreads(); | 800 RunThreads(); |
785 | 801 |
786 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); | 802 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); |
787 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count()); | 803 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count()); |
788 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); | 804 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); |
789 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); | 805 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); |
790 | 806 |
791 EXPECT_EQ(1, post_interceptor->GetHitCount()) | 807 EXPECT_EQ(3, post_interceptor_->GetHitCount()) |
792 << post_interceptor->GetRequestsAsString(); | 808 << post_interceptor_->GetRequestsAsString(); |
793 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 809 EXPECT_EQ(1, get_interceptor_->GetHitCount()); |
794 << post_interceptor->GetRequestsAsString(); | |
795 | 810 |
796 EXPECT_EQ(3, interceptor.GetHitCount()); | 811 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
812 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
813 "<updatecheck /></app>")) | |
814 << post_interceptor_->GetRequestsAsString(); | |
815 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
816 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" " | |
817 "version=\"0.9\" nextversion=\"1.0\">" | |
818 "<event eventtype=\"3\" eventresult=\"1\"/></app>")) | |
819 << post_interceptor_->GetRequestsAsString(); | |
820 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
821 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">" | |
822 "<updatecheck /></app>")) | |
823 << post_interceptor_->GetRequestsAsString(); | |
797 | 824 |
798 component_updater()->Stop(); | 825 component_updater()->Stop(); |
799 | 826 |
800 // Now re-register, pretending to be an even newer version (2.2) | 827 // Now re-register, pretending to be an even newer version (2.2) |
801 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1)); | 828 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1)); |
802 { | 829 { |
803 InSequence seq; | 830 InSequence seq; |
804 EXPECT_CALL(observer1, | 831 EXPECT_CALL(observer1, |
805 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 832 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
806 .Times(1); | 833 .Times(1); |
(...skipping 12 matching lines...) Expand all Loading... | |
819 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) | 846 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) |
820 .Times(1); | 847 .Times(1); |
821 EXPECT_CALL(observer2, | 848 EXPECT_CALL(observer2, |
822 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) | 849 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) |
823 .Times(1); | 850 .Times(1); |
824 EXPECT_CALL(observer2, | 851 EXPECT_CALL(observer2, |
825 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) | 852 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) |
826 .Times(1); | 853 .Times(1); |
827 } | 854 } |
828 | 855 |
856 post_interceptor_->Reset(); | |
857 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
858 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
859 | |
829 TestInstaller installer3; | 860 TestInstaller installer3; |
830 EXPECT_EQ(ComponentUpdateService::kReplaced, | 861 EXPECT_EQ(ComponentUpdateService::kReplaced, |
831 RegisterComponent(&com1, | 862 RegisterComponent(&com1, |
832 kTestComponent_jebg, | 863 kTestComponent_jebg, |
833 Version("2.2"), | 864 Version("2.2"), |
834 &installer3)); | 865 &installer3)); |
835 | 866 |
836 // Check that we send out 2.2 as our version. | |
837 // Interceptor's hit count should go up by 1. | |
838 const GURL expected_update_url_3( | |
839 "http://localhost/upd?extra=foo" | |
840 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D2.2%26fp%3D%26uc" | |
841 "&x=id%3Dabagagagagagagagagagagagagagagag%26v%3D2.2%26fp%3D%26uc"); | |
842 | |
843 interceptor.SetResponse(expected_update_url_3, | |
844 test_file("updatecheck_reply_1.xml")); | |
845 | |
846 // Loop once just to notice the check happening with the re-register version. | 867 // Loop once just to notice the check happening with the re-register version. |
847 test_configurator()->SetLoopCount(1); | 868 test_configurator()->SetLoopCount(1); |
848 component_updater()->Start(); | 869 component_updater()->Start(); |
849 RunThreads(); | 870 RunThreads(); |
850 | 871 |
851 EXPECT_EQ(4, interceptor.GetHitCount()); | |
852 | |
853 // No additional pings are expected. | |
854 EXPECT_EQ(1, post_interceptor->GetHitCount()) | |
855 << post_interceptor->GetRequestsAsString(); | |
856 EXPECT_EQ(0, post_interceptor->GetMissCount()) | |
857 << post_interceptor->GetRequestsAsString(); | |
858 | |
859 // We created a new installer, so the counts go back to 0. | 872 // We created a new installer, so the counts go back to 0. |
860 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); | 873 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); |
861 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count()); | 874 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count()); |
862 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); | 875 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); |
863 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); | 876 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); |
864 | 877 |
878 // One update check and no additional pings are expected. | |
879 EXPECT_EQ(1, post_interceptor_->GetHitCount()) | |
880 << post_interceptor_->GetRequestsAsString(); | |
881 EXPECT_EQ(1, post_interceptor_->GetCount()) | |
882 << post_interceptor_->GetRequestsAsString(); | |
883 | |
884 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
885 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"2.2\">" | |
886 "<updatecheck /></app>")); | |
887 | |
865 component_updater()->Stop(); | 888 component_updater()->Stop(); |
866 } | 889 } |
867 | 890 |
868 // Verify that we can download and install a component and a differential | 891 // Verify that we can download and install a component and a differential |
869 // update to that component. We do three loops; the final loop should do | 892 // update to that component. We do three loops; the final loop should do |
870 // nothing. | 893 // nothing. |
871 // We also check that exactly 5 non-ping network requests are issued: | 894 // We also check that exactly 5 non-ping network requests are issued: |
872 // 1- update check (response: v1 available) | 895 // 1- update check (response: v1 available) |
873 // 2- download crx (v1) | 896 // 2- download crx (v1) |
874 // 3- update check (response: v2 available) | 897 // 3- update check (response: v2 available) |
875 // 4- download differential crx (v1 to v2) | 898 // 4- download differential crx (v1 to v2) |
876 // 5- update check (response: no further update available) | 899 // 5- update check (response: no further update available) |
877 // There should be two pings, one for each update. The second will bear a | 900 // There should be two pings, one for each update. The second will bear a |
878 // diffresult=1, while the first will not. | 901 // diffresult=1, while the first will not. |
879 TEST_F(ComponentUpdaterTest, DifferentialUpdate) { | 902 TEST_F(ComponentUpdaterTest, DifferentialUpdate) { |
880 URLRequestPostInterceptor* post_interceptor( | 903 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
881 interceptor_factory_->CreateInterceptor()); | 904 "updatecheck"), test_file("updatecheck_diff_reply_1.xml"))); |
882 EXPECT_TRUE(post_interceptor != NULL); | 905 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); |
883 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | 906 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
884 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">" | 907 "updatecheck"), test_file("updatecheck_diff_reply_2.xml"))); |
885 "<o:event eventtype=\"3\" eventresult=\"1\" " | 908 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); |
886 "previousversion=\"0.0\" nextversion=\"1.0\" nextfp=\"1\"/></o:app>"))); | 909 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
887 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | 910 "updatecheck"), test_file("updatecheck_diff_reply_3.xml"))); |
888 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">" | |
889 "<o:event eventtype=\"3\" eventresult=\"1\" " | |
890 "previousversion=\"1.0\" nextversion=\"2.0\" " | |
891 "diffresult=\"1\" previousfp=\"1\" nextfp=\"f22\"/></o:app>"))); | |
892 | 911 |
893 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 912 get_interceptor_->SetResponse( |
913 GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx"), | |
914 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1.crx")); | |
915 get_interceptor_->SetResponse( | |
916 GURL("http://localhost/download/" | |
917 "ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx"), | |
918 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx")); | |
894 | 919 |
895 VersionedTestInstaller installer; | 920 VersionedTestInstaller installer; |
896 CrxComponent com; | 921 CrxComponent com; |
897 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer); | 922 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer); |
898 | 923 |
899 const GURL expected_update_url_0( | |
900 "http://localhost/upd?extra=foo" | |
901 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D0.0%26fp%3D%26uc"); | |
902 const GURL expected_update_url_1( | |
903 "http://localhost/upd?extra=foo" | |
904 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D1.0%26fp%3D1%26uc"); | |
905 const GURL expected_update_url_2( | |
906 "http://localhost/upd?extra=foo" | |
907 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D2.0%26fp%3Df22%26uc"); | |
908 const GURL expected_crx_url_1( | |
909 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx"); | |
910 const GURL expected_crx_url_1_diff_2( | |
911 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx"); | |
912 | |
913 interceptor.SetResponse(expected_update_url_0, | |
914 test_file("updatecheck_diff_reply_1.xml")); | |
915 interceptor.SetResponse(expected_update_url_1, | |
916 test_file("updatecheck_diff_reply_2.xml")); | |
917 interceptor.SetResponse(expected_update_url_2, | |
918 test_file("updatecheck_diff_reply_3.xml")); | |
919 interceptor.SetResponse(expected_crx_url_1, | |
920 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1.crx")); | |
921 interceptor.SetResponse( | |
922 expected_crx_url_1_diff_2, | |
923 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx")); | |
924 | |
925 test_configurator()->SetLoopCount(3); | 924 test_configurator()->SetLoopCount(3); |
926 | |
927 component_updater()->Start(); | 925 component_updater()->Start(); |
928 RunThreads(); | 926 RunThreads(); |
929 | 927 |
930 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 928 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
931 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); | 929 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); |
932 | 930 |
933 // One ping has the diffresult=1, the other does not. | 931 EXPECT_EQ(5, post_interceptor_->GetHitCount()) |
934 EXPECT_EQ(2, post_interceptor->GetHitCount()) | 932 << post_interceptor_->GetRequestsAsString(); |
935 << post_interceptor->GetRequestsAsString(); | 933 EXPECT_EQ(5, post_interceptor_->GetCount()) |
936 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 934 << post_interceptor_->GetRequestsAsString(); |
937 << post_interceptor->GetRequestsAsString(); | 935 EXPECT_EQ(2, get_interceptor_->GetHitCount()); |
938 | 936 |
939 EXPECT_EQ(5, interceptor.GetHitCount()); | 937 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
940 | 938 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"0.0\">" |
939 "<updatecheck /></app>")) | |
940 << post_interceptor_->GetRequestsAsString(); | |
941 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
942 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" " | |
943 "version=\"0.0\" nextversion=\"1.0\">" | |
944 "<event eventtype=\"3\" eventresult=\"1\" nextfp=\"1\"/></app>")) | |
945 << post_interceptor_->GetRequestsAsString(); | |
946 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
947 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">" | |
948 "<updatecheck /><packages><package fp=\"1\"/></packages></app>")) | |
949 << post_interceptor_->GetRequestsAsString(); | |
950 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[3].find( | |
951 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" " | |
952 "version=\"1.0\" nextversion=\"2.0\">" | |
953 "<event eventtype=\"3\" eventresult=\"1\" diffresult=\"1\" " | |
954 "previousfp=\"1\" nextfp=\"22\"/></app>")) | |
955 << post_interceptor_->GetRequestsAsString(); | |
956 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[4].find( | |
957 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">" | |
958 "<updatecheck /><packages><package fp=\"22\"/></packages></app>")) | |
959 << post_interceptor_->GetRequestsAsString(); | |
941 component_updater()->Stop(); | 960 component_updater()->Stop(); |
942 } | 961 } |
943 | 962 |
944 // Verify that component installation falls back to downloading and installing | 963 // Verify that component installation falls back to downloading and installing |
945 // a full update if the differential update fails (in this case, because the | 964 // a full update if the differential update fails (in this case, because the |
946 // installer does not know about the existing files). We do two loops; the final | 965 // installer does not know about the existing files). We do two loops; the final |
947 // loop should do nothing. | 966 // loop should do nothing. |
948 // We also check that exactly 4 non-ping network requests are issued: | 967 // We also check that exactly 4 non-ping network requests are issued: |
949 // 1- update check (loop 1) | 968 // 1- update check (loop 1) |
950 // 2- download differential crx | 969 // 2- download differential crx |
951 // 3- download full crx | 970 // 3- download full crx |
952 // 4- update check (loop 2 - no update available) | 971 // 4- update check (loop 2 - no update available) |
953 // There should be one ping for the first attempted update. | 972 // There should be one ping for the first attempted update. |
954 TEST_F(ComponentUpdaterTest, DifferentialUpdateFails) { | 973 TEST_F(ComponentUpdaterTest, DifferentialUpdateFails) { |
955 URLRequestPostInterceptor* post_interceptor( | 974 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
956 interceptor_factory_->CreateInterceptor()); | 975 "updatecheck"), test_file("updatecheck_diff_reply_2.xml"))); |
957 EXPECT_TRUE(post_interceptor != NULL); | 976 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); |
958 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | 977 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
959 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">" | 978 "updatecheck"), test_file("updatecheck_diff_reply_3.xml"))); |
960 "<o:event eventtype=\"3\" eventresult=\"1\" " | |
961 "previousversion=\"1.0\" nextversion=\"2.0\" " | |
962 "diffresult=\"0\" differrorcat=\"2\" differrorcode=\"16\" " | |
963 "nextfp=\"f22\"/></o:app>"))); | |
964 | 979 |
965 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 980 get_interceptor_->SetResponse( |
981 GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx"), | |
982 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1.crx")); | |
983 get_interceptor_->SetResponse( | |
984 GURL("http://localhost/download/" | |
985 "ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx"), | |
986 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx")); | |
987 get_interceptor_->SetResponse( | |
988 GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_2.crx"), | |
989 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_2.crx")); | |
966 | 990 |
967 TestInstaller installer; | 991 TestInstaller installer; |
968 CrxComponent com; | 992 CrxComponent com; |
969 RegisterComponent(&com, kTestComponent_ihfo, Version("1.0"), &installer); | 993 RegisterComponent(&com, kTestComponent_ihfo, Version("1.0"), &installer); |
970 | 994 |
971 const GURL expected_update_url_1( | |
972 "http://localhost/upd?extra=foo" | |
973 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D1.0%26fp%3D%26uc"); | |
974 const GURL expected_update_url_2( | |
975 "http://localhost/upd?extra=foo" | |
976 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D2.0%26fp%3Df22%26uc"); | |
977 const GURL expected_crx_url_1( | |
978 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx"); | |
979 const GURL expected_crx_url_1_diff_2( | |
980 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx"); | |
981 const GURL expected_crx_url_2( | |
982 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_2.crx"); | |
983 | |
984 interceptor.SetResponse(expected_update_url_1, | |
985 test_file("updatecheck_diff_reply_2.xml")); | |
986 interceptor.SetResponse(expected_update_url_2, | |
987 test_file("updatecheck_diff_reply_3.xml")); | |
988 interceptor.SetResponse(expected_crx_url_1, | |
989 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1.crx")); | |
990 interceptor.SetResponse( | |
991 expected_crx_url_1_diff_2, | |
992 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx")); | |
993 interceptor.SetResponse(expected_crx_url_2, | |
994 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_2.crx")); | |
995 | |
996 test_configurator()->SetLoopCount(2); | 995 test_configurator()->SetLoopCount(2); |
997 | |
998 component_updater()->Start(); | 996 component_updater()->Start(); |
999 RunThreads(); | 997 RunThreads(); |
1000 | 998 |
1001 // A failed differential update does not count as a failed install. | 999 // A failed differential update does not count as a failed install. |
1002 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 1000 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
1003 EXPECT_EQ(1, static_cast<TestInstaller*>(com.installer)->install_count()); | 1001 EXPECT_EQ(1, static_cast<TestInstaller*>(com.installer)->install_count()); |
1004 | 1002 |
1005 EXPECT_EQ(1, post_interceptor->GetHitCount()) | 1003 EXPECT_EQ(3, post_interceptor_->GetHitCount()) |
1006 << post_interceptor->GetRequestsAsString(); | 1004 << post_interceptor_->GetRequestsAsString(); |
1007 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 1005 EXPECT_EQ(3, post_interceptor_->GetCount()) |
1008 << post_interceptor->GetRequestsAsString(); | 1006 << post_interceptor_->GetRequestsAsString(); |
1007 EXPECT_EQ(2, get_interceptor_->GetHitCount()); | |
1009 | 1008 |
1010 EXPECT_EQ(4, interceptor.GetHitCount()); | 1009 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
1010 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">" | |
1011 "<updatecheck /></app>")) | |
1012 << post_interceptor_->GetRequestsAsString(); | |
1013 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
1014 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" " | |
1015 "version=\"1.0\" nextversion=\"2.0\">" | |
1016 "<event eventtype=\"3\" eventresult=\"1\" diffresult=\"0\" " | |
1017 "differrorcat=\"2\" differrorcode=\"16\" nextfp=\"22\"/></app>")) | |
1018 << post_interceptor_->GetRequestsAsString(); | |
1019 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
1020 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">" | |
1021 "<updatecheck /><packages><package fp=\"22\"/></packages></app>")) | |
1022 << post_interceptor_->GetRequestsAsString(); | |
1011 | 1023 |
1012 component_updater()->Stop(); | 1024 component_updater()->Stop(); |
1013 } | 1025 } |
1014 | 1026 |
1015 // Verify that a failed installation causes an install failure ping. | 1027 // Verify that a failed installation causes an install failure ping. |
1016 TEST_F(ComponentUpdaterTest, CheckFailedInstallPing) { | 1028 TEST_F(ComponentUpdaterTest, CheckFailedInstallPing) { |
1017 URLRequestPostInterceptor* post_interceptor( | |
1018 interceptor_factory_->CreateInterceptor()); | |
1019 EXPECT_TRUE(post_interceptor != NULL); | |
1020 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
1021 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
1022 "<o:event eventtype=\"3\" eventresult=\"0\" " | |
1023 "previousversion=\"0.9\" nextversion=\"1.0\" " | |
1024 "errorcat=\"3\" errorcode=\"9\"/></o:app>"))); | |
1025 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | |
1026 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
1027 "<o:event eventtype=\"3\" eventresult=\"0\" " | |
1028 "previousversion=\"0.9\" nextversion=\"1.0\" " | |
1029 "errorcat=\"3\" errorcode=\"9\"/></o:app>"))); | |
1030 | |
1031 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | |
1032 | |
1033 // This test installer reports installation failure. | 1029 // This test installer reports installation failure. |
1034 class : public TestInstaller { | 1030 class : public TestInstaller { |
1035 virtual bool Install(const base::DictionaryValue& manifest, | 1031 virtual bool Install(const base::DictionaryValue& manifest, |
1036 const base::FilePath& unpack_path) OVERRIDE { | 1032 const base::FilePath& unpack_path) OVERRIDE { |
1037 ++install_count_; | 1033 ++install_count_; |
1038 base::DeleteFile(unpack_path, true); | 1034 base::DeleteFile(unpack_path, true); |
1039 return false; | 1035 return false; |
1040 } | 1036 } |
1041 } installer; | 1037 } installer; |
1042 | 1038 |
1039 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
1040 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
1041 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); | |
1042 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( | |
1043 "updatecheck"), test_file("updatecheck_reply_1.xml"))); | |
1044 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); | |
1045 get_interceptor_->SetResponse( | |
1046 GURL(expected_crx_url), | |
1047 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
1048 | |
1049 // Start with 0.9, and attempt update to 1.0. | |
1050 // Loop twice to issue two checks: (1) with original 0.9 version | |
1051 // and (2), which should retry with 0.9. | |
1043 CrxComponent com; | 1052 CrxComponent com; |
1044 RegisterComponent(&com, kTestComponent_jebg, Version("0.9"), &installer); | 1053 RegisterComponent(&com, kTestComponent_jebg, Version("0.9"), &installer); |
1045 | 1054 |
1046 // Start with 0.9, and attempt update to 1.0 | |
1047 const GURL expected_update_url_1( | |
1048 "http://localhost/upd?extra=foo" | |
1049 "&x=id%3Djebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc"); | |
1050 | |
1051 interceptor.SetResponse(expected_update_url_1, | |
1052 test_file("updatecheck_reply_1.xml")); | |
1053 interceptor.SetResponse(GURL(expected_crx_url), | |
1054 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); | |
1055 | |
1056 // Loop twice to issue two checks: (1) with original 0.9 version | |
1057 // and (2), which should retry with 0.9. | |
1058 test_configurator()->SetLoopCount(2); | 1055 test_configurator()->SetLoopCount(2); |
1059 component_updater()->Start(); | 1056 component_updater()->Start(); |
1060 RunThreads(); | 1057 RunThreads(); |
1061 | 1058 |
1059 EXPECT_EQ(4, post_interceptor_->GetHitCount()) | |
1060 << post_interceptor_->GetRequestsAsString(); | |
1061 EXPECT_EQ(2, get_interceptor_->GetHitCount()); | |
1062 | |
1063 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | |
1064 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
1065 "<updatecheck /></app>")) | |
1066 << post_interceptor_->GetRequestsAsString(); | |
1067 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
1068 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" " | |
1069 "version=\"0.9\" nextversion=\"1.0\">" | |
1070 "<event eventtype=\"3\" eventresult=\"0\" " | |
1071 "errorcat=\"3\" errorcode=\"9\"/></app>")) | |
1072 << post_interceptor_->GetRequestsAsString(); | |
1073 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
1074 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
1075 "<updatecheck /></app>")) | |
1076 << post_interceptor_->GetRequestsAsString(); | |
1077 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[3].find( | |
1078 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" " | |
1079 "version=\"0.9\" nextversion=\"1.0\">" | |
1080 "<event eventtype=\"3\" eventresult=\"0\" " | |
1081 "errorcat=\"3\" errorcode=\"9\"/></app>")) | |
1082 << post_interceptor_->GetRequestsAsString(); | |
1083 | |
1062 // Loop once more, but expect no ping because a noupdate response is issued. | 1084 // Loop once more, but expect no ping because a noupdate response is issued. |
1063 // This is necessary to clear out the fire-and-forget ping from the previous | 1085 // This is necessary to clear out the fire-and-forget ping from the previous |
1064 // iteration. | 1086 // iteration. |
1065 interceptor.SetResponse(expected_update_url_1, | 1087 post_interceptor_->Reset(); |
1066 test_file("updatecheck_reply_noupdate.xml")); | 1088 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
1089 "updatecheck"), test_file("updatecheck_reply_noupdate.xml"))); | |
1090 | |
1067 test_configurator()->SetLoopCount(1); | 1091 test_configurator()->SetLoopCount(1); |
1068 component_updater()->Start(); | 1092 component_updater()->Start(); |
1069 RunThreads(); | 1093 RunThreads(); |
1070 | 1094 |
1071 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 1095 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
1072 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); | 1096 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); |
1073 | 1097 |
1074 EXPECT_EQ(2, post_interceptor->GetHitCount()) | 1098 EXPECT_EQ(1, post_interceptor_->GetHitCount()) |
1075 << post_interceptor->GetRequestsAsString(); | 1099 << post_interceptor_->GetRequestsAsString(); |
1076 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 1100 EXPECT_EQ(1, post_interceptor_->GetCount()) |
1077 << post_interceptor->GetRequestsAsString(); | 1101 << post_interceptor_->GetRequestsAsString(); |
1078 | 1102 |
1079 EXPECT_EQ(5, interceptor.GetHitCount()); | 1103 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
1104 "<app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">" | |
1105 "<updatecheck /></app>")) | |
1106 << post_interceptor_->GetRequestsAsString(); | |
1080 | 1107 |
1081 component_updater()->Stop(); | 1108 component_updater()->Stop(); |
1082 } | 1109 } |
1083 | 1110 |
1084 // Verify that we successfully propagate a patcher error. | 1111 // Verify that we successfully propagate a patcher error. |
1085 // ihfokbkgjpifnbbojhneepfflplebdkc_1to2_bad.crx contains an incorrect | 1112 // ihfokbkgjpifnbbojhneepfflplebdkc_1to2_bad.crx contains an incorrect |
1086 // patching instruction that should fail. | 1113 // patching instruction that should fail. |
1087 TEST_F(ComponentUpdaterTest, DifferentialUpdateFailErrorcode) { | 1114 TEST_F(ComponentUpdaterTest, DifferentialUpdateFailErrorcode) { |
1088 URLRequestPostInterceptor* post_interceptor( | 1115 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
1089 interceptor_factory_->CreateInterceptor()); | 1116 "updatecheck"), test_file("updatecheck_diff_reply_1.xml"))); |
1090 EXPECT_TRUE(post_interceptor != NULL); | 1117 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); |
1091 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | 1118 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
1092 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">" | 1119 "updatecheck"), test_file("updatecheck_diff_reply_2.xml"))); |
1093 "<o:event eventtype=\"3\" eventresult=\"1\" " | 1120 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event"))); |
1094 "previousversion=\"0.0\" nextversion=\"1.0\" nextfp=\"1\"/></o:app>"))); | 1121 EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch( |
1095 EXPECT_TRUE(post_interceptor->ExpectRequest(new PartialMatch( | 1122 "updatecheck"), test_file("updatecheck_diff_reply_3.xml"))); |
1096 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">" | |
1097 "<o:event eventtype=\"3\" eventresult=\"1\" " | |
1098 "previousversion=\"1.0\" nextversion=\"2.0\" " | |
1099 "diffresult=\"0\" differrorcat=\"2\" " | |
1100 "differrorcode=\"14\" diffextracode1=\"305\" " | |
1101 "previousfp=\"1\" nextfp=\"f22\"/></o:app>"))); | |
1102 | 1123 |
1103 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 1124 get_interceptor_->SetResponse( |
1125 GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx"), | |
1126 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1.crx")); | |
1127 // This intercept returns a different file than what is specified in the | |
1128 // update check response and requested in the download. The file that is | |
1129 // actually dowloaded contains a patching error, an therefore, an error | |
1130 // is injected at the time of patching. | |
1131 get_interceptor_->SetResponse( | |
1132 GURL("http://localhost/download/" | |
1133 "ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx"), | |
1134 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1to2_bad.crx")); | |
1135 get_interceptor_->SetResponse( | |
1136 GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_2.crx"), | |
1137 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_2.crx")); | |
1104 | 1138 |
1105 VersionedTestInstaller installer; | 1139 VersionedTestInstaller installer; |
1106 CrxComponent com; | 1140 CrxComponent com; |
1107 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer); | 1141 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer); |
1108 | 1142 |
1109 const GURL expected_update_url_0( | 1143 test_configurator()->SetLoopCount(3); |
1110 "http://localhost/upd?extra=foo" | |
1111 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D0.0%26fp%3D%26uc"); | |
1112 const GURL expected_update_url_1( | |
1113 "http://localhost/upd?extra=foo" | |
1114 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D1.0%26fp%3D1%26uc"); | |
1115 const GURL expected_update_url_2( | |
1116 "http://localhost/upd?extra=foo" | |
1117 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D2.0%26fp%3Df22%26uc"); | |
1118 const GURL expected_crx_url_1( | |
1119 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx"); | |
1120 const GURL expected_crx_url_1_diff_2( | |
1121 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx"); | |
1122 const GURL expected_crx_url_2( | |
1123 "http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc_2.crx"); | |
1124 | |
1125 interceptor.SetResponse(expected_update_url_0, | |
1126 test_file("updatecheck_diff_reply_1.xml")); | |
1127 interceptor.SetResponse(expected_update_url_1, | |
1128 test_file("updatecheck_diff_reply_2.xml")); | |
1129 interceptor.SetResponse(expected_update_url_2, | |
1130 test_file("updatecheck_diff_reply_3.xml")); | |
1131 interceptor.SetResponse(expected_crx_url_1, | |
1132 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1.crx")); | |
1133 interceptor.SetResponse( | |
1134 expected_crx_url_1_diff_2, | |
1135 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_1to2_bad.crx")); | |
1136 interceptor.SetResponse(expected_crx_url_2, | |
1137 test_file("ihfokbkgjpifnbbojhneepfflplebdkc_2.crx")); | |
1138 | |
1139 test_configurator()->SetLoopCount(2); | |
1140 | |
1141 component_updater()->Start(); | 1144 component_updater()->Start(); |
1142 RunThreads(); | 1145 RunThreads(); |
1143 component_updater()->Stop(); | 1146 component_updater()->Stop(); |
1144 // There may still be pings in the queue. | |
1145 RunThreadsUntilIdle(); | |
1146 | 1147 |
1147 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); | 1148 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); |
1148 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); | 1149 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); |
1149 | 1150 |
1150 EXPECT_EQ(2, post_interceptor->GetHitCount()) | 1151 EXPECT_EQ(5, post_interceptor_->GetHitCount()) |
1151 << post_interceptor->GetRequestsAsString(); | 1152 << post_interceptor_->GetRequestsAsString(); |
1152 EXPECT_EQ(0, post_interceptor->GetMissCount()) | 1153 EXPECT_EQ(5, post_interceptor_->GetCount()) |
1153 << post_interceptor->GetRequestsAsString(); | 1154 << post_interceptor_->GetRequestsAsString(); |
1155 EXPECT_EQ(3, get_interceptor_->GetHitCount()); | |
1154 | 1156 |
1155 EXPECT_EQ(5, interceptor.GetHitCount()); | 1157 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
1158 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"0.0\">" | |
1159 "<updatecheck /></app>")) | |
1160 << post_interceptor_->GetRequestsAsString(); | |
1161 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | |
1162 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" " | |
1163 "version=\"0.0\" nextversion=\"1.0\">" | |
1164 "<event eventtype=\"3\" eventresult=\"1\" nextfp=\"1\"/></app>")) | |
1165 << post_interceptor_->GetRequestsAsString(); | |
1166 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | |
1167 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">" | |
1168 "<updatecheck /><packages><package fp=\"1\"/></packages></app>")) | |
1169 << post_interceptor_->GetRequestsAsString(); | |
1170 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[3].find( | |
1171 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" " | |
1172 "version=\"1.0\" nextversion=\"2.0\">" | |
1173 "<event eventtype=\"3\" eventresult=\"1\" " | |
1174 "diffresult=\"0\" differrorcat=\"2\" " | |
1175 "differrorcode=\"14\" diffextracode1=\"305\" " | |
1176 "previousfp=\"1\" nextfp=\"22\"/></app>")) | |
1177 << post_interceptor_->GetRequestsAsString(); | |
1178 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[4].find( | |
1179 "<app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">" | |
1180 "<updatecheck /><packages><package fp=\"22\"/></packages></app>")) | |
1181 << post_interceptor_->GetRequestsAsString(); | |
1156 } | 1182 } |
1157 | 1183 |
1158 } // namespace component_updater | 1184 } // namespace component_updater |
1159 | 1185 |
OLD | NEW |