OLD | NEW |
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS 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/file_util.h> | 5 #include <base/file_util.h> |
6 #include <gtest/gtest.h> | 6 #include <gtest/gtest.h> |
7 | 7 |
8 #include "update_engine/action_mock.h" | 8 #include "update_engine/action_mock.h" |
9 #include "update_engine/action_processor_mock.h" | 9 #include "update_engine/action_processor_mock.h" |
10 #include "update_engine/filesystem_copier_action.h" | 10 #include "update_engine/filesystem_copier_action.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 // methods within the class. There're explicit unit tests for the mocked out | 32 // methods within the class. There're explicit unit tests for the mocked out |
33 // methods. | 33 // methods. |
34 class UpdateAttempterUnderTest : public UpdateAttempter { | 34 class UpdateAttempterUnderTest : public UpdateAttempter { |
35 public: | 35 public: |
36 explicit UpdateAttempterUnderTest(MockDbusGlib* dbus) | 36 explicit UpdateAttempterUnderTest(MockDbusGlib* dbus) |
37 : UpdateAttempter(NULL, NULL, dbus) {} | 37 : UpdateAttempter(NULL, NULL, dbus) {} |
38 }; | 38 }; |
39 | 39 |
40 class UpdateAttempterTest : public ::testing::Test { | 40 class UpdateAttempterTest : public ::testing::Test { |
41 protected: | 41 protected: |
42 UpdateAttempterTest() : attempter_(&dbus_) {} | 42 UpdateAttempterTest() : attempter_(&dbus_), loop_(NULL) {} |
43 virtual void SetUp() { | 43 virtual void SetUp() { |
44 EXPECT_EQ(NULL, attempter_.dbus_service_); | 44 EXPECT_EQ(NULL, attempter_.dbus_service_); |
45 EXPECT_EQ(NULL, attempter_.prefs_); | 45 EXPECT_EQ(NULL, attempter_.prefs_); |
46 EXPECT_EQ(NULL, attempter_.metrics_lib_); | 46 EXPECT_EQ(NULL, attempter_.metrics_lib_); |
47 EXPECT_EQ(NULL, attempter_.update_check_scheduler_); | 47 EXPECT_EQ(NULL, attempter_.update_check_scheduler_); |
48 EXPECT_EQ(0, attempter_.http_response_code_); | 48 EXPECT_EQ(0, attempter_.http_response_code_); |
49 EXPECT_EQ(utils::kProcessPriorityNormal, attempter_.priority_); | 49 EXPECT_EQ(utils::kProcessPriorityNormal, attempter_.priority_); |
50 EXPECT_EQ(NULL, attempter_.manage_priority_source_); | 50 EXPECT_EQ(NULL, attempter_.manage_priority_source_); |
51 EXPECT_FALSE(attempter_.download_active_); | 51 EXPECT_FALSE(attempter_.download_active_); |
52 EXPECT_EQ(UPDATE_STATUS_IDLE, attempter_.status_); | 52 EXPECT_EQ(UPDATE_STATUS_IDLE, attempter_.status_); |
53 EXPECT_EQ(0.0, attempter_.download_progress_); | 53 EXPECT_EQ(0.0, attempter_.download_progress_); |
54 EXPECT_EQ(0, attempter_.last_checked_time_); | 54 EXPECT_EQ(0, attempter_.last_checked_time_); |
55 EXPECT_EQ("0.0.0.0", attempter_.new_version_); | 55 EXPECT_EQ("0.0.0.0", attempter_.new_version_); |
56 EXPECT_EQ(0, attempter_.new_size_); | 56 EXPECT_EQ(0, attempter_.new_size_); |
57 EXPECT_FALSE(attempter_.is_full_update_); | 57 EXPECT_FALSE(attempter_.is_full_update_); |
58 processor_ = new ActionProcessorMock(); | 58 processor_ = new ActionProcessorMock(); |
59 attempter_.processor_.reset(processor_); // Transfers ownership. | 59 attempter_.processor_.reset(processor_); // Transfers ownership. |
60 attempter_.prefs_ = &prefs_; | 60 attempter_.prefs_ = &prefs_; |
61 } | 61 } |
62 | 62 |
| 63 void UpdateTestStart(); |
| 64 void UpdateTestVerify(); |
| 65 static gboolean StaticUpdateTestStart(gpointer data); |
| 66 static gboolean StaticUpdateTestVerify(gpointer data); |
| 67 |
63 MockDbusGlib dbus_; | 68 MockDbusGlib dbus_; |
64 UpdateAttempterUnderTest attempter_; | 69 UpdateAttempterUnderTest attempter_; |
65 ActionProcessorMock* processor_; | 70 ActionProcessorMock* processor_; |
66 NiceMock<PrefsMock> prefs_; | 71 NiceMock<PrefsMock> prefs_; |
| 72 GMainLoop* loop_; |
67 }; | 73 }; |
68 | 74 |
69 TEST_F(UpdateAttempterTest, ActionCompletedDownloadTest) { | 75 TEST_F(UpdateAttempterTest, ActionCompletedDownloadTest) { |
70 scoped_ptr<MockHttpFetcher> fetcher(new MockHttpFetcher("", 0, NULL)); | 76 scoped_ptr<MockHttpFetcher> fetcher(new MockHttpFetcher("", 0, NULL)); |
71 fetcher->FailTransfer(503); // Sets the HTTP response code. | 77 fetcher->FailTransfer(503); // Sets the HTTP response code. |
72 DownloadAction action(&prefs_, fetcher.release()); | 78 DownloadAction action(&prefs_, fetcher.release()); |
73 EXPECT_CALL(prefs_, GetInt64(kPrefsDeltaUpdateFailures, _)).Times(0); | 79 EXPECT_CALL(prefs_, GetInt64(kPrefsDeltaUpdateFailures, _)).Times(0); |
74 attempter_.ActionCompleted(NULL, &action, kActionCodeSuccess); | 80 attempter_.ActionCompleted(NULL, &action, kActionCodeSuccess); |
75 EXPECT_EQ(503, attempter_.http_response_code()); | 81 EXPECT_EQ(503, attempter_.http_response_code()); |
76 EXPECT_EQ(UPDATE_STATUS_FINALIZING, attempter_.status()); | 82 EXPECT_EQ(UPDATE_STATUS_FINALIZING, attempter_.status()); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 EXPECT_STREQ("UPDATE_STATUS_FINALIZING", | 226 EXPECT_STREQ("UPDATE_STATUS_FINALIZING", |
221 UpdateStatusToString(UPDATE_STATUS_FINALIZING)); | 227 UpdateStatusToString(UPDATE_STATUS_FINALIZING)); |
222 EXPECT_STREQ("UPDATE_STATUS_UPDATED_NEED_REBOOT", | 228 EXPECT_STREQ("UPDATE_STATUS_UPDATED_NEED_REBOOT", |
223 UpdateStatusToString(UPDATE_STATUS_UPDATED_NEED_REBOOT)); | 229 UpdateStatusToString(UPDATE_STATUS_UPDATED_NEED_REBOOT)); |
224 EXPECT_STREQ("UPDATE_STATUS_REPORTING_ERROR_EVENT", | 230 EXPECT_STREQ("UPDATE_STATUS_REPORTING_ERROR_EVENT", |
225 UpdateStatusToString(UPDATE_STATUS_REPORTING_ERROR_EVENT)); | 231 UpdateStatusToString(UPDATE_STATUS_REPORTING_ERROR_EVENT)); |
226 EXPECT_STREQ("unknown status", | 232 EXPECT_STREQ("unknown status", |
227 UpdateStatusToString(static_cast<UpdateStatus>(-1))); | 233 UpdateStatusToString(static_cast<UpdateStatus>(-1))); |
228 } | 234 } |
229 | 235 |
230 TEST_F(UpdateAttempterTest, UpdateTest) { | 236 gboolean UpdateAttempterTest::StaticUpdateTestStart(gpointer data) { |
| 237 reinterpret_cast<UpdateAttempterTest*>(data)->UpdateTestStart(); |
| 238 return FALSE; |
| 239 } |
| 240 |
| 241 gboolean UpdateAttempterTest::StaticUpdateTestVerify(gpointer data) { |
| 242 reinterpret_cast<UpdateAttempterTest*>(data)->UpdateTestVerify(); |
| 243 return FALSE; |
| 244 } |
| 245 |
| 246 namespace { |
| 247 const string kActionTypes[] = { |
| 248 OmahaRequestAction::StaticType(), |
| 249 OmahaResponseHandlerAction::StaticType(), |
| 250 FilesystemCopierAction::StaticType(), |
| 251 FilesystemCopierAction::StaticType(), |
| 252 OmahaRequestAction::StaticType(), |
| 253 DownloadAction::StaticType(), |
| 254 OmahaRequestAction::StaticType(), |
| 255 FilesystemCopierAction::StaticType(), |
| 256 FilesystemCopierAction::StaticType(), |
| 257 PostinstallRunnerAction::StaticType(), |
| 258 OmahaRequestAction::StaticType() |
| 259 }; |
| 260 } // namespace {} |
| 261 |
| 262 void UpdateAttempterTest::UpdateTestStart() { |
231 attempter_.set_http_response_code(200); | 263 attempter_.set_http_response_code(200); |
232 InSequence s; | 264 InSequence s; |
233 const string kActionTypes[] = { | |
234 OmahaRequestAction::StaticType(), | |
235 OmahaResponseHandlerAction::StaticType(), | |
236 FilesystemCopierAction::StaticType(), | |
237 FilesystemCopierAction::StaticType(), | |
238 OmahaRequestAction::StaticType(), | |
239 DownloadAction::StaticType(), | |
240 OmahaRequestAction::StaticType(), | |
241 FilesystemCopierAction::StaticType(), | |
242 FilesystemCopierAction::StaticType(), | |
243 PostinstallRunnerAction::StaticType(), | |
244 OmahaRequestAction::StaticType() | |
245 }; | |
246 for (size_t i = 0; i < arraysize(kActionTypes); ++i) { | 265 for (size_t i = 0; i < arraysize(kActionTypes); ++i) { |
247 EXPECT_CALL(*processor_, | 266 EXPECT_CALL(*processor_, |
248 EnqueueAction(Property(&AbstractAction::Type, | 267 EnqueueAction(Property(&AbstractAction::Type, |
249 kActionTypes[i]))).Times(1); | 268 kActionTypes[i]))).Times(1); |
250 } | 269 } |
251 EXPECT_CALL(*processor_, StartProcessing()).Times(1); | 270 EXPECT_CALL(*processor_, StartProcessing()).Times(1); |
252 | 271 |
253 attempter_.Update("", "", false); | 272 attempter_.Update("", "", false); |
| 273 g_idle_add(&StaticUpdateTestVerify, this); |
| 274 } |
254 | 275 |
| 276 void UpdateAttempterTest::UpdateTestVerify() { |
255 EXPECT_EQ(0, attempter_.http_response_code()); | 277 EXPECT_EQ(0, attempter_.http_response_code()); |
256 EXPECT_EQ(&attempter_, processor_->delegate()); | 278 EXPECT_EQ(&attempter_, processor_->delegate()); |
257 EXPECT_EQ(arraysize(kActionTypes), attempter_.actions_.size()); | 279 EXPECT_EQ(arraysize(kActionTypes), attempter_.actions_.size()); |
258 for (size_t i = 0; i < arraysize(kActionTypes); ++i) { | 280 for (size_t i = 0; i < arraysize(kActionTypes); ++i) { |
259 EXPECT_EQ(kActionTypes[i], attempter_.actions_[i]->Type()); | 281 EXPECT_EQ(kActionTypes[i], attempter_.actions_[i]->Type()); |
260 } | 282 } |
261 EXPECT_EQ(attempter_.response_handler_action_.get(), | 283 EXPECT_EQ(attempter_.response_handler_action_.get(), |
262 attempter_.actions_[1].get()); | 284 attempter_.actions_[1].get()); |
263 DownloadAction* download_action = | 285 DownloadAction* download_action = |
264 dynamic_cast<DownloadAction*>(attempter_.actions_[5].get()); | 286 dynamic_cast<DownloadAction*>(attempter_.actions_[5].get()); |
265 ASSERT_TRUE(download_action != NULL); | 287 ASSERT_TRUE(download_action != NULL); |
266 EXPECT_EQ(&attempter_, download_action->delegate()); | 288 EXPECT_EQ(&attempter_, download_action->delegate()); |
267 EXPECT_EQ(UPDATE_STATUS_CHECKING_FOR_UPDATE, attempter_.status()); | 289 EXPECT_EQ(UPDATE_STATUS_CHECKING_FOR_UPDATE, attempter_.status()); |
| 290 g_main_loop_quit(loop_); |
| 291 } |
| 292 |
| 293 TEST_F(UpdateAttempterTest, UpdateTest) { |
| 294 loop_ = g_main_loop_new(g_main_context_default(), FALSE); |
| 295 g_idle_add(&StaticUpdateTestStart, this); |
| 296 g_main_loop_run(loop_); |
| 297 g_main_loop_unref(loop_); |
| 298 loop_ = NULL; |
268 } | 299 } |
269 | 300 |
270 } // namespace chromeos_update_engine | 301 } // namespace chromeos_update_engine |
OLD | NEW |