diff --git a/update_attempter_unittest.cc b/update_attempter_unittest.cc
index a65ffea..6d61c4e 100644
--- a/update_attempter_unittest.cc
+++ b/update_attempter_unittest.cc
@@ -9,9 +9,12 @@
 #include "update_engine/action_processor_mock.h"
 #include "update_engine/filesystem_copier_action.h"
 #include "update_engine/mock_dbus_interface.h"
+#include "update_engine/mock_http_fetcher.h"
 #include "update_engine/postinstall_runner_action.h"
 #include "update_engine/prefs_mock.h"
+#include "update_engine/test_utils.h"
 #include "update_engine/update_attempter.h"
+#include "update_engine/update_check_scheduler.h"
 
 using std::string;
 using testing::_;
@@ -62,6 +65,47 @@
   NiceMock<PrefsMock> prefs_;
 };
 
+TEST_F(UpdateAttempterTest, ActionCompletedDownloadTest) {
+  scoped_ptr<MockHttpFetcher> fetcher(new MockHttpFetcher("", 0, NULL));
+  fetcher->FailTransfer(503);  // Sets the HTTP response code.
+  DownloadAction action(&prefs_, fetcher.release());
+  EXPECT_CALL(prefs_, GetInt64(kPrefsDeltaUpdateFailures, _)).Times(0);
+  attempter_.ActionCompleted(NULL, &action, kActionCodeSuccess);
+  EXPECT_EQ(503, attempter_.http_response_code());
+  EXPECT_EQ(UPDATE_STATUS_FINALIZING, attempter_.status());
+  ASSERT_TRUE(attempter_.error_event_.get() == NULL);
+}
+
+TEST_F(UpdateAttempterTest, ActionCompletedErrorTest) {
+  ActionMock action;
+  EXPECT_CALL(action, Type()).WillRepeatedly(Return("ActionMock"));
+  attempter_.status_ = UPDATE_STATUS_DOWNLOADING;
+  EXPECT_CALL(prefs_, GetInt64(kPrefsDeltaUpdateFailures, _))
+      .WillOnce(Return(false));
+  attempter_.ActionCompleted(NULL, &action, kActionCodeError);
+  ASSERT_TRUE(attempter_.error_event_.get() != NULL);
+}
+
+TEST_F(UpdateAttempterTest, ActionCompletedOmahaRequestTest) {
+  scoped_ptr<MockHttpFetcher> fetcher(new MockHttpFetcher("", 0, NULL));
+  fetcher->FailTransfer(500);  // Sets the HTTP response code.
+  OmahaRequestParams params;
+  OmahaRequestAction action(&prefs_, params, NULL, fetcher.release());
+  ObjectCollectorAction<OmahaResponse> collector_action;
+  BondActions(&action, &collector_action);
+  OmahaResponse response;
+  response.poll_interval = 234;
+  action.SetOutputObject(response);
+  UpdateCheckScheduler scheduler(&attempter_);
+  attempter_.set_update_check_scheduler(&scheduler);
+  EXPECT_CALL(prefs_, GetInt64(kPrefsDeltaUpdateFailures, _)).Times(0);
+  attempter_.ActionCompleted(NULL, &action, kActionCodeSuccess);
+  EXPECT_EQ(500, attempter_.http_response_code());
+  EXPECT_EQ(UPDATE_STATUS_IDLE, attempter_.status());
+  EXPECT_EQ(234, scheduler.poll_interval());
+  ASSERT_TRUE(attempter_.error_event_.get() == NULL);
+}
+
 TEST_F(UpdateAttempterTest, RunAsRootConstructWithUpdatedMarkerTest) {
   extern const char* kUpdateCompletedMarker;
   const FilePath kMarker(kUpdateCompletedMarker);
@@ -141,6 +185,25 @@
     attempter_.MarkDeltaUpdateFailure();
 }
 
+TEST_F(UpdateAttempterTest, ScheduleErrorEventActionNoEventTest) {
+  EXPECT_CALL(*processor_, EnqueueAction(_)).Times(0);
+  EXPECT_CALL(*processor_, StartProcessing()).Times(0);
+  attempter_.ScheduleErrorEventAction();
+}
+
+TEST_F(UpdateAttempterTest, ScheduleErrorEventActionTest) {
+  EXPECT_CALL(*processor_,
+              EnqueueAction(Property(&AbstractAction::Type,
+                                     OmahaRequestAction::StaticType())))
+      .Times(1);
+  EXPECT_CALL(*processor_, StartProcessing()).Times(1);
+  attempter_.error_event_.reset(new OmahaEvent(OmahaEvent::kTypeUpdateComplete,
+                                               OmahaEvent::kResultError,
+                                               kActionCodeError));
+  attempter_.ScheduleErrorEventAction();
+  EXPECT_EQ(UPDATE_STATUS_REPORTING_ERROR_EVENT, attempter_.status());
+}
+
 TEST_F(UpdateAttempterTest, UpdateStatusToStringTest) {
   extern const char* UpdateStatusToString(UpdateStatus);
   EXPECT_STREQ("UPDATE_STATUS_IDLE", UpdateStatusToString(UPDATE_STATUS_IDLE));
