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

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

Issue 7184010: MediaStreamDispatcher (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 6 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
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <string>
6
7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h"
10 #include "content/common/media_stream_messages.h"
11 #include "content/renderer/media/media_stream_dispatcher.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace {
15
16 const int kRouteId = 0;
17 const int kAudioSessionId = 3;
18 const int kVideoSessionId = 5;
19 const int kRequestId1 = 10;
20 const int kRequestId2 = 20;
21
22 class MockMediaStreamDispatcherEventHandler
23 : public MediaStreamDispatcher::EventHandler {
24 public:
25 MockMediaStreamDispatcherEventHandler()
26 : request_id_(-1),
27 label_(""),
Leandro Graciá Gil 2011/06/16 17:40:01 This is not required as the default constructor wi
Per K 2011/06/17 15:47:54 Done.
28 audio_failed(false),
29 video_failed(false) {}
30
31 virtual void OnStreamGenerated(
32 int request_id,
33 const std::string &label,
Leandro Graciá Gil 2011/06/16 17:40:01 Same as mentioned in the media_stream_dispatcher.h
Per K 2011/06/17 15:47:54 Done.
34 const media_stream::StreamDeviceInfoArray audio_device_array,
35 const media_stream::StreamDeviceInfoArray video_device_array) {
36 request_id_ = request_id;
37 label_ = label;
38 }
39
40 virtual void OnStreamGenerationFailed(int request_id) {
41 request_id_ = request_id;
42 }
43
44 virtual void OnAudioDeviceFailed(const std::string &label,
45 int index) {
46 audio_failed = true;
47 }
48
49 virtual void OnVideoDeviceFailed(const std::string &label,
50 int index) {
51 video_failed = true;
52 }
53
54 int request_id_;
55 std::string label_;
56 bool audio_failed;
57 bool video_failed;
58
59 DISALLOW_COPY_AND_ASSIGN(MockMediaStreamDispatcherEventHandler);
60 };
61
62 } // namespace
63
64 TEST(MediaStreamDispatcherTest, Basic) {
65 scoped_ptr<MediaStreamDispatcher> dispatcher(new MediaStreamDispatcher(NULL));
66 scoped_ptr<MockMediaStreamDispatcherEventHandler>
67 handler(new MockMediaStreamDispatcherEventHandler);
68 media_stream::GenerateStreamOptions components(
69 true, media_stream::GenerateStreamOptions::kVideoFacingUser);
70 std::string security_origin;
71
72 int ipc_request_id1 = dispatcher->next_ipc_id_;
73 dispatcher->GenerateStream(kRequestId1, handler.get(), components,
74 security_origin);
75 int ipc_request_id2 = dispatcher->next_ipc_id_;
76 EXPECT_NE(ipc_request_id1, ipc_request_id2);
77 dispatcher->GenerateStream(kRequestId2, handler.get(), components,
Leandro Graciá Gil 2011/06/16 17:40:01 Probably not part of this test yet, but are you ch
Per K 2011/06/17 15:47:54 The ipc_request_id is unique per MediaStreamDispat
78 security_origin);
79 EXPECT_EQ(dispatcher->requests_.size(), size_t(2));
80
81 media_stream::StreamDeviceInfoArray audio_device_array(1);
82 media_stream::StreamDeviceInfo audio_device_info;
83 audio_device_info.name = "Microphone";
84 audio_device_info.stream_type = media_stream::kAudioCapture;
85 audio_device_info.session_id = kAudioSessionId;
86 audio_device_array[0] = audio_device_info;
87
88 media_stream::StreamDeviceInfoArray video_device_array(1);
89 media_stream::StreamDeviceInfo video_device_info;
90 video_device_info.name = "Camera";
91 video_device_info.stream_type = media_stream::kVideoCapture;
92 video_device_info.session_id = kVideoSessionId;
93 video_device_array[0] = video_device_info;
94
95 // Complete the creation of stream1.
96 std::string stream_label1 = std::string("stream1");
97 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
98 kRouteId, ipc_request_id1, stream_label1,
99 audio_device_array, video_device_array));
100 EXPECT_EQ(handler->request_id_, kRequestId1);
101 EXPECT_EQ(handler->label_, stream_label1);
102
103 // Complete the creation of stream2.
104 std::string stream_label2 = std::string("stream2");
105 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
106 kRouteId, ipc_request_id2, stream_label2,
107 audio_device_array, video_device_array));
108 EXPECT_EQ(handler->request_id_, kRequestId2);
109 EXPECT_EQ(handler->label_, stream_label2);
110
111 EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
112 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(2));
113
114 // Verify stream2.
115 const media_stream::StreamDeviceInfoArray* device_array =
116 dispatcher->audio_device_array(stream_label2);
117 EXPECT_EQ((*device_array)[0].session_id, kAudioSessionId);
118 EXPECT_EQ((*device_array)[0].name, audio_device_info.name);
119
120 device_array = dispatcher->video_device_array(stream_label2);
121 EXPECT_EQ((*device_array)[0].session_id, kVideoSessionId);
122 EXPECT_EQ((*device_array)[0].name, video_device_info.name);
123
124 // Stop stream2.
125 dispatcher->StopStream(stream_label2);
126 EXPECT_TRUE(dispatcher->audio_device_array(stream_label2) == NULL);
scherkus (not reviewing) 2011/06/17 03:31:59 if you're testing for null pointer you can use EXP
Per K 2011/06/17 15:47:54 Done.
127 EXPECT_TRUE(dispatcher->video_device_array(stream_label2) == NULL);
128
129 // Stop stream1.
130 dispatcher->StopStream(stream_label1);
131 EXPECT_TRUE(dispatcher->audio_device_array(stream_label1) == NULL);
132 EXPECT_TRUE(dispatcher->video_device_array(stream_label1) == NULL);
133 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
134
135 // Verify that the request have been completed.
136 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
137 EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
138 }
139
140 TEST(MediaStreamDispatcherTest, TestFailure) {
141 scoped_ptr<MediaStreamDispatcher> dispatcher(new MediaStreamDispatcher(NULL));
142 scoped_ptr<MockMediaStreamDispatcherEventHandler>
143 handler(new MockMediaStreamDispatcherEventHandler);
144 media_stream::GenerateStreamOptions components(
145 true, media_stream::GenerateStreamOptions::kVideoFacingUser);
146 std::string security_origin;
147
148 // Test failure when creating a stream.
scherkus (not reviewing) 2011/06/17 03:31:59 indentation
Per K 2011/06/17 15:47:54 Done.
149 int ipc_request_id1 = dispatcher->next_ipc_id_;
150 dispatcher->GenerateStream(kRequestId1, handler.get(), components,
151 security_origin);
scherkus (not reviewing) 2011/06/17 03:31:59 indentation
Per K 2011/06/17 15:47:54 Done.
152 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerationFailed(
153 kRouteId, ipc_request_id1));
154
155 // Verify that the request have been completed.
156 EXPECT_EQ(handler->request_id_, kRequestId1);
157 EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
158
159 // Create a new stream.
160 ipc_request_id1 = dispatcher->next_ipc_id_;
161 dispatcher->GenerateStream(kRequestId1, handler.get(), components,
162 security_origin);
scherkus (not reviewing) 2011/06/17 03:31:59 indentation
Per K 2011/06/17 15:47:54 Done.
163
164 media_stream::StreamDeviceInfoArray audio_device_array(1);
165 media_stream::StreamDeviceInfo audio_device_info;
166 audio_device_info.name = "Microphone";
167 audio_device_info.stream_type = media_stream::kAudioCapture;
168 audio_device_info.session_id = kAudioSessionId;
169 audio_device_array[0] = audio_device_info;
170
171 media_stream::StreamDeviceInfoArray video_device_array(1);
172 media_stream::StreamDeviceInfo video_device_info;
173 video_device_info.name = "Camera";
174 video_device_info.stream_type = media_stream::kVideoCapture;
175 video_device_info.session_id = kVideoSessionId;
176 video_device_array[0] = video_device_info;
177
178 // Complete the creation of stream1.
179 std::string stream_label1 = std::string("stream1");
180 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
181 kRouteId, ipc_request_id1, stream_label1,
182 audio_device_array, video_device_array));
183 EXPECT_EQ(handler->request_id_, kRequestId1);
184 EXPECT_EQ(handler->label_, stream_label1);
185
186 const media_stream::StreamDeviceInfoArray* device_array =
187 dispatcher->video_device_array(stream_label1);
188 EXPECT_EQ((*device_array)[0].session_id, kVideoSessionId);
189 EXPECT_EQ((*device_array)[0].name, video_device_info.name);
190
191 // Test failure of the video device.
192 dispatcher->OnMessageReceived(
193 MediaStreamHostMsg_VideoDeviceFailed(kRouteId, stream_label1, 0));
194 EXPECT_EQ(handler->video_failed, true);
195 EXPECT_EQ(handler->audio_failed, false);
196 // Make sure the audio device still exist but not the video device.
197 EXPECT_EQ(dispatcher->video_device_array(stream_label1)->size(), size_t(0));
198
199 EXPECT_EQ(dispatcher->audio_device_array(stream_label1)->size(), size_t(1));
200
201 // Test failure of the audio device.
202 dispatcher->OnMessageReceived(
203 MediaStreamHostMsg_AudioDeviceFailed(kRouteId, stream_label1, 0));
204 EXPECT_EQ(handler->audio_failed, true);
205 // Make sure the audio device is removed.
206 EXPECT_EQ(dispatcher->audio_device_array(stream_label1)->size(), size_t(0));
207
208 // Stop stream1.
209 dispatcher->StopStream(stream_label1);
210 EXPECT_TRUE(dispatcher->audio_device_array(stream_label1) == NULL);
211 EXPECT_TRUE(dispatcher->video_device_array(stream_label1) == NULL);
212 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
213 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698