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 |