| Index: media/remoting/remote_demuxer_stream_adapter_unittest.cc
|
| diff --git a/media/remoting/remote_demuxer_stream_adapter_unittest.cc b/media/remoting/remote_demuxer_stream_adapter_unittest.cc
|
| index 3c9e06a4bef3bb9f703dc5b0a324a6600fb0c0b5..26ac2dedd0ad5f3f7e40b3edf1f6eaf216956809 100644
|
| --- a/media/remoting/remote_demuxer_stream_adapter_unittest.cc
|
| +++ b/media/remoting/remote_demuxer_stream_adapter_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "media/remoting/remote_demuxer_stream_adapter.h"
|
|
|
| #include <memory>
|
| +#include <vector>
|
|
|
| #include "base/callback_helpers.h"
|
| #include "base/run_loop.h"
|
| @@ -40,17 +41,32 @@ class MockRemoteDemuxerStreamAdapter {
|
| std::move(main_task_runner), std::move(media_task_runner), name,
|
| demuxer_stream, rpc_broker_->GetWeakPtr(),
|
| rpc_broker_->GetUniqueHandle(), std::move(stream_sender_info),
|
| - std::move(producer_handle)));
|
| + std::move(producer_handle),
|
| + base::Bind(&MockRemoteDemuxerStreamAdapter::OnError,
|
| + weak_factory_.GetWeakPtr())));
|
|
|
| // Faking initialization with random callback handle to start mojo watcher.
|
| demuxer_stream_adapter_->Initialize(3);
|
| }
|
|
|
| + ~MockRemoteDemuxerStreamAdapter() {
|
| + // Make sure unit tests that did not expect errors did not cause any errors.
|
| + EXPECT_TRUE(errors_.empty());
|
| + }
|
| +
|
| int rpc_handle() const { return demuxer_stream_adapter_->rpc_handle(); }
|
| +
|
| base::WeakPtr<MockRemoteDemuxerStreamAdapter> GetWeakPtr() {
|
| return weak_factory_.GetWeakPtr();
|
| }
|
|
|
| + void DoDuplicateInitialize() { demuxer_stream_adapter_->Initialize(999); }
|
| +
|
| + void TakeErrors(std::vector<StopTrigger>* errors) {
|
| + errors->swap(errors_);
|
| + errors_.clear();
|
| + }
|
| +
|
| // Fake to signal that it's in reading state.
|
| void FakeReadUntil(int read_until_count, int callback_handle) {
|
| std::unique_ptr<pb::RpcMessage> rpc(new pb::RpcMessage());
|
| @@ -77,9 +93,14 @@ class MockRemoteDemuxerStreamAdapter {
|
| CHECK(last_received_rpc_->ParseFromArray(message->data(), message->size()));
|
| }
|
|
|
| + void OnError(StopTrigger stop_trigger) { errors_.push_back(stop_trigger); }
|
| +
|
| std::unique_ptr<RpcBroker> rpc_broker_;
|
| std::unique_ptr<RemoteDemuxerStreamAdapter> demuxer_stream_adapter_;
|
| std::unique_ptr<remoting::pb::RpcMessage> last_received_rpc_;
|
| +
|
| + std::vector<StopTrigger> errors_;
|
| +
|
| base::WeakPtrFactory<MockRemoteDemuxerStreamAdapter> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MockRemoteDemuxerStreamAdapter);
|
| @@ -122,10 +143,11 @@ class RemoteDemuxerStreamAdapterTest : public ::testing::Test {
|
| protected:
|
| void SetUp() override { SetUpDataPipe(); }
|
|
|
| + // TODO(miu): Add separate media thread, to test threading also.
|
| + base::MessageLoop message_loop_;
|
| std::unique_ptr<DummyDemuxerStream> demuxer_stream_;
|
| std::unique_ptr<FakeRemotingDataStreamSender> data_stream_sender_;
|
| std::unique_ptr<MockRemoteDemuxerStreamAdapter> demuxer_stream_adapter_;
|
| - base::MessageLoop message_loop_;
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(RemoteDemuxerStreamAdapterTest);
|
| @@ -247,5 +269,30 @@ TEST_F(RemoteDemuxerStreamAdapterTest, SendFrameAndSignalFlushMix) {
|
| data_stream_sender_->ResetHistory();
|
| }
|
|
|
| +TEST_F(RemoteDemuxerStreamAdapterTest, DuplicateInitializeCausesFatalError) {
|
| + std::vector<StopTrigger> errors;
|
| + demuxer_stream_adapter_->TakeErrors(&errors);
|
| + ASSERT_TRUE(errors.empty());
|
| +
|
| + demuxer_stream_adapter_->DoDuplicateInitialize();
|
| + demuxer_stream_adapter_->TakeErrors(&errors);
|
| + ASSERT_EQ(1u, errors.size());
|
| + EXPECT_EQ(PEERS_OUT_OF_SYNC, errors[0]);
|
| +}
|
| +
|
| +TEST_F(RemoteDemuxerStreamAdapterTest, ClosingPipeCausesFatalError) {
|
| + std::vector<StopTrigger> errors;
|
| + demuxer_stream_adapter_->TakeErrors(&errors);
|
| + ASSERT_TRUE(errors.empty());
|
| +
|
| + // Closes one end of mojo message and data pipes.
|
| + data_stream_sender_.reset();
|
| + RunPendingTasks(); // Allow notification from mojo to propagate.
|
| +
|
| + demuxer_stream_adapter_->TakeErrors(&errors);
|
| + ASSERT_EQ(1u, errors.size());
|
| + EXPECT_EQ(MOJO_PIPE_ERROR, errors[0]);
|
| +}
|
| +
|
| } // namesapce remoting
|
| } // namespace media
|
|
|