Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: webrtc/api/peerconnection_unittest.cc

Issue 1999853002: Forward the SignalFirstPacketReceived to RtpReceiver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Modification based on CR comments. Modified the peerconnection_unittest. Rename some parameters. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/api/peerconnection_unittest.cc
diff --git a/webrtc/api/peerconnection_unittest.cc b/webrtc/api/peerconnection_unittest.cc
index 20cd7a64396ccc3bcbe12653162035395a5f6c23..4ffa95189c1d7784ea301b1a5b0e165b1de6a0ba 100644
--- a/webrtc/api/peerconnection_unittest.cc
+++ b/webrtc/api/peerconnection_unittest.cc
@@ -146,6 +146,25 @@ class SignalingMessageReceiver {
virtual ~SignalingMessageReceiver() {}
};
+class MockRtpReceiverObserver : public webrtc::RtpReceiverObserverInterface {
+ public:
+ MockRtpReceiverObserver(cricket::MediaType media_type)
+ : expected_media_type_(media_type) {}
+
+ void OnFirstPacketReceived(cricket::MediaType media_type) override {
+ ASSERT_EQ(expected_media_type_, media_type);
+ first_packet_received_ = true;
+ }
+
+ bool first_packet_received() { return first_packet_received_; }
+
+ virtual ~MockRtpReceiverObserver() {}
+
+ private:
+ bool first_packet_received_ = false;
+ cricket::MediaType expected_media_type_;
+};
+
class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
public SignalingMessageReceiver,
public ObserverInterface {
@@ -780,6 +799,21 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
return pc()->ice_gathering_state();
}
+ std::vector<std::unique_ptr<MockRtpReceiverObserver>> const&
+ rtp_receiver_observers() {
+ return rtp_receiver_observers_;
+ }
+
+ void SetRtpReceiverObservers() {
+ rtp_receiver_observers_.clear();
+ for (auto receiver : pc()->GetReceivers()) {
+ std::unique_ptr<MockRtpReceiverObserver> observer(
+ new MockRtpReceiverObserver(receiver->media_type()));
+ receiver->SetObserver(observer.get());
+ rtp_receiver_observers_.push_back(std::move(observer));
+ }
+ }
+
private:
class DummyDtmfObserver : public DtmfSenderObserverInterface {
public:
@@ -870,6 +904,8 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
std::unique_ptr<SessionDescriptionInterface> desc(
webrtc::CreateSessionDescription("offer", msg, nullptr));
EXPECT_TRUE(DoSetRemoteDescription(desc.release()));
+ // Set the RtpReceiverObserver after receivers are created.
+ SetRtpReceiverObservers();
std::unique_ptr<SessionDescriptionInterface> answer;
EXPECT_TRUE(DoCreateAnswer(&answer));
std::string sdp;
@@ -886,6 +922,8 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
std::unique_ptr<SessionDescriptionInterface> desc(
webrtc::CreateSessionDescription("answer", msg, nullptr));
EXPECT_TRUE(DoSetRemoteDescription(desc.release()));
+ // Set the RtpReceiverObserver after receivers are created.
+ SetRtpReceiverObservers();
}
bool DoCreateOfferAnswer(std::unique_ptr<SessionDescriptionInterface>* desc,
@@ -1026,6 +1064,8 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
rtc::scoped_refptr<DataChannelInterface> data_channel_;
std::unique_ptr<MockDataChannelObserver> data_observer_;
+
+ std::vector<std::unique_ptr<MockRtpReceiverObserver>> rtp_receiver_observers_;
};
class P2PTestConductor : public testing::Test {
@@ -1314,6 +1354,12 @@ class P2PTestConductor : public testing::Test {
return old;
}
+ void CheckRtpReceiverObserverAreCalled(PeerConnectionTestClient* client) {
pthatcher1 2016/06/13 23:27:27 This should probably be: EXPECT_TRUE_WAIT(std::al
+ for (auto const& observer : client->rtp_receiver_observers()) {
+ EXPECT_TRUE_WAIT(observer->first_packet_received(), kMaxWaitForFramesMs);
+ }
+ }
+
private:
// |ss_| is used by |network_thread_| so it must be destroyed later.
std::unique_ptr<rtc::PhysicalSocketServer> pss_;
@@ -1332,6 +1378,25 @@ class P2PTestConductor : public testing::Test {
// https://code.google.com/p/webrtc/issues/detail?id=1205 for details.
#if !defined(THREAD_SANITIZER)
+TEST_F(P2PTestConductor, TestRtpReceiverObserverCallbackFunction) {
+ ASSERT_TRUE(CreateTestClients());
+ LocalP2PTest();
+ CheckRtpReceiverObserverAreCalled(initializing_client());
+ CheckRtpReceiverObserverAreCalled(receiving_client());
+}
+
+// The observers are expected to fire the signal even if they are set after the
+// first packet is received.
+TEST_F(P2PTestConductor, TestSetRtpReceiverObserverAfterFirstPacketIsReceived) {
+ ASSERT_TRUE(CreateTestClients());
+ LocalP2PTest();
+ // Reset the RtpReceiverObservers.
+ initializing_client()->SetRtpReceiverObservers();
+ receiving_client()->SetRtpReceiverObservers();
+ CheckRtpReceiverObserverAreCalled(initializing_client());
+ CheckRtpReceiverObserverAreCalled(receiving_client());
+}
+
// This test sets up a Jsep call between two parties and test Dtmf.
// TODO(holmer): Disabled due to sometimes crashing on buildbots.
// See issue webrtc/2378.

Powered by Google App Engine
This is Rietveld 408576698