| Index: chrome/browser/component_updater/test/component_updater_service_unittest.cc
|
| diff --git a/chrome/browser/component_updater/test/component_updater_service_unittest.cc b/chrome/browser/component_updater/test/component_updater_service_unittest.cc
|
| index 6db95a9efa0262bdcd910c60a1e4594f6331febb..f55d6cd25688ad6336fca8f2336c260cac4d02c3 100644
|
| --- a/chrome/browser/component_updater/test/component_updater_service_unittest.cc
|
| +++ b/chrome/browser/component_updater/test/component_updater_service_unittest.cc
|
| @@ -160,7 +160,10 @@ class ComponentUpdaterTest : public testing::Test {
|
| chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED,
|
| chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING,
|
| chrome::NOTIFICATION_COMPONENT_UPDATE_FOUND,
|
| - chrome::NOTIFICATION_COMPONENT_UPDATE_READY
|
| + chrome::NOTIFICATION_COMPONENT_UPDATE_READY,
|
| + chrome::NOTIFICATION_COMPONENT_UPDATE_COMPLETE,
|
| + chrome::NOTIFICATION_COMPONENT_UPDATE_NOT_UPDATED,
|
| + chrome::NOTIFICATION_COMPONENT_UPDATE_FAILED
|
| };
|
|
|
| for (int ix = 0; ix != arraysize(notifications); ++ix) {
|
| @@ -380,7 +383,7 @@ TEST_F(ComponentUpdaterTest, InstallCrx) {
|
| EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev3.type);
|
|
|
| TestNotificationTracker::Event ev4 = notification_tracker().at(4);
|
| - EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev3.type);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev4.type);
|
|
|
| component_updater()->Stop();
|
| }
|
| @@ -452,7 +455,7 @@ TEST_F(ComponentUpdaterTest, InstallCrxTwoSources) {
|
| EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev3.type);
|
|
|
| TestNotificationTracker::Event ev4 = notification_tracker().at(5);
|
| - EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev3.type);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev4.type);
|
|
|
| component_updater()->Stop();
|
| }
|
| @@ -493,3 +496,144 @@ TEST_F(ComponentUpdaterTest, ProdVersionCheck) {
|
|
|
| component_updater()->Stop();
|
| }
|
| +
|
| +// Test that a ping for an update check can cause installs.
|
| +// Here is the timeline:
|
| +// - First loop: we return a reply that indicates no update, so
|
| +// nothing happens.
|
| +// - We ping.
|
| +// - This triggers a second loop, which has a reply that triggers an install.
|
| +TEST_F(ComponentUpdaterTest, CheckForUpdateSoon) {
|
| + MessageLoop message_loop;
|
| + content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
|
| + content::TestBrowserThread file_thread(BrowserThread::FILE);
|
| + content::TestBrowserThread io_thread(BrowserThread::IO);
|
| +
|
| + io_thread.StartIOThread();
|
| + file_thread.Start();
|
| +
|
| + content::URLRequestPrepackagedInterceptor interceptor;
|
| +
|
| + CrxComponent com1;
|
| + RegisterComponent(&com1, kTestComponent_jebg, Version("0.9"));
|
| + CrxComponent com2;
|
| + RegisterComponent(&com2, kTestComponent_abag, Version("2.2"));
|
| +
|
| + // The first the URL requests info for every registered component.
|
| + const GURL expected_update_url_1(
|
| + "http://localhost/upd?extra=foo&x=id%3D"
|
| + "jebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26uc&x=id%3D"
|
| + "abagagagagagagagagagagagagagagag%26v%3D2.2%26uc");
|
| +
|
| + // The second the URL only requests info for the pinged component.
|
| + const GURL expected_update_url_2(
|
| + "http://localhost/upd?extra=foo&x=id%3D"
|
| + "jebgalgnebhfojomionfpkfelancnnkf%26v%3D0.9%26uc");
|
| +
|
| + interceptor.SetResponse(expected_update_url_1,
|
| + test_file("updatecheck_reply_empty"));
|
| + interceptor.SetResponse(expected_update_url_2,
|
| + test_file("updatecheck_reply_1.xml"));
|
| + interceptor.SetResponse(GURL(expected_crx_url),
|
| + test_file("jebgalgnebhfojomionfpkfelancnnkf.crx"));
|
| +
|
| + test_configurator()->SetLoopCount(1);
|
| + component_updater()->Start();
|
| + message_loop.Run();
|
| +
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error());
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count());
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error());
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count());
|
| +
|
| + // Test success.
|
| +
|
| + // CheckForUpdateSoon also requires a loop to ScheduleNextRun,
|
| + // so we need to reset the component updater. The difference is that
|
| + // it will give preference to checking for work for the single com1.
|
| + component_updater()->Stop();
|
| + test_configurator()->SetLoopCount(1);
|
| + component_updater()->Start();
|
| + EXPECT_EQ(ComponentUpdateService::kOk,
|
| + component_updater()->CheckForUpdateSoon(com1));
|
| + EXPECT_EQ(ComponentUpdateService::kInProgress,
|
| + component_updater()->CheckForUpdateSoon(com2));
|
| + message_loop.Run();
|
| +
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error());
|
| + EXPECT_EQ(1, static_cast<TestInstaller*>(com1.installer)->install_count());
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error());
|
| + EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count());
|
| +
|
| + EXPECT_EQ(4, interceptor.GetHitCount());
|
| +
|
| + ASSERT_EQ(7ul, notification_tracker().size());
|
| +
|
| + TestNotificationTracker::Event ev0= notification_tracker().at(0);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED, ev0.type);
|
| +
|
| + TestNotificationTracker::Event ev1 = notification_tracker().at(1);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev1.type);
|
| +
|
| + TestNotificationTracker::Event ev2 = notification_tracker().at(2);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED, ev2.type);
|
| +
|
| + TestNotificationTracker::Event ev3 = notification_tracker().at(3);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATE_FOUND, ev3.type);
|
| +
|
| + TestNotificationTracker::Event ev4 = notification_tracker().at(4);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATE_READY, ev4.type);
|
| +
|
| + TestNotificationTracker::Event ev5 = notification_tracker().at(5);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATE_COMPLETE, ev5.type);
|
| +
|
| + TestNotificationTracker::Event ev6 = notification_tracker().at(6);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev6.type);
|
| +
|
| + component_updater()->Stop();
|
| +
|
| + // Test a few error cases.
|
| + const GURL expected_update_url_3(
|
| + "http://localhost/upd?extra=foo&x=id%3D"
|
| + "jebgalgnebhfojomionfpkfelancnnkf%26v%3D1.0%26uc");
|
| +
|
| + // No update: error from no server response
|
| + interceptor.SetResponse(expected_update_url_3,
|
| + test_file("updatecheck_reply_empty"));
|
| + notification_tracker().Reset();
|
| + test_configurator()->SetLoopCount(1);
|
| + component_updater()->Start();
|
| + EXPECT_EQ(ComponentUpdateService::kOk,
|
| + component_updater()->CheckForUpdateSoon(com1));
|
| +
|
| + message_loop.Run();
|
| +
|
| + ASSERT_EQ(3ul, notification_tracker().size());
|
| + ev0 = notification_tracker().at(0);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED, ev0.type);
|
| + ev1 = notification_tracker().at(1);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATE_FAILED, ev1.type);
|
| + ev2 = notification_tracker().at(2);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev2.type);
|
| + component_updater()->Stop();
|
| +
|
| + // No update: already updated to 1.0 so nothing new
|
| + interceptor.SetResponse(expected_update_url_3,
|
| + test_file("updatecheck_reply_1.xml"));
|
| + notification_tracker().Reset();
|
| + test_configurator()->SetLoopCount(1);
|
| + component_updater()->Start();
|
| + EXPECT_EQ(ComponentUpdateService::kOk,
|
| + component_updater()->CheckForUpdateSoon(com1));
|
| +
|
| + message_loop.Run();
|
| +
|
| + ASSERT_EQ(3ul, notification_tracker().size());
|
| + ev0 = notification_tracker().at(0);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED, ev0.type);
|
| + ev1 = notification_tracker().at(1);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATE_NOT_UPDATED, ev1.type);
|
| + ev2 = notification_tracker().at(2);
|
| + EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev2.type);
|
| + component_updater()->Stop();
|
| +}
|
|
|