Chromium Code Reviews| 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..fd2dea64ed4d4dc3492f767144af9569df7432e9 |
| --- /dev/null |
| +++ b/chrome/browser/media/cast_transport_host_filter_unittest.cc |
| @@ -0,0 +1,137 @@ |
| +// 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 create/delete transport senders in the wrong order to make sure |
| + // this doesn't crash. |
| + 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); |
|
acolwell GONE FROM CHROMIUM
2014/02/13 19:28:58
nit: Please declare const int kChannelId = 42 here
hubbe
2014/02/14 00:03:24
Done.
|
| + FakeSend(new_msg); |
| + |
| + media::cast::transport::EncodedAudioFrame audio_frame; |
| + audio_frame.codec = media::cast::transport::kPcm16; |
| + audio_frame.frame_id = 1; |
| + audio_frame.rtp_timestamp = 47; |
| + audio_frame.data = std::string(47 * 2 * 2, 'q'); |
|
acolwell GONE FROM CHROMIUM
2014/02/13 19:28:58
nit: This is an odd number. Please add a comment i
hubbe
2014/02/14 00:03:24
Used constants to clarify.
|
| + 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'); |
|
acolwell GONE FROM CHROMIUM
2014/02/13 19:28:58
ditto
hubbe
2014/02/14 00:03:24
Done.
|
| + 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 |