Index: media/cast/transport/transport/transport_unittest.cc |
diff --git a/media/cast/transport/transport/transport_unittest.cc b/media/cast/transport/transport/transport_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dab050a50f21fbe01fabbb9605460a9e6860acb9 |
--- /dev/null |
+++ b/media/cast/transport/transport/transport_unittest.cc |
@@ -0,0 +1,91 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
mikhal1
2014/01/07 20:50:06
2014. Happy new year!
Alpha Left Google
2014/01/08 00:37:11
Done.
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "media/cast/transport/transport/transport.h" |
+ |
+#include <algorithm> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/bind.h" |
+#include "base/callback.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
+#include "media/cast/cast_config.h" |
+#include "net/base/net_util.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace media { |
+namespace cast { |
+namespace transport { |
+ |
+class MockPacketReceiver : public PacketReceiver { |
+ public: |
+ MockPacketReceiver(const base::Closure& callback) |
+ : packet_callback_(callback) { |
+ } |
+ |
+ virtual void ReceivedPacket(const uint8* packet, size_t length, |
+ const base::Closure callback) OVERRIDE { |
+ packet_ = std::string(length, '\0'); |
+ std::copy(packet, packet + length, packet_.begin()); |
+ callback.Run(); |
+ packet_callback_.Run(); |
+ } |
+ |
+ std::string packet() const { return packet_; } |
+ |
+ private: |
+ std::string packet_; |
+ base::Closure packet_callback_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockPacketReceiver); |
+}; |
+ |
+void SendPacket(UdpTransport* transport, Packet packet) { |
+ transport->SendPacket(packet); |
+} |
+ |
+TEST(UdpTransport, SendAndReceive) { |
+ base::MessageLoopForIO message_loop; |
+ |
+ net::IPAddressNumber local_addr_number; |
+ net::IPAddressNumber empty_addr_number; |
+ net::ParseIPLiteralToNumber("127.0.0.1", &local_addr_number); |
+ net::ParseIPLiteralToNumber("0.0.0.0", &empty_addr_number); |
+ |
+ UdpTransport send_transport(message_loop.message_loop_proxy(), |
+ net::IPEndPoint(local_addr_number, 2344), |
+ net::IPEndPoint(local_addr_number, 2345)); |
+ UdpTransport recv_transport(message_loop.message_loop_proxy(), |
+ net::IPEndPoint(local_addr_number, 2345), |
+ net::IPEndPoint(empty_addr_number, 0)); |
+ |
+ Packet packet; |
+ packet.push_back('t'); |
+ packet.push_back('e'); |
+ packet.push_back('s'); |
+ packet.push_back('t'); |
+ |
+ base::RunLoop run_loop; |
+ scoped_refptr<MockPacketReceiver> receiver1 = new MockPacketReceiver( |
+ run_loop.QuitClosure()); |
+ scoped_refptr<MockPacketReceiver> receiver2 = new MockPacketReceiver( |
+ base::Bind(&SendPacket, &recv_transport, packet)); |
+ send_transport.StartReceiving(receiver1); |
+ recv_transport.StartReceiving(receiver2); |
+ |
+ send_transport.SendPacket(packet); |
+ run_loop.Run(); |
+ EXPECT_TRUE(std::equal(packet.begin(), |
+ packet.end(), |
+ receiver1->packet().begin())); |
+ EXPECT_TRUE(std::equal(packet.begin(), |
+ packet.end(), |
+ receiver2->packet().begin())); |
+} |
+ |
+} // namespace transport |
+} // namespace cast |
+} // namespace media |