From 12e2599805235b139796ffee9598e8c95768b21a Mon Sep 17 00:00:00 2001 From: "satorux@chromium.org" Date: Thu, 6 Oct 2011 00:20:53 +0000 Subject: Fix a bug in dbus::Bus::AddFilterFunction(). We should not reject the same function if it's associated with different data. BUG=99258 TEST=adde a unit test and confirmed it passed. Review URL: http://codereview.chromium.org/8161005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104208 0039d316-1c4b-4281-b951-d872f2087c98 --- dbus/bus_unittest.cc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'dbus/bus_unittest.cc') diff --git a/dbus/bus_unittest.cc b/dbus/bus_unittest.cc index 6209bc3..999727a 100644 --- a/dbus/bus_unittest.cc +++ b/dbus/bus_unittest.cc @@ -13,6 +13,17 @@ #include "testing/gtest/include/gtest/gtest.h" +namespace { + +// Used to test AddFilterFunction(). +DBusHandlerResult DummyHandler(DBusConnection* connection, + DBusMessage* raw_message, + void* user_data) { + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +} // namespace + TEST(BusTest, GetObjectProxy) { dbus::Bus::Options options; scoped_refptr bus = new dbus::Bus(options); @@ -89,3 +100,24 @@ TEST(BusTest, ShutdownAndBlockWithDBusThread) { EXPECT_TRUE(bus->shutdown_completed()); dbus_thread.Stop(); } + +TEST(BusTest, AddFilterFunction) { + dbus::Bus::Options options; + scoped_refptr bus = new dbus::Bus(options); + // Should connect before calling AddFilterFunction(). + bus->Connect(); + + int data1 = 100; + int data2 = 200; + ASSERT_TRUE(bus->AddFilterFunction(&DummyHandler, &data1)); + // Cannot add the same function with the same data. + ASSERT_FALSE(bus->AddFilterFunction(&DummyHandler, &data1)); + // Can add the same function with different data. + ASSERT_TRUE(bus->AddFilterFunction(&DummyHandler, &data2)); + + ASSERT_TRUE(bus->RemoveFilterFunction(&DummyHandler, &data1)); + ASSERT_FALSE(bus->RemoveFilterFunction(&DummyHandler, &data1)); + ASSERT_TRUE(bus->RemoveFilterFunction(&DummyHandler, &data2)); + + bus->ShutdownAndBlock(); +} -- cgit v1.1