| Index: talk/app/webrtc/peerconnection_unittest.cc
|
| diff --git a/talk/app/webrtc/peerconnection_unittest.cc b/talk/app/webrtc/peerconnection_unittest.cc
|
| index c8b0c8cf6a14079e0276e46ce37b577b9cd48998..38f90e75c646e9c2a40f284ddd56bd8dae42c9a6 100644
|
| --- a/talk/app/webrtc/peerconnection_unittest.cc
|
| +++ b/talk/app/webrtc/peerconnection_unittest.cc
|
| @@ -127,13 +127,6 @@ static void RemoveLinesFromSdp(const std::string& line_start,
|
|
|
| class SignalingMessageReceiver {
|
| public:
|
| - protected:
|
| - SignalingMessageReceiver() {}
|
| - virtual ~SignalingMessageReceiver() {}
|
| -};
|
| -
|
| -class JsepMessageReceiver : public SignalingMessageReceiver {
|
| - public:
|
| virtual void ReceiveSdpMessage(const std::string& type,
|
| std::string& msg) = 0;
|
| virtual void ReceiveIceMessage(const std::string& sdp_mid,
|
| @@ -141,16 +134,26 @@ class JsepMessageReceiver : public SignalingMessageReceiver {
|
| const std::string& msg) = 0;
|
|
|
| protected:
|
| - JsepMessageReceiver() {}
|
| - virtual ~JsepMessageReceiver() {}
|
| + SignalingMessageReceiver() {}
|
| + virtual ~SignalingMessageReceiver() {}
|
| };
|
|
|
| -template <typename MessageReceiver>
|
| -class PeerConnectionTestClientBase
|
| - : public webrtc::PeerConnectionObserver,
|
| - public MessageReceiver {
|
| +class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
|
| + public SignalingMessageReceiver {
|
| public:
|
| - ~PeerConnectionTestClientBase() {
|
| + static PeerConnectionTestClient* CreateClient(
|
| + const std::string& id,
|
| + const MediaConstraintsInterface* constraints,
|
| + const PeerConnectionFactory::Options* options) {
|
| + PeerConnectionTestClient* client(new PeerConnectionTestClient(id));
|
| + if (!client->Init(constraints, options)) {
|
| + delete client;
|
| + return nullptr;
|
| + }
|
| + return client;
|
| + }
|
| +
|
| + ~PeerConnectionTestClient() {
|
| while (!fake_video_renderers_.empty()) {
|
| RenderMap::iterator it = fake_video_renderers_.begin();
|
| delete it->second;
|
| @@ -158,19 +161,91 @@ class PeerConnectionTestClientBase
|
| }
|
| }
|
|
|
| - virtual void Negotiate() = 0;
|
| + void Negotiate() { Negotiate(true, true); }
|
| +
|
| + void Negotiate(bool audio, bool video) {
|
| + rtc::scoped_ptr<SessionDescriptionInterface> offer;
|
| + ASSERT_TRUE(DoCreateOffer(offer.use()));
|
| +
|
| + if (offer->description()->GetContentByName("audio")) {
|
| + offer->description()->GetContentByName("audio")->rejected = !audio;
|
| + }
|
| + if (offer->description()->GetContentByName("video")) {
|
| + offer->description()->GetContentByName("video")->rejected = !video;
|
| + }
|
| +
|
| + std::string sdp;
|
| + EXPECT_TRUE(offer->ToString(&sdp));
|
| + EXPECT_TRUE(DoSetLocalDescription(offer.release()));
|
| + signaling_message_receiver_->ReceiveSdpMessage(
|
| + webrtc::SessionDescriptionInterface::kOffer, sdp);
|
| + }
|
| +
|
| + // SignalingMessageReceiver callback.
|
| + void ReceiveSdpMessage(const std::string& type, std::string& msg) override {
|
| + FilterIncomingSdpMessage(&msg);
|
| + if (type == webrtc::SessionDescriptionInterface::kOffer) {
|
| + HandleIncomingOffer(msg);
|
| + } else {
|
| + HandleIncomingAnswer(msg);
|
| + }
|
| + }
|
|
|
| - virtual void Negotiate(bool audio, bool video) = 0;
|
| + // SignalingMessageReceiver callback.
|
| + void ReceiveIceMessage(const std::string& sdp_mid,
|
| + int sdp_mline_index,
|
| + const std::string& msg) override {
|
| + LOG(INFO) << id_ << "ReceiveIceMessage";
|
| + rtc::scoped_ptr<webrtc::IceCandidateInterface> candidate(
|
| + webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, msg, nullptr));
|
| + EXPECT_TRUE(pc()->AddIceCandidate(candidate.get()));
|
| + }
|
|
|
| - virtual void SetVideoConstraints(
|
| - const webrtc::FakeConstraints& video_constraint) {
|
| + // PeerConnectionObserver callbacks.
|
| + void OnSignalingChange(
|
| + webrtc::PeerConnectionInterface::SignalingState new_state) override {
|
| + EXPECT_EQ(pc()->signaling_state(), new_state);
|
| + }
|
| + void OnAddStream(webrtc::MediaStreamInterface* media_stream) override {
|
| + for (size_t i = 0; i < media_stream->GetVideoTracks().size(); ++i) {
|
| + const std::string id = media_stream->GetVideoTracks()[i]->id();
|
| + ASSERT_TRUE(fake_video_renderers_.find(id) ==
|
| + fake_video_renderers_.end());
|
| + fake_video_renderers_[id] =
|
| + new webrtc::FakeVideoTrackRenderer(media_stream->GetVideoTracks()[i]);
|
| + }
|
| + }
|
| + void OnRemoveStream(webrtc::MediaStreamInterface* media_stream) override {}
|
| + void OnRenegotiationNeeded() override {}
|
| + void OnIceConnectionChange(
|
| + webrtc::PeerConnectionInterface::IceConnectionState new_state) override {
|
| + EXPECT_EQ(pc()->ice_connection_state(), new_state);
|
| + }
|
| + void OnIceGatheringChange(
|
| + webrtc::PeerConnectionInterface::IceGatheringState new_state) override {
|
| + EXPECT_EQ(pc()->ice_gathering_state(), new_state);
|
| + }
|
| + void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override {
|
| + LOG(INFO) << id_ << "OnIceCandidate";
|
| +
|
| + std::string ice_sdp;
|
| + EXPECT_TRUE(candidate->ToString(&ice_sdp));
|
| + if (signaling_message_receiver_ == nullptr) {
|
| + // Remote party may be deleted.
|
| + return;
|
| + }
|
| + signaling_message_receiver_->ReceiveIceMessage(
|
| + candidate->sdp_mid(), candidate->sdp_mline_index(), ice_sdp);
|
| + }
|
| +
|
| + void SetVideoConstraints(const webrtc::FakeConstraints& video_constraint) {
|
| video_constraints_ = video_constraint;
|
| }
|
|
|
| void AddMediaStream(bool audio, bool video) {
|
| - std::string stream_label = kStreamLabelBase +
|
| - rtc::ToString<int>(
|
| - static_cast<int>(peer_connection_->local_streams()->count()));
|
| + std::string stream_label =
|
| + kStreamLabelBase +
|
| + rtc::ToString<int>(static_cast<int>(pc()->local_streams()->count()));
|
| rtc::scoped_refptr<webrtc::MediaStreamInterface> stream =
|
| peer_connection_factory_->CreateLocalMediaStream(stream_label);
|
|
|
| @@ -192,20 +267,17 @@ class PeerConnectionTestClientBase
|
| stream->AddTrack(CreateLocalVideoTrack(stream_label));
|
| }
|
|
|
| - EXPECT_TRUE(peer_connection_->AddStream(stream));
|
| + EXPECT_TRUE(pc()->AddStream(stream));
|
| }
|
|
|
| - size_t NumberOfLocalMediaStreams() {
|
| - return peer_connection_->local_streams()->count();
|
| - }
|
| + size_t NumberOfLocalMediaStreams() { return pc()->local_streams()->count(); }
|
|
|
| bool SessionActive() {
|
| - return peer_connection_->signaling_state() ==
|
| - webrtc::PeerConnectionInterface::kStable;
|
| + return pc()->signaling_state() == webrtc::PeerConnectionInterface::kStable;
|
| }
|
|
|
| void set_signaling_message_receiver(
|
| - MessageReceiver* signaling_message_receiver) {
|
| + SignalingMessageReceiver* signaling_message_receiver) {
|
| signaling_message_receiver_ = signaling_message_receiver;
|
| }
|
|
|
| @@ -215,6 +287,91 @@ class PeerConnectionTestClientBase
|
| webrtc::kVideoCodecVP8);
|
| }
|
|
|
| + void IceRestart() {
|
| + session_description_constraints_.SetMandatoryIceRestart(true);
|
| + SetExpectIceRestart(true);
|
| + }
|
| +
|
| + void SetExpectIceRestart(bool expect_restart) {
|
| + expect_ice_restart_ = expect_restart;
|
| + }
|
| +
|
| + bool ExpectIceRestart() const { return expect_ice_restart_; }
|
| +
|
| + void SetReceiveAudioVideo(bool audio, bool video) {
|
| + SetReceiveAudio(audio);
|
| + SetReceiveVideo(video);
|
| + ASSERT_EQ(audio, can_receive_audio());
|
| + ASSERT_EQ(video, can_receive_video());
|
| + }
|
| +
|
| + void SetReceiveAudio(bool audio) {
|
| + if (audio && can_receive_audio())
|
| + return;
|
| + session_description_constraints_.SetMandatoryReceiveAudio(audio);
|
| + }
|
| +
|
| + void SetReceiveVideo(bool video) {
|
| + if (video && can_receive_video())
|
| + return;
|
| + session_description_constraints_.SetMandatoryReceiveVideo(video);
|
| + }
|
| +
|
| + void RemoveMsidFromReceivedSdp(bool remove) { remove_msid_ = remove; }
|
| +
|
| + void RemoveSdesCryptoFromReceivedSdp(bool remove) { remove_sdes_ = remove; }
|
| +
|
| + void RemoveBundleFromReceivedSdp(bool remove) { remove_bundle_ = remove; }
|
| +
|
| + bool can_receive_audio() {
|
| + bool value;
|
| + if (webrtc::FindConstraint(&session_description_constraints_,
|
| + MediaConstraintsInterface::kOfferToReceiveAudio,
|
| + &value, nullptr)) {
|
| + return value;
|
| + }
|
| + return true;
|
| + }
|
| +
|
| + bool can_receive_video() {
|
| + bool value;
|
| + if (webrtc::FindConstraint(&session_description_constraints_,
|
| + MediaConstraintsInterface::kOfferToReceiveVideo,
|
| + &value, nullptr)) {
|
| + return value;
|
| + }
|
| + return true;
|
| + }
|
| +
|
| + void OnIceComplete() override { LOG(INFO) << id_ << "OnIceComplete"; }
|
| +
|
| + void OnDataChannel(DataChannelInterface* data_channel) override {
|
| + LOG(INFO) << id_ << "OnDataChannel";
|
| + data_channel_ = data_channel;
|
| + data_observer_.reset(new MockDataChannelObserver(data_channel));
|
| + }
|
| +
|
| + void CreateDataChannel() {
|
| + data_channel_ = pc()->CreateDataChannel(kDataChannelLabel, nullptr);
|
| + ASSERT_TRUE(data_channel_.get() != nullptr);
|
| + data_observer_.reset(new MockDataChannelObserver(data_channel_));
|
| + }
|
| +
|
| + DataChannelInterface* data_channel() { return data_channel_; }
|
| + const MockDataChannelObserver* data_observer() const {
|
| + return data_observer_.get();
|
| + }
|
| +
|
| + webrtc::PeerConnectionInterface* pc() { return peer_connection_.get(); }
|
| +
|
| + void StopVideoCapturers() {
|
| + for (std::vector<cricket::VideoCapturer*>::iterator it =
|
| + video_capturers_.begin();
|
| + it != video_capturers_.end(); ++it) {
|
| + (*it)->Stop();
|
| + }
|
| + }
|
| +
|
| bool AudioFramesReceivedCheck(int number_of_frames) const {
|
| return number_of_frames <= fake_audio_capture_module_->frames_received();
|
| }
|
| @@ -248,6 +405,7 @@ class PeerConnectionTestClientBase
|
| return true;
|
| }
|
| }
|
| +
|
| // Verify the CreateDtmfSender interface
|
| void VerifyDtmf() {
|
| rtc::scoped_ptr<DummyDtmfObserver> observer(new DummyDtmfObserver());
|
| @@ -255,17 +413,16 @@ class PeerConnectionTestClientBase
|
|
|
| // We can't create a DTMF sender with an invalid audio track or a non local
|
| // track.
|
| - EXPECT_TRUE(peer_connection_->CreateDtmfSender(NULL) == NULL);
|
| + EXPECT_TRUE(peer_connection_->CreateDtmfSender(nullptr) == nullptr);
|
| rtc::scoped_refptr<webrtc::AudioTrackInterface> non_localtrack(
|
| - peer_connection_factory_->CreateAudioTrack("dummy_track",
|
| - NULL));
|
| - EXPECT_TRUE(peer_connection_->CreateDtmfSender(non_localtrack) == NULL);
|
| + peer_connection_factory_->CreateAudioTrack("dummy_track", nullptr));
|
| + EXPECT_TRUE(peer_connection_->CreateDtmfSender(non_localtrack) == nullptr);
|
|
|
| // We should be able to create a DTMF sender from a local track.
|
| webrtc::AudioTrackInterface* localtrack =
|
| peer_connection_->local_streams()->at(0)->GetAudioTracks()[0];
|
| dtmf_sender = peer_connection_->CreateDtmfSender(localtrack);
|
| - EXPECT_TRUE(dtmf_sender.get() != NULL);
|
| + EXPECT_TRUE(dtmf_sender.get() != nullptr);
|
| dtmf_sender->RegisterObserver(observer.get());
|
|
|
| // Test the DtmfSender object just created.
|
| @@ -288,8 +445,8 @@ class PeerConnectionTestClientBase
|
| // Verifies that the SessionDescription have rejected the appropriate media
|
| // content.
|
| void VerifyRejectedMediaInSessionDescription() {
|
| - ASSERT_TRUE(peer_connection_->remote_description() != NULL);
|
| - ASSERT_TRUE(peer_connection_->local_description() != NULL);
|
| + ASSERT_TRUE(peer_connection_->remote_description() != nullptr);
|
| + ASSERT_TRUE(peer_connection_->local_description() != nullptr);
|
| const cricket::SessionDescription* remote_desc =
|
| peer_connection_->remote_description()->description();
|
| const cricket::SessionDescription* local_desc =
|
| @@ -310,14 +467,8 @@ class PeerConnectionTestClientBase
|
| }
|
| }
|
|
|
| - void SetExpectIceRestart(bool expect_restart) {
|
| - expect_ice_restart_ = expect_restart;
|
| - }
|
| -
|
| - bool ExpectIceRestart() const { return expect_ice_restart_; }
|
| -
|
| void VerifyLocalIceUfragAndPassword() {
|
| - ASSERT_TRUE(peer_connection_->local_description() != NULL);
|
| + ASSERT_TRUE(peer_connection_->local_description() != nullptr);
|
| const cricket::SessionDescription* desc =
|
| peer_connection_->local_description()->description();
|
| const cricket::ContentInfos& contents = desc->contents();
|
| @@ -360,7 +511,7 @@ class PeerConnectionTestClientBase
|
| rtc::scoped_refptr<MockStatsObserver>
|
| observer(new rtc::RefCountedObject<MockStatsObserver>());
|
| EXPECT_TRUE(peer_connection_->GetStats(
|
| - observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| + observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
|
| EXPECT_NE(0, observer->timestamp());
|
| return observer->AudioInputLevel();
|
| @@ -390,7 +541,7 @@ class PeerConnectionTestClientBase
|
| rtc::scoped_refptr<MockStatsObserver>
|
| observer(new rtc::RefCountedObject<MockStatsObserver>());
|
| EXPECT_TRUE(peer_connection_->GetStats(
|
| - observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| + observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
|
| EXPECT_NE(0, observer->timestamp());
|
| int bw = observer->AvailableReceiveBandwidth();
|
| @@ -401,7 +552,7 @@ class PeerConnectionTestClientBase
|
| rtc::scoped_refptr<MockStatsObserver>
|
| observer(new rtc::RefCountedObject<MockStatsObserver>());
|
| EXPECT_TRUE(peer_connection_->GetStats(
|
| - observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| + observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
|
| EXPECT_NE(0, observer->timestamp());
|
| return observer->DtlsCipher();
|
| @@ -411,7 +562,7 @@ class PeerConnectionTestClientBase
|
| rtc::scoped_refptr<MockStatsObserver>
|
| observer(new rtc::RefCountedObject<MockStatsObserver>());
|
| EXPECT_TRUE(peer_connection_->GetStats(
|
| - observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| + observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
|
| EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
|
| EXPECT_NE(0, observer->timestamp());
|
| return observer->SrtpCipher();
|
| @@ -438,7 +589,7 @@ class PeerConnectionTestClientBase
|
| StreamCollectionInterface* remote_streams() {
|
| if (!pc()) {
|
| ADD_FAILURE();
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| return pc()->remote_streams();
|
| }
|
| @@ -446,7 +597,7 @@ class PeerConnectionTestClientBase
|
| StreamCollectionInterface* local_streams() {
|
| if (!pc()) {
|
| ADD_FAILURE();
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| return pc()->local_streams();
|
| }
|
| @@ -463,54 +614,33 @@ class PeerConnectionTestClientBase
|
| return pc()->ice_gathering_state();
|
| }
|
|
|
| - // PeerConnectionObserver callbacks.
|
| - virtual void OnMessage(const std::string&) {}
|
| - virtual void OnSignalingMessage(const std::string& /*msg*/) {}
|
| - virtual void OnSignalingChange(
|
| - webrtc::PeerConnectionInterface::SignalingState new_state) {
|
| - EXPECT_EQ(peer_connection_->signaling_state(), new_state);
|
| - }
|
| - virtual void OnAddStream(webrtc::MediaStreamInterface* media_stream) {
|
| - for (size_t i = 0; i < media_stream->GetVideoTracks().size(); ++i) {
|
| - const std::string id = media_stream->GetVideoTracks()[i]->id();
|
| - ASSERT_TRUE(fake_video_renderers_.find(id) ==
|
| - fake_video_renderers_.end());
|
| - fake_video_renderers_[id] = new webrtc::FakeVideoTrackRenderer(
|
| - media_stream->GetVideoTracks()[i]);
|
| + private:
|
| + class DummyDtmfObserver : public DtmfSenderObserverInterface {
|
| + public:
|
| + DummyDtmfObserver() : completed_(false) {}
|
| +
|
| + // Implements DtmfSenderObserverInterface.
|
| + void OnToneChange(const std::string& tone) override {
|
| + tones_.push_back(tone);
|
| + if (tone.empty()) {
|
| + completed_ = true;
|
| + }
|
| }
|
| - }
|
| - virtual void OnRemoveStream(webrtc::MediaStreamInterface* media_stream) {}
|
| - virtual void OnRenegotiationNeeded() {}
|
| - virtual void OnIceConnectionChange(
|
| - webrtc::PeerConnectionInterface::IceConnectionState new_state) {
|
| - EXPECT_EQ(peer_connection_->ice_connection_state(), new_state);
|
| - }
|
| - virtual void OnIceGatheringChange(
|
| - webrtc::PeerConnectionInterface::IceGatheringState new_state) {
|
| - EXPECT_EQ(peer_connection_->ice_gathering_state(), new_state);
|
| - }
|
| - virtual void OnIceCandidate(
|
| - const webrtc::IceCandidateInterface* /*candidate*/) {}
|
|
|
| - webrtc::PeerConnectionInterface* pc() {
|
| - return peer_connection_.get();
|
| - }
|
| - void StopVideoCapturers() {
|
| - for (std::vector<cricket::VideoCapturer*>::iterator it =
|
| - video_capturers_.begin(); it != video_capturers_.end(); ++it) {
|
| - (*it)->Stop();
|
| + void Verify(const std::vector<std::string>& tones) const {
|
| + ASSERT_TRUE(tones_.size() == tones.size());
|
| + EXPECT_TRUE(std::equal(tones.begin(), tones.end(), tones_.begin()));
|
| }
|
| - }
|
|
|
| - protected:
|
| - explicit PeerConnectionTestClientBase(const std::string& id)
|
| - : id_(id),
|
| - expect_ice_restart_(false),
|
| - fake_video_decoder_factory_(NULL),
|
| - fake_video_encoder_factory_(NULL),
|
| - video_decoder_factory_enabled_(false),
|
| - signaling_message_receiver_(NULL) {
|
| - }
|
| + bool completed() const { return completed_; }
|
| +
|
| + private:
|
| + bool completed_;
|
| + std::vector<std::string> tones_;
|
| + };
|
| +
|
| + explicit PeerConnectionTestClient(const std::string& id) : id_(id) {}
|
| +
|
| bool Init(const MediaConstraintsInterface* constraints,
|
| const PeerConnectionFactory::Options* options) {
|
| EXPECT_TRUE(!peer_connection_);
|
| @@ -521,7 +651,7 @@ class PeerConnectionTestClientBase
|
| }
|
| fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
|
|
|
| - if (fake_audio_capture_module_ == NULL) {
|
| + if (fake_audio_capture_module_ == nullptr) {
|
| return false;
|
| }
|
| fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory();
|
| @@ -538,46 +668,8 @@ class PeerConnectionTestClientBase
|
| }
|
| peer_connection_ = CreatePeerConnection(allocator_factory_.get(),
|
| constraints);
|
| - return peer_connection_.get() != NULL;
|
| + return peer_connection_.get() != nullptr;
|
| }
|
| - virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface>
|
| - CreatePeerConnection(webrtc::PortAllocatorFactoryInterface* factory,
|
| - const MediaConstraintsInterface* constraints) = 0;
|
| - MessageReceiver* signaling_message_receiver() {
|
| - return signaling_message_receiver_;
|
| - }
|
| - webrtc::PeerConnectionFactoryInterface* peer_connection_factory() {
|
| - return peer_connection_factory_.get();
|
| - }
|
| -
|
| - virtual bool can_receive_audio() = 0;
|
| - virtual bool can_receive_video() = 0;
|
| - const std::string& id() const { return id_; }
|
| -
|
| - private:
|
| - class DummyDtmfObserver : public DtmfSenderObserverInterface {
|
| - public:
|
| - DummyDtmfObserver() : completed_(false) {}
|
| -
|
| - // Implements DtmfSenderObserverInterface.
|
| - void OnToneChange(const std::string& tone) {
|
| - tones_.push_back(tone);
|
| - if (tone.empty()) {
|
| - completed_ = true;
|
| - }
|
| - }
|
| -
|
| - void Verify(const std::vector<std::string>& tones) const {
|
| - ASSERT_TRUE(tones_.size() == tones.size());
|
| - EXPECT_TRUE(std::equal(tones.begin(), tones.end(), tones_.begin()));
|
| - }
|
| -
|
| - bool completed() const { return completed_; }
|
| -
|
| - private:
|
| - bool completed_;
|
| - std::vector<std::string> tones_;
|
| - };
|
|
|
| rtc::scoped_refptr<webrtc::VideoTrackInterface>
|
| CreateLocalVideoTrack(const std::string stream_label) {
|
| @@ -595,195 +687,9 @@ class PeerConnectionTestClientBase
|
| return peer_connection_factory_->CreateVideoTrack(label, source);
|
| }
|
|
|
| - std::string id_;
|
| -
|
| - rtc::scoped_refptr<webrtc::PortAllocatorFactoryInterface>
|
| - allocator_factory_;
|
| - rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
|
| - rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
|
| - peer_connection_factory_;
|
| -
|
| - typedef std::pair<std::string, std::string> IceUfragPwdPair;
|
| - std::map<int, IceUfragPwdPair> ice_ufrag_pwd_;
|
| - bool expect_ice_restart_;
|
| -
|
| - // Needed to keep track of number of frames send.
|
| - rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_;
|
| - // Needed to keep track of number of frames received.
|
| - typedef std::map<std::string, webrtc::FakeVideoTrackRenderer*> RenderMap;
|
| - RenderMap fake_video_renderers_;
|
| - // Needed to keep track of number of frames received when external decoder
|
| - // used.
|
| - FakeWebRtcVideoDecoderFactory* fake_video_decoder_factory_;
|
| - FakeWebRtcVideoEncoderFactory* fake_video_encoder_factory_;
|
| - bool video_decoder_factory_enabled_;
|
| - webrtc::FakeConstraints video_constraints_;
|
| -
|
| - // For remote peer communication.
|
| - MessageReceiver* signaling_message_receiver_;
|
| -
|
| - // Store references to the video capturers we've created, so that we can stop
|
| - // them, if required.
|
| - std::vector<cricket::VideoCapturer*> video_capturers_;
|
| -};
|
| -
|
| -class JsepTestClient
|
| - : public PeerConnectionTestClientBase<JsepMessageReceiver> {
|
| - public:
|
| - static JsepTestClient* CreateClient(
|
| - const std::string& id,
|
| - const MediaConstraintsInterface* constraints,
|
| - const PeerConnectionFactory::Options* options) {
|
| - JsepTestClient* client(new JsepTestClient(id));
|
| - if (!client->Init(constraints, options)) {
|
| - delete client;
|
| - return NULL;
|
| - }
|
| - return client;
|
| - }
|
| - ~JsepTestClient() {}
|
| -
|
| - virtual void Negotiate() {
|
| - Negotiate(true, true);
|
| - }
|
| - virtual void Negotiate(bool audio, bool video) {
|
| - rtc::scoped_ptr<SessionDescriptionInterface> offer;
|
| - ASSERT_TRUE(DoCreateOffer(offer.use()));
|
| -
|
| - if (offer->description()->GetContentByName("audio")) {
|
| - offer->description()->GetContentByName("audio")->rejected = !audio;
|
| - }
|
| - if (offer->description()->GetContentByName("video")) {
|
| - offer->description()->GetContentByName("video")->rejected = !video;
|
| - }
|
| -
|
| - std::string sdp;
|
| - EXPECT_TRUE(offer->ToString(&sdp));
|
| - EXPECT_TRUE(DoSetLocalDescription(offer.release()));
|
| - signaling_message_receiver()->ReceiveSdpMessage(
|
| - webrtc::SessionDescriptionInterface::kOffer, sdp);
|
| - }
|
| - // JsepMessageReceiver callback.
|
| - virtual void ReceiveSdpMessage(const std::string& type,
|
| - std::string& msg) {
|
| - FilterIncomingSdpMessage(&msg);
|
| - if (type == webrtc::SessionDescriptionInterface::kOffer) {
|
| - HandleIncomingOffer(msg);
|
| - } else {
|
| - HandleIncomingAnswer(msg);
|
| - }
|
| - }
|
| - // JsepMessageReceiver callback.
|
| - virtual void ReceiveIceMessage(const std::string& sdp_mid,
|
| - int sdp_mline_index,
|
| - const std::string& msg) {
|
| - LOG(INFO) << id() << "ReceiveIceMessage";
|
| - rtc::scoped_ptr<webrtc::IceCandidateInterface> candidate(
|
| - webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, msg, NULL));
|
| - EXPECT_TRUE(pc()->AddIceCandidate(candidate.get()));
|
| - }
|
| - // Implements PeerConnectionObserver functions needed by Jsep.
|
| - virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {
|
| - LOG(INFO) << id() << "OnIceCandidate";
|
| -
|
| - std::string ice_sdp;
|
| - EXPECT_TRUE(candidate->ToString(&ice_sdp));
|
| - if (signaling_message_receiver() == NULL) {
|
| - // Remote party may be deleted.
|
| - return;
|
| - }
|
| - signaling_message_receiver()->ReceiveIceMessage(candidate->sdp_mid(),
|
| - candidate->sdp_mline_index(), ice_sdp);
|
| - }
|
| -
|
| - void IceRestart() {
|
| - session_description_constraints_.SetMandatoryIceRestart(true);
|
| - SetExpectIceRestart(true);
|
| - }
|
| -
|
| - void SetReceiveAudioVideo(bool audio, bool video) {
|
| - SetReceiveAudio(audio);
|
| - SetReceiveVideo(video);
|
| - ASSERT_EQ(audio, can_receive_audio());
|
| - ASSERT_EQ(video, can_receive_video());
|
| - }
|
| -
|
| - void SetReceiveAudio(bool audio) {
|
| - if (audio && can_receive_audio())
|
| - return;
|
| - session_description_constraints_.SetMandatoryReceiveAudio(audio);
|
| - }
|
| -
|
| - void SetReceiveVideo(bool video) {
|
| - if (video && can_receive_video())
|
| - return;
|
| - session_description_constraints_.SetMandatoryReceiveVideo(video);
|
| - }
|
| -
|
| - void RemoveMsidFromReceivedSdp(bool remove) {
|
| - remove_msid_ = remove;
|
| - }
|
| -
|
| - void RemoveSdesCryptoFromReceivedSdp(bool remove) {
|
| - remove_sdes_ = remove;
|
| - }
|
| -
|
| - void RemoveBundleFromReceivedSdp(bool remove) {
|
| - remove_bundle_ = remove;
|
| - }
|
| -
|
| - virtual bool can_receive_audio() {
|
| - bool value;
|
| - if (webrtc::FindConstraint(&session_description_constraints_,
|
| - MediaConstraintsInterface::kOfferToReceiveAudio, &value, NULL)) {
|
| - return value;
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - virtual bool can_receive_video() {
|
| - bool value;
|
| - if (webrtc::FindConstraint(&session_description_constraints_,
|
| - MediaConstraintsInterface::kOfferToReceiveVideo, &value, NULL)) {
|
| - return value;
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - virtual void OnIceComplete() {
|
| - LOG(INFO) << id() << "OnIceComplete";
|
| - }
|
| -
|
| - virtual void OnDataChannel(DataChannelInterface* data_channel) {
|
| - LOG(INFO) << id() << "OnDataChannel";
|
| - data_channel_ = data_channel;
|
| - data_observer_.reset(new MockDataChannelObserver(data_channel));
|
| - }
|
| -
|
| - void CreateDataChannel() {
|
| - data_channel_ = pc()->CreateDataChannel(kDataChannelLabel,
|
| - NULL);
|
| - ASSERT_TRUE(data_channel_.get() != NULL);
|
| - data_observer_.reset(new MockDataChannelObserver(data_channel_));
|
| - }
|
| -
|
| - DataChannelInterface* data_channel() { return data_channel_; }
|
| - const MockDataChannelObserver* data_observer() const {
|
| - return data_observer_.get();
|
| - }
|
| -
|
| - protected:
|
| - explicit JsepTestClient(const std::string& id)
|
| - : PeerConnectionTestClientBase<JsepMessageReceiver>(id),
|
| - remove_msid_(false),
|
| - remove_bundle_(false),
|
| - remove_sdes_(false) {
|
| - }
|
| -
|
| - rtc::scoped_refptr<webrtc::PeerConnectionInterface>
|
| - CreatePeerConnection(
|
| - webrtc::PortAllocatorFactoryInterface* factory,
|
| - const MediaConstraintsInterface* constraints) override {
|
| + rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(
|
| + webrtc::PortAllocatorFactoryInterface* factory,
|
| + const MediaConstraintsInterface* constraints) {
|
| // CreatePeerConnection with IceServers.
|
| webrtc::PeerConnectionInterface::IceServers ice_servers;
|
| webrtc::PeerConnectionInterface::IceServer ice_server;
|
| @@ -793,34 +699,34 @@ class JsepTestClient
|
| rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store(
|
| rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore()
|
| : nullptr);
|
| - return peer_connection_factory()->CreatePeerConnection(
|
| + return peer_connection_factory_->CreatePeerConnection(
|
| ice_servers, constraints, factory, dtls_identity_store.Pass(), this);
|
| }
|
|
|
| void HandleIncomingOffer(const std::string& msg) {
|
| - LOG(INFO) << id() << "HandleIncomingOffer ";
|
| + LOG(INFO) << id_ << "HandleIncomingOffer ";
|
| if (NumberOfLocalMediaStreams() == 0) {
|
| // If we are not sending any streams ourselves it is time to add some.
|
| AddMediaStream(true, true);
|
| }
|
| rtc::scoped_ptr<SessionDescriptionInterface> desc(
|
| - webrtc::CreateSessionDescription("offer", msg, NULL));
|
| + webrtc::CreateSessionDescription("offer", msg, nullptr));
|
| EXPECT_TRUE(DoSetRemoteDescription(desc.release()));
|
| rtc::scoped_ptr<SessionDescriptionInterface> answer;
|
| EXPECT_TRUE(DoCreateAnswer(answer.use()));
|
| std::string sdp;
|
| EXPECT_TRUE(answer->ToString(&sdp));
|
| EXPECT_TRUE(DoSetLocalDescription(answer.release()));
|
| - if (signaling_message_receiver()) {
|
| - signaling_message_receiver()->ReceiveSdpMessage(
|
| + if (signaling_message_receiver_) {
|
| + signaling_message_receiver_->ReceiveSdpMessage(
|
| webrtc::SessionDescriptionInterface::kAnswer, sdp);
|
| }
|
| }
|
|
|
| void HandleIncomingAnswer(const std::string& msg) {
|
| - LOG(INFO) << id() << "HandleIncomingAnswer";
|
| + LOG(INFO) << id_ << "HandleIncomingAnswer";
|
| rtc::scoped_ptr<SessionDescriptionInterface> desc(
|
| - webrtc::CreateSessionDescription("answer", msg, NULL));
|
| + webrtc::CreateSessionDescription("answer", msg, nullptr));
|
| EXPECT_TRUE(DoSetRemoteDescription(desc.release()));
|
| }
|
|
|
| @@ -854,7 +760,7 @@ class JsepTestClient
|
| rtc::scoped_refptr<MockSetSessionDescriptionObserver>
|
| observer(new rtc::RefCountedObject<
|
| MockSetSessionDescriptionObserver>());
|
| - LOG(INFO) << id() << "SetLocalDescription ";
|
| + LOG(INFO) << id_ << "SetLocalDescription ";
|
| pc()->SetLocalDescription(observer, desc);
|
| // Ignore the observer result. If we wait for the result with
|
| // EXPECT_TRUE_WAIT, local ice candidates might be sent to the remote peer
|
| @@ -875,7 +781,7 @@ class JsepTestClient
|
| rtc::scoped_refptr<MockSetSessionDescriptionObserver>
|
| observer(new rtc::RefCountedObject<
|
| MockSetSessionDescriptionObserver>());
|
| - LOG(INFO) << id() << "SetRemoteDescription ";
|
| + LOG(INFO) << id_ << "SetRemoteDescription ";
|
| pc()->SetRemoteDescription(observer, desc);
|
| EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
|
| return observer->result();
|
| @@ -899,17 +805,47 @@ class JsepTestClient
|
| }
|
| }
|
|
|
| - private:
|
| + std::string id_;
|
| +
|
| + rtc::scoped_refptr<webrtc::PortAllocatorFactoryInterface> allocator_factory_;
|
| + rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
|
| + rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
|
| + peer_connection_factory_;
|
| +
|
| + typedef std::pair<std::string, std::string> IceUfragPwdPair;
|
| + std::map<int, IceUfragPwdPair> ice_ufrag_pwd_;
|
| + bool expect_ice_restart_ = false;
|
| +
|
| + // Needed to keep track of number of frames send.
|
| + rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_;
|
| + // Needed to keep track of number of frames received.
|
| + typedef std::map<std::string, webrtc::FakeVideoTrackRenderer*> RenderMap;
|
| + RenderMap fake_video_renderers_;
|
| + // Needed to keep track of number of frames received when external decoder
|
| + // used.
|
| + FakeWebRtcVideoDecoderFactory* fake_video_decoder_factory_ = nullptr;
|
| + FakeWebRtcVideoEncoderFactory* fake_video_encoder_factory_ = nullptr;
|
| + bool video_decoder_factory_enabled_ = false;
|
| + webrtc::FakeConstraints video_constraints_;
|
| +
|
| + // For remote peer communication.
|
| + SignalingMessageReceiver* signaling_message_receiver_ = nullptr;
|
| +
|
| + // Store references to the video capturers we've created, so that we can stop
|
| + // them, if required.
|
| + std::vector<cricket::VideoCapturer*> video_capturers_;
|
| +
|
| webrtc::FakeConstraints session_description_constraints_;
|
| - bool remove_msid_; // True if MSID should be removed in received SDP.
|
| - bool remove_bundle_; // True if bundle should be removed in received SDP.
|
| - bool remove_sdes_; // True if a=crypto should be removed in received SDP.
|
| + bool remove_msid_ = false; // True if MSID should be removed in received SDP.
|
| + bool remove_bundle_ =
|
| + false; // True if bundle should be removed in received SDP.
|
| + bool remove_sdes_ =
|
| + false; // True if a=crypto should be removed in received SDP.
|
|
|
| rtc::scoped_refptr<DataChannelInterface> data_channel_;
|
| rtc::scoped_ptr<MockDataChannelObserver> data_observer_;
|
| };
|
|
|
| -template <typename SignalingClass>
|
| class P2PTestConductor : public testing::Test {
|
| public:
|
| P2PTestConductor()
|
| @@ -969,32 +905,29 @@ class P2PTestConductor : public testing::Test {
|
|
|
| ~P2PTestConductor() {
|
| if (initiating_client_) {
|
| - initiating_client_->set_signaling_message_receiver(NULL);
|
| + initiating_client_->set_signaling_message_receiver(nullptr);
|
| }
|
| if (receiving_client_) {
|
| - receiving_client_->set_signaling_message_receiver(NULL);
|
| + receiving_client_->set_signaling_message_receiver(nullptr);
|
| }
|
| }
|
|
|
| - bool CreateTestClients() {
|
| - return CreateTestClients(NULL, NULL);
|
| - }
|
| + bool CreateTestClients() { return CreateTestClients(nullptr, nullptr); }
|
|
|
| bool CreateTestClients(MediaConstraintsInterface* init_constraints,
|
| MediaConstraintsInterface* recv_constraints) {
|
| - return CreateTestClients(init_constraints, NULL, recv_constraints, NULL);
|
| + return CreateTestClients(init_constraints, nullptr, recv_constraints,
|
| + nullptr);
|
| }
|
|
|
| bool CreateTestClients(MediaConstraintsInterface* init_constraints,
|
| PeerConnectionFactory::Options* init_options,
|
| MediaConstraintsInterface* recv_constraints,
|
| PeerConnectionFactory::Options* recv_options) {
|
| - initiating_client_.reset(SignalingClass::CreateClient("Caller: ",
|
| - init_constraints,
|
| - init_options));
|
| - receiving_client_.reset(SignalingClass::CreateClient("Callee: ",
|
| - recv_constraints,
|
| - recv_options));
|
| + initiating_client_.reset(PeerConnectionTestClient::CreateClient(
|
| + "Caller: ", init_constraints, init_options));
|
| + receiving_client_.reset(PeerConnectionTestClient::CreateClient(
|
| + "Callee: ", recv_constraints, recv_options));
|
| if (!initiating_client_ || !receiving_client_) {
|
| return false;
|
| }
|
| @@ -1088,17 +1021,20 @@ class P2PTestConductor : public testing::Test {
|
| }
|
| }
|
|
|
| - SignalingClass* initializing_client() { return initiating_client_.get(); }
|
| - SignalingClass* receiving_client() { return receiving_client_.get(); }
|
| + PeerConnectionTestClient* initializing_client() {
|
| + return initiating_client_.get();
|
| + }
|
| + PeerConnectionTestClient* receiving_client() {
|
| + return receiving_client_.get();
|
| + }
|
|
|
| private:
|
| rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_;
|
| rtc::scoped_ptr<rtc::VirtualSocketServer> ss_;
|
| rtc::SocketServerScope ss_scope_;
|
| - rtc::scoped_ptr<SignalingClass> initiating_client_;
|
| - rtc::scoped_ptr<SignalingClass> receiving_client_;
|
| + rtc::scoped_ptr<PeerConnectionTestClient> initiating_client_;
|
| + rtc::scoped_ptr<PeerConnectionTestClient> receiving_client_;
|
| };
|
| -typedef P2PTestConductor<JsepTestClient> JsepPeerConnectionP2PTestClient;
|
|
|
| // Disable for TSan v2, see
|
| // https://code.google.com/p/webrtc/issues/detail?id=1205 for details.
|
| @@ -1107,7 +1043,7 @@ typedef P2PTestConductor<JsepTestClient> JsepPeerConnectionP2PTestClient;
|
| // 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.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestDtmf) {
|
| +TEST_F(P2PTestConductor, DISABLED_LocalP2PTestDtmf) {
|
| ASSERT_TRUE(CreateTestClients());
|
| LocalP2PTest();
|
| VerifyDtmf();
|
| @@ -1115,7 +1051,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestDtmf) {
|
|
|
| // This test sets up a Jsep call between two parties and test that we can get a
|
| // video aspect ratio of 16:9.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTest16To9) {
|
| +TEST_F(P2PTestConductor, LocalP2PTest16To9) {
|
| ASSERT_TRUE(CreateTestClients());
|
| FakeConstraints constraint;
|
| double requested_ratio = 640.0/360;
|
| @@ -1140,7 +1076,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTest16To9) {
|
| // received video has a resolution of 1280*720.
|
| // TODO(mallinath): Enable when
|
| // http://code.google.com/p/webrtc/issues/detail?id=981 is fixed.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTest1280By720) {
|
| +TEST_F(P2PTestConductor, DISABLED_LocalP2PTest1280By720) {
|
| ASSERT_TRUE(CreateTestClients());
|
| FakeConstraints constraint;
|
| constraint.SetMandatoryMinWidth(1280);
|
| @@ -1152,7 +1088,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTest1280By720) {
|
|
|
| // This test sets up a call between two endpoints that are configured to use
|
| // DTLS key agreement. As a result, DTLS is negotiated and used for transport.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDtls) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestDtls) {
|
| MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
|
| FakeConstraints setup_constraints;
|
| setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
|
| @@ -1164,7 +1100,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDtls) {
|
|
|
| // This test sets up a audio call initially and then upgrades to audio/video,
|
| // using DTLS.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsRenegotiate) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestDtlsRenegotiate) {
|
| MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
|
| FakeConstraints setup_constraints;
|
| setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
|
| @@ -1179,7 +1115,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsRenegotiate) {
|
| // This test sets up a call between two endpoints that are configured to use
|
| // DTLS key agreement. The offerer don't support SDES. As a result, DTLS is
|
| // negotiated and used for transport.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestOfferDtlsButNotSdes) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestOfferDtlsButNotSdes) {
|
| MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
|
| FakeConstraints setup_constraints;
|
| setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
|
| @@ -1192,7 +1128,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestOfferDtlsButNotSdes) {
|
|
|
| // This test sets up a Jsep call between two parties, and the callee only
|
| // accept to receive video.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerVideo) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestAnswerVideo) {
|
| ASSERT_TRUE(CreateTestClients());
|
| receiving_client()->SetReceiveAudioVideo(false, true);
|
| LocalP2PTest();
|
| @@ -1200,7 +1136,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerVideo) {
|
|
|
| // This test sets up a Jsep call between two parties, and the callee only
|
| // accept to receive audio.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerAudio) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestAnswerAudio) {
|
| ASSERT_TRUE(CreateTestClients());
|
| receiving_client()->SetReceiveAudioVideo(true, false);
|
| LocalP2PTest();
|
| @@ -1208,7 +1144,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerAudio) {
|
|
|
| // This test sets up a Jsep call between two parties, and the callee reject both
|
| // audio and video.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerNone) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestAnswerNone) {
|
| ASSERT_TRUE(CreateTestClients());
|
| receiving_client()->SetReceiveAudioVideo(false, false);
|
| LocalP2PTest();
|
| @@ -1219,8 +1155,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerNone) {
|
| // being rejected. Once the re-negotiation is done, the video flow should stop
|
| // and the audio flow should continue.
|
| // Disabled due to b/14955157.
|
| -TEST_F(JsepPeerConnectionP2PTestClient,
|
| - DISABLED_UpdateOfferWithRejectedContent) {
|
| +TEST_F(P2PTestConductor, DISABLED_UpdateOfferWithRejectedContent) {
|
| ASSERT_TRUE(CreateTestClients());
|
| LocalP2PTest();
|
| TestUpdateOfferWithRejectedContent();
|
| @@ -1229,7 +1164,7 @@ TEST_F(JsepPeerConnectionP2PTestClient,
|
| // This test sets up a Jsep call between two parties. The MSID is removed from
|
| // the SDP strings from the caller.
|
| // Disabled due to b/14955157.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestWithoutMsid) {
|
| +TEST_F(P2PTestConductor, DISABLED_LocalP2PTestWithoutMsid) {
|
| ASSERT_TRUE(CreateTestClients());
|
| receiving_client()->RemoveMsidFromReceivedSdp(true);
|
| // TODO(perkj): Currently there is a bug that cause audio to stop playing if
|
| @@ -1244,7 +1179,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestWithoutMsid) {
|
| // sends two steams.
|
| // TODO(perkj): Disabled due to
|
| // https://code.google.com/p/webrtc/issues/detail?id=1454
|
| -TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestTwoStreams) {
|
| +TEST_F(P2PTestConductor, DISABLED_LocalP2PTestTwoStreams) {
|
| ASSERT_TRUE(CreateTestClients());
|
| // Set optional video constraint to max 320pixels to decrease CPU usage.
|
| FakeConstraints constraint;
|
| @@ -1258,7 +1193,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestTwoStreams) {
|
| }
|
|
|
| // Test that we can receive the audio output level from a remote audio track.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetAudioOutputLevelStats) {
|
| +TEST_F(P2PTestConductor, GetAudioOutputLevelStats) {
|
| ASSERT_TRUE(CreateTestClients());
|
| LocalP2PTest();
|
|
|
| @@ -1277,7 +1212,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetAudioOutputLevelStats) {
|
| }
|
|
|
| // Test that an audio input level is reported.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetAudioInputLevelStats) {
|
| +TEST_F(P2PTestConductor, GetAudioInputLevelStats) {
|
| ASSERT_TRUE(CreateTestClients());
|
| LocalP2PTest();
|
|
|
| @@ -1288,7 +1223,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetAudioInputLevelStats) {
|
| }
|
|
|
| // Test that we can get incoming byte counts from both audio and video tracks.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetBytesReceivedStats) {
|
| +TEST_F(P2PTestConductor, GetBytesReceivedStats) {
|
| ASSERT_TRUE(CreateTestClients());
|
| LocalP2PTest();
|
|
|
| @@ -1310,7 +1245,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetBytesReceivedStats) {
|
| }
|
|
|
| // Test that we can get outgoing byte counts from both audio and video tracks.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetBytesSentStats) {
|
| +TEST_F(P2PTestConductor, GetBytesSentStats) {
|
| ASSERT_TRUE(CreateTestClients());
|
| LocalP2PTest();
|
|
|
| @@ -1332,12 +1267,13 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetBytesSentStats) {
|
| }
|
|
|
| // Test that DTLS 1.0 is used if both sides only support DTLS 1.0.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12None) {
|
| +TEST_F(P2PTestConductor, GetDtls12None) {
|
| PeerConnectionFactory::Options init_options;
|
| init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
|
| PeerConnectionFactory::Options recv_options;
|
| recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
|
| - ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options));
|
| + ASSERT_TRUE(
|
| + CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
|
| rtc::scoped_refptr<webrtc::FakeMetricsObserver>
|
| init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
|
| initializing_client()->pc()->RegisterUMAObserver(init_observer);
|
| @@ -1362,12 +1298,13 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12None) {
|
| }
|
|
|
| // Test that DTLS 1.2 is used if both ends support it.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Both) {
|
| +TEST_F(P2PTestConductor, GetDtls12Both) {
|
| PeerConnectionFactory::Options init_options;
|
| init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
|
| PeerConnectionFactory::Options recv_options;
|
| recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
|
| - ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options));
|
| + ASSERT_TRUE(
|
| + CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
|
| rtc::scoped_refptr<webrtc::FakeMetricsObserver>
|
| init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
|
| initializing_client()->pc()->RegisterUMAObserver(init_observer);
|
| @@ -1393,12 +1330,13 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Both) {
|
|
|
| // Test that DTLS 1.0 is used if the initator supports DTLS 1.2 and the
|
| // received supports 1.0.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Init) {
|
| +TEST_F(P2PTestConductor, GetDtls12Init) {
|
| PeerConnectionFactory::Options init_options;
|
| init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
|
| PeerConnectionFactory::Options recv_options;
|
| recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
|
| - ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options));
|
| + ASSERT_TRUE(
|
| + CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
|
| rtc::scoped_refptr<webrtc::FakeMetricsObserver>
|
| init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
|
| initializing_client()->pc()->RegisterUMAObserver(init_observer);
|
| @@ -1424,12 +1362,13 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Init) {
|
|
|
| // Test that DTLS 1.0 is used if the initator supports DTLS 1.0 and the
|
| // received supports 1.2.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Recv) {
|
| +TEST_F(P2PTestConductor, GetDtls12Recv) {
|
| PeerConnectionFactory::Options init_options;
|
| init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
|
| PeerConnectionFactory::Options recv_options;
|
| recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
|
| - ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options));
|
| + ASSERT_TRUE(
|
| + CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
|
| rtc::scoped_refptr<webrtc::FakeMetricsObserver>
|
| init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
|
| initializing_client()->pc()->RegisterUMAObserver(init_observer);
|
| @@ -1454,14 +1393,14 @@ TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Recv) {
|
| }
|
|
|
| // This test sets up a call between two parties with audio, video and data.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDataChannel) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestDataChannel) {
|
| FakeConstraints setup_constraints;
|
| setup_constraints.SetAllowRtpDataChannels();
|
| ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
|
| initializing_client()->CreateDataChannel();
|
| LocalP2PTest();
|
| - ASSERT_TRUE(initializing_client()->data_channel() != NULL);
|
| - ASSERT_TRUE(receiving_client()->data_channel() != NULL);
|
| + ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
|
| + ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
|
| EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
|
| kMaxWaitMs);
|
| EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(),
|
| @@ -1491,15 +1430,15 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDataChannel) {
|
| // transport has detected that a channel is writable and thus data can be
|
| // received before the data channel state changes to open. That is hard to test
|
| // but the same buffering is used in that case.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, RegisterDataChannelObserver) {
|
| +TEST_F(P2PTestConductor, RegisterDataChannelObserver) {
|
| FakeConstraints setup_constraints;
|
| setup_constraints.SetAllowRtpDataChannels();
|
| ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
|
| initializing_client()->CreateDataChannel();
|
| initializing_client()->Negotiate();
|
|
|
| - ASSERT_TRUE(initializing_client()->data_channel() != NULL);
|
| - ASSERT_TRUE(receiving_client()->data_channel() != NULL);
|
| + ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
|
| + ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
|
| EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
|
| kMaxWaitMs);
|
| EXPECT_EQ_WAIT(DataChannelInterface::kOpen,
|
| @@ -1521,7 +1460,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, RegisterDataChannelObserver) {
|
|
|
| // This test sets up a call between two parties with audio, video and but only
|
| // the initiating client support data.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestReceiverDoesntSupportData) {
|
| +TEST_F(P2PTestConductor, LocalP2PTestReceiverDoesntSupportData) {
|
| FakeConstraints setup_constraints_1;
|
| setup_constraints_1.SetAllowRtpDataChannels();
|
| // Must disable DTLS to make negotiation succeed.
|
| @@ -1533,14 +1472,14 @@ TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestReceiverDoesntSupportData) {
|
| ASSERT_TRUE(CreateTestClients(&setup_constraints_1, &setup_constraints_2));
|
| initializing_client()->CreateDataChannel();
|
| LocalP2PTest();
|
| - EXPECT_TRUE(initializing_client()->data_channel() != NULL);
|
| + EXPECT_TRUE(initializing_client()->data_channel() != nullptr);
|
| EXPECT_FALSE(receiving_client()->data_channel());
|
| EXPECT_FALSE(initializing_client()->data_observer()->IsOpen());
|
| }
|
|
|
| // This test sets up a call between two parties with audio, video. When audio
|
| // and video is setup and flowing and data channel is negotiated.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, AddDataChannelAfterRenegotiation) {
|
| +TEST_F(P2PTestConductor, AddDataChannelAfterRenegotiation) {
|
| FakeConstraints setup_constraints;
|
| setup_constraints.SetAllowRtpDataChannels();
|
| ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
|
| @@ -1548,8 +1487,8 @@ TEST_F(JsepPeerConnectionP2PTestClient, AddDataChannelAfterRenegotiation) {
|
| initializing_client()->CreateDataChannel();
|
| // Send new offer and answer.
|
| initializing_client()->Negotiate();
|
| - ASSERT_TRUE(initializing_client()->data_channel() != NULL);
|
| - ASSERT_TRUE(receiving_client()->data_channel() != NULL);
|
| + ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
|
| + ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
|
| EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
|
| kMaxWaitMs);
|
| EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(),
|
| @@ -1559,7 +1498,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, AddDataChannelAfterRenegotiation) {
|
| // This test sets up a Jsep call with SCTP DataChannel and verifies the
|
| // negotiation is completed without error.
|
| #ifdef HAVE_SCTP
|
| -TEST_F(JsepPeerConnectionP2PTestClient, CreateOfferWithSctpDataChannel) {
|
| +TEST_F(P2PTestConductor, CreateOfferWithSctpDataChannel) {
|
| MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
|
| FakeConstraints constraints;
|
| constraints.SetMandatory(
|
| @@ -1573,7 +1512,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, CreateOfferWithSctpDataChannel) {
|
| // This test sets up a call between two parties with audio, and video.
|
| // During the call, the initializing side restart ice and the test verifies that
|
| // new ice candidates are generated and audio and video still can flow.
|
| -TEST_F(JsepPeerConnectionP2PTestClient, IceRestart) {
|
| +TEST_F(P2PTestConductor, IceRestart) {
|
| ASSERT_TRUE(CreateTestClients());
|
|
|
| // Negotiate and wait for ice completion and make sure audio and video plays.
|
| @@ -1624,8 +1563,7 @@ TEST_F(JsepPeerConnectionP2PTestClient, IceRestart) {
|
| // VideoDecoderFactory.
|
| // TODO(holmer): Disabled due to sometimes crashing on buildbots.
|
| // See issue webrtc/2378.
|
| -TEST_F(JsepPeerConnectionP2PTestClient,
|
| - DISABLED_LocalP2PTestWithVideoDecoderFactory) {
|
| +TEST_F(P2PTestConductor, DISABLED_LocalP2PTestWithVideoDecoderFactory) {
|
| ASSERT_TRUE(CreateTestClients());
|
| EnableVideoDecoderFactory();
|
| LocalP2PTest();
|
|
|