Index: webrtc/call/call_unittest.cc |
diff --git a/webrtc/call/call_unittest.cc b/webrtc/call/call_unittest.cc |
index 75c8238a5bd94bc3726e7f61c276e6963a1a64c1..d38afe6337f992331b3d21e02ebb4da48f1f9eec 100644 |
--- a/webrtc/call/call_unittest.cc |
+++ b/webrtc/call/call_unittest.cc |
@@ -14,6 +14,8 @@ |
#include "webrtc/audio_state.h" |
#include "webrtc/call.h" |
+#include "webrtc/modules/include/module_common_types.h" |
+#include "webrtc/test/call_test.h" |
#include "webrtc/test/mock_voice_engine.h" |
namespace { |
@@ -106,4 +108,85 @@ TEST(CallTest, CreateDestroy_AudioReceiveStreams) { |
streams.clear(); |
} |
} |
+ |
+namespace test { |
+ |
+class MediumCallTest : public CallTest {}; |
+ |
+TEST_F(MediumCallTest, TransportSeqNumOnAudioAndVideo) { |
+ class TransportSequenceNumberTest : public test::EndToEndTest { |
+ public: |
+ TransportSequenceNumberTest() |
+ : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
+ video_observed_(false), |
+ audio_observed_(false) { |
+ parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, |
+ kExtensionId); |
+ } |
+ |
+ size_t GetNumVideoStreams() const override { return 1; } |
+ size_t GetNumAudioStreams() const override { return 1; } |
+ |
+ void ModifyVideoConfigs( |
+ VideoSendStream::Config* send_config, |
+ std::vector<VideoReceiveStream::Config>* receive_configs, |
+ VideoEncoderConfig* encoder_config) { |
+ send_config->rtp.extensions.clear(); |
+ send_config->rtp.extensions.push_back( |
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
+ (*receive_configs)[0].rtp.extensions.clear(); |
+ (*receive_configs)[0].rtp.extensions.push_back( |
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
+ } |
+ |
+ void ModifyAudioConfigs( |
+ AudioSendStream::Config* send_config, |
+ std::vector<AudioReceiveStream::Config>* receive_configs) { |
+ send_config->rtp.extensions.clear(); |
+ send_config->rtp.extensions.push_back( |
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
+ (*receive_configs)[0].rtp.extensions.clear(); |
+ (*receive_configs)[0].rtp.extensions.push_back( |
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
+ } |
+ |
+ Action OnSendRtp(const uint8_t* packet, size_t length) override { |
+ RTPHeader header; |
+ EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
+ EXPECT_TRUE(header.extension.hasTransportSequenceNumber); |
+ // Unwrap packet id and verify uniqueness. |
+ int64_t packet_id = |
+ unwrapper_.Unwrap(header.extension.transportSequenceNumber); |
+ EXPECT_TRUE(received_packet_ids_.insert(packet_id).second); |
+ |
+ if (header.ssrc == kVideoSendSsrcs[0]) |
+ video_observed_ = true; |
+ if (header.ssrc == kAudioSendSsrc) |
+ audio_observed_ = true; |
+ if (audio_observed_ && video_observed_ && |
+ received_packet_ids_.size() == 50) { |
+ size_t packet_id_range = |
+ *received_packet_ids_.rbegin() - *received_packet_ids_.begin() + 1; |
+ EXPECT_EQ(received_packet_ids_.size(), packet_id_range); |
+ observation_complete_.Set(); |
+ } |
+ return SEND_PACKET; |
+ } |
+ |
+ void PerformTest() override { |
+ EXPECT_TRUE(Wait()) << "Timed out while waiting for audio and video " |
+ "packets with transport sequence number."; |
+ } |
+ |
+ private: |
+ const int kExtensionId = 8; |
+ bool video_observed_; |
+ bool audio_observed_; |
+ SequenceNumberUnwrapper unwrapper_; |
+ std::set<int64_t> received_packet_ids_; |
+ } test; |
+ |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
pbos-webrtc
2015/12/28 22:22:31
Wondering if this could be confused being put unde
stefan-webrtc
2015/12/29 09:37:06
I moved it in the latest patch set. Still under te
|
+} |
+} // namespace test |
} // namespace webrtc |