From 44a034e03771e91cb04767fa388a3a8c1839b40b Mon Sep 17 00:00:00 2001 From: "toyoshim@chromium.org" Date: Wed, 14 Dec 2011 07:22:10 +0000 Subject: WebSocket Pepper API: Add live object check to WebSocket PPAPI tests - Add RUN_TEST_WITH_REFERENCE_CHECK macro which run a test then check leaked pepper objects. - Use that macro to run all WebSocket related PPAPI unit tests - Fix some object leak in tests found by the macro BUG=87310 TEST=ui_tests --gtest_filter='PPAPITest.WebSocket_*' Review URL: http://codereview.chromium.org/8934003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114389 0039d316-1c4b-4281-b951-d872f2087c98 --- ppapi/tests/test_case.h | 14 ++++++++++++++ ppapi/tests/test_websocket.cc | 29 ++++++++++++++++++----------- ppapi/tests/test_websocket.h | 2 +- 3 files changed, 33 insertions(+), 12 deletions(-) (limited to 'ppapi/tests') diff --git a/ppapi/tests/test_case.h b/ppapi/tests/test_case.h index e974c50..8ea3aef 100644 --- a/ppapi/tests/test_case.h +++ b/ppapi/tests/test_case.h @@ -153,6 +153,20 @@ class TestCaseFactory { instance_->LogTest(#name, Test##name()); \ } +#define RUN_TEST_WITH_REFERENCE_CHECK(name, test_filter) \ + if (MatchesFilter(#name, test_filter)) { \ + force_async_ = false; \ + uint32_t objects = testing_interface_->GetLiveObjectsForInstance( \ + instance_->pp_instance()); \ + std::string error_message = Test##name(); \ + if (error_message.empty() && \ + testing_interface_->GetLiveObjectsForInstance( \ + instance_->pp_instance()) != objects) \ + error_message = MakeFailureMessage(__FILE__, __LINE__, \ + "reference leak check"); \ + instance_->LogTest(#name, error_message); \ + } + // Like RUN_TEST above but forces functions taking callbacks to complete // asynchronously on success or error. #define RUN_TEST_FORCEASYNC(name, test_filter) \ diff --git a/ppapi/tests/test_websocket.cc b/ppapi/tests/test_websocket.cc index e8e5558..c990113 100644 --- a/ppapi/tests/test_websocket.cc +++ b/ppapi/tests/test_websocket.cc @@ -6,6 +6,7 @@ #include +#include "ppapi/c/dev/ppb_testing_dev.h" #include "ppapi/c/dev/ppb_websocket_dev.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/pp_var.h" @@ -47,20 +48,20 @@ bool TestWebSocket::Init() { if (!websocket_interface_ || !var_interface_ || !core_interface_) return false; - return true; + return InitTestingInterface(); } void TestWebSocket::RunTests(const std::string& filter) { - RUN_TEST(IsWebSocket, filter); - RUN_TEST(UninitializedPropertiesAccess, filter); - RUN_TEST(InvalidConnect, filter); - RUN_TEST(Protocols, filter); - RUN_TEST(GetURL, filter); - RUN_TEST(ValidConnect, filter); - RUN_TEST(InvalidClose, filter); - RUN_TEST(ValidClose, filter); - RUN_TEST(GetProtocol, filter); - RUN_TEST(TextSendReceive, filter); + RUN_TEST_WITH_REFERENCE_CHECK(IsWebSocket, filter); + RUN_TEST_WITH_REFERENCE_CHECK(UninitializedPropertiesAccess, filter); + RUN_TEST_WITH_REFERENCE_CHECK(InvalidConnect, filter); + RUN_TEST_WITH_REFERENCE_CHECK(Protocols, filter); + RUN_TEST_WITH_REFERENCE_CHECK(GetURL, filter); + RUN_TEST_WITH_REFERENCE_CHECK(ValidConnect, filter); + RUN_TEST_WITH_REFERENCE_CHECK(InvalidClose, filter); + RUN_TEST_WITH_REFERENCE_CHECK(ValidClose, filter); + RUN_TEST_WITH_REFERENCE_CHECK(GetProtocol, filter); + RUN_TEST_WITH_REFERENCE_CHECK(TextSendReceive, filter); } PP_Var TestWebSocket::CreateVar(const char* string) { @@ -138,15 +139,18 @@ std::string TestWebSocket::TestUninitializedPropertiesAccess() { PP_Var close_reason = websocket_interface_->GetCloseReason(ws); ASSERT_TRUE(AreEqual(close_reason, "")); + ReleaseVar(close_reason); PP_Bool close_was_clean = websocket_interface_->GetCloseWasClean(ws); ASSERT_EQ(PP_FALSE, close_was_clean); PP_Var extensions = websocket_interface_->GetExtensions(ws); ASSERT_TRUE(AreEqual(extensions, "")); + ReleaseVar(extensions); PP_Var protocol = websocket_interface_->GetProtocol(ws); ASSERT_TRUE(AreEqual(protocol, "")); + ReleaseVar(protocol); PP_WebSocketReadyState_Dev ready_state = websocket_interface_->GetReadyState(ws); @@ -154,6 +158,9 @@ std::string TestWebSocket::TestUninitializedPropertiesAccess() { PP_Var url = websocket_interface_->GetURL(ws); ASSERT_TRUE(AreEqual(url, "")); + ReleaseVar(url); + + core_interface_->ReleaseResource(ws); PASS(); } diff --git a/ppapi/tests/test_websocket.h b/ppapi/tests/test_websocket.h index ff8851a..6cdf028 100644 --- a/ppapi/tests/test_websocket.h +++ b/ppapi/tests/test_websocket.h @@ -17,11 +17,11 @@ class TestWebSocket : public TestCase { public: explicit TestWebSocket(TestingInstance* instance) : TestCase(instance) {} + private: // TestCase implementation. virtual bool Init(); virtual void RunTests(const std::string& filter); - private: PP_Var CreateVar(const char* string); void ReleaseVar(const PP_Var& var); bool AreEqual(const PP_Var& var, const char* string); -- cgit v1.1