| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 26 */ | 26 */ |
| 27 | 27 |
| 28 #include <stdio.h> | 28 #include <stdio.h> |
| 29 | 29 |
| 30 #include <algorithm> | 30 #include <algorithm> |
| 31 | 31 |
| 32 #include "talk/app/webrtc/statscollector.h" | 32 #include "talk/app/webrtc/statscollector.h" |
| 33 | 33 |
| 34 #include "talk/app/webrtc/peerconnection.h" |
| 35 #include "talk/app/webrtc/peerconnectionfactory.h" |
| 34 #include "talk/app/webrtc/mediastream.h" | 36 #include "talk/app/webrtc/mediastream.h" |
| 35 #include "talk/app/webrtc/mediastreaminterface.h" | 37 #include "talk/app/webrtc/mediastreaminterface.h" |
| 36 #include "talk/app/webrtc/mediastreamsignaling.h" | 38 #include "talk/app/webrtc/mediastreamsignaling.h" |
| 37 #include "talk/app/webrtc/mediastreamtrack.h" | 39 #include "talk/app/webrtc/mediastreamtrack.h" |
| 38 #include "talk/app/webrtc/test/fakedatachannelprovider.h" | 40 #include "talk/app/webrtc/test/fakedatachannelprovider.h" |
| 39 #include "talk/app/webrtc/test/fakemediastreamsignaling.h" | |
| 40 #include "talk/app/webrtc/videotrack.h" | 41 #include "talk/app/webrtc/videotrack.h" |
| 41 #include "talk/media/base/fakemediaengine.h" | 42 #include "talk/media/base/fakemediaengine.h" |
| 42 #include "talk/session/media/channelmanager.h" | 43 #include "talk/session/media/channelmanager.h" |
| 43 #include "testing/gmock/include/gmock/gmock.h" | 44 #include "testing/gmock/include/gmock/gmock.h" |
| 44 #include "testing/gtest/include/gtest/gtest.h" | 45 #include "testing/gtest/include/gtest/gtest.h" |
| 45 #include "webrtc/base/base64.h" | 46 #include "webrtc/base/base64.h" |
| 46 #include "webrtc/base/fakesslidentity.h" | 47 #include "webrtc/base/fakesslidentity.h" |
| 47 #include "webrtc/base/gunit.h" | 48 #include "webrtc/base/gunit.h" |
| 48 #include "webrtc/base/network.h" | 49 #include "webrtc/base/network.h" |
| 49 #include "webrtc/p2p/base/faketransportcontroller.h" | 50 #include "webrtc/p2p/base/faketransportcontroller.h" |
| 50 | 51 |
| 51 using rtc::scoped_ptr; | 52 using rtc::scoped_ptr; |
| 52 using testing::_; | 53 using testing::_; |
| 53 using testing::DoAll; | 54 using testing::DoAll; |
| 54 using testing::Field; | 55 using testing::Field; |
| 55 using testing::Return; | 56 using testing::Return; |
| 56 using testing::ReturnNull; | 57 using testing::ReturnNull; |
| 58 using testing::ReturnRef; |
| 57 using testing::SetArgPointee; | 59 using testing::SetArgPointee; |
| 58 using webrtc::PeerConnectionInterface; | 60 using webrtc::PeerConnectionInterface; |
| 59 using webrtc::StatsReport; | 61 using webrtc::StatsReport; |
| 60 using webrtc::StatsReports; | 62 using webrtc::StatsReports; |
| 61 | 63 |
| 62 namespace { | 64 namespace { |
| 63 // This value comes from openssl/tls1.h | 65 // This value comes from openssl/tls1.h |
| 64 const int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014; | 66 const int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014; |
| 65 } // namespace | 67 } // namespace |
| 66 | 68 |
| 67 namespace cricket { | 69 namespace cricket { |
| 68 | 70 |
| 69 class ChannelManager; | 71 class ChannelManager; |
| 70 | 72 |
| 71 } // namespace cricket | 73 } // namespace cricket |
| 72 | 74 |
| 73 namespace webrtc { | 75 namespace webrtc { |
| 74 | 76 |
| 75 // Error return values | 77 // Error return values |
| 76 const char kNotFound[] = "NOT FOUND"; | 78 const char kNotFound[] = "NOT FOUND"; |
| 77 | 79 |
| 78 // Constant names for track identification. | 80 // Constant names for track identification. |
| 79 const char kLocalTrackId[] = "local_track_id"; | 81 const char kLocalTrackId[] = "local_track_id"; |
| 80 const char kRemoteTrackId[] = "remote_track_id"; | 82 const char kRemoteTrackId[] = "remote_track_id"; |
| 81 const uint32_t kSsrcOfTrack = 1234; | 83 const uint32_t kSsrcOfTrack = 1234; |
| 82 | 84 |
| 83 class MockWebRtcSession : public webrtc::WebRtcSession { | 85 class MockWebRtcSession : public webrtc::WebRtcSession { |
| 84 public: | 86 public: |
| 85 explicit MockWebRtcSession(cricket::ChannelManager* channel_manager) | 87 explicit MockWebRtcSession(cricket::ChannelManager* channel_manager) |
| 86 : WebRtcSession(channel_manager, rtc::Thread::Current(), | 88 : WebRtcSession(channel_manager, |
| 87 rtc::Thread::Current(), NULL, NULL) { | 89 rtc::Thread::Current(), |
| 88 } | 90 rtc::Thread::Current(), |
| 91 nullptr) {} |
| 89 MOCK_METHOD0(voice_channel, cricket::VoiceChannel*()); | 92 MOCK_METHOD0(voice_channel, cricket::VoiceChannel*()); |
| 90 MOCK_METHOD0(video_channel, cricket::VideoChannel*()); | 93 MOCK_METHOD0(video_channel, cricket::VideoChannel*()); |
| 91 MOCK_CONST_METHOD0(mediastream_signaling, const MediaStreamSignaling*()); | |
| 92 // Libjingle uses "local" for a outgoing track, and "remote" for a incoming | 94 // Libjingle uses "local" for a outgoing track, and "remote" for a incoming |
| 93 // track. | 95 // track. |
| 94 MOCK_METHOD2(GetLocalTrackIdBySsrc, bool(uint32_t, std::string*)); | 96 MOCK_METHOD2(GetLocalTrackIdBySsrc, bool(uint32_t, std::string*)); |
| 95 MOCK_METHOD2(GetRemoteTrackIdBySsrc, bool(uint32_t, std::string*)); | 97 MOCK_METHOD2(GetRemoteTrackIdBySsrc, bool(uint32_t, std::string*)); |
| 96 MOCK_METHOD1(GetTransportStats, bool(cricket::SessionStats*)); | 98 MOCK_METHOD1(GetTransportStats, bool(cricket::SessionStats*)); |
| 97 MOCK_METHOD2(GetLocalCertificate, | 99 MOCK_METHOD2(GetLocalCertificate, |
| 98 bool(const std::string& transport_name, | 100 bool(const std::string& transport_name, |
| 99 rtc::scoped_refptr<rtc::RTCCertificate>* certificate)); | 101 rtc::scoped_refptr<rtc::RTCCertificate>* certificate)); |
| 100 MOCK_METHOD2(GetRemoteSSLCertificate, | 102 MOCK_METHOD2(GetRemoteSSLCertificate, |
| 101 bool(const std::string& transport_name, | 103 bool(const std::string& transport_name, |
| 102 rtc::SSLCertificate** cert)); | 104 rtc::SSLCertificate** cert)); |
| 103 }; | 105 }; |
| 104 | 106 |
| 107 // The factory isn't really used; it just satisfies the base PeerConnection. |
| 108 class FakePeerConnectionFactory |
| 109 : public rtc::RefCountedObject<PeerConnectionFactory> {}; |
| 110 |
| 111 class MockPeerConnection |
| 112 : public rtc::RefCountedObject<webrtc::PeerConnection> { |
| 113 public: |
| 114 MockPeerConnection() |
| 115 : rtc::RefCountedObject<webrtc::PeerConnection>( |
| 116 new FakePeerConnectionFactory()) {} |
| 117 MOCK_METHOD0(session, WebRtcSession*()); |
| 118 MOCK_CONST_METHOD0(sctp_data_channels, |
| 119 const std::vector<rtc::scoped_refptr<DataChannel>>&()); |
| 120 }; |
| 121 |
| 105 class MockVideoMediaChannel : public cricket::FakeVideoMediaChannel { | 122 class MockVideoMediaChannel : public cricket::FakeVideoMediaChannel { |
| 106 public: | 123 public: |
| 107 MockVideoMediaChannel() : | 124 MockVideoMediaChannel() : |
| 108 cricket::FakeVideoMediaChannel(NULL, cricket::VideoOptions()) {} | 125 cricket::FakeVideoMediaChannel(NULL, cricket::VideoOptions()) {} |
| 109 MOCK_METHOD1(GetStats, bool(cricket::VideoMediaInfo*)); | 126 MOCK_METHOD1(GetStats, bool(cricket::VideoMediaInfo*)); |
| 110 }; | 127 }; |
| 111 | 128 |
| 112 class MockVoiceMediaChannel : public cricket::FakeVoiceMediaChannel { | 129 class MockVoiceMediaChannel : public cricket::FakeVoiceMediaChannel { |
| 113 public: | 130 public: |
| 114 MockVoiceMediaChannel() : | 131 MockVoiceMediaChannel() : |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 voice_receiver_info->audio_level = 120; | 482 voice_receiver_info->audio_level = 120; |
| 466 voice_receiver_info->expand_rate = 121; | 483 voice_receiver_info->expand_rate = 121; |
| 467 voice_receiver_info->speech_expand_rate = 122; | 484 voice_receiver_info->speech_expand_rate = 122; |
| 468 voice_receiver_info->secondary_decoded_rate = 123; | 485 voice_receiver_info->secondary_decoded_rate = 123; |
| 469 voice_receiver_info->accelerate_rate = 124; | 486 voice_receiver_info->accelerate_rate = 124; |
| 470 voice_receiver_info->preemptive_expand_rate = 125; | 487 voice_receiver_info->preemptive_expand_rate = 125; |
| 471 } | 488 } |
| 472 | 489 |
| 473 class StatsCollectorForTest : public webrtc::StatsCollector { | 490 class StatsCollectorForTest : public webrtc::StatsCollector { |
| 474 public: | 491 public: |
| 475 explicit StatsCollectorForTest(WebRtcSession* session) : | 492 explicit StatsCollectorForTest(PeerConnection* pc) |
| 476 StatsCollector(session), time_now_(19477) { | 493 : StatsCollector(pc), time_now_(19477) {} |
| 477 } | |
| 478 | 494 |
| 479 double GetTimeNow() override { | 495 double GetTimeNow() override { |
| 480 return time_now_; | 496 return time_now_; |
| 481 } | 497 } |
| 482 | 498 |
| 483 private: | 499 private: |
| 484 double time_now_; | 500 double time_now_; |
| 485 }; | 501 }; |
| 486 | 502 |
| 487 class StatsCollectorTest : public testing::Test { | 503 class StatsCollectorTest : public testing::Test { |
| 488 protected: | 504 protected: |
| 489 StatsCollectorTest() | 505 StatsCollectorTest() |
| 490 : media_engine_(new cricket::FakeMediaEngine()), | 506 : media_engine_(new cricket::FakeMediaEngine()), |
| 491 channel_manager_( | 507 channel_manager_( |
| 492 new cricket::ChannelManager(media_engine_, rtc::Thread::Current())), | 508 new cricket::ChannelManager(media_engine_, rtc::Thread::Current())), |
| 493 session_(channel_manager_.get()), | 509 session_(channel_manager_.get()) { |
| 494 signaling_(channel_manager_.get()) { | |
| 495 // By default, we ignore session GetStats calls. | 510 // By default, we ignore session GetStats calls. |
| 496 EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false)); | 511 EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false)); |
| 497 EXPECT_CALL(session_, mediastream_signaling()).WillRepeatedly( | 512 // Add default returns for mock classes. |
| 498 Return(&signaling_)); | 513 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); |
| 514 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); |
| 515 EXPECT_CALL(pc_, session()).WillRepeatedly(Return(&session_)); |
| 516 EXPECT_CALL(pc_, sctp_data_channels()) |
| 517 .WillRepeatedly(ReturnRef(data_channels_)); |
| 499 } | 518 } |
| 500 | 519 |
| 501 ~StatsCollectorTest() {} | 520 ~StatsCollectorTest() {} |
| 502 | 521 |
| 503 // This creates a standard setup with a transport called "trspname" | 522 // This creates a standard setup with a transport called "trspname" |
| 504 // having one transport channel | 523 // having one transport channel |
| 505 // and the specified virtual connection name. | 524 // and the specified virtual connection name. |
| 506 void InitSessionStats(const std::string& vc_name) { | 525 void InitSessionStats(const std::string& vc_name) { |
| 507 const std::string kTransportName("trspname"); | 526 const std::string kTransportName("trspname"); |
| 508 cricket::TransportStats transport_stats; | 527 cricket::TransportStats transport_stats; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 if (stream_ == NULL) | 569 if (stream_ == NULL) |
| 551 stream_ = webrtc::MediaStream::Create("streamlabel"); | 570 stream_ = webrtc::MediaStream::Create("streamlabel"); |
| 552 | 571 |
| 553 audio_track_ = new rtc::RefCountedObject<FakeAudioTrack>( | 572 audio_track_ = new rtc::RefCountedObject<FakeAudioTrack>( |
| 554 kRemoteTrackId); | 573 kRemoteTrackId); |
| 555 stream_->AddTrack(audio_track_); | 574 stream_->AddTrack(audio_track_); |
| 556 EXPECT_CALL(session_, GetRemoteTrackIdBySsrc(kSsrcOfTrack, _)) | 575 EXPECT_CALL(session_, GetRemoteTrackIdBySsrc(kSsrcOfTrack, _)) |
| 557 .WillOnce(DoAll(SetArgPointee<1>(kRemoteTrackId), Return(true))); | 576 .WillOnce(DoAll(SetArgPointee<1>(kRemoteTrackId), Return(true))); |
| 558 } | 577 } |
| 559 | 578 |
| 579 void AddDataChannel(cricket::DataChannelType type, |
| 580 const std::string& label, |
| 581 int id) { |
| 582 InternalDataChannelInit config; |
| 583 config.id = id; |
| 584 |
| 585 data_channels_.push_back(DataChannel::Create( |
| 586 &data_channel_provider_, cricket::DCT_SCTP, label, config)); |
| 587 } |
| 588 |
| 560 StatsReport* AddCandidateReport(StatsCollector* collector, | 589 StatsReport* AddCandidateReport(StatsCollector* collector, |
| 561 const cricket::Candidate& candidate, | 590 const cricket::Candidate& candidate, |
| 562 bool local) { | 591 bool local) { |
| 563 return collector->AddCandidateReport(candidate, local); | 592 return collector->AddCandidateReport(candidate, local); |
| 564 } | 593 } |
| 565 | 594 |
| 566 void SetupAndVerifyAudioTrackStats( | 595 void SetupAndVerifyAudioTrackStats( |
| 567 FakeAudioTrack* audio_track, | 596 FakeAudioTrack* audio_track, |
| 568 webrtc::MediaStream* stream, | 597 webrtc::MediaStream* stream, |
| 569 webrtc::StatsCollector* stats, | 598 webrtc::StatsCollector* stats, |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 if (voice_sender_info) | 666 if (voice_sender_info) |
| 638 VerifyVoiceSenderInfoReport(track_report, *voice_sender_info); | 667 VerifyVoiceSenderInfoReport(track_report, *voice_sender_info); |
| 639 if (voice_receiver_info) | 668 if (voice_receiver_info) |
| 640 VerifyVoiceReceiverInfoReport(track_report, *voice_receiver_info); | 669 VerifyVoiceReceiverInfoReport(track_report, *voice_receiver_info); |
| 641 } | 670 } |
| 642 | 671 |
| 643 void TestCertificateReports(const rtc::FakeSSLCertificate& local_cert, | 672 void TestCertificateReports(const rtc::FakeSSLCertificate& local_cert, |
| 644 const std::vector<std::string>& local_ders, | 673 const std::vector<std::string>& local_ders, |
| 645 const rtc::FakeSSLCertificate& remote_cert, | 674 const rtc::FakeSSLCertificate& remote_cert, |
| 646 const std::vector<std::string>& remote_ders) { | 675 const std::vector<std::string>& remote_ders) { |
| 647 StatsCollectorForTest stats(&session_); | 676 StatsCollectorForTest stats(&pc_); |
| 648 | 677 |
| 649 StatsReports reports; // returned values. | 678 StatsReports reports; // returned values. |
| 650 | 679 |
| 651 // Fake stats to process. | 680 // Fake stats to process. |
| 652 cricket::TransportChannelStats channel_stats; | 681 cricket::TransportChannelStats channel_stats; |
| 653 channel_stats.component = 1; | 682 channel_stats.component = 1; |
| 654 channel_stats.srtp_cipher = "the-srtp-cipher"; | 683 channel_stats.srtp_cipher = "the-srtp-cipher"; |
| 655 channel_stats.ssl_cipher = TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA; | 684 channel_stats.ssl_cipher = TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA; |
| 656 | 685 |
| 657 cricket::TransportStats transport_stats; | 686 cricket::TransportStats transport_stats; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 672 EXPECT_CALL(session_, | 701 EXPECT_CALL(session_, |
| 673 GetLocalCertificate(transport_stats.transport_name, _)) | 702 GetLocalCertificate(transport_stats.transport_name, _)) |
| 674 .WillOnce(DoAll(SetArgPointee<1>(local_certificate), Return(true))); | 703 .WillOnce(DoAll(SetArgPointee<1>(local_certificate), Return(true))); |
| 675 EXPECT_CALL(session_, | 704 EXPECT_CALL(session_, |
| 676 GetRemoteSSLCertificate(transport_stats.transport_name, _)) | 705 GetRemoteSSLCertificate(transport_stats.transport_name, _)) |
| 677 .WillOnce( | 706 .WillOnce( |
| 678 DoAll(SetArgPointee<1>(remote_cert.GetReference()), Return(true))); | 707 DoAll(SetArgPointee<1>(remote_cert.GetReference()), Return(true))); |
| 679 EXPECT_CALL(session_, GetTransportStats(_)) | 708 EXPECT_CALL(session_, GetTransportStats(_)) |
| 680 .WillOnce(DoAll(SetArgPointee<0>(session_stats), | 709 .WillOnce(DoAll(SetArgPointee<0>(session_stats), |
| 681 Return(true))); | 710 Return(true))); |
| 682 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | |
| 683 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | |
| 684 | 711 |
| 685 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 712 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 686 | 713 |
| 687 stats.GetStats(NULL, &reports); | 714 stats.GetStats(NULL, &reports); |
| 688 | 715 |
| 689 const StatsReport* channel_report = FindNthReportByType( | 716 const StatsReport* channel_report = FindNthReportByType( |
| 690 reports, StatsReport::kStatsReportTypeComponent, 1); | 717 reports, StatsReport::kStatsReportTypeComponent, 1); |
| 691 EXPECT_TRUE(channel_report != NULL); | 718 EXPECT_TRUE(channel_report != NULL); |
| 692 | 719 |
| 693 // Check local certificate chain. | 720 // Check local certificate chain. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 std::string srtp_cipher = ExtractStatsValue( | 754 std::string srtp_cipher = ExtractStatsValue( |
| 728 StatsReport::kStatsReportTypeComponent, | 755 StatsReport::kStatsReportTypeComponent, |
| 729 reports, | 756 reports, |
| 730 StatsReport::kStatsValueNameSrtpCipher); | 757 StatsReport::kStatsValueNameSrtpCipher); |
| 731 EXPECT_EQ("the-srtp-cipher", srtp_cipher); | 758 EXPECT_EQ("the-srtp-cipher", srtp_cipher); |
| 732 } | 759 } |
| 733 | 760 |
| 734 cricket::FakeMediaEngine* media_engine_; | 761 cricket::FakeMediaEngine* media_engine_; |
| 735 rtc::scoped_ptr<cricket::ChannelManager> channel_manager_; | 762 rtc::scoped_ptr<cricket::ChannelManager> channel_manager_; |
| 736 MockWebRtcSession session_; | 763 MockWebRtcSession session_; |
| 737 FakeMediaStreamSignaling signaling_; | 764 MockPeerConnection pc_; |
| 738 FakeDataChannelProvider data_channel_provider_; | 765 FakeDataChannelProvider data_channel_provider_; |
| 739 cricket::SessionStats session_stats_; | 766 cricket::SessionStats session_stats_; |
| 740 rtc::scoped_refptr<webrtc::MediaStream> stream_; | 767 rtc::scoped_refptr<webrtc::MediaStream> stream_; |
| 741 rtc::scoped_refptr<webrtc::VideoTrack> track_; | 768 rtc::scoped_refptr<webrtc::VideoTrack> track_; |
| 742 rtc::scoped_refptr<FakeAudioTrack> audio_track_; | 769 rtc::scoped_refptr<FakeAudioTrack> audio_track_; |
| 770 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; |
| 743 }; | 771 }; |
| 744 | 772 |
| 745 // Verify that ExtractDataInfo populates reports. | 773 // Verify that ExtractDataInfo populates reports. |
| 746 TEST_F(StatsCollectorTest, ExtractDataInfo) { | 774 TEST_F(StatsCollectorTest, ExtractDataInfo) { |
| 747 const std::string label = "hacks"; | 775 const std::string label = "hacks"; |
| 748 const int id = 31337; | 776 const int id = 31337; |
| 749 const std::string state = DataChannelInterface::DataStateString( | 777 const std::string state = DataChannelInterface::DataStateString( |
| 750 DataChannelInterface::DataState::kConnecting); | 778 DataChannelInterface::DataState::kConnecting); |
| 751 | 779 |
| 752 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | 780 AddDataChannel(cricket::DCT_SCTP, label, id); |
| 753 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | 781 StatsCollectorForTest stats(&pc_); |
| 754 | |
| 755 InternalDataChannelInit config; | |
| 756 config.id = id; | |
| 757 signaling_.AddDataChannel(DataChannel::Create( | |
| 758 &data_channel_provider_, cricket::DCT_SCTP, label, config)); | |
| 759 StatsCollectorForTest stats(&session_); | |
| 760 | 782 |
| 761 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 783 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 762 | 784 |
| 763 StatsReports reports; | 785 StatsReports reports; |
| 764 stats.GetStats(NULL, &reports); | 786 stats.GetStats(NULL, &reports); |
| 765 | 787 |
| 766 const StatsReport* report = | 788 const StatsReport* report = |
| 767 FindNthReportByType(reports, StatsReport::kStatsReportTypeDataChannel, 1); | 789 FindNthReportByType(reports, StatsReport::kStatsReportTypeDataChannel, 1); |
| 768 | 790 |
| 769 StatsReport::Id reportId = StatsReport::NewTypedIntId( | 791 StatsReport::Id reportId = StatsReport::NewTypedIntId( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 781 EXPECT_EQ(state, ExtractStatsValue(StatsReport::kStatsReportTypeDataChannel, | 803 EXPECT_EQ(state, ExtractStatsValue(StatsReport::kStatsReportTypeDataChannel, |
| 782 reports, | 804 reports, |
| 783 StatsReport::kStatsValueNameState)); | 805 StatsReport::kStatsValueNameState)); |
| 784 EXPECT_EQ("", ExtractStatsValue(StatsReport::kStatsReportTypeDataChannel, | 806 EXPECT_EQ("", ExtractStatsValue(StatsReport::kStatsReportTypeDataChannel, |
| 785 reports, | 807 reports, |
| 786 StatsReport::kStatsValueNameProtocol)); | 808 StatsReport::kStatsValueNameProtocol)); |
| 787 } | 809 } |
| 788 | 810 |
| 789 // This test verifies that 64-bit counters are passed successfully. | 811 // This test verifies that 64-bit counters are passed successfully. |
| 790 TEST_F(StatsCollectorTest, BytesCounterHandles64Bits) { | 812 TEST_F(StatsCollectorTest, BytesCounterHandles64Bits) { |
| 791 StatsCollectorForTest stats(&session_); | 813 StatsCollectorForTest stats(&pc_); |
| 792 | 814 |
| 793 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 815 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 794 .WillRepeatedly(Return(false)); | 816 .WillRepeatedly(Return(false)); |
| 795 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 817 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 796 .WillRepeatedly(Return(false)); | 818 .WillRepeatedly(Return(false)); |
| 797 | 819 |
| 798 const char kVideoChannelName[] = "video"; | 820 const char kVideoChannelName[] = "video"; |
| 799 | 821 |
| 800 InitSessionStats(kVideoChannelName); | 822 InitSessionStats(kVideoChannelName); |
| 801 EXPECT_CALL(session_, GetTransportStats(_)) | 823 EXPECT_CALL(session_, GetTransportStats(_)) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 827 Return(true))); | 849 Return(true))); |
| 828 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 850 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 829 stats.GetStats(NULL, &reports); | 851 stats.GetStats(NULL, &reports); |
| 830 std::string result = ExtractSsrcStatsValue(reports, | 852 std::string result = ExtractSsrcStatsValue(reports, |
| 831 StatsReport::kStatsValueNameBytesSent); | 853 StatsReport::kStatsValueNameBytesSent); |
| 832 EXPECT_EQ(kBytesSentString, result); | 854 EXPECT_EQ(kBytesSentString, result); |
| 833 } | 855 } |
| 834 | 856 |
| 835 // Test that BWE information is reported via stats. | 857 // Test that BWE information is reported via stats. |
| 836 TEST_F(StatsCollectorTest, BandwidthEstimationInfoIsReported) { | 858 TEST_F(StatsCollectorTest, BandwidthEstimationInfoIsReported) { |
| 837 StatsCollectorForTest stats(&session_); | 859 StatsCollectorForTest stats(&pc_); |
| 838 | 860 |
| 839 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 861 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 840 .WillRepeatedly(Return(false)); | 862 .WillRepeatedly(Return(false)); |
| 841 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 863 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 842 .WillRepeatedly(Return(false)); | 864 .WillRepeatedly(Return(false)); |
| 843 | 865 |
| 844 const char kVideoChannelName[] = "video"; | 866 const char kVideoChannelName[] = "video"; |
| 845 | 867 |
| 846 InitSessionStats(kVideoChannelName); | 868 InitSessionStats(kVideoChannelName); |
| 847 EXPECT_CALL(session_, GetTransportStats(_)) | 869 EXPECT_CALL(session_, GetTransportStats(_)) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 StatsReport::kStatsValueNameBytesSent); | 906 StatsReport::kStatsValueNameBytesSent); |
| 885 EXPECT_EQ(kBytesSentString, result); | 907 EXPECT_EQ(kBytesSentString, result); |
| 886 result = ExtractBweStatsValue(reports, | 908 result = ExtractBweStatsValue(reports, |
| 887 StatsReport::kStatsValueNameTargetEncBitrate); | 909 StatsReport::kStatsValueNameTargetEncBitrate); |
| 888 EXPECT_EQ(kTargetEncBitrateString, result); | 910 EXPECT_EQ(kTargetEncBitrateString, result); |
| 889 } | 911 } |
| 890 | 912 |
| 891 // This test verifies that an object of type "googSession" always | 913 // This test verifies that an object of type "googSession" always |
| 892 // exists in the returned stats. | 914 // exists in the returned stats. |
| 893 TEST_F(StatsCollectorTest, SessionObjectExists) { | 915 TEST_F(StatsCollectorTest, SessionObjectExists) { |
| 894 StatsCollectorForTest stats(&session_); | 916 StatsCollectorForTest stats(&pc_); |
| 895 | 917 |
| 896 StatsReports reports; // returned values. | 918 StatsReports reports; // returned values. |
| 897 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | |
| 898 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | |
| 899 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 919 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 900 stats.GetStats(NULL, &reports); | 920 stats.GetStats(NULL, &reports); |
| 901 const StatsReport* session_report = FindNthReportByType( | 921 const StatsReport* session_report = FindNthReportByType( |
| 902 reports, StatsReport::kStatsReportTypeSession, 1); | 922 reports, StatsReport::kStatsReportTypeSession, 1); |
| 903 EXPECT_FALSE(session_report == NULL); | 923 EXPECT_FALSE(session_report == NULL); |
| 904 } | 924 } |
| 905 | 925 |
| 906 // This test verifies that only one object of type "googSession" exists | 926 // This test verifies that only one object of type "googSession" exists |
| 907 // in the returned stats. | 927 // in the returned stats. |
| 908 TEST_F(StatsCollectorTest, OnlyOneSessionObjectExists) { | 928 TEST_F(StatsCollectorTest, OnlyOneSessionObjectExists) { |
| 909 StatsCollectorForTest stats(&session_); | 929 StatsCollectorForTest stats(&pc_); |
| 910 | 930 |
| 911 StatsReports reports; // returned values. | 931 StatsReports reports; // returned values. |
| 912 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | |
| 913 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | |
| 914 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 932 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 915 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 933 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 916 stats.GetStats(NULL, &reports); | 934 stats.GetStats(NULL, &reports); |
| 917 const StatsReport* session_report = FindNthReportByType( | 935 const StatsReport* session_report = FindNthReportByType( |
| 918 reports, StatsReport::kStatsReportTypeSession, 1); | 936 reports, StatsReport::kStatsReportTypeSession, 1); |
| 919 EXPECT_FALSE(session_report == NULL); | 937 EXPECT_FALSE(session_report == NULL); |
| 920 session_report = FindNthReportByType( | 938 session_report = FindNthReportByType( |
| 921 reports, StatsReport::kStatsReportTypeSession, 2); | 939 reports, StatsReport::kStatsReportTypeSession, 2); |
| 922 EXPECT_EQ(NULL, session_report); | 940 EXPECT_EQ(NULL, session_report); |
| 923 } | 941 } |
| 924 | 942 |
| 925 // This test verifies that the empty track report exists in the returned stats | 943 // This test verifies that the empty track report exists in the returned stats |
| 926 // without calling StatsCollector::UpdateStats. | 944 // without calling StatsCollector::UpdateStats. |
| 927 TEST_F(StatsCollectorTest, TrackObjectExistsWithoutUpdateStats) { | 945 TEST_F(StatsCollectorTest, TrackObjectExistsWithoutUpdateStats) { |
| 928 StatsCollectorForTest stats(&session_); | 946 StatsCollectorForTest stats(&pc_); |
| 929 | 947 |
| 930 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); | 948 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); |
| 931 cricket::VideoChannel video_channel(rtc::Thread::Current(), | 949 cricket::VideoChannel video_channel(rtc::Thread::Current(), |
| 932 media_channel, NULL, "video", false); | 950 media_channel, NULL, "video", false); |
| 933 AddOutgoingVideoTrackStats(); | 951 AddOutgoingVideoTrackStats(); |
| 934 stats.AddStream(stream_); | 952 stats.AddStream(stream_); |
| 935 | 953 |
| 936 // Verfies the existence of the track report. | 954 // Verfies the existence of the track report. |
| 937 StatsReports reports; | 955 StatsReports reports; |
| 938 stats.GetStats(NULL, &reports); | 956 stats.GetStats(NULL, &reports); |
| 939 EXPECT_EQ((size_t)1, reports.size()); | 957 EXPECT_EQ((size_t)1, reports.size()); |
| 940 EXPECT_EQ(StatsReport::kStatsReportTypeTrack, reports[0]->type()); | 958 EXPECT_EQ(StatsReport::kStatsReportTypeTrack, reports[0]->type()); |
| 941 EXPECT_EQ(0, reports[0]->timestamp()); | 959 EXPECT_EQ(0, reports[0]->timestamp()); |
| 942 | 960 |
| 943 std::string trackValue = | 961 std::string trackValue = |
| 944 ExtractStatsValue(StatsReport::kStatsReportTypeTrack, | 962 ExtractStatsValue(StatsReport::kStatsReportTypeTrack, |
| 945 reports, | 963 reports, |
| 946 StatsReport::kStatsValueNameTrackId); | 964 StatsReport::kStatsValueNameTrackId); |
| 947 EXPECT_EQ(kLocalTrackId, trackValue); | 965 EXPECT_EQ(kLocalTrackId, trackValue); |
| 948 } | 966 } |
| 949 | 967 |
| 950 // This test verifies that the empty track report exists in the returned stats | 968 // This test verifies that the empty track report exists in the returned stats |
| 951 // when StatsCollector::UpdateStats is called with ssrc stats. | 969 // when StatsCollector::UpdateStats is called with ssrc stats. |
| 952 TEST_F(StatsCollectorTest, TrackAndSsrcObjectExistAfterUpdateSsrcStats) { | 970 TEST_F(StatsCollectorTest, TrackAndSsrcObjectExistAfterUpdateSsrcStats) { |
| 953 StatsCollectorForTest stats(&session_); | 971 StatsCollectorForTest stats(&pc_); |
| 954 | 972 |
| 955 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 973 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 956 .WillRepeatedly(Return(false)); | 974 .WillRepeatedly(Return(false)); |
| 957 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 975 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 958 .WillRepeatedly(Return(false)); | 976 .WillRepeatedly(Return(false)); |
| 959 | 977 |
| 960 const char kVideoChannelName[] = "video"; | 978 const char kVideoChannelName[] = "video"; |
| 961 InitSessionStats(kVideoChannelName); | 979 InitSessionStats(kVideoChannelName); |
| 962 EXPECT_CALL(session_, GetTransportStats(_)) | 980 EXPECT_CALL(session_, GetTransportStats(_)) |
| 963 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats_), | 981 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats_), |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1011 EXPECT_EQ(rtc::ToString<uint32_t>(kSsrcOfTrack), ssrc_id); | 1029 EXPECT_EQ(rtc::ToString<uint32_t>(kSsrcOfTrack), ssrc_id); |
| 1012 | 1030 |
| 1013 std::string track_id = ExtractSsrcStatsValue( | 1031 std::string track_id = ExtractSsrcStatsValue( |
| 1014 reports, StatsReport::kStatsValueNameTrackId); | 1032 reports, StatsReport::kStatsValueNameTrackId); |
| 1015 EXPECT_EQ(kLocalTrackId, track_id); | 1033 EXPECT_EQ(kLocalTrackId, track_id); |
| 1016 } | 1034 } |
| 1017 | 1035 |
| 1018 // This test verifies that an SSRC object has the identifier of a Transport | 1036 // This test verifies that an SSRC object has the identifier of a Transport |
| 1019 // stats object, and that this transport stats object exists in stats. | 1037 // stats object, and that this transport stats object exists in stats. |
| 1020 TEST_F(StatsCollectorTest, TransportObjectLinkedFromSsrcObject) { | 1038 TEST_F(StatsCollectorTest, TransportObjectLinkedFromSsrcObject) { |
| 1021 StatsCollectorForTest stats(&session_); | 1039 StatsCollectorForTest stats(&pc_); |
| 1022 | 1040 |
| 1023 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1041 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1024 .WillRepeatedly(Return(false)); | 1042 .WillRepeatedly(Return(false)); |
| 1025 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1043 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1026 .WillRepeatedly(Return(false)); | 1044 .WillRepeatedly(Return(false)); |
| 1027 | 1045 |
| 1028 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); | 1046 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); |
| 1029 // The transport_name known by the video channel. | 1047 // The transport_name known by the video channel. |
| 1030 const std::string kVcName("vcname"); | 1048 const std::string kVcName("vcname"); |
| 1031 cricket::VideoChannel video_channel(rtc::Thread::Current(), | 1049 cricket::VideoChannel video_channel(rtc::Thread::Current(), |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1074 content = content.substr(0, index); | 1092 content = content.substr(0, index); |
| 1075 StatsReport::Id id(StatsReport::NewComponentId(content, 1)); | 1093 StatsReport::Id id(StatsReport::NewComponentId(content, 1)); |
| 1076 ASSERT_EQ(transport_id, id->ToString()); | 1094 ASSERT_EQ(transport_id, id->ToString()); |
| 1077 const StatsReport* transport_report = FindReportById(reports, id); | 1095 const StatsReport* transport_report = FindReportById(reports, id); |
| 1078 ASSERT_FALSE(transport_report == NULL); | 1096 ASSERT_FALSE(transport_report == NULL); |
| 1079 } | 1097 } |
| 1080 | 1098 |
| 1081 // This test verifies that a remote stats object will not be created for | 1099 // This test verifies that a remote stats object will not be created for |
| 1082 // an outgoing SSRC where remote stats are not returned. | 1100 // an outgoing SSRC where remote stats are not returned. |
| 1083 TEST_F(StatsCollectorTest, RemoteSsrcInfoIsAbsent) { | 1101 TEST_F(StatsCollectorTest, RemoteSsrcInfoIsAbsent) { |
| 1084 StatsCollectorForTest stats(&session_); | 1102 StatsCollectorForTest stats(&pc_); |
| 1085 | 1103 |
| 1086 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); | 1104 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); |
| 1087 // The transport_name known by the video channel. | 1105 // The transport_name known by the video channel. |
| 1088 const std::string kVcName("vcname"); | 1106 const std::string kVcName("vcname"); |
| 1089 cricket::VideoChannel video_channel(rtc::Thread::Current(), | 1107 cricket::VideoChannel video_channel(rtc::Thread::Current(), |
| 1090 media_channel, NULL, kVcName, false); | 1108 media_channel, NULL, kVcName, false); |
| 1091 AddOutgoingVideoTrackStats(); | 1109 AddOutgoingVideoTrackStats(); |
| 1092 stats.AddStream(stream_); | 1110 stats.AddStream(stream_); |
| 1093 | 1111 |
| 1094 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | |
| 1095 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | |
| 1096 | |
| 1097 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 1112 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 1098 StatsReports reports; | 1113 StatsReports reports; |
| 1099 stats.GetStats(NULL, &reports); | 1114 stats.GetStats(NULL, &reports); |
| 1100 const StatsReport* remote_report = FindNthReportByType(reports, | 1115 const StatsReport* remote_report = FindNthReportByType(reports, |
| 1101 StatsReport::kStatsReportTypeRemoteSsrc, 1); | 1116 StatsReport::kStatsReportTypeRemoteSsrc, 1); |
| 1102 EXPECT_TRUE(remote_report == NULL); | 1117 EXPECT_TRUE(remote_report == NULL); |
| 1103 } | 1118 } |
| 1104 | 1119 |
| 1105 // This test verifies that a remote stats object will be created for | 1120 // This test verifies that a remote stats object will be created for |
| 1106 // an outgoing SSRC where stats are returned. | 1121 // an outgoing SSRC where stats are returned. |
| 1107 TEST_F(StatsCollectorTest, RemoteSsrcInfoIsPresent) { | 1122 TEST_F(StatsCollectorTest, RemoteSsrcInfoIsPresent) { |
| 1108 StatsCollectorForTest stats(&session_); | 1123 StatsCollectorForTest stats(&pc_); |
| 1109 | 1124 |
| 1110 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1125 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1111 .WillRepeatedly(Return(false)); | 1126 .WillRepeatedly(Return(false)); |
| 1112 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1127 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1113 .WillRepeatedly(Return(false)); | 1128 .WillRepeatedly(Return(false)); |
| 1114 | 1129 |
| 1115 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); | 1130 MockVideoMediaChannel* media_channel = new MockVideoMediaChannel(); |
| 1116 // The transport_name known by the video channel. | 1131 // The transport_name known by the video channel. |
| 1117 const std::string kVcName("vcname"); | 1132 const std::string kVcName("vcname"); |
| 1118 cricket::VideoChannel video_channel(rtc::Thread::Current(), | 1133 cricket::VideoChannel video_channel(rtc::Thread::Current(), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1149 | 1164 |
| 1150 const StatsReport* remote_report = FindNthReportByType(reports, | 1165 const StatsReport* remote_report = FindNthReportByType(reports, |
| 1151 StatsReport::kStatsReportTypeRemoteSsrc, 1); | 1166 StatsReport::kStatsReportTypeRemoteSsrc, 1); |
| 1152 EXPECT_FALSE(remote_report == NULL); | 1167 EXPECT_FALSE(remote_report == NULL); |
| 1153 EXPECT_EQ(12345.678, remote_report->timestamp()); | 1168 EXPECT_EQ(12345.678, remote_report->timestamp()); |
| 1154 } | 1169 } |
| 1155 | 1170 |
| 1156 // This test verifies that the empty track report exists in the returned stats | 1171 // This test verifies that the empty track report exists in the returned stats |
| 1157 // when StatsCollector::UpdateStats is called with ssrc stats. | 1172 // when StatsCollector::UpdateStats is called with ssrc stats. |
| 1158 TEST_F(StatsCollectorTest, ReportsFromRemoteTrack) { | 1173 TEST_F(StatsCollectorTest, ReportsFromRemoteTrack) { |
| 1159 StatsCollectorForTest stats(&session_); | 1174 StatsCollectorForTest stats(&pc_); |
| 1160 | 1175 |
| 1161 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1176 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1162 .WillRepeatedly(Return(false)); | 1177 .WillRepeatedly(Return(false)); |
| 1163 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1178 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1164 .WillRepeatedly(Return(false)); | 1179 .WillRepeatedly(Return(false)); |
| 1165 | 1180 |
| 1166 const char kVideoChannelName[] = "video"; | 1181 const char kVideoChannelName[] = "video"; |
| 1167 InitSessionStats(kVideoChannelName); | 1182 InitSessionStats(kVideoChannelName); |
| 1168 EXPECT_CALL(session_, GetTransportStats(_)) | 1183 EXPECT_CALL(session_, GetTransportStats(_)) |
| 1169 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats_), | 1184 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats_), |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 EXPECT_EQ(rtc::ToString<uint32_t>(kSsrcOfTrack), ssrc_id); | 1222 EXPECT_EQ(rtc::ToString<uint32_t>(kSsrcOfTrack), ssrc_id); |
| 1208 | 1223 |
| 1209 std::string track_id = ExtractSsrcStatsValue( | 1224 std::string track_id = ExtractSsrcStatsValue( |
| 1210 reports, StatsReport::kStatsValueNameTrackId); | 1225 reports, StatsReport::kStatsValueNameTrackId); |
| 1211 EXPECT_EQ(kRemoteTrackId, track_id); | 1226 EXPECT_EQ(kRemoteTrackId, track_id); |
| 1212 } | 1227 } |
| 1213 | 1228 |
| 1214 // This test verifies the Ice Candidate report should contain the correct | 1229 // This test verifies the Ice Candidate report should contain the correct |
| 1215 // information from local/remote candidates. | 1230 // information from local/remote candidates. |
| 1216 TEST_F(StatsCollectorTest, IceCandidateReport) { | 1231 TEST_F(StatsCollectorTest, IceCandidateReport) { |
| 1217 StatsCollectorForTest stats(&session_); | 1232 StatsCollectorForTest stats(&pc_); |
| 1218 | 1233 |
| 1219 StatsReports reports; // returned values. | 1234 StatsReports reports; // returned values. |
| 1220 | 1235 |
| 1221 const int local_port = 2000; | 1236 const int local_port = 2000; |
| 1222 const char local_ip[] = "192.168.0.1"; | 1237 const char local_ip[] = "192.168.0.1"; |
| 1223 const int remote_port = 2001; | 1238 const int remote_port = 2001; |
| 1224 const char remote_ip[] = "192.168.0.2"; | 1239 const char remote_ip[] = "192.168.0.2"; |
| 1225 | 1240 |
| 1226 rtc::SocketAddress local_address(local_ip, local_port); | 1241 rtc::SocketAddress local_address(local_ip, local_port); |
| 1227 rtc::SocketAddress remote_address(remote_ip, remote_port); | 1242 rtc::SocketAddress remote_address(remote_ip, remote_port); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 std::string remote_der = "This is somebody else's der."; | 1352 std::string remote_der = "This is somebody else's der."; |
| 1338 rtc::FakeSSLCertificate remote_cert(DerToPem(remote_der)); | 1353 rtc::FakeSSLCertificate remote_cert(DerToPem(remote_der)); |
| 1339 | 1354 |
| 1340 TestCertificateReports(local_cert, std::vector<std::string>(1, local_der), | 1355 TestCertificateReports(local_cert, std::vector<std::string>(1, local_der), |
| 1341 remote_cert, std::vector<std::string>(1, remote_der)); | 1356 remote_cert, std::vector<std::string>(1, remote_der)); |
| 1342 } | 1357 } |
| 1343 | 1358 |
| 1344 // This test verifies that the stats are generated correctly when no | 1359 // This test verifies that the stats are generated correctly when no |
| 1345 // transport is present. | 1360 // transport is present. |
| 1346 TEST_F(StatsCollectorTest, NoTransport) { | 1361 TEST_F(StatsCollectorTest, NoTransport) { |
| 1347 StatsCollectorForTest stats(&session_); | 1362 StatsCollectorForTest stats(&pc_); |
| 1348 | 1363 |
| 1349 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1364 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1350 .WillRepeatedly(Return(false)); | 1365 .WillRepeatedly(Return(false)); |
| 1351 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1366 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1352 .WillRepeatedly(Return(false)); | 1367 .WillRepeatedly(Return(false)); |
| 1353 | 1368 |
| 1354 StatsReports reports; // returned values. | 1369 StatsReports reports; // returned values. |
| 1355 | 1370 |
| 1356 // Fake stats to process. | 1371 // Fake stats to process. |
| 1357 cricket::TransportChannelStats channel_stats; | 1372 cricket::TransportChannelStats channel_stats; |
| 1358 channel_stats.component = 1; | 1373 channel_stats.component = 1; |
| 1359 | 1374 |
| 1360 cricket::TransportStats transport_stats; | 1375 cricket::TransportStats transport_stats; |
| 1361 transport_stats.transport_name = "audio"; | 1376 transport_stats.transport_name = "audio"; |
| 1362 transport_stats.channel_stats.push_back(channel_stats); | 1377 transport_stats.channel_stats.push_back(channel_stats); |
| 1363 | 1378 |
| 1364 cricket::SessionStats session_stats; | 1379 cricket::SessionStats session_stats; |
| 1365 session_stats.transport_stats[transport_stats.transport_name] = | 1380 session_stats.transport_stats[transport_stats.transport_name] = |
| 1366 transport_stats; | 1381 transport_stats; |
| 1367 | 1382 |
| 1368 // Configure MockWebRtcSession | 1383 // Configure MockWebRtcSession |
| 1369 EXPECT_CALL(session_, GetTransportStats(_)) | 1384 EXPECT_CALL(session_, GetTransportStats(_)) |
| 1370 .WillOnce(DoAll(SetArgPointee<0>(session_stats), | 1385 .WillOnce(DoAll(SetArgPointee<0>(session_stats), |
| 1371 Return(true))); | 1386 Return(true))); |
| 1372 | 1387 |
| 1373 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | |
| 1374 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | |
| 1375 | |
| 1376 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 1388 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 1377 stats.GetStats(NULL, &reports); | 1389 stats.GetStats(NULL, &reports); |
| 1378 | 1390 |
| 1379 // Check that the local certificate is absent. | 1391 // Check that the local certificate is absent. |
| 1380 std::string local_certificate_id = ExtractStatsValue( | 1392 std::string local_certificate_id = ExtractStatsValue( |
| 1381 StatsReport::kStatsReportTypeComponent, | 1393 StatsReport::kStatsReportTypeComponent, |
| 1382 reports, | 1394 reports, |
| 1383 StatsReport::kStatsValueNameLocalCertificateId); | 1395 StatsReport::kStatsValueNameLocalCertificateId); |
| 1384 ASSERT_EQ(kNotFound, local_certificate_id); | 1396 ASSERT_EQ(kNotFound, local_certificate_id); |
| 1385 | 1397 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1399 std::string srtp_cipher = ExtractStatsValue( | 1411 std::string srtp_cipher = ExtractStatsValue( |
| 1400 StatsReport::kStatsReportTypeComponent, | 1412 StatsReport::kStatsReportTypeComponent, |
| 1401 reports, | 1413 reports, |
| 1402 StatsReport::kStatsValueNameSrtpCipher); | 1414 StatsReport::kStatsValueNameSrtpCipher); |
| 1403 ASSERT_EQ(kNotFound, srtp_cipher); | 1415 ASSERT_EQ(kNotFound, srtp_cipher); |
| 1404 } | 1416 } |
| 1405 | 1417 |
| 1406 // This test verifies that the stats are generated correctly when the transport | 1418 // This test verifies that the stats are generated correctly when the transport |
| 1407 // does not have any certificates. | 1419 // does not have any certificates. |
| 1408 TEST_F(StatsCollectorTest, NoCertificates) { | 1420 TEST_F(StatsCollectorTest, NoCertificates) { |
| 1409 StatsCollectorForTest stats(&session_); | 1421 StatsCollectorForTest stats(&pc_); |
| 1410 | 1422 |
| 1411 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1423 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1412 .WillRepeatedly(Return(false)); | 1424 .WillRepeatedly(Return(false)); |
| 1413 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1425 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1414 .WillRepeatedly(Return(false)); | 1426 .WillRepeatedly(Return(false)); |
| 1415 | 1427 |
| 1416 StatsReports reports; // returned values. | 1428 StatsReports reports; // returned values. |
| 1417 | 1429 |
| 1418 // Fake stats to process. | 1430 // Fake stats to process. |
| 1419 cricket::TransportChannelStats channel_stats; | 1431 cricket::TransportChannelStats channel_stats; |
| 1420 channel_stats.component = 1; | 1432 channel_stats.component = 1; |
| 1421 | 1433 |
| 1422 cricket::TransportStats transport_stats; | 1434 cricket::TransportStats transport_stats; |
| 1423 transport_stats.transport_name = "audio"; | 1435 transport_stats.transport_name = "audio"; |
| 1424 transport_stats.channel_stats.push_back(channel_stats); | 1436 transport_stats.channel_stats.push_back(channel_stats); |
| 1425 | 1437 |
| 1426 cricket::SessionStats session_stats; | 1438 cricket::SessionStats session_stats; |
| 1427 session_stats.transport_stats[transport_stats.transport_name] = | 1439 session_stats.transport_stats[transport_stats.transport_name] = |
| 1428 transport_stats; | 1440 transport_stats; |
| 1429 | 1441 |
| 1430 // Fake transport object. | 1442 // Fake transport object. |
| 1431 rtc::scoped_ptr<cricket::FakeTransport> transport( | 1443 rtc::scoped_ptr<cricket::FakeTransport> transport( |
| 1432 new cricket::FakeTransport(transport_stats.transport_name)); | 1444 new cricket::FakeTransport(transport_stats.transport_name)); |
| 1433 | 1445 |
| 1434 // Configure MockWebRtcSession | 1446 // Configure MockWebRtcSession |
| 1435 EXPECT_CALL(session_, GetTransportStats(_)) | 1447 EXPECT_CALL(session_, GetTransportStats(_)) |
| 1436 .WillOnce(DoAll(SetArgPointee<0>(session_stats), | 1448 .WillOnce(DoAll(SetArgPointee<0>(session_stats), |
| 1437 Return(true))); | 1449 Return(true))); |
| 1438 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | |
| 1439 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | |
| 1440 | |
| 1441 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); | 1450 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard); |
| 1442 stats.GetStats(NULL, &reports); | 1451 stats.GetStats(NULL, &reports); |
| 1443 | 1452 |
| 1444 // Check that the local certificate is absent. | 1453 // Check that the local certificate is absent. |
| 1445 std::string local_certificate_id = ExtractStatsValue( | 1454 std::string local_certificate_id = ExtractStatsValue( |
| 1446 StatsReport::kStatsReportTypeComponent, | 1455 StatsReport::kStatsReportTypeComponent, |
| 1447 reports, | 1456 reports, |
| 1448 StatsReport::kStatsValueNameLocalCertificateId); | 1457 StatsReport::kStatsValueNameLocalCertificateId); |
| 1449 ASSERT_EQ(kNotFound, local_certificate_id); | 1458 ASSERT_EQ(kNotFound, local_certificate_id); |
| 1450 | 1459 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1468 rtc::FakeSSLCertificate remote_cert(DerToPem(remote_der)); | 1477 rtc::FakeSSLCertificate remote_cert(DerToPem(remote_der)); |
| 1469 remote_cert.set_digest_algorithm("foobar"); | 1478 remote_cert.set_digest_algorithm("foobar"); |
| 1470 | 1479 |
| 1471 TestCertificateReports(local_cert, std::vector<std::string>(1, local_der), | 1480 TestCertificateReports(local_cert, std::vector<std::string>(1, local_der), |
| 1472 remote_cert, std::vector<std::string>()); | 1481 remote_cert, std::vector<std::string>()); |
| 1473 } | 1482 } |
| 1474 | 1483 |
| 1475 // This test verifies that a local stats object can get statistics via | 1484 // This test verifies that a local stats object can get statistics via |
| 1476 // AudioTrackInterface::GetStats() method. | 1485 // AudioTrackInterface::GetStats() method. |
| 1477 TEST_F(StatsCollectorTest, GetStatsFromLocalAudioTrack) { | 1486 TEST_F(StatsCollectorTest, GetStatsFromLocalAudioTrack) { |
| 1478 StatsCollectorForTest stats(&session_); | 1487 StatsCollectorForTest stats(&pc_); |
| 1479 | 1488 |
| 1480 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1489 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1481 .WillRepeatedly(Return(false)); | 1490 .WillRepeatedly(Return(false)); |
| 1482 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1491 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1483 .WillRepeatedly(Return(false)); | 1492 .WillRepeatedly(Return(false)); |
| 1484 | 1493 |
| 1485 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); | 1494 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); |
| 1486 // The transport_name known by the voice channel. | 1495 // The transport_name known by the voice channel. |
| 1487 const std::string kVcName("vcname"); | 1496 const std::string kVcName("vcname"); |
| 1488 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), | 1497 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1503 // Verify that there is no remote report for the local audio track because | 1512 // Verify that there is no remote report for the local audio track because |
| 1504 // we did not set it up. | 1513 // we did not set it up. |
| 1505 const StatsReport* remote_report = FindNthReportByType(reports, | 1514 const StatsReport* remote_report = FindNthReportByType(reports, |
| 1506 StatsReport::kStatsReportTypeRemoteSsrc, 1); | 1515 StatsReport::kStatsReportTypeRemoteSsrc, 1); |
| 1507 EXPECT_TRUE(remote_report == NULL); | 1516 EXPECT_TRUE(remote_report == NULL); |
| 1508 } | 1517 } |
| 1509 | 1518 |
| 1510 // This test verifies that audio receive streams populate stats reports | 1519 // This test verifies that audio receive streams populate stats reports |
| 1511 // correctly. | 1520 // correctly. |
| 1512 TEST_F(StatsCollectorTest, GetStatsFromRemoteStream) { | 1521 TEST_F(StatsCollectorTest, GetStatsFromRemoteStream) { |
| 1513 StatsCollectorForTest stats(&session_); | 1522 StatsCollectorForTest stats(&pc_); |
| 1514 | 1523 |
| 1515 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1524 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1516 .WillRepeatedly(Return(false)); | 1525 .WillRepeatedly(Return(false)); |
| 1517 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1526 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1518 .WillRepeatedly(Return(false)); | 1527 .WillRepeatedly(Return(false)); |
| 1519 | 1528 |
| 1520 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); | 1529 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); |
| 1521 // The transport_name known by the voice channel. | 1530 // The transport_name known by the voice channel. |
| 1522 const std::string kVcName("vcname"); | 1531 const std::string kVcName("vcname"); |
| 1523 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), | 1532 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), |
| 1524 media_engine_, media_channel, NULL, kVcName, false); | 1533 media_engine_, media_channel, NULL, kVcName, false); |
| 1525 AddIncomingAudioTrackStats(); | 1534 AddIncomingAudioTrackStats(); |
| 1526 stats.AddStream(stream_); | 1535 stats.AddStream(stream_); |
| 1527 | 1536 |
| 1528 cricket::VoiceReceiverInfo voice_receiver_info; | 1537 cricket::VoiceReceiverInfo voice_receiver_info; |
| 1529 InitVoiceReceiverInfo(&voice_receiver_info); | 1538 InitVoiceReceiverInfo(&voice_receiver_info); |
| 1530 voice_receiver_info.codec_name = "fake_codec"; | 1539 voice_receiver_info.codec_name = "fake_codec"; |
| 1531 | 1540 |
| 1532 cricket::VoiceMediaInfo stats_read; | 1541 cricket::VoiceMediaInfo stats_read; |
| 1533 StatsReports reports; // returned values. | 1542 StatsReports reports; // returned values. |
| 1534 SetupAndVerifyAudioTrackStats( | 1543 SetupAndVerifyAudioTrackStats( |
| 1535 audio_track_.get(), stream_.get(), &stats, &voice_channel, kVcName, | 1544 audio_track_.get(), stream_.get(), &stats, &voice_channel, kVcName, |
| 1536 media_channel, NULL, &voice_receiver_info, &stats_read, &reports); | 1545 media_channel, NULL, &voice_receiver_info, &stats_read, &reports); |
| 1537 } | 1546 } |
| 1538 | 1547 |
| 1539 // This test verifies that a local stats object won't update its statistics | 1548 // This test verifies that a local stats object won't update its statistics |
| 1540 // after a RemoveLocalAudioTrack() call. | 1549 // after a RemoveLocalAudioTrack() call. |
| 1541 TEST_F(StatsCollectorTest, GetStatsAfterRemoveAudioStream) { | 1550 TEST_F(StatsCollectorTest, GetStatsAfterRemoveAudioStream) { |
| 1542 StatsCollectorForTest stats(&session_); | 1551 StatsCollectorForTest stats(&pc_); |
| 1543 | 1552 |
| 1544 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1553 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1545 .WillRepeatedly(Return(false)); | 1554 .WillRepeatedly(Return(false)); |
| 1546 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1555 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1547 .WillRepeatedly(Return(false)); | 1556 .WillRepeatedly(Return(false)); |
| 1548 | 1557 |
| 1549 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); | 1558 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); |
| 1550 // The transport_name known by the voice channel. | 1559 // The transport_name known by the voice channel. |
| 1551 const std::string kVcName("vcname"); | 1560 const std::string kVcName("vcname"); |
| 1552 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), | 1561 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1593 | 1602 |
| 1594 // Verifies the values in the track report, no value will be changed by the | 1603 // Verifies the values in the track report, no value will be changed by the |
| 1595 // AudioTrackInterface::GetSignalValue() and | 1604 // AudioTrackInterface::GetSignalValue() and |
| 1596 // AudioProcessorInterface::AudioProcessorStats::GetStats(); | 1605 // AudioProcessorInterface::AudioProcessorStats::GetStats(); |
| 1597 VerifyVoiceSenderInfoReport(report, voice_sender_info); | 1606 VerifyVoiceSenderInfoReport(report, voice_sender_info); |
| 1598 } | 1607 } |
| 1599 | 1608 |
| 1600 // This test verifies that when ongoing and incoming audio tracks are using | 1609 // This test verifies that when ongoing and incoming audio tracks are using |
| 1601 // the same ssrc, they populate stats reports correctly. | 1610 // the same ssrc, they populate stats reports correctly. |
| 1602 TEST_F(StatsCollectorTest, LocalAndRemoteTracksWithSameSsrc) { | 1611 TEST_F(StatsCollectorTest, LocalAndRemoteTracksWithSameSsrc) { |
| 1603 StatsCollectorForTest stats(&session_); | 1612 StatsCollectorForTest stats(&pc_); |
| 1604 | 1613 |
| 1605 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1614 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1606 .WillRepeatedly(Return(false)); | 1615 .WillRepeatedly(Return(false)); |
| 1607 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1616 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1608 .WillRepeatedly(Return(false)); | 1617 .WillRepeatedly(Return(false)); |
| 1609 | 1618 |
| 1610 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); | 1619 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); |
| 1611 // The transport_name known by the voice channel. | 1620 // The transport_name known by the voice channel. |
| 1612 const std::string kVcName("vcname"); | 1621 const std::string kVcName("vcname"); |
| 1613 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), | 1622 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1680 StatsReport::kStatsValueNameTrackId); | 1689 StatsReport::kStatsValueNameTrackId); |
| 1681 EXPECT_EQ(kRemoteTrackId, track_id); | 1690 EXPECT_EQ(kRemoteTrackId, track_id); |
| 1682 VerifyVoiceReceiverInfoReport(track_report, voice_receiver_info); | 1691 VerifyVoiceReceiverInfoReport(track_report, voice_receiver_info); |
| 1683 } | 1692 } |
| 1684 | 1693 |
| 1685 // This test verifies that when two outgoing audio tracks are using the same | 1694 // This test verifies that when two outgoing audio tracks are using the same |
| 1686 // ssrc at different times, they populate stats reports correctly. | 1695 // ssrc at different times, they populate stats reports correctly. |
| 1687 // TODO(xians): Figure out if it is possible to encapsulate the setup and | 1696 // TODO(xians): Figure out if it is possible to encapsulate the setup and |
| 1688 // avoid duplication of code in test cases. | 1697 // avoid duplication of code in test cases. |
| 1689 TEST_F(StatsCollectorTest, TwoLocalTracksWithSameSsrc) { | 1698 TEST_F(StatsCollectorTest, TwoLocalTracksWithSameSsrc) { |
| 1690 StatsCollectorForTest stats(&session_); | 1699 StatsCollectorForTest stats(&pc_); |
| 1691 | 1700 |
| 1692 EXPECT_CALL(session_, GetLocalCertificate(_, _)) | 1701 EXPECT_CALL(session_, GetLocalCertificate(_, _)) |
| 1693 .WillRepeatedly(Return(false)); | 1702 .WillRepeatedly(Return(false)); |
| 1694 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) | 1703 EXPECT_CALL(session_, GetRemoteSSLCertificate(_, _)) |
| 1695 .WillRepeatedly(Return(false)); | 1704 .WillRepeatedly(Return(false)); |
| 1696 | 1705 |
| 1697 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); | 1706 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel(); |
| 1698 // The transport_name known by the voice channel. | 1707 // The transport_name known by the voice channel. |
| 1699 const std::string kVcName("vcname"); | 1708 const std::string kVcName("vcname"); |
| 1700 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), | 1709 cricket::VoiceChannel voice_channel(rtc::Thread::Current(), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1731 cricket::VoiceSenderInfo new_voice_sender_info; | 1740 cricket::VoiceSenderInfo new_voice_sender_info; |
| 1732 InitVoiceSenderInfo(&new_voice_sender_info); | 1741 InitVoiceSenderInfo(&new_voice_sender_info); |
| 1733 cricket::VoiceMediaInfo new_stats_read; | 1742 cricket::VoiceMediaInfo new_stats_read; |
| 1734 reports.clear(); | 1743 reports.clear(); |
| 1735 SetupAndVerifyAudioTrackStats( | 1744 SetupAndVerifyAudioTrackStats( |
| 1736 new_audio_track.get(), stream_.get(), &stats, &voice_channel, kVcName, | 1745 new_audio_track.get(), stream_.get(), &stats, &voice_channel, kVcName, |
| 1737 media_channel, &new_voice_sender_info, NULL, &new_stats_read, &reports); | 1746 media_channel, &new_voice_sender_info, NULL, &new_stats_read, &reports); |
| 1738 } | 1747 } |
| 1739 | 1748 |
| 1740 } // namespace webrtc | 1749 } // namespace webrtc |
| OLD | NEW |