Chromium Code Reviews

Side by Side Diff: content/renderer/media/rtc_peer_connection_handler_unittest.cc

Issue 2317063002: WebRTCPeerConnectionHandler::getStats for the new stats collector API (Closed)
Patch Set: Addressed comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/rtc_peer_connection_handler.h" 5 #include "content/renderer/media/rtc_peer_connection_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <set>
10 #include <string> 11 #include <string>
11 #include <vector> 12 #include <vector>
12 13
13 #include "base/location.h" 14 #include "base/location.h"
14 #include "base/run_loop.h" 15 #include "base/run_loop.h"
15 #include "base/single_thread_task_runner.h" 16 #include "base/single_thread_task_runner.h"
16 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
17 #include "base/threading/thread_task_runner_handle.h" 18 #include "base/threading/thread_task_runner_handle.h"
18 #include "base/values.h" 19 #include "base/values.h"
19 #include "content/child/child_process.h" 20 #include "content/child/child_process.h"
(...skipping 23 matching lines...)
43 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" 44 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
44 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" 45 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h"
45 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h " 46 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h "
46 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" 47 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h"
47 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" 48 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h"
48 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h" 49 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h"
49 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" 50 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h"
50 #include "third_party/WebKit/public/platform/WebURL.h" 51 #include "third_party/WebKit/public/platform/WebURL.h"
51 #include "third_party/WebKit/public/web/WebHeap.h" 52 #include "third_party/WebKit/public/web/WebHeap.h"
52 #include "third_party/webrtc/api/peerconnectioninterface.h" 53 #include "third_party/webrtc/api/peerconnectioninterface.h"
54 #include "third_party/webrtc/stats/test/rtcteststats.h"
53 55
54 static const char kDummySdp[] = "dummy sdp"; 56 static const char kDummySdp[] = "dummy sdp";
55 static const char kDummySdpType[] = "dummy type"; 57 static const char kDummySdpType[] = "dummy type";
56 58
57 using blink::WebRTCPeerConnectionHandlerClient; 59 using blink::WebRTCPeerConnectionHandlerClient;
58 using testing::NiceMock; 60 using testing::NiceMock;
59 using testing::_; 61 using testing::_;
60 using testing::Ref; 62 using testing::Ref;
61 using testing::SaveArg; 63 using testing::SaveArg;
62 64
(...skipping 118 matching lines...)
181 TrackIceGatheringStateChange, 183 TrackIceGatheringStateChange,
182 void(RTCPeerConnectionHandler* pc_handler, 184 void(RTCPeerConnectionHandler* pc_handler,
183 WebRTCPeerConnectionHandlerClient::ICEGatheringState state)); 185 WebRTCPeerConnectionHandlerClient::ICEGatheringState state));
184 MOCK_METHOD1(TrackOnRenegotiationNeeded, 186 MOCK_METHOD1(TrackOnRenegotiationNeeded,
185 void(RTCPeerConnectionHandler* pc_handler)); 187 void(RTCPeerConnectionHandler* pc_handler));
186 MOCK_METHOD2(TrackCreateDTMFSender, 188 MOCK_METHOD2(TrackCreateDTMFSender,
187 void(RTCPeerConnectionHandler* pc_handler, 189 void(RTCPeerConnectionHandler* pc_handler,
188 const blink::WebMediaStreamTrack& track)); 190 const blink::WebMediaStreamTrack& track));
189 }; 191 };
190 192
193 class MockRTCStatsReportCallback : public blink::WebRTCStatsReportCallback {
194 public:
195 MockRTCStatsReportCallback(std::unique_ptr<blink::WebRTCStatsReport>* result)
196 : main_thread_(base::ThreadTaskRunnerHandle::Get()),
197 result_(result) {
198 DCHECK(result_);
199 }
200
201 void OnStatsDelivered(
202 std::unique_ptr<blink::WebRTCStatsReport> report) override {
203 EXPECT_TRUE(main_thread_->BelongsToCurrentThread());
204 EXPECT_TRUE(report);
205 result_->reset(report.release());
206 }
207
208 private:
209 scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
210 std::unique_ptr<blink::WebRTCStatsReport>* result_;
211 };
212
213 template<typename T>
214 std::vector<T> ToSequence(T value) {
215 std::vector<T> vec;
216 vec.push_back(value);
217 return vec;
218 }
219
220 template<typename T>
221 void ExpectSequenceEquals(const blink::WebVector<T>& sequence, T value) {
222 EXPECT_EQ(sequence.size(), static_cast<size_t>(1));
223 EXPECT_EQ(sequence[0], value);
224 }
225
191 class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler { 226 class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler {
192 public: 227 public:
193 RTCPeerConnectionHandlerUnderTest( 228 RTCPeerConnectionHandlerUnderTest(
194 WebRTCPeerConnectionHandlerClient* client, 229 WebRTCPeerConnectionHandlerClient* client,
195 PeerConnectionDependencyFactory* dependency_factory) 230 PeerConnectionDependencyFactory* dependency_factory)
196 : RTCPeerConnectionHandler(client, dependency_factory) { 231 : RTCPeerConnectionHandler(client, dependency_factory) {
197 } 232 }
198 233
199 MockPeerConnectionImpl* native_peer_connection() { 234 MockPeerConnectionImpl* native_peer_connection() {
200 return static_cast<MockPeerConnectionImpl*>( 235 return static_cast<MockPeerConnectionImpl*>(
(...skipping 428 matching lines...)
629 scoped_refptr<MockRTCStatsRequest> request( 664 scoped_refptr<MockRTCStatsRequest> request(
630 new rtc::RefCountedObject<MockRTCStatsRequest>()); 665 new rtc::RefCountedObject<MockRTCStatsRequest>());
631 request->setSelector(component); 666 request->setSelector(component);
632 pc_handler_->getStats(request.get()); 667 pc_handler_->getStats(request.get());
633 base::RunLoop().RunUntilIdle(); 668 base::RunLoop().RunUntilIdle();
634 EXPECT_EQ(0, request->result()->report_count()); 669 EXPECT_EQ(0, request->result()->report_count());
635 670
636 StopAllTracks(local_stream); 671 StopAllTracks(local_stream);
637 } 672 }
638 673
674 TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) {
675 rtc::scoped_refptr<webrtc::RTCStatsReport> report =
676 webrtc::RTCStatsReport::Create();
677
678 report->AddStats(std::unique_ptr<const webrtc::RTCStats>(
679 new webrtc::RTCTestStats("RTCUndefinedStats", 1000)));
680
681 std::unique_ptr<webrtc::RTCTestStats> stats_defined_members(
682 new webrtc::RTCTestStats("RTCDefinedStats", 2000));
683 stats_defined_members->m_int32 = 42;
684 stats_defined_members->m_uint32 = 42;
685 stats_defined_members->m_int64 = 42;
686 stats_defined_members->m_uint64 = 42;
687 stats_defined_members->m_double = 42.0;
688 stats_defined_members->m_string = "42";
689 stats_defined_members->m_sequence_int32 = ToSequence<int32_t>(42);
690 stats_defined_members->m_sequence_uint32 = ToSequence<uint32_t>(42);
691 stats_defined_members->m_sequence_int64 = ToSequence<int64_t>(42);
692 stats_defined_members->m_sequence_uint64 = ToSequence<uint64_t>(42);
693 stats_defined_members->m_sequence_double = ToSequence<double>(42);
694 stats_defined_members->m_sequence_string = ToSequence<std::string>("42");
695 report->AddStats(std::unique_ptr<const webrtc::RTCStats>(
696 stats_defined_members.release()));
697
698 pc_handler_->native_peer_connection()->SetGetStatsReport(report);
699 std::unique_ptr<blink::WebRTCStatsReport> result;
700 pc_handler_->getStats(std::unique_ptr<blink::WebRTCStatsReportCallback>(
701 new MockRTCStatsReportCallback(&result)));
702 base::RunLoop().RunUntilIdle();
703 EXPECT_TRUE(result);
704
705 int undefined_stats_count = 0;
706 int defined_stats_count = 0;
707 for (std::unique_ptr<blink::WebRTCStats> stats = result->next(); stats;
708 stats.reset(result->next().release())) {
709 EXPECT_EQ(stats->type().utf8(), webrtc::RTCTestStats::kType);
710 if (stats->id().utf8() == "RTCUndefinedStats") {
711 ++undefined_stats_count;
712 EXPECT_EQ(stats->timestamp(), 1.0);
713 for (size_t i = 0; i < stats->membersCount(); ++i) {
714 EXPECT_FALSE(stats->getMember(i)->isDefined());
715 }
716 } else if (stats->id().utf8() == "RTCDefinedStats") {
717 ++defined_stats_count;
718 EXPECT_EQ(stats->timestamp(), 2.0);
719 std::set<blink::WebRTCStatsMemberType> members;
720 for (size_t i = 0; i < stats->membersCount(); ++i) {
721 std::unique_ptr<blink::WebRTCStatsMember> member =
722 stats->getMember(i);
723 EXPECT_TRUE(member->isDefined());
724 members.insert(member->type());
725 switch (member->type()) {
726 case blink::WebRTCStatsMemberTypeInt32:
727 EXPECT_EQ(member->valueInt32(), static_cast<int32_t>(42));
728 break;
729 case blink::WebRTCStatsMemberTypeUint32:
730 EXPECT_EQ(member->valueUint32(), static_cast<uint32_t>(42));
731 break;
732 case blink::WebRTCStatsMemberTypeInt64:
733 EXPECT_EQ(member->valueInt64(), static_cast<int64_t>(42));
734 break;
735 case blink::WebRTCStatsMemberTypeUint64:
736 EXPECT_EQ(member->valueUint64(), static_cast<uint64_t>(42));
737 break;
738 case blink::WebRTCStatsMemberTypeDouble:
739 EXPECT_EQ(member->valueDouble(), 42.0);
740 break;
741 case blink::WebRTCStatsMemberTypeString:
742 EXPECT_EQ(member->valueString(), blink::WebString::fromUTF8("42"));
743 break;
744 case blink::WebRTCStatsMemberTypeSequenceInt32:
745 ExpectSequenceEquals(member->valueSequenceInt32(),
746 static_cast<int32_t>(42));
747 break;
748 case blink::WebRTCStatsMemberTypeSequenceUint32:
749 ExpectSequenceEquals(member->valueSequenceUint32(),
750 static_cast<uint32_t>(42));
751 break;
752 case blink::WebRTCStatsMemberTypeSequenceInt64:
753 ExpectSequenceEquals(member->valueSequenceInt64(),
754 static_cast<int64_t>(42));
755 break;
756 case blink::WebRTCStatsMemberTypeSequenceUint64:
757 ExpectSequenceEquals(member->valueSequenceUint64(),
758 static_cast<uint64_t>(42));
759 break;
760 case blink::WebRTCStatsMemberTypeSequenceDouble:
761 ExpectSequenceEquals(member->valueSequenceDouble(), 42.0);
762 break;
763 case blink::WebRTCStatsMemberTypeSequenceString:
764 ExpectSequenceEquals(member->valueSequenceString(),
765 blink::WebString::fromUTF8("42"));
766 break;
767 default:
768 NOTREACHED();
769 }
770 }
771 EXPECT_EQ(members.size(), static_cast<size_t>(12));
772 } else {
773 NOTREACHED();
774 }
775 }
776 EXPECT_EQ(undefined_stats_count, 1);
777 EXPECT_EQ(defined_stats_count, 1);
778 }
779
639 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { 780 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
640 testing::InSequence sequence; 781 testing::InSequence sequence;
641 782
642 webrtc::PeerConnectionInterface::SignalingState new_state = 783 webrtc::PeerConnectionInterface::SignalingState new_state =
643 webrtc::PeerConnectionInterface::kHaveRemoteOffer; 784 webrtc::PeerConnectionInterface::kHaveRemoteOffer;
644 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange( 785 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange(
645 pc_handler_.get(), 786 pc_handler_.get(),
646 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); 787 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer));
647 EXPECT_CALL(*mock_client_.get(), didChangeSignalingState( 788 EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
648 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); 789 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer));
(...skipping 409 matching lines...)
1058 testing::Ref(tracks[0]))); 1199 testing::Ref(tracks[0])));
1059 1200
1060 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( 1201 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender(
1061 pc_handler_->createDTMFSender(tracks[0])); 1202 pc_handler_->createDTMFSender(tracks[0]));
1062 EXPECT_TRUE(sender.get()); 1203 EXPECT_TRUE(sender.get());
1063 1204
1064 StopAllTracks(local_stream); 1205 StopAllTracks(local_stream);
1065 } 1206 }
1066 1207
1067 } // namespace content 1208 } // namespace content
OLDNEW

Powered by Google App Engine