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

Side by Side Diff: media/remoting/courier_renderer_unittest.cc

Issue 2669033004: Media Remoting: Don't report remote renderer init error to pipeline. (Closed)
Patch Set: Add unittests. Created 3 years, 10 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
« no previous file with comments | « media/remoting/courier_renderer.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "media/remoting/courier_renderer.h" 5 #include "media/remoting/courier_renderer.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 public: 126 public:
127 CourierRendererTest() 127 CourierRendererTest()
128 : receiver_renderer_handle_(10), 128 : receiver_renderer_handle_(10),
129 receiver_audio_demuxer_callback_handle_(11), 129 receiver_audio_demuxer_callback_handle_(11),
130 receiver_video_demuxer_callback_handle_(12), 130 receiver_video_demuxer_callback_handle_(12),
131 sender_client_handle_(RpcBroker::kInvalidHandle), 131 sender_client_handle_(RpcBroker::kInvalidHandle),
132 sender_renderer_callback_handle_(RpcBroker::kInvalidHandle), 132 sender_renderer_callback_handle_(RpcBroker::kInvalidHandle),
133 sender_audio_demuxer_handle_(RpcBroker::kInvalidHandle), 133 sender_audio_demuxer_handle_(RpcBroker::kInvalidHandle),
134 sender_video_demuxer_handle_(RpcBroker::kInvalidHandle), 134 sender_video_demuxer_handle_(RpcBroker::kInvalidHandle),
135 received_audio_ds_init_cb_(false), 135 received_audio_ds_init_cb_(false),
136 received_video_ds_init_cb_(false), 136 received_video_ds_init_cb_(false) {}
137 renderer_initialized_(false) {}
138 ~CourierRendererTest() override = default; 137 ~CourierRendererTest() override = default;
139 138
140 // Use this function to mimic receiver to handle RPC message for renderer 139 // Use this function to mimic receiver to handle RPC message for renderer
141 // initialization, 140 // initialization,
142 void RpcMessageResponseBot(std::unique_ptr<std::vector<uint8_t>> message) { 141 void RpcMessageResponseBot(std::unique_ptr<std::vector<uint8_t>> message) {
143 std::unique_ptr<pb::RpcMessage> rpc(new pb::RpcMessage()); 142 std::unique_ptr<pb::RpcMessage> rpc(new pb::RpcMessage());
144 ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); 143 ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size()));
145 switch (rpc->proc()) { 144 switch (rpc->proc()) {
146 case pb::RpcMessage::RPC_ACQUIRE_RENDERER: { 145 case pb::RpcMessage::RPC_ACQUIRE_RENDERER: {
147 // Issues RPC_ACQUIRE_RENDERER_DONE RPC message. 146 // Issues RPC_ACQUIRE_RENDERER_DONE RPC message.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 187
189 // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving 188 // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving
190 // RPC_DS_INITIALIZE_CALLBACK on available streams. 189 // RPC_DS_INITIALIZE_CALLBACK on available streams.
191 if (received_audio_ds_init_cb_ == 190 if (received_audio_ds_init_cb_ ==
192 (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) && 191 (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) &&
193 received_video_ds_init_cb_ == 192 received_video_ds_init_cb_ ==
194 (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle)) { 193 (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle)) {
195 std::unique_ptr<pb::RpcMessage> init_cb(new pb::RpcMessage()); 194 std::unique_ptr<pb::RpcMessage> init_cb(new pb::RpcMessage());
196 init_cb->set_handle(sender_renderer_callback_handle_); 195 init_cb->set_handle(sender_renderer_callback_handle_);
197 init_cb->set_proc(pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK); 196 init_cb->set_proc(pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK);
198 init_cb->set_boolean_value(true); 197 init_cb->set_boolean_value(is_successfully_initialized_);
199 controller_->GetRpcBroker()->ProcessMessageFromRemote( 198 controller_->GetRpcBroker()->ProcessMessageFromRemote(
200 std::move(init_cb)); 199 std::move(init_cb));
201 renderer_initialized_ = true;
202 } 200 }
203 201
204 } break; 202 } break;
205 case pb::RpcMessage::RPC_R_FLUSHUNTIL: { 203 case pb::RpcMessage::RPC_R_FLUSHUNTIL: {
206 // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message. 204 // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message.
207 std::unique_ptr<pb::RpcMessage> flush_cb(new pb::RpcMessage()); 205 std::unique_ptr<pb::RpcMessage> flush_cb(new pb::RpcMessage());
208 flush_cb->set_handle(rpc->renderer_flushuntil_rpc().callback_handle()); 206 flush_cb->set_handle(rpc->renderer_flushuntil_rpc().callback_handle());
209 flush_cb->set_proc(pb::RpcMessage::RPC_R_FLUSHUNTIL_CALLBACK); 207 flush_cb->set_proc(pb::RpcMessage::RPC_R_FLUSHUNTIL_CALLBACK);
210 controller_->GetRpcBroker()->ProcessMessageFromRemote( 208 controller_->GetRpcBroker()->ProcessMessageFromRemote(
211 std::move(flush_cb)); 209 std::move(flush_cb));
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 337
340 // RPC handles. 338 // RPC handles.
341 const int receiver_renderer_handle_; 339 const int receiver_renderer_handle_;
342 const int receiver_audio_demuxer_callback_handle_; 340 const int receiver_audio_demuxer_callback_handle_;
343 const int receiver_video_demuxer_callback_handle_; 341 const int receiver_video_demuxer_callback_handle_;
344 int sender_client_handle_; 342 int sender_client_handle_;
345 int sender_renderer_callback_handle_; 343 int sender_renderer_callback_handle_;
346 int sender_audio_demuxer_handle_; 344 int sender_audio_demuxer_handle_;
347 int sender_video_demuxer_handle_; 345 int sender_video_demuxer_handle_;
348 346
349 // flag to indicate if RPC_DS_INITIALIZE_CALLBACK RPC messages are received. 347 // Indicate whether RPC_DS_INITIALIZE_CALLBACK RPC messages are received.
350 bool received_audio_ds_init_cb_; 348 bool received_audio_ds_init_cb_;
351 bool received_video_ds_init_cb_; 349 bool received_video_ds_init_cb_;
352 350
353 // Check if |renderer_| is initialized successfully or not. 351 // Indicates whether the renderer on receiver side is successfully
miu 2017/02/02 22:37:58 nit: To be clearer, let's say "...whether the test
xjz 2017/02/02 23:03:31 Done.
354 bool renderer_initialized_; 352 // initialized.
353 bool is_successfully_initialized_ = true;
355 354
356 // vector to store received RPC message with proc value 355 // Stores RPC messages that are sending to remote sink.
357 std::vector<std::unique_ptr<pb::RpcMessage>> received_rpc_; 356 std::vector<std::unique_ptr<pb::RpcMessage>> received_rpc_;
358 357
359 private: 358 private:
360 DISALLOW_COPY_AND_ASSIGN(CourierRendererTest); 359 DISALLOW_COPY_AND_ASSIGN(CourierRendererTest);
361 }; 360 };
362 361
363 TEST_F(CourierRendererTest, Initialize) { 362 TEST_F(CourierRendererTest, Initialize) {
364 InitializeRenderer(); 363 InitializeRenderer();
365 RunPendingTasks(); 364 RunPendingTasks();
366 365
367 ASSERT_TRUE(IsRendererInitialized()); 366 ASSERT_TRUE(IsRendererInitialized());
368 ASSERT_EQ(render_client_->status(), PIPELINE_OK); 367 ASSERT_EQ(render_client_->status(), PIPELINE_OK);
369 } 368 }
370 369
370 TEST_F(CourierRendererTest, InitializeFailed) {
miu 2017/02/02 22:37:58 Looks great! :)
371 is_successfully_initialized_ = false;
372 InitializeRenderer();
373 RunPendingTasks();
374 ASSERT_FALSE(IsRendererInitialized());
375 ASSERT_TRUE(DidEncounterFatalError());
376 // Don't report error to prevent breaking the pipeline.
377 ASSERT_EQ(render_client_->status(), PIPELINE_OK);
378
379 // The CourierRenderer should act as a no-op renderer from this point.
380
381 ResetReceivedRpcMessage();
382 EXPECT_CALL(*render_client_, OnFlushCallback()).Times(1);
383 renderer_->Flush(base::Bind(&RendererClientImpl::OnFlushCallback,
384 base::Unretained(render_client_.get())));
385 RunPendingTasks();
386 ASSERT_EQ(0, ReceivedRpcMessageCount());
387
388 base::TimeDelta seek = base::TimeDelta::FromMicroseconds(100);
389 renderer_->StartPlayingFrom(seek);
390 RunPendingTasks();
391 ASSERT_EQ(0, ReceivedRpcMessageCount());
392
393 renderer_->SetVolume(3.0);
394 RunPendingTasks();
395 ASSERT_EQ(0, ReceivedRpcMessageCount());
396
397 renderer_->SetPlaybackRate(2.5);
398 RunPendingTasks();
399 ASSERT_EQ(0, ReceivedRpcMessageCount());
400 }
401
371 TEST_F(CourierRendererTest, Flush) { 402 TEST_F(CourierRendererTest, Flush) {
372 // Initialize Renderer. 403 // Initialize Renderer.
373 InitializeRenderer(); 404 InitializeRenderer();
374 RunPendingTasks(); 405 RunPendingTasks();
375 ASSERT_TRUE(IsRendererInitialized()); 406 ASSERT_TRUE(IsRendererInitialized());
376 ASSERT_EQ(render_client_->status(), PIPELINE_OK); 407 ASSERT_EQ(render_client_->status(), PIPELINE_OK);
377 408
378 // Flush Renderer. 409 // Flush Renderer.
379 // Redirect RPC message for simulate receiver scenario 410 // Redirect RPC message for simulate receiver scenario
380 controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::Bind( 411 controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::Bind(
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 } 456 }
426 457
427 TEST_F(CourierRendererTest, SetPlaybackRate) { 458 TEST_F(CourierRendererTest, SetPlaybackRate) {
428 // Initialize Renderer because, as of this writing, the pipeline guarantees it 459 // Initialize Renderer because, as of this writing, the pipeline guarantees it
429 // will not call SetPlaybackRate() until after the media::Renderer is 460 // will not call SetPlaybackRate() until after the media::Renderer is
430 // initialized. 461 // initialized.
431 InitializeRenderer(); 462 InitializeRenderer();
432 RunPendingTasks(); 463 RunPendingTasks();
433 ASSERT_EQ(0, ReceivedRpcMessageCount()); 464 ASSERT_EQ(0, ReceivedRpcMessageCount());
434 465
435 controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::Bind(
436 &CourierRendererTest::OnSendMessageToSink, base::Unretained(this)));
437 renderer_->SetPlaybackRate(2.5); 466 renderer_->SetPlaybackRate(2.5);
438 RunPendingTasks(); 467 RunPendingTasks();
439 ASSERT_EQ(1, ReceivedRpcMessageCount()); 468 ASSERT_EQ(1, ReceivedRpcMessageCount());
440 // Checks if it sends out RPC message with correct value. 469 // Checks if it sends out RPC message with correct value.
441 const pb::RpcMessage* rpc = 470 const pb::RpcMessage* rpc =
442 PeekRpcMessage(pb::RpcMessage::RPC_R_SETPLAYBACKRATE); 471 PeekRpcMessage(pb::RpcMessage::RPC_R_SETPLAYBACKRATE);
443 ASSERT_TRUE(rpc); 472 ASSERT_TRUE(rpc);
444 ASSERT_TRUE(rpc->double_value() == 2.5); 473 ASSERT_TRUE(rpc->double_value() == 2.5);
445 } 474 }
446 475
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 ASSERT_FALSE(DidEncounterFatalError()); // Not enough measurements. 641 ASSERT_FALSE(DidEncounterFatalError()); // Not enough measurements.
613 IssueStatisticsUpdateRpc(); 642 IssueStatisticsUpdateRpc();
614 clock_->Advance(base::TimeDelta::FromSeconds(1)); 643 clock_->Advance(base::TimeDelta::FromSeconds(1));
615 RunPendingTasks(); 644 RunPendingTasks();
616 } 645 }
617 ASSERT_TRUE(DidEncounterFatalError()); 646 ASSERT_TRUE(DidEncounterFatalError());
618 } 647 }
619 648
620 } // namespace remoting 649 } // namespace remoting
621 } // namespace media 650 } // namespace media
OLDNEW
« no previous file with comments | « media/remoting/courier_renderer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698