Index: webrtc/pc/mediasession_unittest.cc |
diff --git a/webrtc/pc/mediasession_unittest.cc b/webrtc/pc/mediasession_unittest.cc |
index aac6eac67bdac9c1947f38766924c058eab7ff57..4c3eb4f01e71a433b52451dd2af477127759c065 100644 |
--- a/webrtc/pc/mediasession_unittest.cc |
+++ b/webrtc/pc/mediasession_unittest.cc |
@@ -170,6 +170,12 @@ static const char kDataTrack1[] = "data_1"; |
static const char kDataTrack2[] = "data_2"; |
static const char kDataTrack3[] = "data_3"; |
+static const char* kMediaProtocols[] = {"RTP/AVP", "RTP/SAVP", "RTP/AVPF", |
+ "RTP/SAVPF"}; |
+static const char* kMediaProtocolsDtls[] = { |
+ "TCP/TLS/RTP/SAVPF", "TCP/TLS/RTP/SAVP", "UDP/TLS/RTP/SAVPF", |
+ "UDP/TLS/RTP/SAVP"}; |
+ |
static bool IsMediaContentOfType(const ContentInfo* content, |
MediaType media_type) { |
const MediaContentDescription* mdesc = |
@@ -2379,3 +2385,62 @@ TEST_F(MediaSessionDescriptionFactoryTest, |
EXPECT_EQ("video_modified", video_content->name); |
EXPECT_EQ("data_modified", data_content->name); |
} |
+ |
+class MediaProtocolTest : public ::testing::TestWithParam<const char*> { |
+ public: |
+ MediaProtocolTest() : f1_(&tdf1_), f2_(&tdf2_) { |
+ f1_.set_audio_codecs(MAKE_VECTOR(kAudioCodecs1)); |
+ f1_.set_video_codecs(MAKE_VECTOR(kVideoCodecs1)); |
+ f1_.set_data_codecs(MAKE_VECTOR(kDataCodecs1)); |
+ f2_.set_audio_codecs(MAKE_VECTOR(kAudioCodecs2)); |
+ f2_.set_video_codecs(MAKE_VECTOR(kVideoCodecs2)); |
+ f2_.set_data_codecs(MAKE_VECTOR(kDataCodecs2)); |
+ f1_.set_secure(SEC_ENABLED); |
+ f2_.set_secure(SEC_ENABLED); |
+ tdf1_.set_certificate(rtc::RTCCertificate::Create( |
+ rtc::scoped_ptr<rtc::SSLIdentity>(new rtc::FakeSSLIdentity("id1")))); |
+ tdf2_.set_certificate(rtc::RTCCertificate::Create( |
+ rtc::scoped_ptr<rtc::SSLIdentity>(new rtc::FakeSSLIdentity("id2")))); |
+ tdf1_.set_secure(SEC_ENABLED); |
+ tdf2_.set_secure(SEC_ENABLED); |
+ } |
+ |
+ protected: |
+ MediaSessionDescriptionFactory f1_; |
+ MediaSessionDescriptionFactory f2_; |
+ TransportDescriptionFactory tdf1_; |
+ TransportDescriptionFactory tdf2_; |
+}; |
+ |
+TEST_P(MediaProtocolTest, TestAudioVideoAcceptance) { |
+ MediaSessionOptions opts; |
+ opts.recv_video = true; |
+ std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr)); |
+ ASSERT_TRUE(offer.get() != nullptr); |
+ // Set the protocol for all the contents. |
+ for (auto content : offer.get()->contents()) { |
+ static_cast<MediaContentDescription*>(content.description) |
+ ->set_protocol(GetParam()); |
+ } |
+ std::unique_ptr<SessionDescription> answer( |
+ f2_.CreateAnswer(offer.get(), opts, nullptr)); |
+ const ContentInfo* ac = answer->GetContentByName("audio"); |
+ const ContentInfo* vc = answer->GetContentByName("video"); |
+ ASSERT_TRUE(ac != nullptr); |
+ ASSERT_TRUE(vc != nullptr); |
+ EXPECT_FALSE(ac->rejected); // the offer is accepted |
+ EXPECT_FALSE(vc->rejected); |
+ const AudioContentDescription* acd = |
+ static_cast<const AudioContentDescription*>(ac->description); |
+ const VideoContentDescription* vcd = |
+ static_cast<const VideoContentDescription*>(vc->description); |
+ EXPECT_EQ(GetParam(), acd->protocol()); |
+ EXPECT_EQ(GetParam(), vcd->protocol()); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(MediaProtocolPatternTest, |
+ MediaProtocolTest, |
+ ::testing::ValuesIn(kMediaProtocols)); |
+INSTANTIATE_TEST_CASE_P(MediaProtocolDtlsPatternTest, |
+ MediaProtocolTest, |
+ ::testing::ValuesIn(kMediaProtocolsDtls)); |