| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/message_loop.h" | 5 #include "base/message_loop.h" |
| 6 #include "chrome/browser/chromeos/cros/mock_network_library.h" | 6 #include "chrome/browser/chromeos/cros/mock_network_library.h" |
| 7 #include "chrome/browser/chromeos/cros/mock_update_library.h" | |
| 8 #include "chrome/browser/chromeos/dbus/mock_dbus_thread_manager.h" | 7 #include "chrome/browser/chromeos/dbus/mock_dbus_thread_manager.h" |
| 9 #include "chrome/browser/chromeos/dbus/mock_session_manager_client.h" | 8 #include "chrome/browser/chromeos/dbus/mock_session_manager_client.h" |
| 9 #include "chrome/browser/chromeos/dbus/mock_update_engine_client.h" |
| 10 #include "chrome/browser/chromeos/login/mock_screen_observer.h" | 10 #include "chrome/browser/chromeos/login/mock_screen_observer.h" |
| 11 #include "chrome/browser/chromeos/login/update_screen.h" | 11 #include "chrome/browser/chromeos/login/update_screen.h" |
| 12 #include "chrome/browser/chromeos/login/wizard_controller.h" | 12 #include "chrome/browser/chromeos/login/wizard_controller.h" |
| 13 #include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" | 13 #include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 namespace chromeos { | 16 namespace chromeos { |
| 17 using ::testing::_; | 17 using ::testing::_; |
| 18 using ::testing::AnyNumber; | 18 using ::testing::AnyNumber; |
| 19 using ::testing::AtLeast; | 19 using ::testing::AtLeast; |
| 20 using ::testing::Return; | 20 using ::testing::Return; |
| 21 using ::testing::ReturnRef; | 21 using ::testing::ReturnRef; |
| 22 using ::testing::Invoke; | 22 using ::testing::Invoke; |
| 23 using chromeos::UpdateEngineClient; |
| 23 | 24 |
| 24 static void RequestUpdateCheckSuccess(UpdateCallback callback, void* userdata) { | 25 static void RequestUpdateCheckSuccess( |
| 25 callback(userdata, chromeos::UPDATE_RESULT_SUCCESS, NULL); | 26 UpdateEngineClient::UpdateCheckCallback callback) { |
| 27 callback.Run(UpdateEngineClient::UPDATE_RESULT_SUCCESS); |
| 26 } | 28 } |
| 27 | 29 |
| 28 class UpdateScreenTest : public WizardInProcessBrowserTest { | 30 class UpdateScreenTest : public WizardInProcessBrowserTest { |
| 29 public: | 31 public: |
| 30 UpdateScreenTest() : WizardInProcessBrowserTest("update"), | 32 UpdateScreenTest() : WizardInProcessBrowserTest("update"), |
| 31 mock_update_library_(NULL), | 33 mock_update_engine_client_(NULL), |
| 32 mock_network_library_(NULL) {} | 34 mock_network_library_(NULL) {} |
| 33 | 35 |
| 34 protected: | 36 protected: |
| 35 virtual void SetUpInProcessBrowserTestFixture() { | 37 virtual void SetUpInProcessBrowserTestFixture() { |
| 36 MockDBusThreadManager* mock_dbus_thread_manager = | 38 MockDBusThreadManager* mock_dbus_thread_manager = |
| 37 new MockDBusThreadManager; | 39 new MockDBusThreadManager; |
| 38 DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); | 40 DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); |
| 39 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); | 41 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
| 40 cros_mock_->InitStatusAreaMocks(); | 42 cros_mock_->InitStatusAreaMocks(); |
| 41 cros_mock_->SetStatusAreaMocksExpectations(); | 43 cros_mock_->SetStatusAreaMocksExpectations(); |
| 42 | 44 |
| 43 MockSessionManagerClient* mock_session_manager_client | 45 MockSessionManagerClient* mock_session_manager_client |
| 44 = mock_dbus_thread_manager->mock_session_manager_client(); | 46 = mock_dbus_thread_manager->mock_session_manager_client(); |
| 45 EXPECT_CALL(*mock_session_manager_client, EmitLoginPromptReady()) | 47 EXPECT_CALL(*mock_session_manager_client, EmitLoginPromptReady()) |
| 46 .Times(1); | 48 .Times(1); |
| 47 | 49 |
| 48 mock_update_library_ = new MockUpdateLibrary(); | 50 mock_update_engine_client_ |
| 49 cros_mock_->test_api()->SetUpdateLibrary(mock_update_library_, true); | 51 = mock_dbus_thread_manager->mock_update_engine_client(); |
| 50 | 52 |
| 51 // UpdateScreen::StartUpdate() will be called by the WizardController | 53 // UpdateScreen::StartUpdate() will be called by the WizardController |
| 52 // just after creating the update screen, so the expectations for that | 54 // just after creating the update screen, so the expectations for that |
| 53 // should be set up here. | 55 // should be set up here. |
| 54 EXPECT_CALL(*mock_update_library_, AddObserver(_)) | 56 EXPECT_CALL(*mock_update_engine_client_, AddObserver(_)) |
| 55 .Times(AtLeast(1)); | 57 .Times(AtLeast(1)); |
| 56 EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) | 58 EXPECT_CALL(*mock_update_engine_client_, RemoveObserver(_)) |
| 57 .Times(AtLeast(1)); | 59 .Times(AtLeast(1)); |
| 58 EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_)) | 60 EXPECT_CALL(*mock_update_engine_client_, RequestUpdateCheck(_)) |
| 59 .Times(1) | 61 .Times(1) |
| 60 .WillOnce(Invoke(RequestUpdateCheckSuccess)); | 62 .WillOnce(Invoke(RequestUpdateCheckSuccess)); |
| 61 | 63 |
| 62 mock_network_library_ = cros_mock_->mock_network_library(); | 64 mock_network_library_ = cros_mock_->mock_network_library(); |
| 63 EXPECT_CALL(*mock_network_library_, Connected()) | 65 EXPECT_CALL(*mock_network_library_, Connected()) |
| 64 .Times(1) // also called by NetworkMenu::InitMenuItems() | 66 .Times(1) // also called by NetworkMenu::InitMenuItems() |
| 65 .WillRepeatedly((Return(false))) | 67 .WillRepeatedly((Return(false))) |
| 66 .RetiresOnSaturation(); | 68 .RetiresOnSaturation(); |
| 67 EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_)) | 69 EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_)) |
| 68 .Times(1) | 70 .Times(1) |
| 69 .RetiresOnSaturation(); | 71 .RetiresOnSaturation(); |
| 70 EXPECT_CALL(*mock_network_library_, FindWifiDevice()) | 72 EXPECT_CALL(*mock_network_library_, FindWifiDevice()) |
| 71 .Times(AnyNumber()); | 73 .Times(AnyNumber()); |
| 72 EXPECT_CALL(*mock_network_library_, FindEthernetDevice()) | 74 EXPECT_CALL(*mock_network_library_, FindEthernetDevice()) |
| 73 .Times(AnyNumber()); | 75 .Times(AnyNumber()); |
| 74 } | 76 } |
| 75 | 77 |
| 76 virtual void SetUpOnMainThread() { | 78 virtual void SetUpOnMainThread() { |
| 77 mock_screen_observer_.reset(new MockScreenObserver()); | 79 mock_screen_observer_.reset(new MockScreenObserver()); |
| 78 ASSERT_TRUE(controller() != NULL); | 80 ASSERT_TRUE(controller() != NULL); |
| 79 update_screen_ = controller()->GetUpdateScreen(); | 81 update_screen_ = controller()->GetUpdateScreen(); |
| 80 ASSERT_TRUE(update_screen_ != NULL); | 82 ASSERT_TRUE(update_screen_ != NULL); |
| 81 ASSERT_EQ(controller()->current_screen(), update_screen_); | 83 ASSERT_EQ(controller()->current_screen(), update_screen_); |
| 82 update_screen_->screen_observer_ = mock_screen_observer_.get(); | 84 update_screen_->screen_observer_ = mock_screen_observer_.get(); |
| 83 } | 85 } |
| 84 | 86 |
| 85 virtual void TearDownInProcessBrowserTestFixture() { | 87 virtual void TearDownInProcessBrowserTestFixture() { |
| 86 update_screen_->screen_observer_ = (controller()); | 88 update_screen_->screen_observer_ = (controller()); |
| 87 cros_mock_->test_api()->SetUpdateLibrary(NULL, true); | |
| 88 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); | 89 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
| 89 DBusThreadManager::Shutdown(); | 90 DBusThreadManager::Shutdown(); |
| 90 } | 91 } |
| 91 | 92 |
| 92 MockUpdateLibrary* mock_update_library_; | 93 MockUpdateEngineClient* mock_update_engine_client_; |
| 93 MockNetworkLibrary* mock_network_library_; | 94 MockNetworkLibrary* mock_network_library_; |
| 94 | 95 |
| 95 scoped_ptr<MockScreenObserver> mock_screen_observer_; | 96 scoped_ptr<MockScreenObserver> mock_screen_observer_; |
| 96 UpdateScreen* update_screen_; | 97 UpdateScreen* update_screen_; |
| 97 | 98 |
| 98 private: | 99 private: |
| 99 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); | 100 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); |
| 100 }; | 101 }; |
| 101 | 102 |
| 102 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { | 103 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { |
| 103 ASSERT_TRUE(update_screen_->actor_ != NULL); | 104 ASSERT_TRUE(update_screen_->actor_ != NULL); |
| 104 } | 105 } |
| 105 | 106 |
| 106 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { | 107 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { |
| 107 update_screen_->SetIgnoreIdleStatus(true); | 108 update_screen_->SetIgnoreIdleStatus(true); |
| 108 UpdateLibrary::Status status; | 109 UpdateEngineClient::Status status; |
| 109 status.status = UPDATE_STATUS_IDLE; | 110 status.status = UpdateEngineClient::UPDATE_STATUS_IDLE; |
| 110 update_screen_->UpdateStatusChanged(status); | 111 update_screen_->UpdateStatusChanged(status); |
| 111 status.status = UPDATE_STATUS_CHECKING_FOR_UPDATE; | 112 status.status = UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE; |
| 112 update_screen_->UpdateStatusChanged(status); | 113 update_screen_->UpdateStatusChanged(status); |
| 113 status.status = UPDATE_STATUS_IDLE; | 114 status.status = UpdateEngineClient::UPDATE_STATUS_IDLE; |
| 114 // status() will be called via ExitUpdate() called from | 115 // GetLastStatus() will be called via ExitUpdate() called from |
| 115 // UpdateStatusChanged(). | 116 // UpdateStatusChanged(). |
| 116 EXPECT_CALL(*mock_update_library_, status()) | 117 EXPECT_CALL(*mock_update_engine_client_, GetLastStatus()) |
| 117 .Times(AtLeast(1)) | 118 .Times(AtLeast(1)) |
| 118 .WillRepeatedly(ReturnRef(status)); | 119 .WillRepeatedly(Return(status)); |
| 119 EXPECT_CALL(*mock_screen_observer_, OnExit(ScreenObserver::UPDATE_NOUPDATE)) | 120 EXPECT_CALL(*mock_screen_observer_, OnExit(ScreenObserver::UPDATE_NOUPDATE)) |
| 120 .Times(1); | 121 .Times(1); |
| 121 update_screen_->UpdateStatusChanged(status); | 122 update_screen_->UpdateStatusChanged(status); |
| 122 } | 123 } |
| 123 | 124 |
| 124 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { | 125 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { |
| 125 update_screen_->is_ignore_update_deadlines_ = true; | 126 update_screen_->is_ignore_update_deadlines_ = true; |
| 126 | 127 |
| 127 UpdateLibrary::Status status; | 128 UpdateEngineClient::Status status; |
| 128 status.status = UPDATE_STATUS_UPDATE_AVAILABLE; | 129 status.status = UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE; |
| 129 status.new_version = "latest and greatest"; | 130 status.new_version = "latest and greatest"; |
| 130 update_screen_->UpdateStatusChanged(status); | 131 update_screen_->UpdateStatusChanged(status); |
| 131 | 132 |
| 132 status.status = UPDATE_STATUS_DOWNLOADING; | 133 status.status = UpdateEngineClient::UPDATE_STATUS_DOWNLOADING; |
| 133 status.download_progress = 0.0; | 134 status.download_progress = 0.0; |
| 134 update_screen_->UpdateStatusChanged(status); | 135 update_screen_->UpdateStatusChanged(status); |
| 135 | 136 |
| 136 status.download_progress = 0.5; | 137 status.download_progress = 0.5; |
| 137 update_screen_->UpdateStatusChanged(status); | 138 update_screen_->UpdateStatusChanged(status); |
| 138 | 139 |
| 139 status.download_progress = 1.0; | 140 status.download_progress = 1.0; |
| 140 update_screen_->UpdateStatusChanged(status); | 141 update_screen_->UpdateStatusChanged(status); |
| 141 | 142 |
| 142 status.status = UPDATE_STATUS_VERIFYING; | 143 status.status = UpdateEngineClient::UPDATE_STATUS_VERIFYING; |
| 143 update_screen_->UpdateStatusChanged(status); | 144 update_screen_->UpdateStatusChanged(status); |
| 144 | 145 |
| 145 status.status = UPDATE_STATUS_FINALIZING; | 146 status.status = UpdateEngineClient::UPDATE_STATUS_FINALIZING; |
| 146 update_screen_->UpdateStatusChanged(status); | 147 update_screen_->UpdateStatusChanged(status); |
| 147 | 148 |
| 148 status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT; | 149 status.status = UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT; |
| 149 EXPECT_CALL(*mock_update_library_, RebootAfterUpdate()) | 150 EXPECT_CALL(*mock_update_engine_client_, RebootAfterUpdate()) |
| 150 .Times(1); | 151 .Times(1); |
| 151 update_screen_->UpdateStatusChanged(status); | 152 update_screen_->UpdateStatusChanged(status); |
| 152 } | 153 } |
| 153 | 154 |
| 154 static void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) { | 155 static void RequestUpdateCheckFail( |
| 155 callback(userdata, chromeos::UPDATE_RESULT_FAILED, NULL); | 156 UpdateEngineClient::UpdateCheckCallback callback) { |
| 157 callback.Run(chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); |
| 156 } | 158 } |
| 157 | 159 |
| 158 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { | 160 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { |
| 159 // First, cancel the update that is already in progress. | 161 // First, cancel the update that is already in progress. |
| 160 EXPECT_CALL(*mock_screen_observer_, | 162 EXPECT_CALL(*mock_screen_observer_, |
| 161 OnExit(ScreenObserver::UPDATE_NOUPDATE)) | 163 OnExit(ScreenObserver::UPDATE_NOUPDATE)) |
| 162 .Times(1); | 164 .Times(1); |
| 163 update_screen_->CancelUpdate(); | 165 update_screen_->CancelUpdate(); |
| 164 | 166 |
| 165 // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail | 167 // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail |
| 166 // issuing the update check this time. | 168 // issuing the update check this time. |
| 167 EXPECT_CALL(*mock_update_library_, AddObserver(_)) | 169 EXPECT_CALL(*mock_update_engine_client_, AddObserver(_)) |
| 168 .Times(1); | 170 .Times(1); |
| 169 EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) | 171 EXPECT_CALL(*mock_update_engine_client_, RemoveObserver(_)) |
| 170 .Times(AtLeast(1)); | 172 .Times(AtLeast(1)); |
| 171 EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_)) | 173 EXPECT_CALL(*mock_update_engine_client_, RequestUpdateCheck(_)) |
| 172 .Times(1) | 174 .Times(1) |
| 173 .WillOnce(Invoke(RequestUpdateCheckFail)); | 175 .WillOnce(Invoke(RequestUpdateCheckFail)); |
| 174 EXPECT_CALL(*mock_screen_observer_, | 176 EXPECT_CALL(*mock_screen_observer_, |
| 175 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) | 177 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
| 176 .Times(1); | 178 .Times(1); |
| 177 update_screen_->StartUpdate(); | 179 update_screen_->StartUpdate(); |
| 178 } | 180 } |
| 179 | 181 |
| 180 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { | 182 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { |
| 181 UpdateLibrary::Status status; | 183 UpdateEngineClient::Status status; |
| 182 status.status = UPDATE_STATUS_ERROR; | 184 status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; |
| 183 // status() will be called via ExitUpdate() called from | 185 // GetLastStatus() will be called via ExitUpdate() called from |
| 184 // UpdateStatusChanged(). | 186 // UpdateStatusChanged(). |
| 185 EXPECT_CALL(*mock_update_library_, status()) | 187 EXPECT_CALL(*mock_update_engine_client_, GetLastStatus()) |
| 186 .Times(AtLeast(1)) | 188 .Times(AtLeast(1)) |
| 187 .WillRepeatedly(ReturnRef(status)); | 189 .WillRepeatedly(Return(status)); |
| 188 EXPECT_CALL(*mock_screen_observer_, | 190 EXPECT_CALL(*mock_screen_observer_, |
| 189 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) | 191 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
| 190 .Times(1); | 192 .Times(1); |
| 191 update_screen_->UpdateStatusChanged(status); | 193 update_screen_->UpdateStatusChanged(status); |
| 192 } | 194 } |
| 193 | 195 |
| 194 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { | 196 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { |
| 195 UpdateLibrary::Status status; | 197 UpdateEngineClient::Status status; |
| 196 status.status = UPDATE_STATUS_UPDATE_AVAILABLE; | 198 status.status = UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE; |
| 197 status.new_version = "latest and greatest"; | 199 status.new_version = "latest and greatest"; |
| 198 // status() will be called via ExitUpdate() called from | 200 // GetLastStatus() will be called via ExitUpdate() called from |
| 199 // UpdateStatusChanged(). | 201 // UpdateStatusChanged(). |
| 200 EXPECT_CALL(*mock_update_library_, status()) | 202 EXPECT_CALL(*mock_update_engine_client_, GetLastStatus()) |
| 201 .Times(AtLeast(1)) | 203 .Times(AtLeast(1)) |
| 202 .WillRepeatedly(ReturnRef(status)); | 204 .WillRepeatedly(Return(status)); |
| 203 update_screen_->UpdateStatusChanged(status); | 205 update_screen_->UpdateStatusChanged(status); |
| 204 | 206 |
| 205 status.status = UPDATE_STATUS_ERROR; | 207 status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; |
| 206 // status() will be called via ExitUpdate() called from | 208 // GetLastStatus() will be called via ExitUpdate() called from |
| 207 // UpdateStatusChanged(). | 209 // UpdateStatusChanged(). |
| 208 EXPECT_CALL(*mock_update_library_, status()) | 210 EXPECT_CALL(*mock_update_engine_client_, GetLastStatus()) |
| 209 .Times(AtLeast(1)) | 211 .Times(AtLeast(1)) |
| 210 .WillRepeatedly(ReturnRef(status)); | 212 .WillRepeatedly(Return(status)); |
| 211 EXPECT_CALL(*mock_screen_observer_, | 213 EXPECT_CALL(*mock_screen_observer_, |
| 212 OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) | 214 OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) |
| 213 .Times(1); | 215 .Times(1); |
| 214 update_screen_->UpdateStatusChanged(status); | 216 update_screen_->UpdateStatusChanged(status); |
| 215 } | 217 } |
| 216 | 218 |
| 217 } // namespace chromeos | 219 } // namespace chromeos |
| OLD | NEW |