Index: content/renderer/media/peer_connection_handler_unittest.cc |
diff --git a/content/renderer/media/peer_connection_handler_unittest.cc b/content/renderer/media/peer_connection_handler_unittest.cc |
index 2a4cd872f216c5be19c17d8eacead86940656203..a8b877b9b520275542700ff9c2ac80ca5aa3e7a9 100644 |
--- a/content/renderer/media/peer_connection_handler_unittest.cc |
+++ b/content/renderer/media/peer_connection_handler_unittest.cc |
@@ -7,8 +7,8 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
#include "base/utf_string_conversions.h" |
+#include "content/renderer/media/media_stream_extra_data.h" |
#include "content/renderer/media/mock_media_stream_dependency_factory.h" |
-#include "content/renderer/media/mock_media_stream_impl.h" |
#include "content/renderer/media/mock_web_peer_connection_handler_client.h" |
#include "content/renderer/media/mock_peer_connection_impl.h" |
#include "content/renderer/media/peer_connection_handler.h" |
@@ -19,19 +19,116 @@ |
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamDescriptor.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamSource.h" |
-namespace webrtc { |
- |
-class MockVideoRendererWrapper : public VideoRendererWrapperInterface { |
+class PeerConnectionHandlerUnderTest : public PeerConnectionHandler { |
public: |
- virtual cricket::VideoRenderer* renderer() OVERRIDE { return NULL; } |
+ PeerConnectionHandlerUnderTest( |
+ WebKit::MockWebPeerConnectionHandlerClient* client, |
+ MediaStreamDependencyFactory* dependency_factory) |
+ : PeerConnectionHandler(client, dependency_factory) { |
+ } |
- protected: |
- virtual ~MockVideoRendererWrapper() {} |
+ webrtc::MockPeerConnectionImpl* native_peer_connection() { |
+ return static_cast<webrtc::MockPeerConnectionImpl*>( |
+ native_peer_connection_.get()); |
+ } |
}; |
-} // namespace webrtc |
+class PeerConnectionHandlerTest : public ::testing::Test { |
+ public: |
+ PeerConnectionHandlerTest() : mock_peer_connection_(NULL) { |
+ } |
+ |
+ void SetUp() { |
+ mock_client_.reset(new WebKit::MockWebPeerConnectionHandlerClient()); |
+ mock_dependency_factory_.reset( |
+ new MockMediaStreamDependencyFactory(NULL)); |
+ mock_dependency_factory_->CreatePeerConnectionFactory(NULL, |
+ NULL, |
+ NULL, |
+ NULL, |
+ NULL); |
+ pc_handler_.reset( |
+ new PeerConnectionHandlerUnderTest(mock_client_.get(), |
+ mock_dependency_factory_.get())); |
+ |
+ WebKit::WebString server_config( |
+ WebKit::WebString::fromUTF8("STUN stun.l.google.com:19302")); |
+ WebKit::WebString username; |
+ pc_handler_->initialize(server_config, username); |
+ |
+ mock_peer_connection_ = pc_handler_->native_peer_connection(); |
+ ASSERT_TRUE(mock_peer_connection_); |
+ } |
+ |
+ // Creates a WebKit local MediaStream. |
+ WebKit::WebMediaStreamDescriptor CreateLocalMediaStream( |
+ const std::string& stream_label) { |
+ std::string video_track_label("video-label"); |
+ std::string audio_track_label("audio-label"); |
+ |
+ talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> native_stream( |
+ mock_dependency_factory_->CreateLocalMediaStream(stream_label)); |
+ talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track( |
+ mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label, |
+ NULL)); |
+ native_stream->AddTrack(audio_track); |
+ talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track( |
+ mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 0)); |
+ native_stream->AddTrack(video_track); |
+ |
+ WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( |
+ static_cast<size_t>(1)); |
+ audio_sources[0].initialize(WebKit::WebString::fromUTF8(video_track_label), |
+ WebKit::WebMediaStreamSource::TypeAudio, |
+ WebKit::WebString::fromUTF8("audio_track")); |
+ WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( |
+ static_cast<size_t>(1)); |
+ video_sources[0].initialize(WebKit::WebString::fromUTF8(video_track_label), |
+ WebKit::WebMediaStreamSource::TypeVideo, |
+ WebKit::WebString::fromUTF8("video_track")); |
+ WebKit::WebMediaStreamDescriptor local_stream; |
+ local_stream.initialize(UTF8ToUTF16(stream_label), audio_sources, |
+ video_sources); |
+ local_stream.setExtraData(new MediaStreamExtraData(native_stream)); |
+ return local_stream; |
+ } |
+ |
+ // Creates a remote MediaStream and adds it to the mocked native |
+ // peer connection. |
+ talk_base::scoped_refptr<webrtc::MediaStreamInterface> |
+ AddRemoteMockMediaStream(const std::string& stream_label, |
+ const std::string& video_track_label, |
+ const std::string& audio_track_label) { |
+ // We use a local stream as a remote since for testing purposes we really |
+ // only need the MediaStreamInterface. |
+ talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> stream( |
+ mock_dependency_factory_->CreateLocalMediaStream(stream_label)); |
+ if (!video_track_label.empty()) { |
+ talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track( |
+ mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, |
+ 0)); |
+ stream->AddTrack(video_track); |
+ } |
+ if (!audio_track_label.empty()) { |
+ talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track( |
+ mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label, |
+ NULL)); |
+ stream->AddTrack(audio_track); |
+ } |
+ mock_peer_connection_->AddRemoteStream(stream); |
+ return stream; |
+ } |
+ |
+ MessageLoop loop_; |
+ scoped_ptr<WebKit::MockWebPeerConnectionHandlerClient> mock_client_; |
+ scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory_; |
+ scoped_ptr<PeerConnectionHandlerUnderTest> pc_handler_; |
-TEST(PeerConnectionHandlerTest, WebMediaStreamDescriptorMemoryTest) { |
+ // Weak reference to the mocked native peer connection implementation. |
+ webrtc::MockPeerConnectionImpl* mock_peer_connection_; |
+}; |
+ |
+TEST_F(PeerConnectionHandlerTest, WebMediaStreamDescriptorMemoryTest) { |
std::string stream_label("stream-label"); |
std::string video_track_id("video-label"); |
const size_t kSizeOne = 1; |
@@ -53,106 +150,52 @@ TEST(PeerConnectionHandlerTest, WebMediaStreamDescriptorMemoryTest) { |
} |
} |
-TEST(PeerConnectionHandlerTest, Basic) { |
- MessageLoop loop; |
- |
- scoped_ptr<WebKit::MockWebPeerConnectionHandlerClient> mock_client( |
- new WebKit::MockWebPeerConnectionHandlerClient()); |
- scoped_ptr<MockMediaStreamImpl> mock_ms_impl(new MockMediaStreamImpl()); |
- scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory( |
- new MockMediaStreamDependencyFactory(NULL)); |
- mock_dependency_factory->CreatePeerConnectionFactory(NULL, |
- NULL, |
- NULL, |
- NULL, |
- NULL); |
- scoped_ptr<PeerConnectionHandler> pc_handler( |
- new PeerConnectionHandler(mock_client.get(), |
- mock_ms_impl.get(), |
- mock_dependency_factory.get())); |
- |
- WebKit::WebString server_config( |
- WebKit::WebString::fromUTF8("STUN stun.l.google.com:19302")); |
- WebKit::WebString username; |
- pc_handler->initialize(server_config, username); |
- EXPECT_TRUE(pc_handler->native_peer_connection_.get()); |
- webrtc::MockPeerConnectionImpl* mock_peer_connection = |
- static_cast<webrtc::MockPeerConnectionImpl*>( |
- pc_handler->native_peer_connection_.get()); |
- |
- // TODO(grunell): Add an audio track as well. |
+TEST_F(PeerConnectionHandlerTest, Basic) { |
std::string stream_label("stream-label"); |
- std::string video_track_label("video-label"); |
- talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> local_stream( |
- mock_dependency_factory->CreateLocalMediaStream(stream_label)); |
- talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> local_video_track( |
- mock_dependency_factory->CreateLocalVideoTrack(video_track_label, 0)); |
- local_stream->AddTrack(local_video_track); |
- mock_ms_impl->AddLocalStream(local_stream); |
- WebKit::WebVector<WebKit::WebMediaStreamSource> source_vector( |
- static_cast<size_t>(1)); |
- source_vector[0].initialize(WebKit::WebString::fromUTF8(video_track_label), |
- WebKit::WebMediaStreamSource::TypeVideo, |
- WebKit::WebString::fromUTF8("RemoteVideo")); |
WebKit::WebVector<WebKit::WebMediaStreamDescriptor> local_streams( |
static_cast<size_t>(1)); |
- local_streams[0].initialize(UTF8ToUTF16(stream_label), source_vector); |
- pc_handler->produceInitialOffer(local_streams); |
- EXPECT_EQ(stream_label, mock_peer_connection->stream_label()); |
- EXPECT_TRUE(mock_peer_connection->stream_changes_committed()); |
+ local_streams[0] = CreateLocalMediaStream(stream_label); |
+ pc_handler_->produceInitialOffer(local_streams); |
+ EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); |
+ EXPECT_TRUE(mock_peer_connection_->stream_changes_committed()); |
std::string message("message1"); |
- pc_handler->handleInitialOffer(WebKit::WebString::fromUTF8(message)); |
- EXPECT_EQ(message, mock_peer_connection->signaling_message()); |
+ pc_handler_->handleInitialOffer(WebKit::WebString::fromUTF8(message)); |
+ EXPECT_EQ(message, mock_peer_connection_->signaling_message()); |
message = "message2"; |
- pc_handler->processSDP(WebKit::WebString::fromUTF8(message)); |
- EXPECT_EQ(message, mock_peer_connection->signaling_message()); |
+ pc_handler_->processSDP(WebKit::WebString::fromUTF8(message)); |
+ EXPECT_EQ(message, mock_peer_connection_->signaling_message()); |
message = "message3"; |
- pc_handler->OnSignalingMessage(message); |
- EXPECT_EQ(message, mock_client->sdp()); |
- |
- std::string remote_stream_label(stream_label); |
- remote_stream_label += "-remote"; |
- std::string remote_video_track_label(video_track_label); |
- remote_video_track_label += "-remote"; |
- // We use a local stream as a remote since for testing purposes we really |
- // only need the MediaStreamInterface. |
- talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> remote_stream( |
- mock_dependency_factory->CreateLocalMediaStream(remote_stream_label)); |
- talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> remote_video_track( |
- mock_dependency_factory->CreateLocalVideoTrack(remote_video_track_label, |
- 0)); |
- remote_video_track->set_enabled(true); |
- remote_stream->AddTrack(remote_video_track); |
- mock_peer_connection->AddRemoteStream(remote_stream); |
- pc_handler->OnAddStream(remote_stream); |
- EXPECT_EQ(remote_stream_label, mock_client->stream_label()); |
- |
- talk_base::scoped_refptr<webrtc::MockVideoRendererWrapper> renderer( |
- new talk_base::RefCountedObject<webrtc::MockVideoRendererWrapper>()); |
- pc_handler->SetRemoteVideoRenderer(remote_video_track_label, renderer); |
- EXPECT_EQ(renderer, remote_video_track->GetRenderer()); |
+ pc_handler_->OnSignalingMessage(message); |
+ EXPECT_EQ(message, mock_client_->sdp()); |
+ |
+ std::string remote_stream_label("remote_stream"); |
+ talk_base::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
+ AddRemoteMockMediaStream(remote_stream_label, "video_track", |
+ "audio_track")); |
+ pc_handler_->OnAddStream(remote_stream); |
+ EXPECT_EQ(remote_stream_label, mock_client_->stream_label()); |
WebKit::WebVector<WebKit::WebMediaStreamDescriptor> empty_streams( |
static_cast<size_t>(0)); |
- pc_handler->processPendingStreams(empty_streams, local_streams); |
- EXPECT_EQ("", mock_peer_connection->stream_label()); |
- mock_peer_connection->ClearStreamChangesCommitted(); |
- EXPECT_TRUE(!mock_peer_connection->stream_changes_committed()); |
+ pc_handler_->processPendingStreams(empty_streams, local_streams); |
+ EXPECT_EQ("", mock_peer_connection_->stream_label()); |
+ mock_peer_connection_->ClearStreamChangesCommitted(); |
+ EXPECT_TRUE(!mock_peer_connection_->stream_changes_committed()); |
- pc_handler->OnRemoveStream(remote_stream); |
- EXPECT_TRUE(mock_client->stream_label().empty()); |
+ pc_handler_->OnRemoveStream(remote_stream); |
+ EXPECT_TRUE(mock_client_->stream_label().empty()); |
- pc_handler->processPendingStreams(local_streams, empty_streams); |
- EXPECT_EQ(stream_label, mock_peer_connection->stream_label()); |
- EXPECT_TRUE(mock_peer_connection->stream_changes_committed()); |
+ pc_handler_->processPendingStreams(local_streams, empty_streams); |
+ EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); |
+ EXPECT_TRUE(mock_peer_connection_->stream_changes_committed()); |
- pc_handler->stop(); |
- EXPECT_FALSE(pc_handler->native_peer_connection_.get()); |
+ pc_handler_->stop(); |
+ EXPECT_FALSE(pc_handler_->native_peer_connection()); |
// PC handler is expected to be deleted when stop calls |
// MediaStreamImpl::ClosePeerConnection. We own and delete it here instead of |
// in the mock. |
- pc_handler.reset(); |
+ pc_handler_.reset(); |
} |