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..69200e834657ba832de1ee51b07d6cbdab27c1d5 |
--- /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.rtp_timestamp = 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 |