| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/chromeos/cros/mock_login_library.h" |
| 6 #include "chrome/browser/chromeos/cros/mock_update_library.h" |
| 7 #include "chrome/browser/chromeos/login/mock_screen_observer.h" |
| 8 #include "chrome/browser/chromeos/login/update_screen.h" |
| 9 #include "chrome/browser/chromeos/login/wizard_controller.h" |
| 10 #include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 |
| 13 namespace chromeos { |
| 14 using ::testing::_; |
| 15 using ::testing::AtLeast; |
| 16 using ::testing::Return; |
| 17 using ::testing::ReturnRef; |
| 18 |
| 19 class UpdateScreenTest : public WizardInProcessBrowserTest { |
| 20 public: |
| 21 UpdateScreenTest() : WizardInProcessBrowserTest("update"), |
| 22 mock_login_library_(NULL), |
| 23 mock_update_library_(NULL) {} |
| 24 |
| 25 protected: |
| 26 virtual void SetUpInProcessBrowserTestFixture() { |
| 27 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
| 28 cros_mock_->InitStatusAreaMocks(); |
| 29 cros_mock_->SetStatusAreaMocksExpectations(); |
| 30 ASSERT_TRUE(CrosLibrary::Get()->EnsureLoaded()); |
| 31 |
| 32 mock_login_library_ = new MockLoginLibrary(); |
| 33 cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true); |
| 34 EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady()) |
| 35 .Times(1); |
| 36 |
| 37 mock_update_library_ = new MockUpdateLibrary(); |
| 38 cros_mock_->test_api()->SetUpdateLibrary(mock_update_library_, true); |
| 39 |
| 40 // UpdateScreen::StartUpdate() will be called by the WizardController |
| 41 // just after creating the update screen, so the expectations for that |
| 42 // should be set up here. |
| 43 EXPECT_CALL(*mock_update_library_, AddObserver(_)) |
| 44 .Times(1); |
| 45 EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) |
| 46 .Times(AtLeast(1)); |
| 47 EXPECT_CALL(*mock_update_library_, CheckForUpdate()) |
| 48 .Times(1) |
| 49 .WillOnce(Return(true)); |
| 50 } |
| 51 |
| 52 virtual void TearDownInProcessBrowserTestFixture() { |
| 53 cros_mock_->test_api()->SetUpdateLibrary(NULL, true); |
| 54 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
| 55 } |
| 56 |
| 57 MockLoginLibrary* mock_login_library_; |
| 58 MockUpdateLibrary* mock_update_library_; |
| 59 |
| 60 private: |
| 61 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); |
| 62 }; |
| 63 |
| 64 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { |
| 65 ASSERT_TRUE(controller() != NULL); |
| 66 scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
| 67 controller()->set_observer(mock_screen_observer.get()); |
| 68 UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
| 69 ASSERT_TRUE(update_screen != NULL); |
| 70 ASSERT_EQ(controller()->current_screen(), update_screen); |
| 71 UpdateView* update_view = update_screen->view(); |
| 72 ASSERT_TRUE(update_view != NULL); |
| 73 controller()->set_observer(NULL); |
| 74 } |
| 75 |
| 76 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { |
| 77 ASSERT_TRUE(controller() != NULL); |
| 78 scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
| 79 controller()->set_observer(mock_screen_observer.get()); |
| 80 UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
| 81 ASSERT_TRUE(update_screen != NULL); |
| 82 ASSERT_EQ(controller()->current_screen(), update_screen); |
| 83 update_screen->SetMinimalUpdateTime(0); |
| 84 |
| 85 UpdateLibrary::Status status; |
| 86 status.status = UPDATE_STATUS_IDLE; |
| 87 EXPECT_CALL(*mock_update_library_, status()) |
| 88 .Times(AtLeast(1)) |
| 89 .WillRepeatedly(ReturnRef(status)); |
| 90 EXPECT_CALL(*mock_screen_observer, OnExit(ScreenObserver::UPDATE_NOUPDATE)) |
| 91 .Times(1); |
| 92 update_screen->UpdateStatusChanged(mock_update_library_); |
| 93 |
| 94 controller()->set_observer(NULL); |
| 95 } |
| 96 |
| 97 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { |
| 98 ASSERT_TRUE(controller() != NULL); |
| 99 scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
| 100 controller()->set_observer(mock_screen_observer.get()); |
| 101 UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
| 102 ASSERT_TRUE(update_screen != NULL); |
| 103 ASSERT_EQ(controller()->current_screen(), update_screen); |
| 104 update_screen->SetMinimalUpdateTime(0); |
| 105 |
| 106 UpdateLibrary::Status status; |
| 107 |
| 108 status.status = UPDATE_STATUS_UPDATE_AVAILABLE; |
| 109 status.new_version = "latest and greatest"; |
| 110 EXPECT_CALL(*mock_update_library_, status()) |
| 111 .Times(AtLeast(1)) |
| 112 .WillRepeatedly(ReturnRef(status)); |
| 113 update_screen->UpdateStatusChanged(mock_update_library_); |
| 114 |
| 115 status.status = UPDATE_STATUS_DOWNLOADING; |
| 116 status.download_progress = 0.0; |
| 117 EXPECT_CALL(*mock_update_library_, status()) |
| 118 .Times(AtLeast(1)) |
| 119 .WillRepeatedly(ReturnRef(status)); |
| 120 update_screen->UpdateStatusChanged(mock_update_library_); |
| 121 |
| 122 status.download_progress = 0.5; |
| 123 EXPECT_CALL(*mock_update_library_, status()) |
| 124 .Times(AtLeast(1)) |
| 125 .WillRepeatedly(ReturnRef(status)); |
| 126 update_screen->UpdateStatusChanged(mock_update_library_); |
| 127 |
| 128 status.download_progress = 1.0; |
| 129 EXPECT_CALL(*mock_update_library_, status()) |
| 130 .Times(AtLeast(1)) |
| 131 .WillRepeatedly(ReturnRef(status)); |
| 132 update_screen->UpdateStatusChanged(mock_update_library_); |
| 133 |
| 134 status.status = UPDATE_STATUS_VERIFYING; |
| 135 EXPECT_CALL(*mock_update_library_, status()) |
| 136 .Times(AtLeast(1)) |
| 137 .WillRepeatedly(ReturnRef(status)); |
| 138 update_screen->UpdateStatusChanged(mock_update_library_); |
| 139 |
| 140 status.status = UPDATE_STATUS_FINALIZING; |
| 141 EXPECT_CALL(*mock_update_library_, status()) |
| 142 .Times(AtLeast(1)) |
| 143 .WillRepeatedly(ReturnRef(status)); |
| 144 update_screen->UpdateStatusChanged(mock_update_library_); |
| 145 |
| 146 status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT; |
| 147 EXPECT_CALL(*mock_update_library_, status()) |
| 148 .Times(AtLeast(1)) |
| 149 .WillRepeatedly(ReturnRef(status)); |
| 150 EXPECT_CALL(*mock_update_library_, RebootAfterUpdate()) |
| 151 .Times(1); |
| 152 update_screen->UpdateStatusChanged(mock_update_library_); |
| 153 |
| 154 controller()->set_observer(NULL); |
| 155 } |
| 156 |
| 157 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { |
| 158 ASSERT_TRUE(controller() != NULL); |
| 159 scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
| 160 controller()->set_observer(mock_screen_observer.get()); |
| 161 UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
| 162 ASSERT_TRUE(update_screen != NULL); |
| 163 ASSERT_EQ(controller()->current_screen(), update_screen); |
| 164 update_screen->SetMinimalUpdateTime(0); |
| 165 |
| 166 UpdateLibrary::Status status; |
| 167 |
| 168 // First, cancel the update that is already in progress. |
| 169 EXPECT_CALL(*mock_update_library_, status()) |
| 170 .Times(AtLeast(1)) |
| 171 .WillRepeatedly(ReturnRef(status)); |
| 172 update_screen->CancelUpdate(); |
| 173 |
| 174 // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail |
| 175 // issuing the update check this time. |
| 176 EXPECT_CALL(*mock_update_library_, AddObserver(_)) |
| 177 .Times(1); |
| 178 EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) |
| 179 .Times(AtLeast(1)); |
| 180 EXPECT_CALL(*mock_update_library_, CheckForUpdate()) |
| 181 .Times(1) |
| 182 .WillOnce(Return(false)); |
| 183 |
| 184 status.status = UPDATE_STATUS_ERROR; |
| 185 EXPECT_CALL(*mock_update_library_, status()) |
| 186 .Times(AtLeast(1)) |
| 187 .WillRepeatedly(ReturnRef(status)); |
| 188 EXPECT_CALL(*mock_screen_observer, |
| 189 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
| 190 .Times(1); |
| 191 update_screen->StartUpdate(); |
| 192 |
| 193 controller()->set_observer(NULL); |
| 194 } |
| 195 |
| 196 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { |
| 197 ASSERT_TRUE(controller() != NULL); |
| 198 scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
| 199 controller()->set_observer(mock_screen_observer.get()); |
| 200 UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
| 201 ASSERT_TRUE(update_screen != NULL); |
| 202 ASSERT_EQ(controller()->current_screen(), update_screen); |
| 203 update_screen->SetMinimalUpdateTime(0); |
| 204 |
| 205 UpdateLibrary::Status status; |
| 206 status.status = UPDATE_STATUS_ERROR; |
| 207 EXPECT_CALL(*mock_update_library_, status()) |
| 208 .Times(AtLeast(1)) |
| 209 .WillRepeatedly(ReturnRef(status)); |
| 210 EXPECT_CALL(*mock_screen_observer, |
| 211 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
| 212 .Times(1); |
| 213 update_screen->UpdateStatusChanged(mock_update_library_); |
| 214 |
| 215 controller()->set_observer(NULL); |
| 216 } |
| 217 |
| 218 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { |
| 219 ASSERT_TRUE(controller() != NULL); |
| 220 scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
| 221 controller()->set_observer(mock_screen_observer.get()); |
| 222 UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
| 223 ASSERT_TRUE(update_screen != NULL); |
| 224 ASSERT_EQ(controller()->current_screen(), update_screen); |
| 225 update_screen->SetMinimalUpdateTime(0); |
| 226 |
| 227 UpdateLibrary::Status status; |
| 228 |
| 229 status.status = UPDATE_STATUS_UPDATE_AVAILABLE; |
| 230 status.new_version = "latest and greatest"; |
| 231 EXPECT_CALL(*mock_update_library_, status()) |
| 232 .Times(AtLeast(1)) |
| 233 .WillRepeatedly(ReturnRef(status)); |
| 234 update_screen->UpdateStatusChanged(mock_update_library_); |
| 235 |
| 236 status.status = UPDATE_STATUS_ERROR; |
| 237 EXPECT_CALL(*mock_update_library_, status()) |
| 238 .Times(AtLeast(1)) |
| 239 .WillRepeatedly(ReturnRef(status)); |
| 240 EXPECT_CALL(*mock_screen_observer, |
| 241 OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) |
| 242 .Times(1); |
| 243 update_screen->UpdateStatusChanged(mock_update_library_); |
| 244 |
| 245 controller()->set_observer(NULL); |
| 246 } |
| 247 |
| 248 } // namespace chromeos |
| OLD | NEW |