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