Chromium Code Reviews| 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")))); |
|
tommi
2016/04/14 12:59:10
I'm curious - do you need to create a scoped_ptr h
|
| + 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)); |