Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: update_attempter_unittest.cc

Issue 6624082: Start action processing asynchronously in UpdateAttempter. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git@master
Patch Set: set to null Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « update_attempter.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « update_attempter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698