Chromium Code Reviews| Index: media/remoting/rpc/rpc_unittest.cc |
| diff --git a/media/remoting/rpc/rpc_unittest.cc b/media/remoting/rpc/rpc_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e3a1ec6177b649d7df18a123fee88b2b3ca3c8b3 |
| --- /dev/null |
| +++ b/media/remoting/rpc/rpc_unittest.cc |
| @@ -0,0 +1,641 @@ |
| +// Copyright 2016 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 "media/remoting/rpc/rpc.h" |
| + |
| +#include <memory> |
| +#include <string> |
| +#include <utility> |
| +#include <vector> |
| + |
| +#include "base/macros.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "media/base/audio_decoder_config.h" |
| +#include "media/base/cdm_config.h" |
| +#include "media/base/cdm_key_information.h" |
| +#include "media/base/demuxer_stream.h" |
| +#include "media/base/eme_constants.h" |
| +#include "media/base/media_keys.h" |
| +#include "media/base/video_decoder_config.h" |
| +#include "media/remoting/remoting_rpc_message.pb.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using testing::_; |
| +using testing::Invoke; |
| +using testing::Return; |
| + |
| +namespace media { |
| +namespace remoting { |
| + |
| +class RemotingRpcTest : public testing::Test { |
| + protected: |
| + void SetUp() override {} |
| +}; |
| + |
| +TEST_F(RemotingRpcTest, GarbageInput) { |
| + std::string proto_buffer_string("$%@#$@$%$&%^&^%*^&^&...."); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(!to_rpc); |
|
miu
2016/09/08 01:07:35
I think you meant to use EXPECT_TRUE/FALSE() inste
|
| +} |
| + |
| +// Test RPC message which has single integer message. |
| +TEST_F(RemotingRpcTest, AcquireRendererRpc) { |
|
miu
2016/09/08 01:07:35
General comments for rest of file: If you ditch th
erickung1
2016/09/13 03:52:53
ditched all the unit test, and only write test for
|
| + int rpc_handle = 3; |
| + |
| + // Convert RPC data structure into proto buffer string |
| + int value = 0; |
| + scoped_refptr<Rpc> from_rpc(new AcquireRendererRpc(rpc_handle, value)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + AcquireRendererRpc* actual_to_rpc = |
| + static_cast<AcquireRendererRpc*>(to_rpc.get()); |
| + ASSERT_EQ(value, actual_to_rpc->value()); |
| +} |
| + |
| +// Test RPC message which has single double message. |
| +TEST_F(RemotingRpcTest, RendererSetPlaybackRateRpc) { |
| + int rpc_handle = 3; |
| + |
| + // Convert RPC data structure into proto buffer string |
| + double value = 1.1; |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererSetPlaybackRateRpc(rpc_handle, value)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererSetPlaybackRateRpc* actual_to_rpc = |
| + static_cast<RendererSetPlaybackRateRpc*>(to_rpc.get()); |
| + ASSERT_EQ(value, actual_to_rpc->value()); |
| +} |
| + |
| +// Test RPC message which has single boolean message. |
| +TEST_F(RemotingRpcTest, RendererInitializeCallbackRpc) { |
| + int rpc_handle = 3; |
| + |
| + // Convert RPC data structure into proto buffer string |
| + bool value = true; |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererInitializeCallbackRpc(rpc_handle, value)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererInitializeCallbackRpc* actual_to_rpc = |
| + static_cast<RendererInitializeCallbackRpc*>(to_rpc.get()); |
| + ASSERT_EQ(value, actual_to_rpc->value()); |
| +} |
| + |
| +// Test RPC message which has no additional message. |
| +TEST_F(RemotingRpcTest, RendererFlushUntilCallbackRpc) { |
| + int rpc_handle = 3; |
| + |
| + // Convert RPC data structure into proto buffer string |
| + scoped_refptr<Rpc> from_rpc(new RendererFlushUntilCallbackRpc(rpc_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| +} |
| + |
| +// Following are the RPC message which have various data structure. |
| +TEST_F(RemotingRpcTest, RendererInitializeRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + int client_handle = 4; |
| + int audio_demuxer_handle = 5; |
| + int video_demuxer_handle = 6; |
| + int callback_handle = 7; |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererInitializeRpc(rpc_handle, client_handle, audio_demuxer_handle, |
| + video_demuxer_handle, callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererInitializeRpc* actual_to_rpc = |
| + static_cast<RendererInitializeRpc*>(to_rpc.get()); |
| + ASSERT_EQ(client_handle, actual_to_rpc->client_handle()); |
| + ASSERT_EQ(audio_demuxer_handle, actual_to_rpc->audio_demuxer_handle()); |
| + ASSERT_EQ(video_demuxer_handle, actual_to_rpc->video_demuxer_handle()); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, RendererFlushUntilRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + uint32_t audio_frame_id = 4; |
| + uint32_t video_frame_id = 5; |
| + int callback_handle = 6; |
| + scoped_refptr<Rpc> from_rpc(new RendererFlushUntilRpc( |
| + rpc_handle, audio_frame_id, video_frame_id, callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererFlushUntilRpc* actual_to_rpc = |
| + static_cast<RendererFlushUntilRpc*>(to_rpc.get()); |
| + ASSERT_EQ(audio_frame_id, actual_to_rpc->audio_frame_id()); |
| + ASSERT_EQ(video_frame_id, actual_to_rpc->video_frame_id()); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, RendererSetCdmRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + int cdm_id = 2; |
| + int callback_handle = 1; |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererSetCdmRpc(rpc_handle, cdm_id, callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererSetCdmRpc* actual_to_rpc = |
| + static_cast<RendererSetCdmRpc*>(to_rpc.get()); |
| + ASSERT_EQ(cdm_id, actual_to_rpc->cdm_id()); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, RendererClientOnTimeUpdateRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + int time_usec = 2; |
| + int max_time_usec = 1; |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererClientOnTimeUpdateRpc(rpc_handle, time_usec, max_time_usec)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererClientOnTimeUpdateRpc* actual_to_rpc = |
| + static_cast<RendererClientOnTimeUpdateRpc*>(to_rpc.get()); |
| + ASSERT_EQ(time_usec, actual_to_rpc->time_usec()); |
| + ASSERT_EQ(max_time_usec, actual_to_rpc->max_time_usec()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, RendererClientOnVideoNaturalSizeChangeRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + gfx::Size size(640, 480); |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererClientOnVideoNaturalSizeChangeRpc(rpc_handle, size)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererClientOnVideoNaturalSizeChangeRpc* actual_to_rpc = |
| + static_cast<RendererClientOnVideoNaturalSizeChangeRpc*>(to_rpc.get()); |
| + ASSERT_EQ(size, actual_to_rpc->size()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, RendererClientOnStatisticsUpdateRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + ::media::PipelineStatistics stats; |
| + stats.audio_bytes_decoded = 1; |
| + stats.video_bytes_decoded = 2; |
| + stats.video_frames_decoded = 3; |
| + stats.video_frames_dropped = 4; |
| + stats.audio_memory_usage = 5; |
| + stats.video_memory_usage = 6; |
| + scoped_refptr<Rpc> from_rpc( |
| + new RendererClientOnStatisticsUpdateRpc(rpc_handle, stats)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + RendererClientOnStatisticsUpdateRpc* actual_to_rpc = |
| + static_cast<RendererClientOnStatisticsUpdateRpc*>(to_rpc.get()); |
| + ::media::PipelineStatistics to_stats = actual_to_rpc->stats(); |
| + ASSERT_EQ(stats.audio_bytes_decoded, to_stats.audio_bytes_decoded); |
| + ASSERT_EQ(stats.video_bytes_decoded, to_stats.video_bytes_decoded); |
| + ASSERT_EQ(stats.video_frames_decoded, to_stats.video_frames_decoded); |
| + ASSERT_EQ(stats.video_frames_dropped, to_stats.video_frames_dropped); |
| + ASSERT_EQ(stats.audio_memory_usage, to_stats.audio_memory_usage); |
| + ASSERT_EQ(stats.video_memory_usage, to_stats.video_memory_usage); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, DemuxerStreamReadUntilRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + uint32_t frame_id = 2; |
| + int callback_handle = 1; |
| + scoped_refptr<Rpc> from_rpc( |
| + new DemuxerStreamReadUntilRpc(rpc_handle, frame_id, callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + DemuxerStreamReadUntilRpc* actual_to_rpc = |
| + static_cast<DemuxerStreamReadUntilRpc*>(to_rpc.get()); |
| + ASSERT_EQ(frame_id, actual_to_rpc->frame_id()); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, DemuxerStreamInitializeCallbackRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + ::media::DemuxerStream::Type type = ::media::DemuxerStream::VIDEO; |
| + ::media::AudioDecoderConfig audio_config; |
| + ::media::VideoDecoderConfig video_config; |
| + scoped_refptr<Rpc> from_rpc(new DemuxerStreamInitializeCallbackRpc( |
| + rpc_handle, type, audio_config, video_config)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + DemuxerStreamInitializeCallbackRpc* actual_to_rpc = |
| + static_cast<DemuxerStreamInitializeCallbackRpc*>(to_rpc.get()); |
| + ASSERT_EQ(type, actual_to_rpc->type()); |
| + // TODO(erickung) compare |audio_config| and |video_config|; |
| +} |
| + |
| +TEST_F(RemotingRpcTest, DemuxerStreamReadUntilCallbackRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + uint32_t frame_id = 100; |
| + ::media::DemuxerStream::Status status = ::media::DemuxerStream::kOk; |
| + ::media::AudioDecoderConfig audio_config; |
| + ::media::VideoDecoderConfig video_config; |
| + scoped_refptr<Rpc> from_rpc(new DemuxerStreamReadUntilCallbackRpc( |
| + rpc_handle, frame_id, status, audio_config, video_config)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + DemuxerStreamReadUntilCallbackRpc* actual_to_rpc = |
| + static_cast<DemuxerStreamReadUntilCallbackRpc*>(to_rpc.get()); |
| + ASSERT_EQ(frame_id, actual_to_rpc->frame_id()); |
| + ASSERT_EQ(status, actual_to_rpc->status()); |
| + // TODO(erickung) compare |audio_config| and |video_config|; |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmInitializeRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + std::string key_system; |
| + std::string security_origin; |
| + ::media::CdmConfig cdm_config; |
| + cdm_config.allow_distinctive_identifier = true; |
| + cdm_config.allow_persistent_state = false; |
| + cdm_config.use_hw_secure_codecs = true; |
| + int callback_handle = 4; |
| + scoped_refptr<Rpc> from_rpc(new CdmInitializeRpc( |
| + rpc_handle, key_system, security_origin, cdm_config, callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmInitializeRpc* actual_to_rpc = |
| + static_cast<CdmInitializeRpc*>(to_rpc.get()); |
| + ASSERT_EQ(key_system, actual_to_rpc->key_system()); |
| + ASSERT_EQ(security_origin, actual_to_rpc->security_origin()); |
| + ::media::CdmConfig cdm_config_out = actual_to_rpc->cdm_config(); |
| + ASSERT_EQ(cdm_config.allow_distinctive_identifier, |
| + cdm_config_out.allow_distinctive_identifier); |
| + ASSERT_EQ(cdm_config.allow_persistent_state, |
| + cdm_config_out.allow_persistent_state); |
| + ASSERT_EQ(cdm_config.use_hw_secure_codecs, |
| + cdm_config_out.use_hw_secure_codecs); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmSetServerCertificateRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + std::string data_blob("HereIsTestBlob"); |
| + std::vector<uint8_t> certificate_data(data_blob.begin(), data_blob.end()); |
| + int callback_handle = 4; |
| + scoped_refptr<Rpc> from_rpc( |
| + new CdmSetServerCertificateRpc(rpc_handle, &certificate_data[0], |
| + certificate_data.size(), callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmSetServerCertificateRpc* actual_to_rpc = |
| + static_cast<CdmSetServerCertificateRpc*>(to_rpc.get()); |
| + ASSERT_EQ(certificate_data.size(), actual_to_rpc->certificate_data_size()); |
| + std::string data_out_blob(actual_to_rpc->certificate_data(), |
| + actual_to_rpc->certificate_data() + |
| + actual_to_rpc->certificate_data_size()); |
| + ASSERT_EQ(data_blob, data_out_blob); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmCreateSessionAndGenerateRequestRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + ::media::MediaKeys::SessionType session_type = |
| + ::media::MediaKeys::TEMPORARY_SESSION; |
| + ::media::EmeInitDataType init_data_type = ::media::EmeInitDataType::CENC; |
| + std::string data_blob("Arbitrary##Data@@@"); |
| + std::vector<uint8_t> init_data(data_blob.begin(), data_blob.end()); |
| + int callback_handle = 4; |
| + scoped_refptr<Rpc> from_rpc(new CdmCreateSessionAndGenerateRequestRpc( |
| + rpc_handle, session_type, init_data_type, &init_data[0], init_data.size(), |
| + callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmCreateSessionAndGenerateRequestRpc* actual_to_rpc = |
| + static_cast<CdmCreateSessionAndGenerateRequestRpc*>(to_rpc.get()); |
| + ASSERT_EQ(session_type, actual_to_rpc->session_type()); |
| + ASSERT_EQ(init_data_type, actual_to_rpc->init_data_type()); |
| + ASSERT_EQ(init_data.size(), actual_to_rpc->init_data_size()); |
| + std::string data_out_blob( |
| + actual_to_rpc->init_data(), |
| + actual_to_rpc->init_data() + actual_to_rpc->init_data_size()); |
| + ASSERT_EQ(data_blob, data_out_blob); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmUpdateSessionRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + std::string session_id; |
| + std::string data_blob("___!!AS#HGSTU"); |
| + std::vector<uint8_t> response(data_blob.begin(), data_blob.end()); |
| + int callback_handle = 4; |
| + scoped_refptr<Rpc> from_rpc(new CdmUpdateSessionRpc( |
| + rpc_handle, session_id, &response[0], response.size(), callback_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmUpdateSessionRpc* actual_to_rpc = |
| + static_cast<CdmUpdateSessionRpc*>(to_rpc.get()); |
| + ASSERT_EQ(session_id, actual_to_rpc->session_id()); |
| + ASSERT_EQ(response.size(), actual_to_rpc->response_size()); |
| + std::string data_out_blob( |
| + actual_to_rpc->response(), |
| + actual_to_rpc->response() + actual_to_rpc->response_size()); |
| + ASSERT_EQ(data_blob, data_out_blob); |
| + ASSERT_EQ(callback_handle, actual_to_rpc->callback_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmSetServerCertificateCallbackRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + bool success = false; |
| + CdmPromiseResult result(::media::MediaKeys::UNKNOWN_ERROR, 3, ""); |
| + scoped_refptr<Rpc> from_rpc( |
| + new CdmSetServerCertificateCallbackRpc(rpc_handle, result)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmSetServerCertificateCallbackRpc* actual_to_rpc = |
| + static_cast<CdmSetServerCertificateCallbackRpc*>(to_rpc.get()); |
| + const CdmPromiseResult result_out = actual_to_rpc->result(); |
| + ASSERT_EQ(success, result_out.success()); |
| + ASSERT_EQ(result.exception(), result_out.exception()); |
| + ASSERT_EQ(result.system_code(), result_out.system_code()); |
| + ASSERT_EQ(result.error_message(), result_out.error_message()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmCreateSessionAndGenerateRequestCallbackRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + bool success = true; |
| + std::string session_id; |
| + CdmPromiseResult result(CdmPromiseResult::SuccessResult()); |
| + scoped_refptr<Rpc> from_rpc(new CdmCreateSessionAndGenerateRequestCallbackRpc( |
| + rpc_handle, result, session_id)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmCreateSessionAndGenerateRequestCallbackRpc* actual_to_rpc = |
| + static_cast<CdmCreateSessionAndGenerateRequestCallbackRpc*>(to_rpc.get()); |
| + const CdmPromiseResult result_out = actual_to_rpc->result(); |
| + ASSERT_EQ(success, result_out.success()); |
| + ASSERT_EQ(session_id, actual_to_rpc->session_id()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmInitializeCallbackRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + bool success = true; |
| + CdmPromiseResult result(CdmPromiseResult::SuccessResult()); |
| + int cdm_id = 4; |
| + int decryptor_handle = 5; |
| + scoped_refptr<Rpc> from_rpc(new CdmInitializeCallbackRpc( |
| + rpc_handle, result, cdm_id, decryptor_handle)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmInitializeCallbackRpc* actual_to_rpc = |
| + static_cast<CdmInitializeCallbackRpc*>(to_rpc.get()); |
| + const CdmPromiseResult result_out = actual_to_rpc->result(); |
| + ASSERT_EQ(success, result_out.success()); |
| + ASSERT_EQ(cdm_id, actual_to_rpc->cdm_id()); |
| + ASSERT_EQ(decryptor_handle, actual_to_rpc->decryptor_handle()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmClientOnSessionMessageRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + std::string session_id; |
| + ::media::MediaKeys::MessageType message_type = |
| + ::media::MediaKeys::LICENSE_RELEASE; |
| + uint8_t message[1] = {0xAB}; |
| + scoped_refptr<Rpc> from_rpc(new CdmClientOnSessionMessageRpc( |
| + rpc_handle, session_id, message_type, message, sizeof(message))); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmClientOnSessionMessageRpc* actual_to_rpc = |
| + static_cast<CdmClientOnSessionMessageRpc*>(to_rpc.get()); |
| + ASSERT_EQ(session_id, actual_to_rpc->session_id()); |
| + ASSERT_EQ(message_type, actual_to_rpc->message_type()); |
| + ASSERT_EQ(message[0], actual_to_rpc->message()[0]); |
| + ASSERT_EQ(size_t(1), actual_to_rpc->message_size()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmClientOnSessionKeysChangeRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + std::string session_id; |
| + bool has_additional_usable_key = false; |
| + scoped_refptr<Rpc> from_rpc(new CdmClientOnSessionKeysChangeRpc( |
| + rpc_handle, session_id, has_additional_usable_key, nullptr, 0)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmClientOnSessionKeysChangeRpc* actual_to_rpc = |
| + static_cast<CdmClientOnSessionKeysChangeRpc*>(to_rpc.get()); |
| + ASSERT_EQ(session_id, actual_to_rpc->session_id()); |
| + ASSERT_EQ(has_additional_usable_key, |
| + actual_to_rpc->has_additional_usable_key()); |
| + ASSERT_EQ(nullptr, actual_to_rpc->key_information()); |
| + ASSERT_EQ(static_cast<size_t>(0), actual_to_rpc->key_information_size()); |
| +} |
| + |
| +TEST_F(RemotingRpcTest, CdmClientOnSessionExpirationUpdateRpc) { |
| + // Convert RPC data structure into proto buffer string |
| + int rpc_handle = 3; |
| + std::string session_id; |
| + double new_expiry_time_sec = 3600.2; |
| + scoped_refptr<Rpc> from_rpc(new CdmClientOnSessionExpirationUpdateRpc( |
| + rpc_handle, session_id, new_expiry_time_sec)); |
| + ASSERT_EQ(rpc_handle, from_rpc->handle()); |
| + int proc = from_rpc->GetProc(); |
| + std::string proto_buffer_string = from_rpc->ToMessage(); |
| + |
| + // Convert proto buffer string back to RPC data structure. |
| + scoped_refptr<remoting::Rpc> to_rpc = Rpc::FromMessage(proto_buffer_string); |
| + DCHECK(to_rpc); |
| + ASSERT_EQ(proc, to_rpc->GetProc()); |
| + ASSERT_EQ(rpc_handle, to_rpc->handle()); |
| + |
| + CdmClientOnSessionExpirationUpdateRpc* actual_to_rpc = |
| + static_cast<CdmClientOnSessionExpirationUpdateRpc*>(to_rpc.get()); |
| + ASSERT_EQ(session_id, actual_to_rpc->session_id()); |
| + ASSERT_EQ(new_expiry_time_sec, actual_to_rpc->new_expiry_time_sec()); |
| +} |
| + |
| +} // namespace remoting |
| +} // namespace media |