Fix memory leak on ChromeBrowserProxyResolverTest.
ChromeBrowserProxyResolverTest.SuccessTest was creating a duplicate
of the string returned by DBusMessageGetArgs_3() when the mocked
Chrome returns a proxy response. The caller of this interface
should not delete the returned pointers (as they are pointers to the
dbus message) so the test ended up leaking those strings.
This patch fixes that and uses a StrickMock for the dbus interface
to catch some unexpected calls also included on this fix. Finally,
testing::SetArgumentPointee() was deprecated in favor of
testing::SetArgPointee().
BUG=chromium:378548
TEST=`FEATURES="test" USE="clang asan" emerge-link update_engine` doesn't complain about ChromeBrowserProxyResolverTest.
Change-Id: Ie348eeab964fbfdeaafa68db9016d7ab36835552
Reviewed-on: https://chromium-review.googlesource.com/202071
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: David Zeuthen <zeuthen@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
diff --git a/chrome_browser_proxy_resolver_unittest.cc b/chrome_browser_proxy_resolver_unittest.cc
index 628524b..9fa168e 100644
--- a/chrome_browser_proxy_resolver_unittest.cc
+++ b/chrome_browser_proxy_resolver_unittest.cc
@@ -14,7 +14,7 @@
using std::string;
using ::testing::_;
using ::testing::Return;
-using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
using ::testing::StrEq;
namespace chromeos_update_engine {
@@ -119,10 +119,11 @@
DBusMessage* kMockDbusMessage =
reinterpret_cast<DBusMessage*>(number++);
- const char kUrl[] = "http://example.com/blah";
+ char kUrl[] = "http://example.com/blah";
+ char kProxyConfig[] = "SOCKS5 192.168.52.83:5555;DIRECT";
- MockDBusWrapper dbus_iface;
-
+ testing::StrictMock<MockDBusWrapper> dbus_iface;
+
EXPECT_CALL(dbus_iface, BusGet(_, _))
.Times(2)
.WillRepeatedly(Return(kMockSystemGBus));
@@ -140,17 +141,20 @@
StrEq(kLibCrosServicePath),
StrEq(kLibCrosServiceInterface)))
.WillOnce(Return(kMockDbusProxy));
- if (chrome_alive)
- EXPECT_CALL(dbus_iface, ProxyCall_3_0(
- kMockDbusProxy,
- StrEq(kLibCrosServiceResolveNetworkProxyMethodName),
- _,
- StrEq(kUrl),
- StrEq(kLibCrosProxyResolveSignalInterface),
- StrEq(kLibCrosProxyResolveName)))
- .WillOnce(Return(chrome_alive ? TRUE : FALSE));
+ EXPECT_CALL(dbus_iface, ProxyUnref(kMockDbusProxy));
+
+ EXPECT_CALL(dbus_iface, ProxyCall_3_0(
+ kMockDbusProxy,
+ StrEq(kLibCrosServiceResolveNetworkProxyMethodName),
+ _,
+ StrEq(kUrl),
+ StrEq(kLibCrosProxyResolveSignalInterface),
+ StrEq(kLibCrosProxyResolveName)))
+ .WillOnce(Return(chrome_alive ? TRUE : FALSE));
+
EXPECT_CALL(dbus_iface,
DBusConnectionRemoveFilter(kMockSystemBus, _, _));
+
if (chrome_replies) {
EXPECT_CALL(dbus_iface,
DBusMessageIsSignal(kMockDbusMessage,
@@ -159,9 +163,8 @@
.WillOnce(Return(1));
EXPECT_CALL(dbus_iface,
DBusMessageGetArgs_3(kMockDbusMessage, _, _, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(strdup(kUrl)),
- SetArgumentPointee<3>(
- strdup("SOCKS5 192.168.52.83:5555;DIRECT")),
+ .WillOnce(DoAll(SetArgPointee<2>(static_cast<char*>(kUrl)),
+ SetArgPointee<3>(static_cast<char*>(kProxyConfig)),
Return(TRUE)));
}