update_engine: Migrate time-based glib main loop calls to MessageLoop.
This patch replaces most calls to g_idle_add* and g_timeout_add* with
the equivalent MessageLoop::Post*Task(). To maintain compatibility with
unittests running the main loop and doing I/O we instantiate a
GlibMessageLoop for those tests.
BUG=chromium:499886
TEST=unittests still pass.
Change-Id: Ic87ba69bc47391ac3c36d1bfc3ca28d069666af1
Reviewed-on: https://chromium-review.googlesource.com/281197
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
Trybot-Ready: Alex Deymo <deymo@chromium.org>
diff --git a/chrome_browser_proxy_resolver_unittest.cc b/chrome_browser_proxy_resolver_unittest.cc
index d3cf99e..3866358 100644
--- a/chrome_browser_proxy_resolver_unittest.cc
+++ b/chrome_browser_proxy_resolver_unittest.cc
@@ -9,20 +9,36 @@
#include <gtest/gtest.h>
+#include <base/bind.h>
+#include <chromeos/message_loops/fake_message_loop.h>
+
#include "update_engine/mock_dbus_wrapper.h"
using ::testing::Return;
using ::testing::SetArgPointee;
using ::testing::StrEq;
using ::testing::_;
+using chromeos::MessageLoop;
using std::deque;
using std::string;
namespace chromeos_update_engine {
-class ChromeBrowserProxyResolverTest : public ::testing::Test { };
+class ChromeBrowserProxyResolverTest : public ::testing::Test {
+ protected:
+ void SetUp() override {
+ loop_.SetAsCurrent();
+ }
-TEST(ChromeBrowserProxyResolverTest, ParseTest) {
+ void TearDown() override {
+ EXPECT_FALSE(loop_.PendingTasks());
+ }
+
+ private:
+ chromeos::FakeMessageLoop loop_{nullptr};
+};
+
+TEST_F(ChromeBrowserProxyResolverTest, ParseTest) {
// Test ideas from
// http://src.chromium.org/svn/trunk/src/net/proxy/proxy_list_unittest.cc
const char* inputs[] = {
@@ -79,31 +95,26 @@
namespace {
void DBusWrapperTestResolved(const deque<string>& proxies,
- void* data) {
+ void* /* pirv_data */) {
EXPECT_EQ(2, proxies.size());
EXPECT_EQ("socks5://192.168.52.83:5555", proxies[0]);
EXPECT_EQ(kNoProxy, proxies[1]);
- g_main_loop_quit(reinterpret_cast<GMainLoop*>(data));
+ MessageLoop::current()->BreakLoop();
}
void DBusWrapperTestResolvedNoReply(const deque<string>& proxies,
- void* data) {
+ void* /* pirv_data */) {
EXPECT_EQ(1, proxies.size());
EXPECT_EQ(kNoProxy, proxies[0]);
- g_main_loop_quit(reinterpret_cast<GMainLoop*>(data));
+ MessageLoop::current()->BreakLoop();
}
-struct SendReplyArgs {
- DBusConnection* connection;
- DBusMessage* message;
- ChromeBrowserProxyResolver* resolver;
-};
-gboolean SendReply(gpointer data) {
+
+void SendReply(DBusConnection* connection,
+ DBusMessage* message,
+ ChromeBrowserProxyResolver* resolver) {
LOG(INFO) << "Calling SendReply";
- SendReplyArgs* args = reinterpret_cast<SendReplyArgs*>(data);
- ChromeBrowserProxyResolver::StaticFilterMessage(
- args->connection,
- args->message,
- args->resolver);
- return FALSE; // Don't keep calling this function
+ ChromeBrowserProxyResolver::StaticFilterMessage(connection,
+ message,
+ resolver);
}
// chrome_replies should be set to whether or not we fake a reply from
@@ -169,37 +180,32 @@
Return(TRUE)));
}
- GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
-
ChromeBrowserProxyResolver resolver(&dbus_iface);
EXPECT_EQ(true, resolver.Init());
resolver.set_timeout(1);
- SendReplyArgs args = {
- kMockSystemBus,
- kMockDbusMessage,
- &resolver
- };
- if (chrome_replies)
- g_idle_add(SendReply, &args);
- EXPECT_TRUE(resolver.GetProxiesForUrl(kUrl,
- chrome_replies ?
- &DBusWrapperTestResolved :
- &DBusWrapperTestResolvedNoReply,
- loop));
- g_main_loop_run(loop);
- g_main_loop_unref(loop);
+ ProxiesResolvedFn get_proxies_response = &DBusWrapperTestResolvedNoReply;
+
+ if (chrome_replies) {
+ get_proxies_response = &DBusWrapperTestResolved;
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&SendReply, kMockSystemBus, kMockDbusMessage, &resolver));
+ }
+
+ EXPECT_TRUE(resolver.GetProxiesForUrl(kUrl, get_proxies_response, nullptr));
+ MessageLoop::current()->Run();
}
} // namespace
-TEST(ChromeBrowserProxyResolverTest, SuccessTest) {
+TEST_F(ChromeBrowserProxyResolverTest, SuccessTest) {
RunTest(true, true);
}
-TEST(ChromeBrowserProxyResolverTest, NoReplyTest) {
+TEST_F(ChromeBrowserProxyResolverTest, NoReplyTest) {
RunTest(false, true);
}
-TEST(ChromeBrowserProxyResolverTest, NoChromeTest) {
+TEST_F(ChromeBrowserProxyResolverTest, NoChromeTest) {
RunTest(false, false);
}