diff --git a/update_attempter_unittest.cc b/update_attempter_unittest.cc
index 76068fd..73addb5 100644
--- a/update_attempter_unittest.cc
+++ b/update_attempter_unittest.cc
@@ -39,7 +39,7 @@
 
 class UpdateAttempterTest : public ::testing::Test {
  protected:
-  UpdateAttempterTest() : attempter_(&dbus_) {}
+  UpdateAttempterTest() : attempter_(&dbus_), loop_(NULL) {}
   virtual void SetUp() {
     EXPECT_EQ(NULL, attempter_.dbus_service_);
     EXPECT_EQ(NULL, attempter_.prefs_);
@@ -60,10 +60,16 @@
     attempter_.prefs_ = &prefs_;
   }
 
+  void UpdateTestStart();
+  void UpdateTestVerify();
+  static gboolean StaticUpdateTestStart(gpointer data);
+  static gboolean StaticUpdateTestVerify(gpointer data);
+
   MockDbusGlib dbus_;
   UpdateAttempterUnderTest attempter_;
   ActionProcessorMock* processor_;
   NiceMock<PrefsMock> prefs_;
+  GMainLoop* loop_;
 };
 
 TEST_F(UpdateAttempterTest, ActionCompletedDownloadTest) {
@@ -227,22 +233,35 @@
                UpdateStatusToString(static_cast<UpdateStatus>(-1)));
 }
 
-TEST_F(UpdateAttempterTest, UpdateTest) {
+gboolean UpdateAttempterTest::StaticUpdateTestStart(gpointer data) {
+  reinterpret_cast<UpdateAttempterTest*>(data)->UpdateTestStart();
+  return FALSE;
+}
+
+gboolean UpdateAttempterTest::StaticUpdateTestVerify(gpointer data) {
+  reinterpret_cast<UpdateAttempterTest*>(data)->UpdateTestVerify();
+  return FALSE;
+}
+
+namespace {
+const string kActionTypes[] = {
+  OmahaRequestAction::StaticType(),
+  OmahaResponseHandlerAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  OmahaRequestAction::StaticType(),
+  DownloadAction::StaticType(),
+  OmahaRequestAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  PostinstallRunnerAction::StaticType(),
+  OmahaRequestAction::StaticType()
+};
+}  // namespace {}
+
+void UpdateAttempterTest::UpdateTestStart() {
   attempter_.set_http_response_code(200);
   InSequence s;
-  const string kActionTypes[] = {
-    OmahaRequestAction::StaticType(),
-    OmahaResponseHandlerAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    OmahaRequestAction::StaticType(),
-    DownloadAction::StaticType(),
-    OmahaRequestAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    PostinstallRunnerAction::StaticType(),
-    OmahaRequestAction::StaticType()
-  };
   for (size_t i = 0; i < arraysize(kActionTypes); ++i) {
     EXPECT_CALL(*processor_,
                 EnqueueAction(Property(&AbstractAction::Type,
@@ -251,7 +270,10 @@
   EXPECT_CALL(*processor_, StartProcessing()).Times(1);
 
   attempter_.Update("", "", false);
+  g_idle_add(&StaticUpdateTestVerify, this);
+}
 
+void UpdateAttempterTest::UpdateTestVerify() {
   EXPECT_EQ(0, attempter_.http_response_code());
   EXPECT_EQ(&attempter_, processor_->delegate());
   EXPECT_EQ(arraysize(kActionTypes), attempter_.actions_.size());
@@ -265,6 +287,15 @@
   ASSERT_TRUE(download_action != NULL);
   EXPECT_EQ(&attempter_, download_action->delegate());
   EXPECT_EQ(UPDATE_STATUS_CHECKING_FOR_UPDATE, attempter_.status());
+  g_main_loop_quit(loop_);
+}
+
+TEST_F(UpdateAttempterTest, UpdateTest) {
+  loop_ = g_main_loop_new(g_main_context_default(), FALSE);
+  g_idle_add(&StaticUpdateTestStart, this);
+  g_main_loop_run(loop_);
+  g_main_loop_unref(loop_);
+  loop_ = NULL;
 }
 
 }  // namespace chromeos_update_engine
