OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2007 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2007 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include <memory> | 11 #include <memory> |
12 | 12 |
13 #include "webrtc/base/socket_unittest.h" | 13 #include "webrtc/base/socket_unittest.h" |
14 | 14 |
15 #include "webrtc/base/arraysize.h" | 15 #include "webrtc/base/arraysize.h" |
| 16 #include "webrtc/base/asyncudpsocket.h" |
16 #include "webrtc/base/buffer.h" | 17 #include "webrtc/base/buffer.h" |
17 #include "webrtc/base/asyncudpsocket.h" | |
18 #include "webrtc/base/gunit.h" | 18 #include "webrtc/base/gunit.h" |
19 #include "webrtc/base/nethelpers.h" | 19 #include "webrtc/base/nethelpers.h" |
| 20 #include "webrtc/base/ptr_util.h" |
20 #include "webrtc/base/socketserver.h" | 21 #include "webrtc/base/socketserver.h" |
21 #include "webrtc/base/testclient.h" | 22 #include "webrtc/base/testclient.h" |
22 #include "webrtc/base/testutils.h" | 23 #include "webrtc/base/testutils.h" |
23 #include "webrtc/base/thread.h" | 24 #include "webrtc/base/thread.h" |
24 | 25 |
25 namespace rtc { | 26 namespace rtc { |
26 | 27 |
27 using webrtc::testing::SSE_CLOSE; | 28 using webrtc::testing::SSE_CLOSE; |
28 using webrtc::testing::SSE_ERROR; | 29 using webrtc::testing::SSE_ERROR; |
29 using webrtc::testing::SSE_OPEN; | 30 using webrtc::testing::SSE_OPEN; |
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 EXPECT_EQ(0, socket->Bind(SocketAddress(loopback, 0))); | 897 EXPECT_EQ(0, socket->Bind(SocketAddress(loopback, 0))); |
897 SocketAddress addr1 = socket->GetLocalAddress(); | 898 SocketAddress addr1 = socket->GetLocalAddress(); |
898 EXPECT_EQ(0, socket->Connect(addr1)); | 899 EXPECT_EQ(0, socket->Connect(addr1)); |
899 EXPECT_EQ(AsyncSocket::CS_CONNECTED, socket->GetState()); | 900 EXPECT_EQ(AsyncSocket::CS_CONNECTED, socket->GetState()); |
900 socket->Close(); | 901 socket->Close(); |
901 EXPECT_EQ(AsyncSocket::CS_CLOSED, socket->GetState()); | 902 EXPECT_EQ(AsyncSocket::CS_CLOSED, socket->GetState()); |
902 delete socket; | 903 delete socket; |
903 | 904 |
904 // Test send/receive behavior. | 905 // Test send/receive behavior. |
905 std::unique_ptr<TestClient> client1( | 906 std::unique_ptr<TestClient> client1( |
906 new TestClient(AsyncUDPSocket::Create(ss_, addr1))); | 907 new TestClient(WrapUnique(AsyncUDPSocket::Create(ss_, addr1)))); |
907 std::unique_ptr<TestClient> client2( | 908 std::unique_ptr<TestClient> client2( |
908 new TestClient(AsyncUDPSocket::Create(ss_, empty))); | 909 new TestClient(WrapUnique(AsyncUDPSocket::Create(ss_, empty)))); |
909 | 910 |
910 SocketAddress addr2; | 911 SocketAddress addr2; |
911 EXPECT_EQ(3, client2->SendTo("foo", 3, addr1)); | 912 EXPECT_EQ(3, client2->SendTo("foo", 3, addr1)); |
912 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &addr2)); | 913 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &addr2)); |
913 | 914 |
914 SocketAddress addr3; | 915 SocketAddress addr3; |
915 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, addr2)); | 916 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, addr2)); |
916 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &addr3)); | 917 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &addr3)); |
917 EXPECT_EQ(addr3, addr1); | 918 EXPECT_EQ(addr3, addr1); |
918 // TODO: figure out what the intent is here | 919 // TODO: figure out what the intent is here |
919 for (int i = 0; i < 10; ++i) { | 920 for (int i = 0; i < 10; ++i) { |
920 client2.reset(new TestClient(AsyncUDPSocket::Create(ss_, empty))); | 921 client2.reset( |
| 922 new TestClient(WrapUnique(AsyncUDPSocket::Create(ss_, empty)))); |
921 | 923 |
922 SocketAddress addr4; | 924 SocketAddress addr4; |
923 EXPECT_EQ(3, client2->SendTo("foo", 3, addr1)); | 925 EXPECT_EQ(3, client2->SendTo("foo", 3, addr1)); |
924 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &addr4)); | 926 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &addr4)); |
925 EXPECT_EQ(addr4.ipaddr(), addr2.ipaddr()); | 927 EXPECT_EQ(addr4.ipaddr(), addr2.ipaddr()); |
926 | 928 |
927 SocketAddress addr5; | 929 SocketAddress addr5; |
928 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, addr4)); | 930 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, addr4)); |
929 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &addr5)); | 931 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &addr5)); |
930 EXPECT_EQ(addr5, addr1); | 932 EXPECT_EQ(addr5, addr1); |
931 | 933 |
932 addr2 = addr4; | 934 addr2 = addr4; |
933 } | 935 } |
934 } | 936 } |
935 | 937 |
936 void SocketTest::UdpReadyToSend(const IPAddress& loopback) { | 938 void SocketTest::UdpReadyToSend(const IPAddress& loopback) { |
937 SocketAddress empty = EmptySocketAddressWithFamily(loopback.family()); | 939 SocketAddress empty = EmptySocketAddressWithFamily(loopback.family()); |
938 // RFC 5737 - The blocks 192.0.2.0/24 (TEST-NET-1) ... are provided for use in | 940 // RFC 5737 - The blocks 192.0.2.0/24 (TEST-NET-1) ... are provided for use in |
939 // documentation. | 941 // documentation. |
940 // RFC 3849 - 2001:DB8::/32 as a documentation-only prefix. | 942 // RFC 3849 - 2001:DB8::/32 as a documentation-only prefix. |
941 std::string dest = (loopback.family() == AF_INET6) ? | 943 std::string dest = (loopback.family() == AF_INET6) ? |
942 "2001:db8::1" : "192.0.2.0"; | 944 "2001:db8::1" : "192.0.2.0"; |
943 SocketAddress test_addr(dest, 2345); | 945 SocketAddress test_addr(dest, 2345); |
944 | 946 |
945 // Test send | 947 // Test send |
946 std::unique_ptr<TestClient> client( | 948 std::unique_ptr<TestClient> client( |
947 new TestClient(AsyncUDPSocket::Create(ss_, empty))); | 949 new TestClient(WrapUnique(AsyncUDPSocket::Create(ss_, empty)))); |
948 int test_packet_size = 1200; | 950 int test_packet_size = 1200; |
949 std::unique_ptr<char[]> test_packet(new char[test_packet_size]); | 951 std::unique_ptr<char[]> test_packet(new char[test_packet_size]); |
950 // Init the test packet just to avoid memcheck warning. | 952 // Init the test packet just to avoid memcheck warning. |
951 memset(test_packet.get(), 0, test_packet_size); | 953 memset(test_packet.get(), 0, test_packet_size); |
952 // Set the send buffer size to the same size as the test packet to have a | 954 // Set the send buffer size to the same size as the test packet to have a |
953 // better chance to get EWOULDBLOCK. | 955 // better chance to get EWOULDBLOCK. |
954 int send_buffer_size = test_packet_size; | 956 int send_buffer_size = test_packet_size; |
955 #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) | 957 #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) |
956 send_buffer_size /= 2; | 958 send_buffer_size /= 2; |
957 #endif | 959 #endif |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1059 socket->RecvFrom(buffer, 3, nullptr, &recv_timestamp_2); | 1061 socket->RecvFrom(buffer, 3, nullptr, &recv_timestamp_2); |
1060 | 1062 |
1061 int64_t system_time_diff = send_time_2 - send_time_1; | 1063 int64_t system_time_diff = send_time_2 - send_time_1; |
1062 int64_t recv_timestamp_diff = recv_timestamp_2 - recv_timestamp_1; | 1064 int64_t recv_timestamp_diff = recv_timestamp_2 - recv_timestamp_1; |
1063 // Compare against the system time at the point of sending, because | 1065 // Compare against the system time at the point of sending, because |
1064 // SleepMs may not sleep for exactly the requested time. | 1066 // SleepMs may not sleep for exactly the requested time. |
1065 EXPECT_NEAR(system_time_diff, recv_timestamp_diff, 10000); | 1067 EXPECT_NEAR(system_time_diff, recv_timestamp_diff, 10000); |
1066 } | 1068 } |
1067 | 1069 |
1068 } // namespace rtc | 1070 } // namespace rtc |
OLD | NEW |