OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 static const int kDefaultSrtpCryptoSuiteGcm = rtc::SRTP_AEAD_AES_256_GCM; | 99 static const int kDefaultSrtpCryptoSuiteGcm = rtc::SRTP_AEAD_AES_256_GCM; |
100 | 100 |
101 // Helper function for constructing offer/answer options to initiate an ICE | 101 // Helper function for constructing offer/answer options to initiate an ICE |
102 // restart. | 102 // restart. |
103 PeerConnectionInterface::RTCOfferAnswerOptions IceRestartOfferAnswerOptions() { | 103 PeerConnectionInterface::RTCOfferAnswerOptions IceRestartOfferAnswerOptions() { |
104 PeerConnectionInterface::RTCOfferAnswerOptions options; | 104 PeerConnectionInterface::RTCOfferAnswerOptions options; |
105 options.ice_restart = true; | 105 options.ice_restart = true; |
106 return options; | 106 return options; |
107 } | 107 } |
108 | 108 |
| 109 // Remove all stream information (SSRCs, track IDs, etc.) and "msid-semantic" |
| 110 // attribute from received SDP, simulating a legacy endpoint. |
| 111 void RemoveSsrcsAndMsids(cricket::SessionDescription* desc) { |
| 112 for (ContentInfo& content : desc->contents()) { |
| 113 MediaContentDescription* media_desc = |
| 114 static_cast<MediaContentDescription*>(content.description); |
| 115 media_desc->mutable_streams().clear(); |
| 116 } |
| 117 desc->set_msid_supported(false); |
| 118 } |
| 119 |
109 class SignalingMessageReceiver { | 120 class SignalingMessageReceiver { |
110 public: | 121 public: |
111 virtual void ReceiveSdpMessage(const std::string& type, | 122 virtual void ReceiveSdpMessage(const std::string& type, |
112 const std::string& msg) = 0; | 123 const std::string& msg) = 0; |
113 virtual void ReceiveIceMessage(const std::string& sdp_mid, | 124 virtual void ReceiveIceMessage(const std::string& sdp_mid, |
114 int sdp_mline_index, | 125 int sdp_mline_index, |
115 const std::string& msg) = 0; | 126 const std::string& msg) = 0; |
116 | 127 |
117 protected: | 128 protected: |
118 SignalingMessageReceiver() {} | 129 SignalingMessageReceiver() {} |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 } | 412 } |
402 for (const auto& renderer : removed_fake_video_renderers_) { | 413 for (const auto& renderer : removed_fake_video_renderers_) { |
403 total += renderer->num_rendered_frames(); | 414 total += renderer->num_rendered_frames(); |
404 } | 415 } |
405 } | 416 } |
406 return total; | 417 return total; |
407 } | 418 } |
408 | 419 |
409 // Returns a MockStatsObserver in a state after stats gathering finished, | 420 // Returns a MockStatsObserver in a state after stats gathering finished, |
410 // which can be used to access the gathered stats. | 421 // which can be used to access the gathered stats. |
411 rtc::scoped_refptr<MockStatsObserver> GetStatsForTrack( | 422 rtc::scoped_refptr<MockStatsObserver> OldGetStatsForTrack( |
412 webrtc::MediaStreamTrackInterface* track) { | 423 webrtc::MediaStreamTrackInterface* track) { |
413 rtc::scoped_refptr<MockStatsObserver> observer( | 424 rtc::scoped_refptr<MockStatsObserver> observer( |
414 new rtc::RefCountedObject<MockStatsObserver>()); | 425 new rtc::RefCountedObject<MockStatsObserver>()); |
415 EXPECT_TRUE(peer_connection_->GetStats( | 426 EXPECT_TRUE(peer_connection_->GetStats( |
416 observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard)); | 427 observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard)); |
417 EXPECT_TRUE_WAIT(observer->called(), kDefaultTimeout); | 428 EXPECT_TRUE_WAIT(observer->called(), kDefaultTimeout); |
418 return observer; | 429 return observer; |
419 } | 430 } |
420 | 431 |
421 // Version that doesn't take a track "filter", and gathers all stats. | 432 // Version that doesn't take a track "filter", and gathers all stats. |
422 rtc::scoped_refptr<MockStatsObserver> GetStats() { | 433 rtc::scoped_refptr<MockStatsObserver> OldGetStats() { |
423 return GetStatsForTrack(nullptr); | 434 return OldGetStatsForTrack(nullptr); |
| 435 } |
| 436 |
| 437 // Synchronously gets stats and returns them. If it times out, fails the test |
| 438 // and returns null. |
| 439 rtc::scoped_refptr<const webrtc::RTCStatsReport> NewGetStats() { |
| 440 rtc::scoped_refptr<webrtc::MockRTCStatsCollectorCallback> callback( |
| 441 new rtc::RefCountedObject<webrtc::MockRTCStatsCollectorCallback>()); |
| 442 peer_connection_->GetStats(callback); |
| 443 EXPECT_TRUE_WAIT(callback->called(), kDefaultTimeout); |
| 444 return callback->report(); |
424 } | 445 } |
425 | 446 |
426 int rendered_width() { | 447 int rendered_width() { |
427 EXPECT_FALSE(fake_video_renderers_.empty()); | 448 EXPECT_FALSE(fake_video_renderers_.empty()); |
428 return fake_video_renderers_.empty() | 449 return fake_video_renderers_.empty() |
429 ? 0 | 450 ? 0 |
430 : fake_video_renderers_.begin()->second->width(); | 451 : fake_video_renderers_.begin()->second->width(); |
431 } | 452 } |
432 | 453 |
433 int rendered_height() { | 454 int rendered_height() { |
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 callee_options)); | 1113 callee_options)); |
1093 rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer = | 1114 rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer = |
1094 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); | 1115 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); |
1095 caller()->pc()->RegisterUMAObserver(caller_observer); | 1116 caller()->pc()->RegisterUMAObserver(caller_observer); |
1096 ConnectFakeSignaling(); | 1117 ConnectFakeSignaling(); |
1097 caller()->AddAudioVideoMediaStream(); | 1118 caller()->AddAudioVideoMediaStream(); |
1098 callee()->AddAudioVideoMediaStream(); | 1119 callee()->AddAudioVideoMediaStream(); |
1099 caller()->CreateAndSetAndSignalOffer(); | 1120 caller()->CreateAndSetAndSignalOffer(); |
1100 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1121 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1101 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(expected_cipher_suite), | 1122 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(expected_cipher_suite), |
1102 caller()->GetStats()->SrtpCipher(), kDefaultTimeout); | 1123 caller()->OldGetStats()->SrtpCipher(), kDefaultTimeout); |
1103 EXPECT_EQ( | 1124 EXPECT_EQ( |
1104 1, caller_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, | 1125 1, caller_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, |
1105 expected_cipher_suite)); | 1126 expected_cipher_suite)); |
1106 caller()->pc()->RegisterUMAObserver(nullptr); | 1127 caller()->pc()->RegisterUMAObserver(nullptr); |
1107 } | 1128 } |
1108 | 1129 |
1109 private: | 1130 private: |
1110 // |ss_| is used by |network_thread_| so it must be destroyed later. | 1131 // |ss_| is used by |network_thread_| so it must be destroyed later. |
1111 std::unique_ptr<rtc::PhysicalSocketServer> pss_; | 1132 std::unique_ptr<rtc::PhysicalSocketServer> pss_; |
1112 std::unique_ptr<rtc::VirtualSocketServer> ss_; | 1133 std::unique_ptr<rtc::VirtualSocketServer> ss_; |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1694 // is needed to support legacy endpoints. | 1715 // is needed to support legacy endpoints. |
1695 // TODO(deadbeef): When we support the MID extension and demuxing on MID, also | 1716 // TODO(deadbeef): When we support the MID extension and demuxing on MID, also |
1696 // add a test for an end-to-end test without MID signaling either (basically, | 1717 // add a test for an end-to-end test without MID signaling either (basically, |
1697 // the minimum acceptable SDP). | 1718 // the minimum acceptable SDP). |
1698 TEST_F(PeerConnectionIntegrationTest, EndToEndCallWithoutSsrcOrMsidSignaling) { | 1719 TEST_F(PeerConnectionIntegrationTest, EndToEndCallWithoutSsrcOrMsidSignaling) { |
1699 ASSERT_TRUE(CreatePeerConnectionWrappers()); | 1720 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
1700 ConnectFakeSignaling(); | 1721 ConnectFakeSignaling(); |
1701 // Add audio and video, testing that packets can be demuxed on payload type. | 1722 // Add audio and video, testing that packets can be demuxed on payload type. |
1702 caller()->AddAudioVideoMediaStream(); | 1723 caller()->AddAudioVideoMediaStream(); |
1703 callee()->AddAudioVideoMediaStream(); | 1724 callee()->AddAudioVideoMediaStream(); |
1704 // Remove all stream information (SSRCs, track IDs, etc.) and "msid-semantic" | 1725 // Remove SSRCs and MSIDs from the received offer SDP. |
1705 // attribute from received SDP, simulating a legacy endpoint. | 1726 callee()->SetReceivedSdpMunger(RemoveSsrcsAndMsids); |
1706 callee()->SetReceivedSdpMunger([](cricket::SessionDescription* desc) { | |
1707 for (ContentInfo& content : desc->contents()) { | |
1708 MediaContentDescription* media_desc = | |
1709 static_cast<MediaContentDescription*>(content.description); | |
1710 media_desc->mutable_streams().clear(); | |
1711 } | |
1712 desc->set_msid_supported(false); | |
1713 }); | |
1714 caller()->CreateAndSetAndSignalOffer(); | 1727 caller()->CreateAndSetAndSignalOffer(); |
1715 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1728 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1716 ExpectNewFramesReceivedWithWait( | 1729 ExpectNewFramesReceivedWithWait( |
1717 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 1730 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
1718 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 1731 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
1719 kMaxWaitForFramesMs); | 1732 kMaxWaitForFramesMs); |
1720 } | 1733 } |
1721 | 1734 |
1722 // Test that if two video tracks are sent (from caller to callee, in this test), | 1735 // Test that if two video tracks are sent (from caller to callee, in this test), |
1723 // they're transmitted correctly end-to-end. | 1736 // they're transmitted correctly end-to-end. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1780 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1793 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1781 ExpectNewFramesReceivedWithWait( | 1794 ExpectNewFramesReceivedWithWait( |
1782 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 1795 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
1783 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 1796 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
1784 kMaxWaitForFramesMs); | 1797 kMaxWaitForFramesMs); |
1785 } | 1798 } |
1786 | 1799 |
1787 // Test that we can receive the audio output level from a remote audio track. | 1800 // Test that we can receive the audio output level from a remote audio track. |
1788 // TODO(deadbeef): Use a fake audio source and verify that the output level is | 1801 // TODO(deadbeef): Use a fake audio source and verify that the output level is |
1789 // exactly what the source on the other side was configured with. | 1802 // exactly what the source on the other side was configured with. |
1790 TEST_F(PeerConnectionIntegrationTest, GetAudioOutputLevelStats) { | 1803 TEST_F(PeerConnectionIntegrationTest, GetAudioOutputLevelStatsWithOldStatsApi) { |
1791 ASSERT_TRUE(CreatePeerConnectionWrappers()); | 1804 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
1792 ConnectFakeSignaling(); | 1805 ConnectFakeSignaling(); |
1793 // Just add an audio track. | 1806 // Just add an audio track. |
1794 caller()->AddMediaStreamFromTracks(caller()->CreateLocalAudioTrack(), | 1807 caller()->AddMediaStreamFromTracks(caller()->CreateLocalAudioTrack(), |
1795 nullptr); | 1808 nullptr); |
1796 caller()->CreateAndSetAndSignalOffer(); | 1809 caller()->CreateAndSetAndSignalOffer(); |
1797 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1810 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1798 | 1811 |
1799 // Get the audio output level stats. Note that the level is not available | 1812 // Get the audio output level stats. Note that the level is not available |
1800 // until an RTCP packet has been received. | 1813 // until an RTCP packet has been received. |
1801 EXPECT_TRUE_WAIT(callee()->GetStats()->AudioOutputLevel() > 0, | 1814 EXPECT_TRUE_WAIT(callee()->OldGetStats()->AudioOutputLevel() > 0, |
1802 kMaxWaitForFramesMs); | 1815 kMaxWaitForFramesMs); |
1803 } | 1816 } |
1804 | 1817 |
1805 // Test that an audio input level is reported. | 1818 // Test that an audio input level is reported. |
1806 // TODO(deadbeef): Use a fake audio source and verify that the input level is | 1819 // TODO(deadbeef): Use a fake audio source and verify that the input level is |
1807 // exactly what the source was configured with. | 1820 // exactly what the source was configured with. |
1808 TEST_F(PeerConnectionIntegrationTest, GetAudioInputLevelStats) { | 1821 TEST_F(PeerConnectionIntegrationTest, GetAudioInputLevelStatsWithOldStatsApi) { |
1809 ASSERT_TRUE(CreatePeerConnectionWrappers()); | 1822 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
1810 ConnectFakeSignaling(); | 1823 ConnectFakeSignaling(); |
1811 // Just add an audio track. | 1824 // Just add an audio track. |
1812 caller()->AddMediaStreamFromTracks(caller()->CreateLocalAudioTrack(), | 1825 caller()->AddMediaStreamFromTracks(caller()->CreateLocalAudioTrack(), |
1813 nullptr); | 1826 nullptr); |
1814 caller()->CreateAndSetAndSignalOffer(); | 1827 caller()->CreateAndSetAndSignalOffer(); |
1815 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1828 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1816 | 1829 |
1817 // Get the audio input level stats. The level should be available very | 1830 // Get the audio input level stats. The level should be available very |
1818 // soon after the test starts. | 1831 // soon after the test starts. |
1819 EXPECT_TRUE_WAIT(caller()->GetStats()->AudioInputLevel() > 0, | 1832 EXPECT_TRUE_WAIT(caller()->OldGetStats()->AudioInputLevel() > 0, |
1820 kMaxWaitForStatsMs); | 1833 kMaxWaitForStatsMs); |
1821 } | 1834 } |
1822 | 1835 |
1823 // Test that we can get incoming byte counts from both audio and video tracks. | 1836 // Test that we can get incoming byte counts from both audio and video tracks. |
1824 TEST_F(PeerConnectionIntegrationTest, GetBytesReceivedStats) { | 1837 TEST_F(PeerConnectionIntegrationTest, GetBytesReceivedStatsWithOldStatsApi) { |
1825 ASSERT_TRUE(CreatePeerConnectionWrappers()); | 1838 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
1826 ConnectFakeSignaling(); | 1839 ConnectFakeSignaling(); |
1827 caller()->AddAudioVideoMediaStream(); | 1840 caller()->AddAudioVideoMediaStream(); |
1828 // Do offer/answer, wait for the callee to receive some frames. | 1841 // Do offer/answer, wait for the callee to receive some frames. |
1829 caller()->CreateAndSetAndSignalOffer(); | 1842 caller()->CreateAndSetAndSignalOffer(); |
1830 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1843 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1831 int expected_caller_received_frames = 0; | 1844 int expected_caller_received_frames = 0; |
1832 ExpectNewFramesReceivedWithWait( | 1845 ExpectNewFramesReceivedWithWait( |
1833 expected_caller_received_frames, expected_caller_received_frames, | 1846 expected_caller_received_frames, expected_caller_received_frames, |
1834 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 1847 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
1835 kMaxWaitForFramesMs); | 1848 kMaxWaitForFramesMs); |
1836 | 1849 |
1837 // Get a handle to the remote tracks created, so they can be used as GetStats | 1850 // Get a handle to the remote tracks created, so they can be used as GetStats |
1838 // filters. | 1851 // filters. |
1839 StreamCollectionInterface* remote_streams = callee()->remote_streams(); | 1852 StreamCollectionInterface* remote_streams = callee()->remote_streams(); |
1840 ASSERT_EQ(1u, remote_streams->count()); | 1853 ASSERT_EQ(1u, remote_streams->count()); |
1841 ASSERT_EQ(1u, remote_streams->at(0)->GetAudioTracks().size()); | 1854 ASSERT_EQ(1u, remote_streams->at(0)->GetAudioTracks().size()); |
1842 ASSERT_EQ(1u, remote_streams->at(0)->GetVideoTracks().size()); | 1855 ASSERT_EQ(1u, remote_streams->at(0)->GetVideoTracks().size()); |
1843 MediaStreamTrackInterface* remote_audio_track = | 1856 MediaStreamTrackInterface* remote_audio_track = |
1844 remote_streams->at(0)->GetAudioTracks()[0]; | 1857 remote_streams->at(0)->GetAudioTracks()[0]; |
1845 MediaStreamTrackInterface* remote_video_track = | 1858 MediaStreamTrackInterface* remote_video_track = |
1846 remote_streams->at(0)->GetVideoTracks()[0]; | 1859 remote_streams->at(0)->GetVideoTracks()[0]; |
1847 | 1860 |
1848 // We received frames, so we definitely should have nonzero "received bytes" | 1861 // We received frames, so we definitely should have nonzero "received bytes" |
1849 // stats at this point. | 1862 // stats at this point. |
1850 EXPECT_GT(callee()->GetStatsForTrack(remote_audio_track)->BytesReceived(), 0); | 1863 EXPECT_GT(callee()->OldGetStatsForTrack(remote_audio_track)->BytesReceived(), |
1851 EXPECT_GT(callee()->GetStatsForTrack(remote_video_track)->BytesReceived(), 0); | 1864 0); |
| 1865 EXPECT_GT(callee()->OldGetStatsForTrack(remote_video_track)->BytesReceived(), |
| 1866 0); |
1852 } | 1867 } |
1853 | 1868 |
1854 // Test that we can get outgoing byte counts from both audio and video tracks. | 1869 // Test that we can get outgoing byte counts from both audio and video tracks. |
1855 TEST_F(PeerConnectionIntegrationTest, GetBytesSentStats) { | 1870 TEST_F(PeerConnectionIntegrationTest, GetBytesSentStatsWithOldStatsApi) { |
1856 ASSERT_TRUE(CreatePeerConnectionWrappers()); | 1871 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
1857 ConnectFakeSignaling(); | 1872 ConnectFakeSignaling(); |
1858 auto audio_track = caller()->CreateLocalAudioTrack(); | 1873 auto audio_track = caller()->CreateLocalAudioTrack(); |
1859 auto video_track = caller()->CreateLocalVideoTrack(); | 1874 auto video_track = caller()->CreateLocalVideoTrack(); |
1860 caller()->AddMediaStreamFromTracks(audio_track, video_track); | 1875 caller()->AddMediaStreamFromTracks(audio_track, video_track); |
1861 // Do offer/answer, wait for the callee to receive some frames. | 1876 // Do offer/answer, wait for the callee to receive some frames. |
1862 caller()->CreateAndSetAndSignalOffer(); | 1877 caller()->CreateAndSetAndSignalOffer(); |
1863 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1878 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1864 int expected_caller_received_frames = 0; | 1879 int expected_caller_received_frames = 0; |
1865 ExpectNewFramesReceivedWithWait( | 1880 ExpectNewFramesReceivedWithWait( |
1866 expected_caller_received_frames, expected_caller_received_frames, | 1881 expected_caller_received_frames, expected_caller_received_frames, |
1867 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 1882 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
1868 kMaxWaitForFramesMs); | 1883 kMaxWaitForFramesMs); |
1869 | 1884 |
1870 // The callee received frames, so we definitely should have nonzero "sent | 1885 // The callee received frames, so we definitely should have nonzero "sent |
1871 // bytes" stats at this point. | 1886 // bytes" stats at this point. |
1872 EXPECT_GT(caller()->GetStatsForTrack(audio_track)->BytesSent(), 0); | 1887 EXPECT_GT(caller()->OldGetStatsForTrack(audio_track)->BytesSent(), 0); |
1873 EXPECT_GT(caller()->GetStatsForTrack(video_track)->BytesSent(), 0); | 1888 EXPECT_GT(caller()->OldGetStatsForTrack(video_track)->BytesSent(), 0); |
| 1889 } |
| 1890 |
| 1891 // Test that we can get stats (using the new stats implemnetation) for |
| 1892 // unsignaled streams. Meaning when SSRCs/MSIDs aren't signaled explicitly in |
| 1893 // SDP. |
| 1894 TEST_F(PeerConnectionIntegrationTest, |
| 1895 GetStatsForUnsignaledStreamWithNewStatsApi) { |
| 1896 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
| 1897 ConnectFakeSignaling(); |
| 1898 caller()->AddAudioOnlyMediaStream(); |
| 1899 // Remove SSRCs and MSIDs from the received offer SDP. |
| 1900 callee()->SetReceivedSdpMunger(RemoveSsrcsAndMsids); |
| 1901 caller()->CreateAndSetAndSignalOffer(); |
| 1902 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
| 1903 // Wait for one audio frame to be received by the callee. |
| 1904 ExpectNewFramesReceivedWithWait(0, 0, 1, 0, kMaxWaitForFramesMs); |
| 1905 |
| 1906 // We received a frame, so we should have nonzero "bytes received" stats for |
| 1907 // the unsignaled stream, if stats are working for it. |
| 1908 rtc::scoped_refptr<const webrtc::RTCStatsReport> report = |
| 1909 callee()->NewGetStats(); |
| 1910 ASSERT_NE(nullptr, report); |
| 1911 auto inbound_stream_stats = |
| 1912 report->GetStatsOfType<webrtc::RTCInboundRTPStreamStats>(); |
| 1913 ASSERT_EQ(1U, inbound_stream_stats.size()); |
| 1914 ASSERT_TRUE(inbound_stream_stats[0]->bytes_received.is_defined()); |
| 1915 ASSERT_GT(*inbound_stream_stats[0]->bytes_received, 0U); |
| 1916 // TODO(deadbeef): Test that track_id is defined. This is not currently |
| 1917 // working since SSRCs are used to match RtpReceivers (and their tracks) with |
| 1918 // received stream stats in TrackMediaInfoMap. |
1874 } | 1919 } |
1875 | 1920 |
1876 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0. | 1921 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0. |
1877 TEST_F(PeerConnectionIntegrationTest, EndToEndCallWithDtls10) { | 1922 TEST_F(PeerConnectionIntegrationTest, EndToEndCallWithDtls10) { |
1878 PeerConnectionFactory::Options dtls_10_options; | 1923 PeerConnectionFactory::Options dtls_10_options; |
1879 dtls_10_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; | 1924 dtls_10_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; |
1880 ASSERT_TRUE(CreatePeerConnectionWrappersWithOptions(dtls_10_options, | 1925 ASSERT_TRUE(CreatePeerConnectionWrappersWithOptions(dtls_10_options, |
1881 dtls_10_options)); | 1926 dtls_10_options)); |
1882 ConnectFakeSignaling(); | 1927 ConnectFakeSignaling(); |
1883 // Do normal offer/answer and wait for some frames to be received in each | 1928 // Do normal offer/answer and wait for some frames to be received in each |
(...skipping 17 matching lines...) Expand all Loading... |
1901 ConnectFakeSignaling(); | 1946 ConnectFakeSignaling(); |
1902 // Register UMA observer before signaling begins. | 1947 // Register UMA observer before signaling begins. |
1903 rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer = | 1948 rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer = |
1904 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); | 1949 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); |
1905 caller()->pc()->RegisterUMAObserver(caller_observer); | 1950 caller()->pc()->RegisterUMAObserver(caller_observer); |
1906 caller()->AddAudioVideoMediaStream(); | 1951 caller()->AddAudioVideoMediaStream(); |
1907 callee()->AddAudioVideoMediaStream(); | 1952 callee()->AddAudioVideoMediaStream(); |
1908 caller()->CreateAndSetAndSignalOffer(); | 1953 caller()->CreateAndSetAndSignalOffer(); |
1909 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1954 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1910 EXPECT_TRUE_WAIT(rtc::SSLStreamAdapter::IsAcceptableCipher( | 1955 EXPECT_TRUE_WAIT(rtc::SSLStreamAdapter::IsAcceptableCipher( |
1911 caller()->GetStats()->DtlsCipher(), rtc::KT_DEFAULT), | 1956 caller()->OldGetStats()->DtlsCipher(), rtc::KT_DEFAULT), |
1912 kDefaultTimeout); | 1957 kDefaultTimeout); |
1913 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(kDefaultSrtpCryptoSuite), | 1958 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(kDefaultSrtpCryptoSuite), |
1914 caller()->GetStats()->SrtpCipher(), kDefaultTimeout); | 1959 caller()->OldGetStats()->SrtpCipher(), kDefaultTimeout); |
1915 EXPECT_EQ(1, | 1960 EXPECT_EQ(1, |
1916 caller_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, | 1961 caller_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, |
1917 kDefaultSrtpCryptoSuite)); | 1962 kDefaultSrtpCryptoSuite)); |
1918 } | 1963 } |
1919 | 1964 |
1920 // Test getting cipher stats and UMA metrics when DTLS 1.2 is negotiated. | 1965 // Test getting cipher stats and UMA metrics when DTLS 1.2 is negotiated. |
1921 TEST_F(PeerConnectionIntegrationTest, Dtls12CipherStatsAndUmaMetrics) { | 1966 TEST_F(PeerConnectionIntegrationTest, Dtls12CipherStatsAndUmaMetrics) { |
1922 PeerConnectionFactory::Options dtls_12_options; | 1967 PeerConnectionFactory::Options dtls_12_options; |
1923 dtls_12_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; | 1968 dtls_12_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; |
1924 ASSERT_TRUE(CreatePeerConnectionWrappersWithOptions(dtls_12_options, | 1969 ASSERT_TRUE(CreatePeerConnectionWrappersWithOptions(dtls_12_options, |
1925 dtls_12_options)); | 1970 dtls_12_options)); |
1926 ConnectFakeSignaling(); | 1971 ConnectFakeSignaling(); |
1927 // Register UMA observer before signaling begins. | 1972 // Register UMA observer before signaling begins. |
1928 rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer = | 1973 rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer = |
1929 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); | 1974 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); |
1930 caller()->pc()->RegisterUMAObserver(caller_observer); | 1975 caller()->pc()->RegisterUMAObserver(caller_observer); |
1931 caller()->AddAudioVideoMediaStream(); | 1976 caller()->AddAudioVideoMediaStream(); |
1932 callee()->AddAudioVideoMediaStream(); | 1977 callee()->AddAudioVideoMediaStream(); |
1933 caller()->CreateAndSetAndSignalOffer(); | 1978 caller()->CreateAndSetAndSignalOffer(); |
1934 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 1979 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
1935 EXPECT_TRUE_WAIT(rtc::SSLStreamAdapter::IsAcceptableCipher( | 1980 EXPECT_TRUE_WAIT(rtc::SSLStreamAdapter::IsAcceptableCipher( |
1936 caller()->GetStats()->DtlsCipher(), rtc::KT_DEFAULT), | 1981 caller()->OldGetStats()->DtlsCipher(), rtc::KT_DEFAULT), |
1937 kDefaultTimeout); | 1982 kDefaultTimeout); |
1938 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(kDefaultSrtpCryptoSuite), | 1983 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(kDefaultSrtpCryptoSuite), |
1939 caller()->GetStats()->SrtpCipher(), kDefaultTimeout); | 1984 caller()->OldGetStats()->SrtpCipher(), kDefaultTimeout); |
1940 EXPECT_EQ(1, | 1985 EXPECT_EQ(1, |
1941 caller_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, | 1986 caller_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, |
1942 kDefaultSrtpCryptoSuite)); | 1987 kDefaultSrtpCryptoSuite)); |
1943 } | 1988 } |
1944 | 1989 |
1945 // Test that DTLS 1.0 can be used if the caller supports DTLS 1.2 and the | 1990 // Test that DTLS 1.0 can be used if the caller supports DTLS 1.2 and the |
1946 // callee only supports 1.0. | 1991 // callee only supports 1.0. |
1947 TEST_F(PeerConnectionIntegrationTest, CallerDtls12ToCalleeDtls10) { | 1992 TEST_F(PeerConnectionIntegrationTest, CallerDtls12ToCalleeDtls10) { |
1948 PeerConnectionFactory::Options caller_options; | 1993 PeerConnectionFactory::Options caller_options; |
1949 caller_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; | 1994 caller_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2758 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, | 2803 kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, |
2759 kMaxWaitForFramesMs); | 2804 kMaxWaitForFramesMs); |
2760 } | 2805 } |
2761 | 2806 |
2762 TEST_F(PeerConnectionIntegrationTest, GetSources) { | 2807 TEST_F(PeerConnectionIntegrationTest, GetSources) { |
2763 ASSERT_TRUE(CreatePeerConnectionWrappers()); | 2808 ASSERT_TRUE(CreatePeerConnectionWrappers()); |
2764 ConnectFakeSignaling(); | 2809 ConnectFakeSignaling(); |
2765 caller()->AddAudioOnlyMediaStream(); | 2810 caller()->AddAudioOnlyMediaStream(); |
2766 caller()->CreateAndSetAndSignalOffer(); | 2811 caller()->CreateAndSetAndSignalOffer(); |
2767 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 2812 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
2768 // Wait for one audio frame received by callee. | 2813 // Wait for one audio frame to be received by the callee. |
2769 ExpectNewFramesReceivedWithWait(0, 0, 1, 0, kMaxWaitForFramesMs); | 2814 ExpectNewFramesReceivedWithWait(0, 0, 1, 0, kMaxWaitForFramesMs); |
2770 ASSERT_GT(callee()->pc()->GetReceivers().size(), 0u); | 2815 ASSERT_GT(callee()->pc()->GetReceivers().size(), 0u); |
2771 auto receiver = callee()->pc()->GetReceivers()[0]; | 2816 auto receiver = callee()->pc()->GetReceivers()[0]; |
2772 ASSERT_EQ(receiver->media_type(), cricket::MEDIA_TYPE_AUDIO); | 2817 ASSERT_EQ(receiver->media_type(), cricket::MEDIA_TYPE_AUDIO); |
2773 | 2818 |
2774 auto contributing_sources = receiver->GetSources(); | 2819 auto contributing_sources = receiver->GetSources(); |
2775 ASSERT_GT(receiver->GetParameters().encodings.size(), 0u); | 2820 ASSERT_GT(receiver->GetParameters().encodings.size(), 0u); |
2776 EXPECT_EQ(receiver->GetParameters().encodings[0].ssrc, | 2821 EXPECT_EQ(receiver->GetParameters().encodings[0].ssrc, |
2777 contributing_sources[0].source_id()); | 2822 contributing_sources[0].source_id()); |
2778 } | 2823 } |
(...skipping 26 matching lines...) Expand all Loading... |
2805 caller()->CreateAndSetAndSignalOffer(); | 2850 caller()->CreateAndSetAndSignalOffer(); |
2806 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); | 2851 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
2807 // Wait for additional audio frames to be received by the callee. | 2852 // Wait for additional audio frames to be received by the callee. |
2808 ExpectNewFramesReceivedWithWait(0, 0, kDefaultExpectedAudioFrameCount, 0, | 2853 ExpectNewFramesReceivedWithWait(0, 0, kDefaultExpectedAudioFrameCount, 0, |
2809 kMaxWaitForFramesMs); | 2854 kMaxWaitForFramesMs); |
2810 } | 2855 } |
2811 | 2856 |
2812 } // namespace | 2857 } // namespace |
2813 | 2858 |
2814 #endif // if !defined(THREAD_SANITIZER) | 2859 #endif // if !defined(THREAD_SANITIZER) |
OLD | NEW |