| Index: chrome/browser/media/cast_transport_host_filter_unittest.cc
|
| diff --git a/chrome/browser/media/cast_transport_host_filter_unittest.cc b/chrome/browser/media/cast_transport_host_filter_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7da327aedcfd2481d538fd04ef205614d8f3b9cc
|
| --- /dev/null
|
| +++ b/chrome/browser/media/cast_transport_host_filter_unittest.cc
|
| @@ -0,0 +1,136 @@
|
| +// Copyright 2014 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 "base/callback.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/time/default_tick_clock.h"
|
| +#include "chrome/browser/media/cast_transport_host_filter.h"
|
| +#include "content/public/test/test_browser_thread_bundle.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +
|
| +class CastTransportHostFilterTest : public testing::Test {
|
| + public:
|
| + CastTransportHostFilterTest()
|
| + : browser_thread_bundle_(
|
| + content::TestBrowserThreadBundle::IO_MAINLOOP) {
|
| + }
|
| + protected:
|
| + virtual void SetUp() OVERRIDE {
|
| + filter_ = new cast::CastTransportHostFilter();
|
| + }
|
| +
|
| + void FakeSend(const IPC::Message& message) {
|
| + bool message_was_ok;
|
| + EXPECT_TRUE(filter_->OnMessageReceived(message, &message_was_ok));
|
| + EXPECT_TRUE(message_was_ok);
|
| + }
|
| +
|
| + content::TestBrowserThreadBundle browser_thread_bundle_;
|
| + scoped_refptr<content::BrowserMessageFilter> filter_;
|
| +};
|
| +
|
| +TEST_F(CastTransportHostFilterTest, NewDelete) {
|
| + media::cast::transport::CastTransportConfig config;
|
| + config.local_endpoint = net::IPEndPoint(net::IPAddressNumber(4, 0), 0);
|
| + config.receiver_endpoint = net::IPEndPoint(net::IPAddressNumber(4, 0), 0);
|
| + CastHostMsg_New new_msg(17, config);
|
| + CastHostMsg_Delete delete_msg(17);
|
| +
|
| + // New, then delete, as expected.
|
| + FakeSend(new_msg);
|
| + FakeSend(delete_msg);
|
| + FakeSend(new_msg);
|
| + FakeSend(delete_msg);
|
| + FakeSend(new_msg);
|
| + FakeSend(delete_msg);
|
| +
|
| + // Now do it wrong.
|
| + FakeSend(new_msg);
|
| + FakeSend(new_msg);
|
| + FakeSend(new_msg);
|
| + FakeSend(delete_msg);
|
| + FakeSend(delete_msg);
|
| + FakeSend(delete_msg);
|
| +}
|
| +
|
| +TEST_F(CastTransportHostFilterTest, NewMany) {
|
| + media::cast::transport::CastTransportConfig config;
|
| + config.local_endpoint = net::IPEndPoint(net::IPAddressNumber(4, 0), 0);
|
| + config.receiver_endpoint = net::IPEndPoint(net::IPAddressNumber(4, 0), 0);
|
| +
|
| + for (int i = 0; i < 100; i++) {
|
| + CastHostMsg_New new_msg(i, config);
|
| + FakeSend(new_msg);
|
| + }
|
| +
|
| + for (int i = 0; i < 60; i++) {
|
| + CastHostMsg_Delete delete_msg(i);
|
| + FakeSend(delete_msg);
|
| + }
|
| +
|
| + // Leave some open, see what happens.
|
| +}
|
| +
|
| +TEST_F(CastTransportHostFilterTest, SimpleMessages) {
|
| + // Create a cast transport sender.
|
| + media::cast::transport::CastTransportConfig config;
|
| + config.local_endpoint = net::IPEndPoint(net::IPAddressNumber(4, 0), 0);
|
| + config.receiver_endpoint = net::IPEndPoint(net::IPAddressNumber(4, 0), 0);
|
| + CastHostMsg_New new_msg(42, config);
|
| + FakeSend(new_msg);
|
| +
|
| + media::cast::transport::EncodedAudioFrame audio_frame;
|
| + audio_frame.codec = media::cast::transport::kPcm16;
|
| + audio_frame.frame_id = 1;
|
| + audio_frame.samples = 47;
|
| + audio_frame.data = std::string(47 * 2 * 2, 'q');
|
| + CastHostMsg_InsertCodedAudioFrame insert_coded_audio_frame(
|
| + 42, audio_frame, base::TimeTicks::Now());
|
| + FakeSend(new_msg);
|
| +
|
| + media::cast::transport::EncodedVideoFrame video_frame;
|
| + video_frame.codec = media::cast::transport::kVp8;
|
| + video_frame.key_frame = true;
|
| + video_frame.frame_id = 1;
|
| + video_frame.last_referenced_frame_id = 0;
|
| + video_frame.data = std::string(4711, 'p');
|
| + CastHostMsg_InsertCodedVideoFrame insert_coded_video_frame(
|
| + 42, video_frame, base::TimeTicks::Now());
|
| + FakeSend(new_msg);
|
| +
|
| + media::cast::transport::SendRtcpFromRtpSenderData rtcp_data;
|
| + rtcp_data.packet_type_flags = 0;
|
| + rtcp_data.sending_ssrc = 0;
|
| + rtcp_data.c_name = "FNRD";
|
| + media::cast::transport::RtcpSenderInfo sender_info;
|
| + sender_info.ntp_seconds = 1;
|
| + sender_info.ntp_fraction = 2;
|
| + sender_info.rtp_timestamp = 3;
|
| + sender_info.send_packet_count = 4;
|
| + sender_info.send_octet_count = 5;
|
| + media::cast::transport::RtcpDlrrReportBlock dlrr;
|
| + dlrr.last_rr = 7;
|
| + dlrr.delay_since_last_rr = 8;
|
| + media::cast::transport::RtcpSenderLogMessage sender_log(1);
|
| + sender_log[0].frame_status =
|
| + media::cast::transport::kRtcpSenderFrameStatusSentToNetwork;
|
| + sender_log[0].rtp_timestamp = 9;
|
| + CastHostMsg_SendRtcpFromRtpSender rtcp_msg(
|
| + 42, rtcp_data, sender_info, dlrr, sender_log);
|
| + FakeSend(rtcp_msg);
|
| +
|
| + media::cast::MissingFramesAndPacketsMap missing_packets;
|
| + missing_packets[1].insert(4);
|
| + missing_packets[3].insert(7);
|
| + CastHostMsg_ResendPackets resend_msg(
|
| + 42, false, missing_packets);
|
| + FakeSend(resend_msg);
|
| +
|
| + CastHostMsg_Delete delete_msg(42);
|
| + FakeSend(delete_msg);
|
| +}
|
| +
|
| +} // namespace
|
|
|