Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

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: TODO to impl MockWebRTCPeerConnectionHandler::getStats in a follow-up instead Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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 <string> 10 #include <string>
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" 43 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
44 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" 44 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h"
45 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h " 45 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h "
46 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" 46 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h"
47 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" 47 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h"
48 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h" 48 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h"
49 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" 49 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h"
50 #include "third_party/WebKit/public/platform/WebURL.h" 50 #include "third_party/WebKit/public/platform/WebURL.h"
51 #include "third_party/WebKit/public/web/WebHeap.h" 51 #include "third_party/WebKit/public/web/WebHeap.h"
52 #include "third_party/webrtc/api/peerconnectioninterface.h" 52 #include "third_party/webrtc/api/peerconnectioninterface.h"
53 #include "third_party/webrtc/stats/test/rtcteststats.h"
53 54
54 static const char kDummySdp[] = "dummy sdp"; 55 static const char kDummySdp[] = "dummy sdp";
55 static const char kDummySdpType[] = "dummy type"; 56 static const char kDummySdpType[] = "dummy type";
56 57
57 using blink::WebRTCPeerConnectionHandlerClient; 58 using blink::WebRTCPeerConnectionHandlerClient;
58 using testing::NiceMock; 59 using testing::NiceMock;
59 using testing::_; 60 using testing::_;
60 using testing::Ref; 61 using testing::Ref;
61 using testing::SaveArg; 62 using testing::SaveArg;
62 63
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 TrackIceGatheringStateChange, 182 TrackIceGatheringStateChange,
182 void(RTCPeerConnectionHandler* pc_handler, 183 void(RTCPeerConnectionHandler* pc_handler,
183 WebRTCPeerConnectionHandlerClient::ICEGatheringState state)); 184 WebRTCPeerConnectionHandlerClient::ICEGatheringState state));
184 MOCK_METHOD1(TrackOnRenegotiationNeeded, 185 MOCK_METHOD1(TrackOnRenegotiationNeeded,
185 void(RTCPeerConnectionHandler* pc_handler)); 186 void(RTCPeerConnectionHandler* pc_handler));
186 MOCK_METHOD2(TrackCreateDTMFSender, 187 MOCK_METHOD2(TrackCreateDTMFSender,
187 void(RTCPeerConnectionHandler* pc_handler, 188 void(RTCPeerConnectionHandler* pc_handler,
188 const blink::WebMediaStreamTrack& track)); 189 const blink::WebMediaStreamTrack& track));
189 }; 190 };
190 191
192 class MockRTCStatsReportCallback : public blink::WebRTCStatsReportCallback {
193 public:
194 MockRTCStatsReportCallback(std::unique_ptr<blink::WebRTCStatsReport>* result)
195 : main_thread_(base::ThreadTaskRunnerHandle::Get()),
196 result_(result) {
197 DCHECK(result_);
198 }
199
200 void OnStatsDelivered(
201 std::unique_ptr<blink::WebRTCStatsReport> report) override {
202 EXPECT_TRUE(main_thread_->BelongsToCurrentThread());
203 EXPECT_TRUE(report);
204 result_->reset(report.release());
205 }
206
207 private:
208 scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
209 std::unique_ptr<blink::WebRTCStatsReport>* result_;
210 };
211
212 template<typename T>
213 std::vector<T> ToSequence(T value) {
214 std::vector<T> vec;
215 vec.push_back(value);
216 return vec;
217 }
218
219 template<typename T>
220 void ExpectSequenceEquals(const blink::WebVector<T>& sequence, T value) {
221 EXPECT_EQ(sequence.size(), static_cast<size_t>(1));
222 EXPECT_EQ(sequence[0], value);
223 }
224
191 class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler { 225 class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler {
192 public: 226 public:
193 RTCPeerConnectionHandlerUnderTest( 227 RTCPeerConnectionHandlerUnderTest(
194 WebRTCPeerConnectionHandlerClient* client, 228 WebRTCPeerConnectionHandlerClient* client,
195 PeerConnectionDependencyFactory* dependency_factory) 229 PeerConnectionDependencyFactory* dependency_factory)
196 : RTCPeerConnectionHandler(client, dependency_factory) { 230 : RTCPeerConnectionHandler(client, dependency_factory) {
197 } 231 }
198 232
199 MockPeerConnectionImpl* native_peer_connection() { 233 MockPeerConnectionImpl* native_peer_connection() {
200 return static_cast<MockPeerConnectionImpl*>( 234 return static_cast<MockPeerConnectionImpl*>(
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 scoped_refptr<MockRTCStatsRequest> request( 663 scoped_refptr<MockRTCStatsRequest> request(
630 new rtc::RefCountedObject<MockRTCStatsRequest>()); 664 new rtc::RefCountedObject<MockRTCStatsRequest>());
631 request->setSelector(component); 665 request->setSelector(component);
632 pc_handler_->getStats(request.get()); 666 pc_handler_->getStats(request.get());
633 base::RunLoop().RunUntilIdle(); 667 base::RunLoop().RunUntilIdle();
634 EXPECT_EQ(0, request->result()->report_count()); 668 EXPECT_EQ(0, request->result()->report_count());
635 669
636 StopAllTracks(local_stream); 670 StopAllTracks(local_stream);
637 } 671 }
638 672
673 TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) {
674 rtc::scoped_refptr<webrtc::RTCStatsReport> report =
675 webrtc::RTCStatsReport::Create();
676
677 report->AddStats(std::unique_ptr<const webrtc::RTCStats>(
678 new webrtc::RTCTestStats("RTCUndefinedStats", 1000)));
679
680 std::unique_ptr<webrtc::RTCTestStats> stats_defined_members(
681 new webrtc::RTCTestStats("RTCDefinedStats", 2000));
682 stats_defined_members->m_int32 = 42;
683 stats_defined_members->m_uint32 = 42;
684 stats_defined_members->m_int64 = 42;
685 stats_defined_members->m_uint64 = 42;
686 stats_defined_members->m_double = 42.0;
687 stats_defined_members->m_string = "42";
688 stats_defined_members->m_sequence_int32 = ToSequence<int32_t>(42);
689 stats_defined_members->m_sequence_uint32 = ToSequence<uint32_t>(42);
690 stats_defined_members->m_sequence_int64 = ToSequence<int64_t>(42);
691 stats_defined_members->m_sequence_uint64 = ToSequence<uint64_t>(42);
692 stats_defined_members->m_sequence_double = ToSequence<double>(42);
693 stats_defined_members->m_sequence_string = ToSequence<std::string>("42");
694 report->AddStats(std::unique_ptr<const webrtc::RTCStats>(
695 stats_defined_members.release()));
696
697 pc_handler_->native_peer_connection()->SetGetStatsReport(report);
698 std::unique_ptr<blink::WebRTCStatsReport> result;
699 pc_handler_->getStats(std::unique_ptr<blink::WebRTCStatsReportCallback>(
700 new MockRTCStatsReportCallback(&result)));
701 base::RunLoop().RunUntilIdle();
702 EXPECT_TRUE(result);
703
704 int undefined_stats_count = 0;
705 int defined_stats_count = 0;
706 for (std::unique_ptr<blink::WebRTCStats> stats = result->next(); stats;
707 stats.reset(result->next().release())) {
708 EXPECT_EQ(stats->type().utf8(), webrtc::RTCTestStats::kType);
709 if (stats->id().utf8() == "RTCUndefinedStats") {
710 ++undefined_stats_count;
711 EXPECT_EQ(stats->timestamp(), 1.0);
712 for (size_t i = 0; i < stats->membersCount(); ++i) {
713 EXPECT_FALSE(stats->getMember(i)->isDefined());
714 }
715 } else if (stats->id().utf8() == "RTCDefinedStats") {
716 ++defined_stats_count;
717 EXPECT_EQ(stats->timestamp(), 2.0);
718 uint32_t members_bitmap = 0x0;
hta - Chromium 2016/09/20 16:26:46 This is a test, so readability is more important t
hbos_chromium 2016/09/20 20:18:39 Good idea! Done.
719 for (size_t i = 0; i < stats->membersCount(); ++i) {
720 std::unique_ptr<blink::WebRTCStatsMember> member =
721 stats->getMember(i);
722 EXPECT_TRUE(member->isDefined());
723 switch (member->type()) {
724 case blink::WebRTCStatsMemberTypeInt32:
725 EXPECT_EQ(member->valueInt32(), static_cast<int32_t>(42));
726 members_bitmap |= (1 << 0);
727 break;
728 case blink::WebRTCStatsMemberTypeUint32:
729 EXPECT_EQ(member->valueUint32(), static_cast<uint32_t>(42));
730 members_bitmap |= (1 << 1);
731 break;
732 case blink::WebRTCStatsMemberTypeInt64:
733 EXPECT_EQ(member->valueInt64(), static_cast<int64_t>(42));
734 members_bitmap |= (1 << 2);
735 break;
736 case blink::WebRTCStatsMemberTypeUint64:
737 EXPECT_EQ(member->valueUint64(), static_cast<uint64_t>(42));
738 members_bitmap |= (1 << 3);
739 break;
740 case blink::WebRTCStatsMemberTypeDouble:
741 EXPECT_EQ(member->valueDouble(), 42.0);
742 members_bitmap |= (1 << 4);
743 break;
744 case blink::WebRTCStatsMemberTypeString:
745 EXPECT_EQ(member->valueString(), blink::WebString::fromUTF8("42"));
746 members_bitmap |= (1 << 5);
747 break;
748 case blink::WebRTCStatsMemberTypeSequenceInt32:
749 ExpectSequenceEquals(member->valueSequenceInt32(),
750 static_cast<int32_t>(42));
751 members_bitmap |= (1 << 6);
752 break;
753 case blink::WebRTCStatsMemberTypeSequenceUint32:
754 ExpectSequenceEquals(member->valueSequenceUint32(),
755 static_cast<uint32_t>(42));
756 members_bitmap |= (1 << 7);
757 break;
758 case blink::WebRTCStatsMemberTypeSequenceInt64:
759 ExpectSequenceEquals(member->valueSequenceInt64(),
760 static_cast<int64_t>(42));
761 members_bitmap |= (1 << 8);
762 break;
763 case blink::WebRTCStatsMemberTypeSequenceUint64:
764 ExpectSequenceEquals(member->valueSequenceUint64(),
765 static_cast<uint64_t>(42));
766 members_bitmap |= (1 << 9);
767 break;
768 case blink::WebRTCStatsMemberTypeSequenceDouble:
769 ExpectSequenceEquals(member->valueSequenceDouble(), 42.0);
770 members_bitmap |= (1 << 10);
771 break;
772 case blink::WebRTCStatsMemberTypeSequenceString:
773 ExpectSequenceEquals(member->valueSequenceString(),
774 blink::WebString::fromUTF8("42"));
775 members_bitmap |= (1 << 11);
776 break;
777 default:
778 NOTREACHED();
779 }
780 }
781 EXPECT_EQ(members_bitmap, static_cast<uint32_t>(0xFFF));
hta - Chromium 2016/09/20 16:26:45 With a set, you can just expect the number of memb
hbos_chromium 2016/09/20 20:18:39 Done.
782 } else {
783 NOTREACHED();
784 }
785 }
786 EXPECT_EQ(undefined_stats_count, 1);
787 EXPECT_EQ(defined_stats_count, 1);
788 }
789
639 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { 790 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
640 testing::InSequence sequence; 791 testing::InSequence sequence;
641 792
642 webrtc::PeerConnectionInterface::SignalingState new_state = 793 webrtc::PeerConnectionInterface::SignalingState new_state =
643 webrtc::PeerConnectionInterface::kHaveRemoteOffer; 794 webrtc::PeerConnectionInterface::kHaveRemoteOffer;
644 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange( 795 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange(
645 pc_handler_.get(), 796 pc_handler_.get(),
646 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); 797 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer));
647 EXPECT_CALL(*mock_client_.get(), didChangeSignalingState( 798 EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
648 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); 799 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer));
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 testing::Ref(tracks[0]))); 1209 testing::Ref(tracks[0])));
1059 1210
1060 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( 1211 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender(
1061 pc_handler_->createDTMFSender(tracks[0])); 1212 pc_handler_->createDTMFSender(tracks[0]));
1062 EXPECT_TRUE(sender.get()); 1213 EXPECT_TRUE(sender.get());
1063 1214
1064 StopAllTracks(local_stream); 1215 StopAllTracks(local_stream);
1065 } 1216 }
1066 1217
1067 } // namespace content 1218 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698