| 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 |