From 988e5fc7962938953d9109cd293df8381b098340 Mon Sep 17 00:00:00 2001 From: EKR Date: Wed, 31 Oct 2012 16:31:47 +0100 Subject: [PATCH] Bug 807259: Fix shutdown for WebRTC standalone unit tests. r=anant --- media/mtransport/test/ice_unittest.cpp | 20 ++++---- media/mtransport/test/mtransport_test_utils.h | 46 +++++++++++-------- media/mtransport/test/nrappkit_unittest.cpp | 15 +++--- .../test/runnable_utils_unittest.cpp | 8 ++-- media/mtransport/test/sctp_unittest.cpp | 12 +++-- .../test/sockettransportservice_unittest.cpp | 8 ++-- media/mtransport/test/transport_unittests.cpp | 32 +++++++------ .../signaling/test/mediaconduit_unittests.cpp | 8 ++-- .../signaling/test/mediapipeline_unittest.cpp | 29 ++++++------ .../signaling/test/signaling_unittests.cpp | 15 +++--- 10 files changed, 108 insertions(+), 85 deletions(-) diff --git a/media/mtransport/test/ice_unittest.cpp b/media/mtransport/test/ice_unittest.cpp index 4d87cfc497c8..7c44f211b6fb 100644 --- a/media/mtransport/test/ice_unittest.cpp +++ b/media/mtransport/test/ice_unittest.cpp @@ -31,7 +31,7 @@ #include "gtest_utils.h" using namespace mozilla; -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; bool stream_added = false; @@ -74,7 +74,7 @@ class IceTestPeer : public sigslot::has_slots<> { void Gather() { nsresult res; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(ice_ctx_, &NrIceCtx::StartGathering, &res), NS_DISPATCH_SYNC); @@ -100,7 +100,7 @@ class IceTestPeer : public sigslot::has_slots<> { void Connect(IceTestPeer *remote, TrickleMode trickle_mode) { nsresult res; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(ice_ctx_, &NrIceCtx::ParseGlobalAttributes, remote->GetGlobalAttributes(), &res), NS_DISPATCH_SYNC); @@ -108,7 +108,7 @@ class IceTestPeer : public sigslot::has_slots<> { if (trickle_mode == TRICKLE_NONE) { for (size_t i=0; iDispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(streams_[i], &NrIceMediaStream::ParseAttributes, remote->GetCandidates(remote->streams_[i]->name()), &res), NS_DISPATCH_SYNC); @@ -119,7 +119,7 @@ class IceTestPeer : public sigslot::has_slots<> { // Parse empty attributes and then trickle them out later for (size_t i=0; i empty_attrs; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(streams_[i], &NrIceMediaStream::ParseAttributes, empty_attrs, &res), NS_DISPATCH_SYNC); @@ -129,7 +129,7 @@ class IceTestPeer : public sigslot::has_slots<> { } // Now start checks - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(ice_ctx_, &NrIceCtx::StartChecks, &res), NS_DISPATCH_SYNC); ASSERT_TRUE(NS_SUCCEEDED(res)); @@ -142,7 +142,7 @@ class IceTestPeer : public sigslot::has_slots<> { remote->GetCandidates(remote->streams_[i]->name()); for (size_t j=0; jDispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(streams_[i], &NrIceMediaStream::ParseTrickleCandidate, candidates[j], &res), NS_DISPATCH_SYNC); @@ -304,12 +304,14 @@ TEST_F(IceTest, TestSendReceive) { int main(int argc, char **argv) { - test_utils.InitServices(); + test_utils = new MtransportTestUtils(); NSS_NoDB_Init(nullptr); NSS_SetDomesticPolicy(); // Start the tests ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/mtransport/test/mtransport_test_utils.h b/media/mtransport/test/mtransport_test_utils.h index 353f62f2b4a2..e58b53ec3c95 100644 --- a/media/mtransport/test/mtransport_test_utils.h +++ b/media/mtransport/test/mtransport_test_utils.h @@ -25,26 +25,31 @@ #ifdef MOZ_CRASHREPORTER #include "nsICrashReporter.h" #endif - +#include "nsPISocketTransportService.h" #include "nsServiceManagerUtils.h" - +#include "TestHarness.h" +#include "mozilla/mozPoisonWrite.h" class MtransportTestUtils { public: - bool InitServices() { + MtransportTestUtils() : xpcom_("") { + if (!sts_) { + InitServices(); + } + } + + ~MtransportTestUtils() { + sts_->Shutdown(); + } + + void InitServices() { nsresult rv; - NS_InitXPCOM2(getter_AddRefs(servMan_), nullptr, nullptr); - manager_ = do_QueryInterface(servMan_); - rv = manager_->CreateInstanceByContractID(NS_IOSERVICE_CONTRACTID, - nullptr, NS_GET_IID(nsIIOService), - getter_AddRefs(ioservice_)); - if (!NS_SUCCEEDED(rv)) - return false; - sts_target_ = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv); - if (!NS_SUCCEEDED(rv)) - return false; + MOZ_ASSERT(NS_SUCCEEDED(rv)); + + sts_ = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv); + MOZ_ASSERT(NS_SUCCEEDED(rv)); #ifdef MOZ_CRASHREPORTER char *crashreporter = PR_GetEnv("MOZ_CRASHREPORTER"); @@ -61,28 +66,31 @@ class MtransportTestUtils { rv = dirsvc->Get(NS_XPCOM_CURRENT_PROCESS_DIR, NS_GET_IID(nsIFile), getter_AddRefs(cwd)); - if (!NS_SUCCEEDED(rv)) - return false; + MOZ_ASSERT(NS_SUCCEEDED(rv)); crashreporter_->SetEnabled(true); crashreporter_->SetMinidumpPath(cwd); } } #endif - return true; } nsCOMPtr sts_target() { return sts_target_; } private: - nsCOMPtr servMan_; - nsCOMPtr manager_; - nsCOMPtr ioservice_; + ScopedXPCOM xpcom_; nsCOMPtr sts_target_; + nsCOMPtr sts_; #ifdef MOZ_CRASHREPORTER nsCOMPtr crashreporter_; #endif }; +MtransportTestUtils *mtransport_test_utils; + +#define SETUP_MTRANSPORT_TEST_UTILS() \ + MtransportTestUtils utils_; mtransport_test_utils = &utils_ + + #endif diff --git a/media/mtransport/test/nrappkit_unittest.cpp b/media/mtransport/test/nrappkit_unittest.cpp index 2581891613ee..77ddb39f35a3 100644 --- a/media/mtransport/test/nrappkit_unittest.cpp +++ b/media/mtransport/test/nrappkit_unittest.cpp @@ -26,7 +26,7 @@ extern "C" { using namespace mozilla; -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; namespace { @@ -37,7 +37,7 @@ class TimerTest : public ::testing::Test { int ArmTimer(int timeout) { int ret; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(this, &TimerTest::ArmTimer_w, timeout, &ret), NS_DISPATCH_SYNC); @@ -51,7 +51,7 @@ class TimerTest : public ::testing::Test { int CancelTimer() { int ret; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(this, &TimerTest::CancelTimer_w, &ret), NS_DISPATCH_SYNC); @@ -88,12 +88,13 @@ TEST_F(TimerTest, CancelTimer) { ASSERT_FALSE(fired_); } -int main(int argc, char **argv) -{ - test_utils.InitServices(); +int main(int argc, char **argv) { + test_utils = new MtransportTestUtils(); // Start the tests ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/mtransport/test/runnable_utils_unittest.cpp b/media/mtransport/test/runnable_utils_unittest.cpp index 248df938240d..78dde9b3ce80 100644 --- a/media/mtransport/test/runnable_utils_unittest.cpp +++ b/media/mtransport/test/runnable_utils_unittest.cpp @@ -32,7 +32,7 @@ #include "gtest_utils.h" using namespace mozilla; -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; namespace { @@ -157,11 +157,13 @@ TEST_F(DispatchTest, TestRet) { int main(int argc, char **argv) { - test_utils.InitServices(); + test_utils = new MtransportTestUtils(); // Start the tests ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/mtransport/test/sctp_unittest.cpp b/media/mtransport/test/sctp_unittest.cpp index 9a07a6649974..4444137c4a73 100644 --- a/media/mtransport/test/sctp_unittest.cpp +++ b/media/mtransport/test/sctp_unittest.cpp @@ -35,7 +35,7 @@ using namespace mozilla; MOZ_MTLOG_MODULE("mtransport"); -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; static bool sctp_logging = false; static int port_number = 5000; @@ -117,7 +117,7 @@ class TransportTestPeer : public sigslot::has_slots<> { static_cast(flow_.get()) << std::endl; usrsctp_close(sctp_); - test_utils.sts_target()->Dispatch(WrapRunnable(this, + test_utils->sts_target()->Dispatch(WrapRunnable(this, &TransportTestPeer::DisconnectInt), NS_DISPATCH_SYNC); @@ -157,7 +157,7 @@ class TransportTestPeer : public sigslot::has_slots<> { void StartTransfer(size_t to_send) { periodic_ = new SendPeriodic(this, to_send); - timer_->SetTarget(test_utils.sts_target()); + timer_->SetTarget(test_utils->sts_target()); timer_->InitWithCallback(periodic_, 10, nsITimer::TYPE_REPEATING_SLACK); } @@ -348,7 +348,7 @@ TEST_F(TransportTest, TestTransfer) { int main(int argc, char **argv) { - test_utils.InitServices(); + test_utils = new MtransportTestUtils(); // Start the tests ::testing::InitGoogleTest(&argc, argv); @@ -358,5 +358,7 @@ int main(int argc, char **argv) } } - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/mtransport/test/sockettransportservice_unittest.cpp b/media/mtransport/test/sockettransportservice_unittest.cpp index 4292cf8d1c55..df57017d86c3 100644 --- a/media/mtransport/test/sockettransportservice_unittest.cpp +++ b/media/mtransport/test/sockettransportservice_unittest.cpp @@ -30,7 +30,7 @@ #include "gtest/gtest.h" #include "gtest_utils.h" -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; namespace { class SocketTransportServiceTest : public ::testing::Test { @@ -202,10 +202,12 @@ TEST_F(SocketTransportServiceTest, SendPacket) { int main(int argc, char **argv) { - test_utils.InitServices(); + test_utils = new MtransportTestUtils(); // Start the tests ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/mtransport/test/transport_unittests.cpp b/media/mtransport/test/transport_unittests.cpp index c00c33eca770..eb26a7147838 100644 --- a/media/mtransport/test/transport_unittests.cpp +++ b/media/mtransport/test/transport_unittests.cpp @@ -40,8 +40,7 @@ using namespace mozilla; MOZ_MTLOG_MODULE("mtransport"); -MtransportTestUtils test_utils; - +MtransportTestUtils *test_utils; // Class to simulate various kinds of network lossage class TransportLayerLossy : public TransportLayer { @@ -127,7 +126,7 @@ class TransportTestPeer : public sigslot::has_slots<> { } ~TransportTestPeer() { - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(this, &TransportTestPeer::DestroyFlow), NS_DISPATCH_SYNC); } @@ -209,7 +208,7 @@ class TransportTestPeer : public sigslot::has_slots<> { layers.push(ice_); layers.push(dtls_); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(flow_, &TransportFlow::PushLayers, layers, &res), NS_DISPATCH_SYNC); @@ -220,7 +219,7 @@ class TransportTestPeer : public sigslot::has_slots<> { flow_->SignalStateChange.connect(this, &TransportTestPeer::StateChanged); // Start gathering - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(ice_ctx_, &NrIceCtx::StartGathering, &res), NS_DISPATCH_SYNC); ASSERT_TRUE(NS_SUCCEEDED(res)); @@ -252,7 +251,7 @@ class TransportTestPeer : public sigslot::has_slots<> { } // First send attributes - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(peer_->ice_ctx_, &NrIceCtx::ParseGlobalAttributes, ice_ctx_->GetGlobalAttributes(), &res), @@ -260,7 +259,7 @@ class TransportTestPeer : public sigslot::has_slots<> { ASSERT_TRUE(NS_SUCCEEDED(res)); for (size_t i=0; iDispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(peer_->streams_[i], &NrIceMediaStream::ParseAttributes, candidates_[streams_[i]->name()], &res), NS_DISPATCH_SYNC); @@ -268,7 +267,7 @@ class TransportTestPeer : public sigslot::has_slots<> { } // Start checks on the other peer. - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(peer_->ice_ctx_, &NrIceCtx::StartChecks, &res), NS_DISPATCH_SYNC); ASSERT_TRUE(NS_SUCCEEDED(res)); @@ -277,7 +276,7 @@ class TransportTestPeer : public sigslot::has_slots<> { TransportResult SendPacket(const unsigned char* data, size_t len) { TransportResult ret; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(flow_, &TransportFlow::SendPacket, data, len, &ret), NS_DISPATCH_SYNC); @@ -368,10 +367,10 @@ class TransportTest : public ::testing::Test { } void ConnectSocket() { - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(p1_, &TransportTestPeer::ConnectSocket, p2_), NS_DISPATCH_SYNC); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(p2_, &TransportTestPeer::ConnectSocket, p1_), NS_DISPATCH_SYNC); @@ -380,10 +379,10 @@ class TransportTest : public ::testing::Test { } void ConnectSocketExpectFail() { - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(p1_, &TransportTestPeer::ConnectSocket, p2_), NS_DISPATCH_SYNC); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(p2_, &TransportTestPeer::ConnectSocket, p1_), NS_DISPATCH_SYNC); ASSERT_TRUE_WAIT(p1_->failed(), 10000); @@ -497,11 +496,14 @@ TEST_F(TransportTest, TestTransferIce) { int main(int argc, char **argv) { - test_utils.InitServices(); + test_utils = new MtransportTestUtils(); + NSS_NoDB_Init(nullptr); NSS_SetDomesticPolicy(); // Start the tests ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/webrtc/signaling/test/mediaconduit_unittests.cpp b/media/webrtc/signaling/test/mediaconduit_unittests.cpp index 401d48aa8457..63e064b3f1db 100644 --- a/media/webrtc/signaling/test/mediaconduit_unittests.cpp +++ b/media/webrtc/signaling/test/mediaconduit_unittests.cpp @@ -21,7 +21,7 @@ using namespace std; #include "gtest_utils.h" #include "mtransport_test_utils.h" -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; //Video Frame Color const int COLOR = 0x80; //Gray @@ -749,9 +749,11 @@ TEST_F(TransportConduitTest, TestVideoConduitCodecAPI) { int main(int argc, char **argv) { - test_utils.InitServices(); + test_utils = new MtransportTestUtils(); ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/webrtc/signaling/test/mediapipeline_unittest.cpp b/media/webrtc/signaling/test/mediapipeline_unittest.cpp index c1e6e44c93ba..908efe99f082 100644 --- a/media/webrtc/signaling/test/mediapipeline_unittest.cpp +++ b/media/webrtc/signaling/test/mediapipeline_unittest.cpp @@ -38,8 +38,7 @@ using namespace mozilla; MOZ_MTLOG_MODULE("mediapipeline"); -MtransportTestUtils test_utils; - +MtransportTestUtils *test_utils; namespace { class TestAgent { @@ -65,8 +64,9 @@ class TestAgent { res = audio_prsock_->Init(); ASSERT_EQ((nsresult)NS_OK, res); - test_utils.sts_target()->Dispatch(WrapRunnable(audio_prsock_, &TransportLayerPrsock::Import, - fd, &res), NS_DISPATCH_SYNC); + test_utils->sts_target()->Dispatch( + WrapRunnable(audio_prsock_, &TransportLayerPrsock::Import, + fd, &res), NS_DISPATCH_SYNC); ASSERT_TRUE(NS_SUCCEEDED(res)); ASSERT_EQ((nsresult)NS_OK, audio_flow_->PushLayer(audio_prsock_)); @@ -85,7 +85,7 @@ class TestAgent { MOZ_MTLOG(PR_LOG_DEBUG, "Starting"); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(audio_->GetStream(), &Fake_MediaStream::Start, &ret), NS_DISPATCH_SYNC); @@ -103,7 +103,7 @@ class TestAgent { void Stop() { MOZ_MTLOG(PR_LOG_DEBUG, "Stopping"); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(this, &TestAgent::StopInt), NS_DISPATCH_SYNC); @@ -138,7 +138,7 @@ class TestAgentSend : public TestAgent { EXPECT_EQ(mozilla::kMediaConduitNoError, err); audio_pipeline_ = new mozilla::MediaPipelineTransmit(NULL, - test_utils.sts_target(), + test_utils->sts_target(), audio_, audio_conduit_, audio_flow_, NULL); // video_ = new Fake_nsDOMMediaStream(new Fake_VideoStreamSource()); @@ -171,7 +171,7 @@ class TestAgentReceive : public TestAgent { EXPECT_EQ(mozilla::kMediaConduitNoError, err); audio_pipeline_ = new mozilla::MediaPipelineReceiveAudio(NULL, - test_utils.sts_target(), + test_utils->sts_target(), audio_, static_cast(audio_conduit_.get()), audio_flow_, NULL); @@ -191,10 +191,10 @@ class MediaPipelineTest : public ::testing::Test { PRStatus status = PR_NewTCPSocketPair(fds_); ASSERT_EQ(status, PR_SUCCESS); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(&p1_, &TestAgent::ConnectSocket, fds_[0], false), NS_DISPATCH_SYNC); - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnable(&p2_, &TestAgent::ConnectSocket, fds_[1], false), NS_DISPATCH_SYNC); } @@ -217,15 +217,16 @@ TEST_F(MediaPipelineTest, AudioSend) { } // end namespace -int main(int argc, char **argv) -{ - test_utils.InitServices(); +int main(int argc, char **argv) { + test_utils = new MtransportTestUtils(); // Start the tests NSS_NoDB_Init(NULL); NSS_SetDomesticPolicy(); ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int rv = RUN_ALL_TESTS(); + delete test_utils; + return rv; } diff --git a/media/webrtc/signaling/test/signaling_unittests.cpp b/media/webrtc/signaling/test/signaling_unittests.cpp index 1f351af93d34..54ab54155b6b 100644 --- a/media/webrtc/signaling/test/signaling_unittests.cpp +++ b/media/webrtc/signaling/test/signaling_unittests.cpp @@ -28,7 +28,9 @@ using namespace std; #include "nsIDOMRTCPeerConnection.h" #include "mtransport_test_utils.h" -MtransportTestUtils test_utils; +MtransportTestUtils *test_utils; + + static int kDefaultTimeout = 5000; @@ -255,7 +257,7 @@ TestObserver::OnAddStream(nsIDOMMediaStream *stream, const char *type) Fake_SourceMediaStream *fs = static_cast(ms->GetStream()); nsresult ret; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(fs, &Fake_SourceMediaStream::Start, &ret), NS_DISPATCH_SYNC); @@ -485,7 +487,7 @@ class SignalingAgent { new Fake_AudioStreamSource(); nsresult ret; - test_utils.sts_target()->Dispatch( + test_utils->sts_target()->Dispatch( WrapRunnableRet(audio_stream, &Fake_MediaStream::Start, &ret), NS_DISPATCH_SYNC); @@ -945,9 +947,8 @@ TEST_F(SignalingTest, FullCallTrickle) } // End namespace test. -int main(int argc, char **argv) -{ - test_utils.InitServices(); +int main(int argc, char **argv) { + test_utils = new MtransportTestUtils(); NSS_NoDB_Init(NULL); NSS_SetDomesticPolicy(); @@ -957,10 +958,10 @@ int main(int argc, char **argv) if (!strcmp(argv[i],"-t")) { kDefaultTimeout = 20000; } - } ::testing::AddGlobalTestEnvironment(new test::SignalingEnvironment); int result = RUN_ALL_TESTS(); + delete test_utils; return result; }