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

Side by Side Diff: chrome/browser/component_updater/test/component_updater_service_unittest.cc

Issue 56023005: First changelist of a series to migrate the component updater protocol (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Dump pings in all cases for easier debugging of failed tests. 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 (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"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 } 111 }
112 112
113 void TestConfigurator::SetComponentUpdateService(ComponentUpdateService* cus) { 113 void TestConfigurator::SetComponentUpdateService(ComponentUpdateService* cus) {
114 cus_ = cus; 114 cus_ = cus;
115 } 115 }
116 116
117 void TestConfigurator::SetQuitClosure(const base::Closure& quit_closure) { 117 void TestConfigurator::SetQuitClosure(const base::Closure& quit_closure) {
118 quit_closure_ = quit_closure; 118 quit_closure_ = quit_closure;
119 } 119 }
120 120
121 // Intercepts ping requests sent over http POST to localhost2.
122 class PingInterceptor : public URLRequestPostInterceptor {
123 public:
124 PingInterceptor() : URLRequestPostInterceptor("http", "localhost2") {}
125
126 private:
127 DISALLOW_COPY_AND_ASSIGN(PingInterceptor);
128 };
129
121 ComponentUpdaterTest::ComponentUpdaterTest() 130 ComponentUpdaterTest::ComponentUpdaterTest()
122 : test_config_(NULL), 131 : test_config_(NULL),
123 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { 132 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
124 // The component updater instance under test. 133 // The component updater instance under test.
125 test_config_ = new TestConfigurator; 134 test_config_ = new TestConfigurator;
126 component_updater_.reset(ComponentUpdateServiceFactory(test_config_)); 135 component_updater_.reset(ComponentUpdateServiceFactory(test_config_));
127 test_config_->SetComponentUpdateService(component_updater_.get()); 136 test_config_->SetComponentUpdateService(component_updater_.get());
128 137
129 // The test directory is chrome/test/data/components. 138 // The test directory is chrome/test/data/components.
130 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_); 139 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 void ComponentUpdaterTest::RunThreads() { 186 void ComponentUpdaterTest::RunThreads() {
178 base::RunLoop runloop; 187 base::RunLoop runloop;
179 test_configurator()->SetQuitClosure(runloop.QuitClosure()); 188 test_configurator()->SetQuitClosure(runloop.QuitClosure());
180 runloop.Run(); 189 runloop.Run();
181 } 190 }
182 191
183 void ComponentUpdaterTest::RunThreadsUntilIdle() { 192 void ComponentUpdaterTest::RunThreadsUntilIdle() {
184 base::RunLoop().RunUntilIdle(); 193 base::RunLoop().RunUntilIdle();
185 } 194 }
186 195
187 PingChecker::PingChecker(const std::map<std::string, std::string>& attributes)
188 : num_hits_(0), num_misses_(0), attributes_(attributes) {
189 }
190
191 PingChecker::~PingChecker() {}
192
193 void PingChecker::Trial(net::URLRequest* request) {
194 if (Test(request))
195 ++num_hits_;
196 else
197 ++num_misses_;
198 }
199
200 bool PingChecker::Test(net::URLRequest* request) {
201 if (request->has_upload()) {
202 const net::UploadDataStream* stream = request->get_upload();
203 const net::UploadBytesElementReader* reader =
204 stream->element_readers()[0]->AsBytesReader();
205 int size = reader->length();
206 scoped_refptr <net::IOBuffer> buffer = new net::IOBuffer(size);
207 std::string data(reader->bytes());
208 pings_.push_back(data);
209 // For now, we assume that there is only one ping per POST.
210 std::string::size_type start = data.find("<o:event");
211 if (start != std::string::npos) {
212 std::string::size_type end = data.find(">", start);
213 if (end != std::string::npos) {
214 std::string ping = data.substr(start, end - start);
215 std::map<std::string, std::string>::const_iterator iter;
216 for (iter = attributes_.begin(); iter != attributes_.end(); ++iter) {
217 // does the ping contain the specified attribute/value?
218 if (ping.find(std::string(" ") + (iter->first) +
219 std::string("=") + (iter->second)) == string::npos) {
220 return false;
221 }
222 }
223 return true;
224 }
225 }
226 }
227 return false;
228 }
229
230 std::string PingChecker::GetPings() const {
231 std::string pings_str = "Pings are:";
232 int i = 0;
233 for (std::vector<std::string>::const_iterator it = pings_.begin();
234 it != pings_.end(); ++it) {
235 pings_str.append(base::StringPrintf("\n (%d): %s", ++i, it->c_str()));
236 }
237 return pings_str;
238 }
239
240 ComponentUpdateService::Status OnDemandTester::OnDemand( 196 ComponentUpdateService::Status OnDemandTester::OnDemand(
241 ComponentUpdateService* cus, const std::string& component_id) { 197 ComponentUpdateService* cus, const std::string& component_id) {
242 return cus->OnDemandUpdate(component_id); 198 return cus->OnDemandUpdate(component_id);
243 } 199 }
244 200
245 // Verify that our test fixture work and the component updater can 201 // Verify that our test fixture work and the component updater can
246 // be created and destroyed with no side effects. 202 // be created and destroyed with no side effects.
247 TEST_F(ComponentUpdaterTest, VerifyFixture) { 203 TEST_F(ComponentUpdaterTest, VerifyFixture) {
248 EXPECT_TRUE(component_updater() != NULL); 204 EXPECT_TRUE(component_updater() != NULL);
249 } 205 }
250 206
251 // Verify that the component updater can be caught in a quick 207 // Verify that the component updater can be caught in a quick
252 // start-shutdown situation. Failure of this test will be a crash. 208 // start-shutdown situation. Failure of this test will be a crash.
253 TEST_F(ComponentUpdaterTest, StartStop) { 209 TEST_F(ComponentUpdaterTest, StartStop) {
254 component_updater()->Start(); 210 component_updater()->Start();
255 RunThreadsUntilIdle(); 211 RunThreadsUntilIdle();
256 component_updater()->Stop(); 212 component_updater()->Stop();
257 } 213 }
258 214
259 // Verify that when the server has no updates, we go back to sleep and 215 // Verify that when the server has no updates, we go back to sleep and
260 // the COMPONENT_UPDATER_STARTED and COMPONENT_UPDATER_SLEEPING notifications 216 // the COMPONENT_UPDATER_STARTED and COMPONENT_UPDATER_SLEEPING notifications
261 // are generated. 217 // are generated. No pings are sent.
262 TEST_F(ComponentUpdaterTest, CheckCrxSleep) { 218 TEST_F(ComponentUpdaterTest, CheckCrxSleep) {
219 PingInterceptor ping_interceptor;
263 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 220 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
264 221
265 MockComponentObserver observer; 222 MockComponentObserver observer;
266 223
267 TestInstaller installer; 224 TestInstaller installer;
268 CrxComponent com; 225 CrxComponent com;
269 com.observer = &observer; 226 com.observer = &observer;
270 EXPECT_EQ(ComponentUpdateService::kOk, 227 EXPECT_EQ(ComponentUpdateService::kOk,
271 RegisterComponent(&com, 228 RegisterComponent(&com,
272 kTestComponent_abag, 229 kTestComponent_abag,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 276
320 EXPECT_CALL(observer, 277 EXPECT_CALL(observer,
321 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0)) 278 OnEvent(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0))
322 .Times(2); 279 .Times(2);
323 EXPECT_CALL(observer, 280 EXPECT_CALL(observer,
324 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) 281 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0))
325 .Times(2); 282 .Times(2);
326 RunThreads(); 283 RunThreads();
327 284
328 EXPECT_EQ(4, interceptor.GetHitCount()); 285 EXPECT_EQ(4, interceptor.GetHitCount());
286 EXPECT_EQ(0, ping_interceptor.GetHitCount());
329 287
330 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); 288 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error());
331 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); 289 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count());
332 290
333 component_updater()->Stop(); 291 component_updater()->Stop();
334 } 292 }
335 293
336 // Verify that we can check for updates and install one component. Besides 294 // Verify that we can check for updates and install one component. Besides
337 // the notifications above COMPONENT_UPDATE_FOUND and COMPONENT_UPDATE_READY 295 // the notifications above COMPONENT_UPDATE_FOUND and COMPONENT_UPDATE_READY
338 // should have been fired. We do two loops so the second time around there 296 // should have been fired. We do two loops so the second time around there
339 // should be nothing left to do. 297 // should be nothing left to do.
340 // We also check that only 3 non-ping network requests are issued: 298 // We also check that only 3 non-ping network requests are issued:
341 // 1- manifest check 299 // 1- manifest check
342 // 2- download crx 300 // 2- download crx
343 // 3- second manifest check. 301 // 3- second manifest check.
344 TEST_F(ComponentUpdaterTest, InstallCrx) { 302 TEST_F(ComponentUpdaterTest, InstallCrx) {
345 std::map<std::string, std::string> map; 303 PingInterceptor ping_interceptor;
346 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
347 map.insert(std::pair<std::string, std::string>("eventresult", "\"1\""));
348 map.insert(std::pair<std::string, std::string>("previousversion",
349 "\"0.9\""));
350 map.insert(std::pair<std::string, std::string>("nextversion", "\"1.0\""));
351 PingChecker ping_checker(map);
352 URLRequestPostInterceptor post_interceptor(&ping_checker);
353 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 304 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
354 305
355 MockComponentObserver observer1; 306 MockComponentObserver observer1;
356 { 307 {
357 InSequence seq; 308 InSequence seq;
358 EXPECT_CALL(observer1, 309 EXPECT_CALL(observer1,
359 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) 310 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0))
360 .Times(1); 311 .Times(1);
361 EXPECT_CALL(observer1, 312 EXPECT_CALL(observer1,
362 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0)) 313 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0))
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 379
429 component_updater()->Start(); 380 component_updater()->Start();
430 RunThreads(); 381 RunThreads();
431 382
432 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); 383 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error());
433 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count()); 384 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count());
434 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); 385 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error());
435 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); 386 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count());
436 387
437 EXPECT_EQ(3, interceptor.GetHitCount()); 388 EXPECT_EQ(3, interceptor.GetHitCount());
438 EXPECT_EQ(1, ping_checker.NumHits()) << ping_checker.GetPings(); 389
439 EXPECT_EQ(0, ping_checker.NumMisses()) << ping_checker.GetPings(); 390 EXPECT_EQ(1, ping_interceptor.GetHitCount())
391 << ping_interceptor.GetRequestsAsString();
392 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
393 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">"
394 "<o:event eventtype=\"3\" eventresult=\"1\" "
395 "previousversion=\"0.9\" nextversion=\"1.0\"/></o:app>"))
396 << ping_interceptor.GetRequestsAsString();
397
440 398
441 component_updater()->Stop(); 399 component_updater()->Stop();
442 } 400 }
443 401
444 // This test checks that the "prodversionmin" value is handled correctly. In 402 // This test checks that the "prodversionmin" value is handled correctly. In
445 // particular there should not be an install because the minimum product 403 // particular there should not be an install because the minimum product
446 // version is much higher than of chrome. 404 // version is much higher than of chrome.
447 TEST_F(ComponentUpdaterTest, ProdVersionCheck) { 405 TEST_F(ComponentUpdaterTest, ProdVersionCheck) {
448 std::map<std::string, std::string> map; 406 PingInterceptor ping_interceptor;
449 PingChecker ping_checker(map);
450 URLRequestPostInterceptor post_interceptor(&ping_checker);
451 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 407 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
452 408
453 TestInstaller installer; 409 TestInstaller installer;
454 CrxComponent com; 410 CrxComponent com;
455 RegisterComponent(&com, kTestComponent_jebg, Version("0.9"), &installer); 411 RegisterComponent(&com, kTestComponent_jebg, Version("0.9"), &installer);
456 412
457 const GURL expected_update_url( 413 const GURL expected_update_url(
458 "http://localhost/upd?extra=foo&x=id%3D" 414 "http://localhost/upd?extra=foo&x=id%3D"
459 "jebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc"); 415 "jebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26fp%3D%26uc");
460 416
461 interceptor.SetResponse(expected_update_url, 417 interceptor.SetResponse(expected_update_url,
462 test_file("updatecheck_reply_2.xml")); 418 test_file("updatecheck_reply_2.xml"));
463 interceptor.SetResponse(GURL(expected_crx_url), 419 interceptor.SetResponse(GURL(expected_crx_url),
464 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx")); 420 test_file("jebgalgnebhfojomionfpkfelancnnkf.crx"));
465 421
466 test_configurator()->SetLoopCount(1); 422 test_configurator()->SetLoopCount(1);
467 component_updater()->Start(); 423 component_updater()->Start();
468 RunThreads(); 424 RunThreads();
469 425
470 EXPECT_EQ(0, ping_checker.NumHits()) << ping_checker.GetPings(); 426 EXPECT_EQ(0, ping_interceptor.GetHitCount())
471 EXPECT_EQ(0, ping_checker.NumMisses()) << ping_checker.GetPings(); 427 << ping_interceptor.GetRequestsAsString();
472 EXPECT_EQ(1, interceptor.GetHitCount()); 428 EXPECT_EQ(1, interceptor.GetHitCount());
429
473 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); 430 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error());
474 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count()); 431 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->install_count());
475 432
476 component_updater()->Stop(); 433 component_updater()->Stop();
477 } 434 }
478 435
479 // Test that a ping for an update check can cause installs. 436 // Test that a ping for an update check can cause installs.
480 // Here is the timeline: 437 // Here is the timeline:
481 // - First loop: we return a reply that indicates no update, so 438 // - First loop: we return a reply that indicates no update, so
482 // nothing happens. 439 // nothing happens.
483 // - We ping. 440 // - We ping.
484 // - This triggers a second loop, which has a reply that triggers an install. 441 // - This triggers a second loop, which has a reply that triggers an install.
485 TEST_F(ComponentUpdaterTest, OnDemandUpdate) { 442 TEST_F(ComponentUpdaterTest, OnDemandUpdate) {
486 std::map<std::string, std::string> map; 443 PingInterceptor ping_interceptor;
487 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
488 map.insert(std::pair<std::string, std::string>("eventresult", "\"1\""));
489 map.insert(std::pair<std::string, std::string>("previousversion",
490 "\"0.9\""));
491 map.insert(std::pair<std::string, std::string>("nextversion", "\"1.0\""));
492 PingChecker ping_checker(map);
493 URLRequestPostInterceptor post_interceptor(&ping_checker);
494 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 444 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
495 445
496 MockComponentObserver observer1; 446 MockComponentObserver observer1;
497 { 447 {
498 InSequence seq; 448 InSequence seq;
499 EXPECT_CALL(observer1, 449 EXPECT_CALL(observer1,
500 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) 450 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0))
501 .Times(1); 451 .Times(1);
502 EXPECT_CALL(observer1, 452 EXPECT_CALL(observer1,
503 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0)) 453 OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0))
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 interceptor.SetResponse(expected_update_url_3, 629 interceptor.SetResponse(expected_update_url_3,
680 test_file("updatecheck_reply_1.xml")); 630 test_file("updatecheck_reply_1.xml"));
681 test_configurator()->SetLoopCount(1); 631 test_configurator()->SetLoopCount(1);
682 component_updater()->Start(); 632 component_updater()->Start();
683 EXPECT_EQ(ComponentUpdateService::kOk, 633 EXPECT_EQ(ComponentUpdateService::kOk,
684 OnDemandTester::OnDemand(component_updater(), 634 OnDemandTester::OnDemand(component_updater(),
685 GetCrxComponentID(com2))); 635 GetCrxComponentID(com2)));
686 636
687 RunThreads(); 637 RunThreads();
688 638
689 EXPECT_EQ(1, ping_checker.NumHits()) << ping_checker.GetPings(); 639 EXPECT_EQ(1, ping_interceptor.GetHitCount())
690 EXPECT_EQ(0, ping_checker.NumMisses()) << ping_checker.GetPings(); 640 << ping_interceptor.GetRequestsAsString();
641 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
642 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">"
643 "<o:event eventtype=\"3\" eventresult=\"1\" "
644 "previousversion=\"0.9\" nextversion=\"1.0\"/></o:app>"))
645 << ping_interceptor.GetRequestsAsString();
691 646
692 component_updater()->Stop(); 647 component_updater()->Stop();
693 } 648 }
694 649
695 // Verify that a previously registered component can get re-registered 650 // Verify that a previously registered component can get re-registered
696 // with a different version. 651 // with a different version.
697 TEST_F(ComponentUpdaterTest, CheckReRegistration) { 652 TEST_F(ComponentUpdaterTest, CheckReRegistration) {
698 std::map<std::string, std::string> map; 653 PingInterceptor ping_interceptor;
699 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
700 map.insert(std::pair<std::string, std::string>("eventresult", "\"1\""));
701 map.insert(std::pair<std::string, std::string>("previousversion",
702 "\"0.9\""));
703 map.insert(std::pair<std::string, std::string>("nextversion", "\"1.0\""));
704 PingChecker ping_checker(map);
705 URLRequestPostInterceptor post_interceptor(&ping_checker);
706 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 654 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
707 655
708 MockComponentObserver observer1; 656 MockComponentObserver observer1;
709 { 657 {
710 InSequence seq; 658 InSequence seq;
711 EXPECT_CALL(observer1, 659 EXPECT_CALL(observer1,
712 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) 660 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0))
713 .Times(1); 661 .Times(1);
714 EXPECT_CALL(observer1, 662 EXPECT_CALL(observer1,
715 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0)) 663 OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0))
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 test_configurator()->SetLoopCount(2); 731 test_configurator()->SetLoopCount(2);
784 732
785 component_updater()->Start(); 733 component_updater()->Start();
786 RunThreads(); 734 RunThreads();
787 735
788 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); 736 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error());
789 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count()); 737 EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count());
790 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); 738 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error());
791 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); 739 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count());
792 740
793 EXPECT_EQ(1, ping_checker.NumHits()) << ping_checker.GetPings(); 741 EXPECT_EQ(1, ping_interceptor.GetHitCount())
794 EXPECT_EQ(0, ping_checker.NumMisses()) << ping_checker.GetPings(); 742 << ping_interceptor.GetRequestsAsString();
743 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
744 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"1.0\">"
745 "<o:event eventtype=\"3\" eventresult=\"1\" "
746 "previousversion=\"0.9\" nextversion=\"1.0\"/></o:app>"))
747 << ping_interceptor.GetRequestsAsString();
748
795 EXPECT_EQ(3, interceptor.GetHitCount()); 749 EXPECT_EQ(3, interceptor.GetHitCount());
796 750
797 component_updater()->Stop(); 751 component_updater()->Stop();
798 752
799 // Now re-register, pretending to be an even newer version (2.2) 753 // Now re-register, pretending to be an even newer version (2.2)
800 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1)); 754 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1));
801 { 755 {
802 InSequence seq; 756 InSequence seq;
803 EXPECT_CALL(observer1, 757 EXPECT_CALL(observer1,
804 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0)) 758 OnEvent(ComponentObserver::COMPONENT_UPDATER_STARTED, 0))
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 // nothing. 817 // nothing.
864 // We also check that exactly 5 non-ping network requests are issued: 818 // We also check that exactly 5 non-ping network requests are issued:
865 // 1- update check (response: v1 available) 819 // 1- update check (response: v1 available)
866 // 2- download crx (v1) 820 // 2- download crx (v1)
867 // 3- update check (response: v2 available) 821 // 3- update check (response: v2 available)
868 // 4- download differential crx (v1 to v2) 822 // 4- download differential crx (v1 to v2)
869 // 5- update check (response: no further update available) 823 // 5- update check (response: no further update available)
870 // There should be two pings, one for each update. The second will bear a 824 // There should be two pings, one for each update. The second will bear a
871 // diffresult=1, while the first will not. 825 // diffresult=1, while the first will not.
872 TEST_F(ComponentUpdaterTest, DifferentialUpdate) { 826 TEST_F(ComponentUpdaterTest, DifferentialUpdate) {
873 std::map<std::string, std::string> map; 827 PingInterceptor ping_interceptor;
874 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
875 map.insert(std::pair<std::string, std::string>("eventresult", "\"1\""));
876 map.insert(std::pair<std::string, std::string>("diffresult", "\"1\""));
877 PingChecker ping_checker(map);
878 URLRequestPostInterceptor post_interceptor(&ping_checker);
879 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 828 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
880 829
881 VersionedTestInstaller installer; 830 VersionedTestInstaller installer;
882 CrxComponent com; 831 CrxComponent com;
883 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer); 832 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer);
884 833
885 const GURL expected_update_url_0( 834 const GURL expected_update_url_0(
886 "http://localhost/upd?extra=foo" 835 "http://localhost/upd?extra=foo"
887 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D0.0%26fp%3D%26uc"); 836 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D0.0%26fp%3D%26uc");
888 const GURL expected_update_url_1( 837 const GURL expected_update_url_1(
(...skipping 21 matching lines...) Expand all
910 859
911 test_configurator()->SetLoopCount(3); 860 test_configurator()->SetLoopCount(3);
912 861
913 component_updater()->Start(); 862 component_updater()->Start();
914 RunThreads(); 863 RunThreads();
915 864
916 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); 865 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error());
917 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); 866 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count());
918 867
919 // One ping has the diffresult=1, the other does not. 868 // One ping has the diffresult=1, the other does not.
920 EXPECT_EQ(1, ping_checker.NumHits()) << ping_checker.GetPings(); 869 EXPECT_EQ(2, ping_interceptor.GetHitCount())
921 EXPECT_EQ(1, ping_checker.NumMisses()) << ping_checker.GetPings(); 870 << ping_interceptor.GetRequestsAsString();
871 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
872 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">"
873 "<o:event eventtype=\"3\" eventresult=\"1\" "
874 "previousversion=\"0.0\" nextversion=\"1.0\" nextfp=\"1\"/></o:app>"))
875 << ping_interceptor.GetRequestsAsString();
876 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[1].find(
877 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">"
878 "<o:event eventtype=\"3\" eventresult=\"1\" "
879 "previousversion=\"1.0\" nextversion=\"2.0\" "
880 "diffresult=\"1\" previousfp=\"1\" nextfp=\"f22\"/></o:app>"))
881 << ping_interceptor.GetRequestsAsString();
922 882
923 EXPECT_EQ(5, interceptor.GetHitCount()); 883 EXPECT_EQ(5, interceptor.GetHitCount());
924 884
925 component_updater()->Stop(); 885 component_updater()->Stop();
926 } 886 }
927 887
928 // Verify that component installation falls back to downloading and installing 888 // Verify that component installation falls back to downloading and installing
929 // a full update if the differential update fails (in this case, because the 889 // a full update if the differential update fails (in this case, because the
930 // installer does not know about the existing files). We do two loops; the final 890 // installer does not know about the existing files). We do two loops; the final
931 // loop should do nothing. 891 // loop should do nothing.
932 // We also check that exactly 4 non-ping network requests are issued: 892 // We also check that exactly 4 non-ping network requests are issued:
933 // 1- update check (loop 1) 893 // 1- update check (loop 1)
934 // 2- download differential crx 894 // 2- download differential crx
935 // 3- download full crx 895 // 3- download full crx
936 // 4- update check (loop 2 - no update available) 896 // 4- update check (loop 2 - no update available)
937 // There should be one ping for the first attempted update. 897 // There should be one ping for the first attempted update.
938
939 TEST_F(ComponentUpdaterTest, DifferentialUpdateFails) { 898 TEST_F(ComponentUpdaterTest, DifferentialUpdateFails) {
940 std::map<std::string, std::string> map; 899 PingInterceptor ping_interceptor;
941 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
942 map.insert(std::pair<std::string, std::string>("eventresult", "\"1\""));
943 map.insert(std::pair<std::string, std::string>("diffresult", "\"0\""));
944 map.insert(std::pair<std::string, std::string>("differrorcode", "\"16\""));
945 PingChecker ping_checker(map);
946 URLRequestPostInterceptor post_interceptor(&ping_checker);
947 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 900 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
948 901
949 TestInstaller installer; 902 TestInstaller installer;
950 CrxComponent com; 903 CrxComponent com;
951 RegisterComponent(&com, kTestComponent_ihfo, Version("1.0"), &installer); 904 RegisterComponent(&com, kTestComponent_ihfo, Version("1.0"), &installer);
952 905
953 const GURL expected_update_url_1( 906 const GURL expected_update_url_1(
954 "http://localhost/upd?extra=foo" 907 "http://localhost/upd?extra=foo"
955 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D1.0%26fp%3D%26uc"); 908 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D1.0%26fp%3D%26uc");
956 const GURL expected_update_url_2( 909 const GURL expected_update_url_2(
(...skipping 20 matching lines...) Expand all
977 930
978 test_configurator()->SetLoopCount(2); 931 test_configurator()->SetLoopCount(2);
979 932
980 component_updater()->Start(); 933 component_updater()->Start();
981 RunThreads(); 934 RunThreads();
982 935
983 // A failed differential update does not count as a failed install. 936 // A failed differential update does not count as a failed install.
984 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); 937 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error());
985 EXPECT_EQ(1, static_cast<TestInstaller*>(com.installer)->install_count()); 938 EXPECT_EQ(1, static_cast<TestInstaller*>(com.installer)->install_count());
986 939
987 EXPECT_EQ(1, ping_checker.NumHits()) << ping_checker.GetPings(); 940 EXPECT_EQ(1, ping_interceptor.GetHitCount())
988 EXPECT_EQ(0, ping_checker.NumMisses()) << ping_checker.GetPings(); 941 << ping_interceptor.GetRequestsAsString();
942 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
943 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">"
944 "<o:event eventtype=\"3\" eventresult=\"1\" "
945 "previousversion=\"1.0\" nextversion=\"2.0\" "
946 "diffresult=\"0\" differrorcat=\"2\" differrorcode=\"16\" "
947 "nextfp=\"f22\"/></o:app>"))
948 << ping_interceptor.GetRequestsAsString();
949
989 EXPECT_EQ(4, interceptor.GetHitCount()); 950 EXPECT_EQ(4, interceptor.GetHitCount());
990 951
991 component_updater()->Stop(); 952 component_updater()->Stop();
992 } 953 }
993 954
994 // Verify that a failed installation causes an install failure ping. 955 // Verify that a failed installation causes an install failure ping.
995 TEST_F(ComponentUpdaterTest, CheckFailedInstallPing) { 956 TEST_F(ComponentUpdaterTest, CheckFailedInstallPing) {
996 std::map<std::string, std::string> map; 957 PingInterceptor ping_interceptor;
997 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
998 map.insert(std::pair<std::string, std::string>("eventresult", "\"0\""));
999 map.insert(std::pair<std::string, std::string>("errorcode", "\"9\""));
1000 map.insert(std::pair<std::string, std::string>("previousversion",
1001 "\"0.9\""));
1002 map.insert(std::pair<std::string, std::string>("nextversion", "\"1.0\""));
1003 PingChecker ping_checker(map);
1004 URLRequestPostInterceptor post_interceptor(&ping_checker);
1005 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 958 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
1006 959
1007 // This test installer reports installation failure. 960 // This test installer reports installation failure.
1008 class : public TestInstaller { 961 class : public TestInstaller {
1009 virtual bool Install(const base::DictionaryValue& manifest, 962 virtual bool Install(const base::DictionaryValue& manifest,
1010 const base::FilePath& unpack_path) OVERRIDE { 963 const base::FilePath& unpack_path) OVERRIDE {
1011 ++install_count_; 964 ++install_count_;
1012 base::DeleteFile(unpack_path, true); 965 base::DeleteFile(unpack_path, true);
1013 return false; 966 return false;
1014 } 967 }
(...skipping 23 matching lines...) Expand all
1038 // iteration. 991 // iteration.
1039 interceptor.SetResponse(expected_update_url_1, 992 interceptor.SetResponse(expected_update_url_1,
1040 test_file("updatecheck_reply_noupdate.xml")); 993 test_file("updatecheck_reply_noupdate.xml"));
1041 test_configurator()->SetLoopCount(1); 994 test_configurator()->SetLoopCount(1);
1042 component_updater()->Start(); 995 component_updater()->Start();
1043 RunThreads(); 996 RunThreads();
1044 997
1045 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); 998 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error());
1046 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); 999 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count());
1047 1000
1048 EXPECT_EQ(2, ping_checker.NumHits()) << ping_checker.GetPings(); 1001 EXPECT_EQ(2, ping_interceptor.GetHitCount())
1049 EXPECT_EQ(0, ping_checker.NumMisses()) << ping_checker.GetPings(); 1002 << ping_interceptor.GetRequestsAsString();
1003 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
1004 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">"
1005 "<o:event eventtype=\"3\" eventresult=\"0\" "
1006 "previousversion=\"0.9\" nextversion=\"1.0\" "
1007 "errorcat=\"3\" errorcode=\"9\"/></o:app>"))
1008 << ping_interceptor.GetRequestsAsString();
1009 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[1].find(
1010 "<o:app appid=\"jebgalgnebhfojomionfpkfelancnnkf\" version=\"0.9\">"
1011 "<o:event eventtype=\"3\" eventresult=\"0\" "
1012 "previousversion=\"0.9\" nextversion=\"1.0\" "
1013 "errorcat=\"3\" errorcode=\"9\"/></o:app>"))
1014 << ping_interceptor.GetRequestsAsString();
1015
1050 EXPECT_EQ(5, interceptor.GetHitCount()); 1016 EXPECT_EQ(5, interceptor.GetHitCount());
1051 1017
1052 component_updater()->Stop(); 1018 component_updater()->Stop();
1053 } 1019 }
1054 1020
1055 // Verify that we successfully propagate a patcher error. 1021 // Verify that we successfully propagate a patcher error.
1056 // ihfokbkgjpifnbbojhneepfflplebdkc_1to2_bad.crx contains an incorrect 1022 // ihfokbkgjpifnbbojhneepfflplebdkc_1to2_bad.crx contains an incorrect
1057 // patching instruction that should fail. 1023 // patching instruction that should fail.
1058 TEST_F(ComponentUpdaterTest, DifferentialUpdateFailErrorcode) { 1024 TEST_F(ComponentUpdaterTest, DifferentialUpdateFailErrorcode) {
1059 std::map<std::string, std::string> map; 1025 PingInterceptor ping_interceptor;
1060 map.insert(std::pair<std::string, std::string>("eventtype", "\"3\""));
1061 map.insert(std::pair<std::string, std::string>("eventresult", "\"1\""));
1062 map.insert(std::pair<std::string, std::string>("diffresult", "\"0\""));
1063 map.insert(std::pair<std::string, std::string>("differrorcode", "\"14\""));
1064 map.insert(std::pair<std::string, std::string>("diffextracode1", "\"305\""));
1065 PingChecker ping_checker(map);
1066 URLRequestPostInterceptor post_interceptor(&ping_checker);
1067 content::URLLocalHostRequestPrepackagedInterceptor interceptor; 1026 content::URLLocalHostRequestPrepackagedInterceptor interceptor;
1068 1027
1069 VersionedTestInstaller installer; 1028 VersionedTestInstaller installer;
1070 CrxComponent com; 1029 CrxComponent com;
1071 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer); 1030 RegisterComponent(&com, kTestComponent_ihfo, Version("0.0"), &installer);
1072 1031
1073 const GURL expected_update_url_0( 1032 const GURL expected_update_url_0(
1074 "http://localhost/upd?extra=foo" 1033 "http://localhost/upd?extra=foo"
1075 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D0.0%26fp%3D%26uc"); 1034 "&x=id%3Dihfokbkgjpifnbbojhneepfflplebdkc%26v%3D0.0%26fp%3D%26uc");
1076 const GURL expected_update_url_1( 1035 const GURL expected_update_url_1(
(...skipping 27 matching lines...) Expand all
1104 1063
1105 component_updater()->Start(); 1064 component_updater()->Start();
1106 RunThreads(); 1065 RunThreads();
1107 component_updater()->Stop(); 1066 component_updater()->Stop();
1108 // There may still be pings in the queue. 1067 // There may still be pings in the queue.
1109 RunThreadsUntilIdle(); 1068 RunThreadsUntilIdle();
1110 1069
1111 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error()); 1070 EXPECT_EQ(0, static_cast<TestInstaller*>(com.installer)->error());
1112 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count()); 1071 EXPECT_EQ(2, static_cast<TestInstaller*>(com.installer)->install_count());
1113 1072
1114 EXPECT_EQ(1, ping_checker.NumHits()) << ping_checker.GetPings(); 1073 EXPECT_EQ(2, ping_interceptor.GetHitCount())
1115 EXPECT_EQ(1, ping_checker.NumMisses()) << ping_checker.GetPings(); 1074 << ping_interceptor.GetRequestsAsString();
1075 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[0].find(
1076 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"1.0\">"
1077 "<o:event eventtype=\"3\" eventresult=\"1\" "
1078 "previousversion=\"0.0\" nextversion=\"1.0\" nextfp=\"1\"/></o:app>"))
1079 << ping_interceptor.GetRequestsAsString();
1080 EXPECT_NE(string::npos, ping_interceptor.GetRequests()[1].find(
1081 "<o:app appid=\"ihfokbkgjpifnbbojhneepfflplebdkc\" version=\"2.0\">"
1082 "<o:event eventtype=\"3\" eventresult=\"1\" "
1083 "previousversion=\"1.0\" nextversion=\"2.0\" "
1084 "diffresult=\"0\" differrorcat=\"2\" "
1085 "differrorcode=\"14\" diffextracode1=\"305\" "
1086 "previousfp=\"1\" nextfp=\"f22\"/></o:app>"))
1087 << ping_interceptor.GetRequestsAsString();
1088
1116 EXPECT_EQ(5, interceptor.GetHitCount()); 1089 EXPECT_EQ(5, interceptor.GetHitCount());
1117 } 1090 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698