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

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

Issue 10383151: Refactor MediaStreamImpl and PeerConnection glue implementation after WebKit changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and added NON_EXPORTED_BASE to the base of MediaStreamExtradata. Created 8 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/media/peer_connection_handler_jsep_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <string> 5 #include <string>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "content/renderer/media/media_stream_extra_data.h"
10 #include "content/renderer/media/mock_media_stream_dependency_factory.h" 11 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
11 #include "content/renderer/media/mock_media_stream_impl.h"
12 #include "content/renderer/media/mock_web_peer_connection_handler_client.h" 12 #include "content/renderer/media/mock_web_peer_connection_handler_client.h"
13 #include "content/renderer/media/mock_peer_connection_impl.h" 13 #include "content/renderer/media/mock_peer_connection_impl.h"
14 #include "content/renderer/media/peer_connection_handler.h" 14 #include "content/renderer/media/peer_connection_handler.h"
15 #include "content/renderer/media/rtc_video_decoder.h" 15 #include "content/renderer/media/rtc_video_decoder.h"
16 #include "jingle/glue/thread_wrapper.h" 16 #include "jingle/glue/thread_wrapper.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "third_party/libjingle/source/talk/app/webrtc/peerconnection.h" 18 #include "third_party/libjingle/source/talk/app/webrtc/peerconnection.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amDescriptor.h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amDescriptor.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amSource.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amSource.h"
21 21
22 namespace webrtc { 22 class PeerConnectionHandlerUnderTest : public PeerConnectionHandler {
23 public:
24 PeerConnectionHandlerUnderTest(
25 WebKit::MockWebPeerConnectionHandlerClient* client,
26 MediaStreamDependencyFactory* dependency_factory)
27 : PeerConnectionHandler(client, dependency_factory) {
28 }
23 29
24 class MockVideoRendererWrapper : public VideoRendererWrapperInterface { 30 webrtc::MockPeerConnectionImpl* native_peer_connection() {
25 public: 31 return static_cast<webrtc::MockPeerConnectionImpl*>(
26 virtual cricket::VideoRenderer* renderer() OVERRIDE { return NULL; } 32 native_peer_connection_.get());
27 33 }
28 protected:
29 virtual ~MockVideoRendererWrapper() {}
30 }; 34 };
31 35
32 } // namespace webrtc 36 class PeerConnectionHandlerTest : public ::testing::Test {
37 public:
38 PeerConnectionHandlerTest() : mock_peer_connection_(NULL) {
39 }
33 40
34 TEST(PeerConnectionHandlerTest, WebMediaStreamDescriptorMemoryTest) { 41 void SetUp() {
42 mock_client_.reset(new WebKit::MockWebPeerConnectionHandlerClient());
43 mock_dependency_factory_.reset(
44 new MockMediaStreamDependencyFactory(NULL));
45 mock_dependency_factory_->CreatePeerConnectionFactory(NULL,
46 NULL,
47 NULL,
48 NULL,
49 NULL);
50 pc_handler_.reset(
51 new PeerConnectionHandlerUnderTest(mock_client_.get(),
52 mock_dependency_factory_.get()));
53
54 WebKit::WebString server_config(
55 WebKit::WebString::fromUTF8("STUN stun.l.google.com:19302"));
56 WebKit::WebString username;
57 pc_handler_->initialize(server_config, username);
58
59 mock_peer_connection_ = pc_handler_->native_peer_connection();
60 ASSERT_TRUE(mock_peer_connection_);
61 }
62
63 // Creates a WebKit local MediaStream.
64 WebKit::WebMediaStreamDescriptor CreateLocalMediaStream(
65 const std::string& stream_label) {
66 std::string video_track_label("video-label");
67 std::string audio_track_label("audio-label");
68
69 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> native_stream(
70 mock_dependency_factory_->CreateLocalMediaStream(stream_label));
71 talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track(
72 mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label,
73 NULL));
74 native_stream->AddTrack(audio_track);
75 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
76 mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 0));
77 native_stream->AddTrack(video_track);
78
79 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources(
80 static_cast<size_t>(1));
81 audio_sources[0].initialize(WebKit::WebString::fromUTF8(video_track_label),
82 WebKit::WebMediaStreamSource::TypeAudio,
83 WebKit::WebString::fromUTF8("audio_track"));
84 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources(
85 static_cast<size_t>(1));
86 video_sources[0].initialize(WebKit::WebString::fromUTF8(video_track_label),
87 WebKit::WebMediaStreamSource::TypeVideo,
88 WebKit::WebString::fromUTF8("video_track"));
89 WebKit::WebMediaStreamDescriptor local_stream;
90 local_stream.initialize(UTF8ToUTF16(stream_label), audio_sources,
91 video_sources);
92 local_stream.setExtraData(new MediaStreamExtraData(native_stream));
93 return local_stream;
94 }
95
96 // Creates a remote MediaStream and adds it to the mocked native
97 // peer connection.
98 talk_base::scoped_refptr<webrtc::MediaStreamInterface>
99 AddRemoteMockMediaStream(const std::string& stream_label,
100 const std::string& video_track_label,
101 const std::string& audio_track_label) {
102 // We use a local stream as a remote since for testing purposes we really
103 // only need the MediaStreamInterface.
104 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> stream(
105 mock_dependency_factory_->CreateLocalMediaStream(stream_label));
106 if (!video_track_label.empty()) {
107 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
108 mock_dependency_factory_->CreateLocalVideoTrack(video_track_label,
109 0));
110 stream->AddTrack(video_track);
111 }
112 if (!audio_track_label.empty()) {
113 talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track(
114 mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label,
115 NULL));
116 stream->AddTrack(audio_track);
117 }
118 mock_peer_connection_->AddRemoteStream(stream);
119 return stream;
120 }
121
122 MessageLoop loop_;
123 scoped_ptr<WebKit::MockWebPeerConnectionHandlerClient> mock_client_;
124 scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory_;
125 scoped_ptr<PeerConnectionHandlerUnderTest> pc_handler_;
126
127 // Weak reference to the mocked native peer connection implementation.
128 webrtc::MockPeerConnectionImpl* mock_peer_connection_;
129 };
130
131 TEST_F(PeerConnectionHandlerTest, WebMediaStreamDescriptorMemoryTest) {
35 std::string stream_label("stream-label"); 132 std::string stream_label("stream-label");
36 std::string video_track_id("video-label"); 133 std::string video_track_id("video-label");
37 const size_t kSizeOne = 1; 134 const size_t kSizeOne = 1;
38 135
39 WebKit::WebMediaStreamSource source; 136 WebKit::WebMediaStreamSource source;
40 source.initialize(WebKit::WebString::fromUTF8(video_track_id), 137 source.initialize(WebKit::WebString::fromUTF8(video_track_id),
41 WebKit::WebMediaStreamSource::TypeVideo, 138 WebKit::WebMediaStreamSource::TypeVideo,
42 WebKit::WebString::fromUTF8("RemoteVideo")); 139 WebKit::WebString::fromUTF8("RemoteVideo"));
43 140
44 WebKit::WebVector<WebKit::WebMediaStreamSource> source_vector(kSizeOne); 141 WebKit::WebVector<WebKit::WebMediaStreamSource> source_vector(kSizeOne);
45 source_vector[0] = source; 142 source_vector[0] = source;
46 143
47 WebKit::WebMediaStreamDescriptor local_stream; 144 WebKit::WebMediaStreamDescriptor local_stream;
48 local_stream.initialize(UTF8ToUTF16(stream_label), source_vector); 145 local_stream.initialize(UTF8ToUTF16(stream_label), source_vector);
49 146
50 WebKit::WebMediaStreamDescriptor copy_1(local_stream); 147 WebKit::WebMediaStreamDescriptor copy_1(local_stream);
51 { 148 {
52 WebKit::WebMediaStreamDescriptor copy_2(copy_1); 149 WebKit::WebMediaStreamDescriptor copy_2(copy_1);
53 } 150 }
54 } 151 }
55 152
56 TEST(PeerConnectionHandlerTest, Basic) { 153 TEST_F(PeerConnectionHandlerTest, Basic) {
57 MessageLoop loop;
58
59 scoped_ptr<WebKit::MockWebPeerConnectionHandlerClient> mock_client(
60 new WebKit::MockWebPeerConnectionHandlerClient());
61 scoped_ptr<MockMediaStreamImpl> mock_ms_impl(new MockMediaStreamImpl());
62 scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory(
63 new MockMediaStreamDependencyFactory(NULL));
64 mock_dependency_factory->CreatePeerConnectionFactory(NULL,
65 NULL,
66 NULL,
67 NULL,
68 NULL);
69 scoped_ptr<PeerConnectionHandler> pc_handler(
70 new PeerConnectionHandler(mock_client.get(),
71 mock_ms_impl.get(),
72 mock_dependency_factory.get()));
73
74 WebKit::WebString server_config(
75 WebKit::WebString::fromUTF8("STUN stun.l.google.com:19302"));
76 WebKit::WebString username;
77 pc_handler->initialize(server_config, username);
78 EXPECT_TRUE(pc_handler->native_peer_connection_.get());
79 webrtc::MockPeerConnectionImpl* mock_peer_connection =
80 static_cast<webrtc::MockPeerConnectionImpl*>(
81 pc_handler->native_peer_connection_.get());
82
83 // TODO(grunell): Add an audio track as well.
84 std::string stream_label("stream-label"); 154 std::string stream_label("stream-label");
85 std::string video_track_label("video-label");
86 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> local_stream(
87 mock_dependency_factory->CreateLocalMediaStream(stream_label));
88 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> local_video_track(
89 mock_dependency_factory->CreateLocalVideoTrack(video_track_label, 0));
90 local_stream->AddTrack(local_video_track);
91 mock_ms_impl->AddLocalStream(local_stream);
92 WebKit::WebVector<WebKit::WebMediaStreamSource> source_vector(
93 static_cast<size_t>(1));
94 source_vector[0].initialize(WebKit::WebString::fromUTF8(video_track_label),
95 WebKit::WebMediaStreamSource::TypeVideo,
96 WebKit::WebString::fromUTF8("RemoteVideo"));
97 WebKit::WebVector<WebKit::WebMediaStreamDescriptor> local_streams( 155 WebKit::WebVector<WebKit::WebMediaStreamDescriptor> local_streams(
98 static_cast<size_t>(1)); 156 static_cast<size_t>(1));
99 local_streams[0].initialize(UTF8ToUTF16(stream_label), source_vector); 157 local_streams[0] = CreateLocalMediaStream(stream_label);
100 pc_handler->produceInitialOffer(local_streams); 158 pc_handler_->produceInitialOffer(local_streams);
101 EXPECT_EQ(stream_label, mock_peer_connection->stream_label()); 159 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label());
102 EXPECT_TRUE(mock_peer_connection->stream_changes_committed()); 160 EXPECT_TRUE(mock_peer_connection_->stream_changes_committed());
103 161
104 std::string message("message1"); 162 std::string message("message1");
105 pc_handler->handleInitialOffer(WebKit::WebString::fromUTF8(message)); 163 pc_handler_->handleInitialOffer(WebKit::WebString::fromUTF8(message));
106 EXPECT_EQ(message, mock_peer_connection->signaling_message()); 164 EXPECT_EQ(message, mock_peer_connection_->signaling_message());
107 165
108 message = "message2"; 166 message = "message2";
109 pc_handler->processSDP(WebKit::WebString::fromUTF8(message)); 167 pc_handler_->processSDP(WebKit::WebString::fromUTF8(message));
110 EXPECT_EQ(message, mock_peer_connection->signaling_message()); 168 EXPECT_EQ(message, mock_peer_connection_->signaling_message());
111 169
112 message = "message3"; 170 message = "message3";
113 pc_handler->OnSignalingMessage(message); 171 pc_handler_->OnSignalingMessage(message);
114 EXPECT_EQ(message, mock_client->sdp()); 172 EXPECT_EQ(message, mock_client_->sdp());
115 173
116 std::string remote_stream_label(stream_label); 174 std::string remote_stream_label("remote_stream");
117 remote_stream_label += "-remote"; 175 talk_base::scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
118 std::string remote_video_track_label(video_track_label); 176 AddRemoteMockMediaStream(remote_stream_label, "video_track",
119 remote_video_track_label += "-remote"; 177 "audio_track"));
120 // We use a local stream as a remote since for testing purposes we really 178 pc_handler_->OnAddStream(remote_stream);
121 // only need the MediaStreamInterface. 179 EXPECT_EQ(remote_stream_label, mock_client_->stream_label());
122 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> remote_stream(
123 mock_dependency_factory->CreateLocalMediaStream(remote_stream_label));
124 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> remote_video_track(
125 mock_dependency_factory->CreateLocalVideoTrack(remote_video_track_label,
126 0));
127 remote_video_track->set_enabled(true);
128 remote_stream->AddTrack(remote_video_track);
129 mock_peer_connection->AddRemoteStream(remote_stream);
130 pc_handler->OnAddStream(remote_stream);
131 EXPECT_EQ(remote_stream_label, mock_client->stream_label());
132
133 talk_base::scoped_refptr<webrtc::MockVideoRendererWrapper> renderer(
134 new talk_base::RefCountedObject<webrtc::MockVideoRendererWrapper>());
135 pc_handler->SetRemoteVideoRenderer(remote_video_track_label, renderer);
136 EXPECT_EQ(renderer, remote_video_track->GetRenderer());
137 180
138 WebKit::WebVector<WebKit::WebMediaStreamDescriptor> empty_streams( 181 WebKit::WebVector<WebKit::WebMediaStreamDescriptor> empty_streams(
139 static_cast<size_t>(0)); 182 static_cast<size_t>(0));
140 pc_handler->processPendingStreams(empty_streams, local_streams); 183 pc_handler_->processPendingStreams(empty_streams, local_streams);
141 EXPECT_EQ("", mock_peer_connection->stream_label()); 184 EXPECT_EQ("", mock_peer_connection_->stream_label());
142 mock_peer_connection->ClearStreamChangesCommitted(); 185 mock_peer_connection_->ClearStreamChangesCommitted();
143 EXPECT_TRUE(!mock_peer_connection->stream_changes_committed()); 186 EXPECT_TRUE(!mock_peer_connection_->stream_changes_committed());
144 187
145 pc_handler->OnRemoveStream(remote_stream); 188 pc_handler_->OnRemoveStream(remote_stream);
146 EXPECT_TRUE(mock_client->stream_label().empty()); 189 EXPECT_TRUE(mock_client_->stream_label().empty());
147 190
148 pc_handler->processPendingStreams(local_streams, empty_streams); 191 pc_handler_->processPendingStreams(local_streams, empty_streams);
149 EXPECT_EQ(stream_label, mock_peer_connection->stream_label()); 192 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label());
150 EXPECT_TRUE(mock_peer_connection->stream_changes_committed()); 193 EXPECT_TRUE(mock_peer_connection_->stream_changes_committed());
151 194
152 pc_handler->stop(); 195 pc_handler_->stop();
153 EXPECT_FALSE(pc_handler->native_peer_connection_.get()); 196 EXPECT_FALSE(pc_handler_->native_peer_connection());
154 // PC handler is expected to be deleted when stop calls 197 // PC handler is expected to be deleted when stop calls
155 // MediaStreamImpl::ClosePeerConnection. We own and delete it here instead of 198 // MediaStreamImpl::ClosePeerConnection. We own and delete it here instead of
156 // in the mock. 199 // in the mock.
157 pc_handler.reset(); 200 pc_handler_.reset();
158 } 201 }
OLDNEW
« no previous file with comments | « content/renderer/media/peer_connection_handler_jsep_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698