Index: talk/app/webrtc/webrtcsession_unittest.cc |
diff --git a/talk/app/webrtc/webrtcsession_unittest.cc b/talk/app/webrtc/webrtcsession_unittest.cc |
index 2853ca43a7301b5e28b202f60041f35784342bb2..6ad77dc7b1eb73bd971ae35ac0b08dab125dae25 100644 |
--- a/talk/app/webrtc/webrtcsession_unittest.cc |
+++ b/talk/app/webrtc/webrtcsession_unittest.cc |
@@ -42,6 +42,7 @@ |
#include "talk/media/base/fakemediaengine.h" |
#include "talk/media/base/fakevideorenderer.h" |
#include "talk/media/base/mediachannel.h" |
+#include "talk/media/webrtc/fakewebrtccall.h" |
#include "webrtc/p2p/base/stunserver.h" |
#include "webrtc/p2p/base/teststunserver.h" |
#include "webrtc/p2p/base/testturnserver.h" |
@@ -238,9 +239,14 @@ class WebRtcSessionForTest : public webrtc::WebRtcSession { |
rtc::Thread* worker_thread, |
cricket::PortAllocator* port_allocator, |
webrtc::IceObserver* ice_observer, |
- webrtc::MediaStreamSignaling* mediastream_signaling) |
- : WebRtcSession(cmgr, signaling_thread, worker_thread, port_allocator, |
- mediastream_signaling) { |
+ webrtc::MediaStreamSignaling* mediastream_signaling, |
+ webrtc::CallFactory* call_factory) |
+ : WebRtcSession(cmgr, |
+ signaling_thread, |
+ worker_thread, |
+ port_allocator, |
+ mediastream_signaling, |
+ call_factory) { |
RegisterIceObserver(ice_observer); |
} |
virtual ~WebRtcSessionForTest() {} |
@@ -353,6 +359,23 @@ class FakeAudioRenderer : public cricket::AudioRenderer { |
cricket::AudioRenderer::Sink* sink_; |
}; |
+class FakeCallFactory : public webrtc::CallFactory { |
+ public: |
+ FakeCallFactory() : fake_call_(nullptr) {} |
+ |
+ webrtc::Call* CreateCall(const webrtc::Call::Config& config) override { |
+ fake_call_ = new cricket::FakeCall(config); |
+ return fake_call_; |
+ } |
+ |
+ cricket::FakeCall* fake_call() const { return fake_call_; } |
+ |
+ private: |
+ // Since ownership of fake_call_ is handed over to the caller of CreateCall, |
+ // this pointer is only valid until the caller has deleted it. |
+ cricket::FakeCall* fake_call_; |
+}; |
+ |
class WebRtcSessionTest |
: public testing::TestWithParam<RTCCertificateGenerationMethod> { |
protected: |
@@ -405,10 +428,8 @@ class WebRtcSessionTest |
const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { |
ASSERT_TRUE(session_.get() == NULL); |
session_.reset(new WebRtcSessionForTest( |
- channel_manager_.get(), rtc::Thread::Current(), |
- rtc::Thread::Current(), allocator_.get(), |
- &observer_, |
- &mediastream_signaling_)); |
+ channel_manager_.get(), rtc::Thread::Current(), rtc::Thread::Current(), |
+ allocator_.get(), &observer_, &mediastream_signaling_, &call_factory_)); |
EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew, |
observer_.ice_connection_state_); |
@@ -1128,8 +1149,7 @@ class WebRtcSessionTest |
// -> Failed. |
// The Gathering state should go: New -> Gathering -> Completed. |
- void TestLoopbackCall(const LoopbackNetworkConfiguration& config) { |
- LoopbackNetworkManager loopback_network_manager(this, config); |
+ void SetupLoopbackCall() { |
Init(); |
mediastream_signaling_.SendAudioVideoStream1(); |
SessionDescriptionInterface* offer = CreateOffer(); |
@@ -1140,30 +1160,29 @@ class WebRtcSessionTest |
EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew, |
observer_.ice_connection_state_); |
EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringGathering, |
- observer_.ice_gathering_state_, |
- kIceCandidatesTimeout); |
+ observer_.ice_gathering_state_, kIceCandidatesTimeout); |
EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); |
EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringComplete, |
- observer_.ice_gathering_state_, |
- kIceCandidatesTimeout); |
+ observer_.ice_gathering_state_, kIceCandidatesTimeout); |
std::string sdp; |
offer->ToString(&sdp); |
- SessionDescriptionInterface* desc = |
- webrtc::CreateSessionDescription( |
- JsepSessionDescription::kAnswer, sdp, nullptr); |
+ SessionDescriptionInterface* desc = webrtc::CreateSessionDescription( |
+ JsepSessionDescription::kAnswer, sdp, nullptr); |
ASSERT_TRUE(desc != NULL); |
SetRemoteDescriptionWithoutError(desc); |
EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionChecking, |
- observer_.ice_connection_state_, |
- kIceCandidatesTimeout); |
+ observer_.ice_connection_state_, kIceCandidatesTimeout); |
// The ice connection state is "Connected" too briefly to catch in a test. |
EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, |
- observer_.ice_connection_state_, |
- kIceCandidatesTimeout); |
+ observer_.ice_connection_state_, kIceCandidatesTimeout); |
+ } |
+ void TestLoopbackCall(const LoopbackNetworkConfiguration& config) { |
+ LoopbackNetworkManager loopback_network_manager(this, config); |
+ SetupLoopbackCall(); |
config.VerifyBestConnectionAfterIceConverge(metrics_observer_); |
// Adding firewall rule to block ping requests, which should cause |
// transport channel failure. |
@@ -1202,6 +1221,24 @@ class WebRtcSessionTest |
TestLoopbackCall(config); |
} |
+ void TestPacketOptions() { |
+ LoopbackNetworkConfiguration config; |
+ LoopbackNetworkManager loopback_network_manager(this, config); |
+ |
+ SetupLoopbackCall(); |
pthatcher1
2015/10/09 20:57:48
For testing, this would be more thorough if we mad
stefan-webrtc
2015/10/10 15:32:51
I don't think that method works, since the Content
|
+ |
+ uint8_t test_packet[15] = {0}; |
+ rtc::PacketOptions options; |
+ options.packet_id = 10; |
+ media_engine_->GetVideoChannel(0) |
+ ->SendRtp(test_packet, sizeof(test_packet), options); |
+ |
+ const int kPacketTimeout = 2000; |
+ EXPECT_EQ_WAIT(call_factory_.fake_call()->last_sent_packet().packet_id, 10, |
+ kPacketTimeout); |
+ EXPECT_GT(call_factory_.fake_call()->last_sent_packet().send_time_ms, -1); |
+ } |
+ |
// Adds CN codecs to FakeMediaEngine and MediaDescriptionFactory. |
void AddCNCodecs() { |
const cricket::AudioCodec kCNCodec1(102, "CN", 8000, 0, 1, 0); |
@@ -1321,6 +1358,7 @@ class WebRtcSessionTest |
cricket::FakeVideoMediaChannel* video_channel_; |
cricket::FakeVoiceMediaChannel* voice_channel_; |
rtc::scoped_refptr<FakeMetricsObserver> metrics_observer_; |
+ FakeCallFactory call_factory_; |
}; |
TEST_P(WebRtcSessionTest, TestInitializeWithDtls) { |
@@ -4032,6 +4070,10 @@ TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) { |
} |
} |
+TEST_F(WebRtcSessionTest, TestPacketOptionsAndOnPacketSent) { |
+ TestPacketOptions(); |
+} |
+ |
// TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
// currently fails because upon disconnection and reconnection OnIceComplete is |
// called more than once without returning to IceGatheringGathering. |