| Index: content/renderer/media/media_stream_dispatcher_unittest.cc
|
| ===================================================================
|
| --- content/renderer/media/media_stream_dispatcher_unittest.cc (revision 0)
|
| +++ content/renderer/media/media_stream_dispatcher_unittest.cc (revision 0)
|
| @@ -0,0 +1,201 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/message_loop.h"
|
| +#include "content/common/media/media_stream_messages.h"
|
| +#include "content/renderer/media/media_stream_dispatcher.h"
|
| +#include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +
|
| +const int kRouteId = 0;
|
| +const int kAudioSessionId = 3;
|
| +const int kVideoSessionId = 5;
|
| +const int kRequestId1 = 10;
|
| +const int kRequestId2 = 20;
|
| +
|
| +class MockMediaStreamDispatcherEventHandler
|
| + : public MediaStreamDispatcherEventHandler {
|
| + public:
|
| + MockMediaStreamDispatcherEventHandler()
|
| + : request_id_(-1),
|
| + audio_failed(false),
|
| + video_failed(false) {}
|
| +
|
| + virtual void OnStreamGenerated(
|
| + int request_id,
|
| + const std::string &label,
|
| + const media_stream::StreamDeviceInfoArray& audio_device_array,
|
| + const media_stream::StreamDeviceInfoArray& video_device_array) {
|
| + request_id_ = request_id;
|
| + label_ = label;
|
| + }
|
| +
|
| + virtual void OnStreamGenerationFailed(int request_id) {
|
| + request_id_ = request_id;
|
| + }
|
| +
|
| + virtual void OnAudioDeviceFailed(const std::string& label,
|
| + int index) {
|
| + audio_failed = true;
|
| + }
|
| +
|
| + virtual void OnVideoDeviceFailed(const std::string& label,
|
| + int index) {
|
| + video_failed = true;
|
| + }
|
| +
|
| + int request_id_;
|
| + std::string label_;
|
| + bool audio_failed;
|
| + bool video_failed;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MockMediaStreamDispatcherEventHandler);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TEST(MediaStreamDispatcherTest, Basic) {
|
| + scoped_ptr<MediaStreamDispatcher> dispatcher(new MediaStreamDispatcher(NULL));
|
| + scoped_ptr<MockMediaStreamDispatcherEventHandler>
|
| + handler(new MockMediaStreamDispatcherEventHandler);
|
| + media_stream::StreamOptions components(
|
| + true, media_stream::StreamOptions::kFacingUser);
|
| + std::string security_origin;
|
| +
|
| + int ipc_request_id1 = dispatcher->next_ipc_id_;
|
| + dispatcher->GenerateStream(kRequestId1, handler.get(), components,
|
| + security_origin);
|
| + int ipc_request_id2 = dispatcher->next_ipc_id_;
|
| + EXPECT_NE(ipc_request_id1, ipc_request_id2);
|
| + dispatcher->GenerateStream(kRequestId2, handler.get(), components,
|
| + security_origin);
|
| + EXPECT_EQ(dispatcher->requests_.size(), size_t(2));
|
| +
|
| + media_stream::StreamDeviceInfoArray audio_device_array(1);
|
| + media_stream::StreamDeviceInfo audio_device_info;
|
| + audio_device_info.name = "Microphone";
|
| + audio_device_info.stream_type = media_stream::kAudioCapture;
|
| + audio_device_info.session_id = kAudioSessionId;
|
| + audio_device_array[0] = audio_device_info;
|
| +
|
| + media_stream::StreamDeviceInfoArray video_device_array(1);
|
| + media_stream::StreamDeviceInfo video_device_info;
|
| + video_device_info.name = "Camera";
|
| + video_device_info.stream_type = media_stream::kVideoCapture;
|
| + video_device_info.session_id = kVideoSessionId;
|
| + video_device_array[0] = video_device_info;
|
| +
|
| + // Complete the creation of stream1.
|
| + std::string stream_label1 = std::string("stream1");
|
| + dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
|
| + kRouteId, ipc_request_id1, stream_label1,
|
| + audio_device_array, video_device_array));
|
| + EXPECT_EQ(handler->request_id_, kRequestId1);
|
| + EXPECT_EQ(handler->label_, stream_label1);
|
| +
|
| + // Complete the creation of stream2.
|
| + std::string stream_label2 = std::string("stream2");
|
| + dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
|
| + kRouteId, ipc_request_id2, stream_label2,
|
| + audio_device_array, video_device_array));
|
| + EXPECT_EQ(handler->request_id_, kRequestId2);
|
| + EXPECT_EQ(handler->label_, stream_label2);
|
| +
|
| + EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
|
| + EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(2));
|
| +
|
| + // Check the session_id of stream2.
|
| + EXPECT_EQ(dispatcher->audio_session_id(stream_label2, 0), kAudioSessionId);
|
| + EXPECT_EQ(dispatcher->video_session_id(stream_label2, 0), kVideoSessionId);
|
| +
|
| + // Stop stream2.
|
| + dispatcher->StopStream(stream_label2);
|
| + EXPECT_EQ(dispatcher->audio_session_id(stream_label2, 0),
|
| + media_stream::StreamDeviceInfo::kNoId);
|
| + EXPECT_EQ(dispatcher->video_session_id(stream_label2, 0),
|
| + media_stream::StreamDeviceInfo::kNoId);
|
| +
|
| + // Stop stream1.
|
| + dispatcher->StopStream(stream_label1);
|
| + EXPECT_EQ(dispatcher->audio_session_id(stream_label1, 0),
|
| + media_stream::StreamDeviceInfo::kNoId);
|
| + EXPECT_EQ(dispatcher->video_session_id(stream_label1, 0),
|
| + media_stream::StreamDeviceInfo::kNoId);
|
| + EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
|
| +
|
| + // Verify that the request have been completed.
|
| + EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
|
| + EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
|
| +}
|
| +
|
| +TEST(MediaStreamDispatcherTest, TestFailure) {
|
| + scoped_ptr<MediaStreamDispatcher> dispatcher(new MediaStreamDispatcher(NULL));
|
| + scoped_ptr<MockMediaStreamDispatcherEventHandler>
|
| + handler(new MockMediaStreamDispatcherEventHandler);
|
| + media_stream::StreamOptions components(
|
| + true, media_stream::StreamOptions::kFacingUser);
|
| + std::string security_origin;
|
| +
|
| + // Test failure when creating a stream.
|
| + int ipc_request_id1 = dispatcher->next_ipc_id_;
|
| + dispatcher->GenerateStream(kRequestId1, handler.get(), components,
|
| + security_origin);
|
| + dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerationFailed(
|
| + kRouteId, ipc_request_id1));
|
| +
|
| + // Verify that the request have been completed.
|
| + EXPECT_EQ(handler->request_id_, kRequestId1);
|
| + EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
|
| +
|
| + // Create a new stream.
|
| + ipc_request_id1 = dispatcher->next_ipc_id_;
|
| + dispatcher->GenerateStream(kRequestId1, handler.get(), components,
|
| + security_origin);
|
| +
|
| + media_stream::StreamDeviceInfoArray audio_device_array(1);
|
| + media_stream::StreamDeviceInfo audio_device_info;
|
| + audio_device_info.name = "Microphone";
|
| + audio_device_info.stream_type = media_stream::kAudioCapture;
|
| + audio_device_info.session_id = kAudioSessionId;
|
| + audio_device_array[0] = audio_device_info;
|
| +
|
| + media_stream::StreamDeviceInfoArray video_device_array(1);
|
| + media_stream::StreamDeviceInfo video_device_info;
|
| + video_device_info.name = "Camera";
|
| + video_device_info.stream_type = media_stream::kVideoCapture;
|
| + video_device_info.session_id = kVideoSessionId;
|
| + video_device_array[0] = video_device_info;
|
| +
|
| + // Complete the creation of stream1.
|
| + std::string stream_label1 = std::string("stream1");
|
| + dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
|
| + kRouteId, ipc_request_id1, stream_label1,
|
| + audio_device_array, video_device_array));
|
| + EXPECT_EQ(handler->request_id_, kRequestId1);
|
| + EXPECT_EQ(handler->label_, stream_label1);
|
| + EXPECT_EQ(dispatcher->video_session_id(stream_label1, 0), kVideoSessionId);
|
| +
|
| + // Test failure of the video device.
|
| + dispatcher->OnMessageReceived(
|
| + MediaStreamHostMsg_VideoDeviceFailed(kRouteId, stream_label1, 0));
|
| + EXPECT_EQ(handler->video_failed, true);
|
| + EXPECT_EQ(handler->audio_failed, false);
|
| + // Make sure the audio device still exist but not the video device.
|
| + EXPECT_EQ(dispatcher->audio_session_id(stream_label1, 0), kAudioSessionId);
|
| +
|
| + // Test failure of the audio device.
|
| + dispatcher->OnMessageReceived(
|
| + MediaStreamHostMsg_AudioDeviceFailed(kRouteId, stream_label1, 0));
|
| + EXPECT_EQ(handler->audio_failed, true);
|
| +
|
| + // Stop stream1.
|
| + dispatcher->StopStream(stream_label1);
|
| + EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
|
| +}
|
|
|