Delete AsyncSocket class, merge into Socket class
Bug: webrtc:13065 Change-Id: I13afee2386ea9c4de0e4fa95133f0c4d3ec826e8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227031 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34787}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
45b3e530cb
commit
d0b8879770
@ -19,7 +19,6 @@
|
||||
#include "absl/memory/memory.h"
|
||||
#include "rtc_base/arraysize.h"
|
||||
#include "rtc_base/async_packet_socket.h"
|
||||
#include "rtc_base/async_socket.h"
|
||||
#include "rtc_base/async_udp_socket.h"
|
||||
#include "rtc_base/buffer.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
@ -242,19 +241,19 @@ void SocketTest::ConnectInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
EXPECT_EQ(AsyncSocket::CS_CLOSED, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CLOSED, client->GetState());
|
||||
EXPECT_TRUE(IsUnspecOrEmptyIP(client->GetLocalAddress().ipaddr()));
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTING, server->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTING, server->GetState());
|
||||
|
||||
// Ensure no pending server connections, since we haven't done anything yet.
|
||||
EXPECT_FALSE(sink.Check(server.get(), SSE_READ));
|
||||
@ -267,24 +266,24 @@ void SocketTest::ConnectInternal(const IPAddress& loopback) {
|
||||
EXPECT_NE(server->GetLocalAddress(), client->GetLocalAddress());
|
||||
|
||||
// Client is connecting, outcome not yet determined.
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTING, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTING, client->GetState());
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
|
||||
// Server has pending connection, accept it.
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
EXPECT_FALSE(accept_addr.IsNil());
|
||||
EXPECT_EQ(accepted->GetRemoteAddress(), accept_addr);
|
||||
|
||||
// Connected from server perspective, check the addresses are correct.
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(server->GetLocalAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(client->GetLocalAddress(), accepted->GetRemoteAddress());
|
||||
|
||||
// Connected from client perspective, check the addresses are correct.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
|
||||
@ -297,13 +296,13 @@ void SocketTest::ConnectWithDnsLookupInternal(const IPAddress& loopback,
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -316,24 +315,24 @@ void SocketTest::ConnectWithDnsLookupInternal(const IPAddress& loopback,
|
||||
// EXPECT_NE(kEmptyAddr, client->GetLocalAddress()); // Implicit Bind
|
||||
|
||||
// Client is connecting, outcome not yet determined.
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTING, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTING, client->GetState());
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
|
||||
// Server has pending connection, accept it.
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
EXPECT_FALSE(accept_addr.IsNil());
|
||||
EXPECT_EQ(accepted->GetRemoteAddress(), accept_addr);
|
||||
|
||||
// Connected from server perspective, check the addresses are correct.
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(server->GetLocalAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(client->GetLocalAddress(), accepted->GetRemoteAddress());
|
||||
|
||||
// Connected from client perspective, check the addresses are correct.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
|
||||
@ -345,13 +344,13 @@ void SocketTest::ConnectFailInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server, but don't listen yet.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
|
||||
@ -362,7 +361,7 @@ void SocketTest::ConnectFailInternal(const IPAddress& loopback) {
|
||||
EXPECT_EQ(0, client->Connect(bogus_addr));
|
||||
|
||||
// Wait for connection to fail (ECONNREFUSED).
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR));
|
||||
EXPECT_TRUE(client->GetRemoteAddress().IsNil());
|
||||
@ -378,13 +377,13 @@ void SocketTest::ConnectWithDnsLookupFailInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server, but don't listen yet.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
|
||||
@ -396,15 +395,14 @@ void SocketTest::ConnectWithDnsLookupFailInternal(const IPAddress& loopback) {
|
||||
|
||||
// Wait for connection to fail (EHOSTNOTFOUND).
|
||||
bool dns_lookup_finished = false;
|
||||
WAIT_(client->GetState() == AsyncSocket::CS_CLOSED, kTimeout,
|
||||
dns_lookup_finished);
|
||||
WAIT_(client->GetState() == Socket::CS_CLOSED, kTimeout, dns_lookup_finished);
|
||||
if (!dns_lookup_finished) {
|
||||
RTC_LOG(LS_WARNING) << "Skipping test; DNS resolution took longer than 5 "
|
||||
"seconds.";
|
||||
return;
|
||||
}
|
||||
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR));
|
||||
EXPECT_TRUE(client->GetRemoteAddress().IsNil());
|
||||
@ -416,35 +414,35 @@ void SocketTest::ConnectWithDnsLookupFailInternal(const IPAddress& loopback) {
|
||||
|
||||
void SocketTest::ConnectWithClosedSocketInternal(const IPAddress& loopback) {
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
|
||||
// Create a client and put in to CS_CLOSED state.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
EXPECT_EQ(0, client->Close());
|
||||
EXPECT_EQ(AsyncSocket::CS_CLOSED, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CLOSED, client->GetState());
|
||||
|
||||
// Connect() should reinitialize the socket, and put it in to CS_CONNECTING.
|
||||
EXPECT_EQ(0, client->Connect(SocketAddress(server->GetLocalAddress())));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTING, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTING, client->GetState());
|
||||
}
|
||||
|
||||
void SocketTest::ConnectWhileNotClosedInternal(const IPAddress& loopback) {
|
||||
// Create server and listen.
|
||||
StreamSink sink;
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
// Create client, connect.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
EXPECT_EQ(0, client->Connect(SocketAddress(server->GetLocalAddress())));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTING, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTING, client->GetState());
|
||||
// Try to connect again. Should fail, but not interfere with original attempt.
|
||||
EXPECT_EQ(SOCKET_ERROR,
|
||||
client->Connect(SocketAddress(server->GetLocalAddress())));
|
||||
@ -452,15 +450,15 @@ void SocketTest::ConnectWhileNotClosedInternal(const IPAddress& loopback) {
|
||||
// Accept the original connection.
|
||||
SocketAddress accept_addr;
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
EXPECT_FALSE(accept_addr.IsNil());
|
||||
|
||||
// Check the states and addresses.
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(server->GetLocalAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(client->GetLocalAddress(), accepted->GetRemoteAddress());
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
|
||||
EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress());
|
||||
|
||||
@ -468,8 +466,8 @@ void SocketTest::ConnectWhileNotClosedInternal(const IPAddress& loopback) {
|
||||
// Shouldn't break anything.
|
||||
EXPECT_EQ(SOCKET_ERROR, client->Connect(SocketAddress(
|
||||
"localhost", server->GetLocalAddress().port())));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, client->GetState());
|
||||
EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
|
||||
EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress());
|
||||
}
|
||||
@ -478,13 +476,13 @@ void SocketTest::ServerCloseDuringConnectInternal(const IPAddress& loopback) {
|
||||
StreamSink sink;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -497,7 +495,7 @@ void SocketTest::ServerCloseDuringConnectInternal(const IPAddress& loopback) {
|
||||
server->Close();
|
||||
|
||||
// This should fail the connection for the client. Clean up.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR));
|
||||
client->Close();
|
||||
}
|
||||
@ -507,13 +505,13 @@ void SocketTest::ClientCloseDuringConnectInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -526,13 +524,13 @@ void SocketTest::ClientCloseDuringConnectInternal(const IPAddress& loopback) {
|
||||
client->Close();
|
||||
|
||||
// The connection should still be able to be accepted.
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
sink.Monitor(accepted.get());
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, accepted->GetState());
|
||||
|
||||
// The accepted socket should then close (possibly with err, timing-related)
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, accepted->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, accepted->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(accepted.get(), SSE_CLOSE) ||
|
||||
sink.Check(accepted.get(), SSE_ERROR));
|
||||
|
||||
@ -545,13 +543,13 @@ void SocketTest::ServerCloseInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -561,12 +559,12 @@ void SocketTest::ServerCloseInternal(const IPAddress& loopback) {
|
||||
|
||||
// Accept connection.
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
sink.Monitor(accepted.get());
|
||||
|
||||
// Both sides are now connected.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(accepted->GetRemoteAddress(), client->GetLocalAddress());
|
||||
@ -574,12 +572,12 @@ void SocketTest::ServerCloseInternal(const IPAddress& loopback) {
|
||||
// Send data to the client, and then close the connection.
|
||||
EXPECT_EQ(1, accepted->Send("a", 1));
|
||||
accepted->Close();
|
||||
EXPECT_EQ(AsyncSocket::CS_CLOSED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CLOSED, accepted->GetState());
|
||||
|
||||
// Expect that the client is notified, and has not yet closed.
|
||||
EXPECT_TRUE_WAIT(sink.Check(client.get(), SSE_READ), kTimeout);
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, client->GetState());
|
||||
|
||||
// Ensure the data can be read.
|
||||
char buffer[10];
|
||||
@ -587,7 +585,7 @@ void SocketTest::ServerCloseInternal(const IPAddress& loopback) {
|
||||
EXPECT_EQ('a', buffer[0]);
|
||||
|
||||
// Now we should close, but the remote address will remain.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_FALSE(client->GetRemoteAddress().IsAnyIP());
|
||||
|
||||
@ -607,7 +605,7 @@ void SocketTest::ServerCloseInternal(const IPAddress& loopback) {
|
||||
|
||||
class SocketCloser : public sigslot::has_slots<> {
|
||||
public:
|
||||
void OnClose(AsyncSocket* socket, int error) {
|
||||
void OnClose(Socket* socket, int error) {
|
||||
socket->Close(); // Deleting here would blow up the vector of handlers
|
||||
// for the socket's signal.
|
||||
}
|
||||
@ -619,14 +617,14 @@ void SocketTest::CloseInClosedCallbackInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
client->SignalCloseEvent.connect(&closer, &SocketCloser::OnClose);
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -636,26 +634,26 @@ void SocketTest::CloseInClosedCallbackInternal(const IPAddress& loopback) {
|
||||
|
||||
// Accept connection.
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
sink.Monitor(accepted.get());
|
||||
|
||||
// Both sides are now connected.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(accepted->GetRemoteAddress(), client->GetLocalAddress());
|
||||
|
||||
// Send data to the client, and then close the connection.
|
||||
accepted->Close();
|
||||
EXPECT_EQ(AsyncSocket::CS_CLOSED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CLOSED, accepted->GetState());
|
||||
|
||||
// Expect that the client is notified, and has not yet closed.
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, client->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, client->GetState());
|
||||
|
||||
// Now we should be closed and invalidated
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_TRUE(Socket::CS_CLOSED == client->GetState());
|
||||
}
|
||||
@ -663,25 +661,25 @@ void SocketTest::CloseInClosedCallbackInternal(const IPAddress& loopback) {
|
||||
// Helper class specifically for the test below.
|
||||
class SocketDeleter : public sigslot::has_slots<> {
|
||||
public:
|
||||
explicit SocketDeleter(std::unique_ptr<AsyncSocket> socket)
|
||||
explicit SocketDeleter(std::unique_ptr<Socket> socket)
|
||||
: socket_(std::move(socket)) {}
|
||||
|
||||
void Delete(AsyncSocket* other) { socket_.reset(); }
|
||||
void Delete(Socket* other) { socket_.reset(); }
|
||||
|
||||
bool deleted() const { return socket_ == nullptr; }
|
||||
|
||||
private:
|
||||
std::unique_ptr<AsyncSocket> socket_;
|
||||
std::unique_ptr<Socket> socket_;
|
||||
};
|
||||
|
||||
// Tested deleting a socket within another socket's read callback. A previous
|
||||
// iteration of the select loop failed in this situation, if both sockets
|
||||
// became readable at the same time.
|
||||
void SocketTest::DeleteInReadCallbackInternal(const IPAddress& loopback) {
|
||||
std::unique_ptr<AsyncSocket> socket1(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_DGRAM));
|
||||
std::unique_ptr<AsyncSocket> socket2(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_DGRAM));
|
||||
std::unique_ptr<Socket> socket1(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_DGRAM));
|
||||
std::unique_ptr<Socket> socket2(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_DGRAM));
|
||||
EXPECT_EQ(0, socket1->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, socket2->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(3, socket1->SendTo("foo", 3, socket1->GetLocalAddress()));
|
||||
@ -706,10 +704,10 @@ void SocketTest::SocketServerWaitInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create & connect server and client sockets.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
@ -718,14 +716,14 @@ void SocketTest::SocketServerWaitInternal(const IPAddress& loopback) {
|
||||
EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
sink.Monitor(accepted.get());
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, accepted->GetState());
|
||||
EXPECT_EQ(server->GetLocalAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(client->GetLocalAddress(), accepted->GetRemoteAddress());
|
||||
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
|
||||
EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
|
||||
@ -742,7 +740,7 @@ void SocketTest::SocketServerWaitInternal(const IPAddress& loopback) {
|
||||
std::unique_ptr<Thread> thread(Thread::CreateWithSocketServer());
|
||||
thread->Start();
|
||||
Sleeper sleeper;
|
||||
TypedMessageData<AsyncSocket*> data(client.get());
|
||||
TypedMessageData<Socket*> data(client.get());
|
||||
thread->Send(RTC_FROM_HERE, &sleeper, 0, &data);
|
||||
EXPECT_FALSE(sink.Check(accepted.get(), SSE_READ));
|
||||
|
||||
@ -758,13 +756,13 @@ void SocketTest::TcpInternal(const IPAddress& loopback,
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create receiving client.
|
||||
std::unique_ptr<AsyncSocket> receiver(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> receiver(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(receiver.get());
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -774,12 +772,12 @@ void SocketTest::TcpInternal(const IPAddress& loopback,
|
||||
|
||||
// Accept connection which will be used for sending.
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> sender(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> sender(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(sender);
|
||||
sink.Monitor(sender.get());
|
||||
|
||||
// Both sides are now connected.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, receiver->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, receiver->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(receiver.get(), SSE_OPEN));
|
||||
EXPECT_EQ(receiver->GetRemoteAddress(), sender->GetLocalAddress());
|
||||
EXPECT_EQ(sender->GetRemoteAddress(), receiver->GetLocalAddress());
|
||||
@ -874,7 +872,7 @@ void SocketTest::TcpInternal(const IPAddress& loopback,
|
||||
|
||||
// Close down.
|
||||
sender->Close();
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CLOSED, receiver->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CLOSED, receiver->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(receiver.get(), SSE_CLOSE));
|
||||
receiver->Close();
|
||||
}
|
||||
@ -884,13 +882,13 @@ void SocketTest::SingleFlowControlCallbackInternal(const IPAddress& loopback) {
|
||||
SocketAddress accept_addr;
|
||||
|
||||
// Create client.
|
||||
std::unique_ptr<AsyncSocket> client(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> client(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(client.get());
|
||||
|
||||
// Create server and listen.
|
||||
std::unique_ptr<AsyncSocket> server(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
|
||||
std::unique_ptr<Socket> server(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_STREAM));
|
||||
sink.Monitor(server.get());
|
||||
EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
|
||||
EXPECT_EQ(0, server->Listen(5));
|
||||
@ -900,12 +898,12 @@ void SocketTest::SingleFlowControlCallbackInternal(const IPAddress& loopback) {
|
||||
|
||||
// Accept connection.
|
||||
EXPECT_TRUE_WAIT((sink.Check(server.get(), SSE_READ)), kTimeout);
|
||||
std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
|
||||
std::unique_ptr<Socket> accepted(server->Accept(&accept_addr));
|
||||
ASSERT_TRUE(accepted);
|
||||
sink.Monitor(accepted.get());
|
||||
|
||||
// Both sides are now connected.
|
||||
EXPECT_EQ_WAIT(AsyncSocket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_EQ_WAIT(Socket::CS_CONNECTED, client->GetState(), kTimeout);
|
||||
EXPECT_TRUE(sink.Check(client.get(), SSE_OPEN));
|
||||
EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress());
|
||||
EXPECT_EQ(accepted->GetRemoteAddress(), client->GetLocalAddress());
|
||||
@ -951,14 +949,14 @@ void SocketTest::SingleFlowControlCallbackInternal(const IPAddress& loopback) {
|
||||
void SocketTest::UdpInternal(const IPAddress& loopback) {
|
||||
SocketAddress empty = EmptySocketAddressWithFamily(loopback.family());
|
||||
// Test basic bind and connect behavior.
|
||||
AsyncSocket* socket = ss_->CreateAsyncSocket(loopback.family(), SOCK_DGRAM);
|
||||
EXPECT_EQ(AsyncSocket::CS_CLOSED, socket->GetState());
|
||||
Socket* socket = ss_->CreateSocket(loopback.family(), SOCK_DGRAM);
|
||||
EXPECT_EQ(Socket::CS_CLOSED, socket->GetState());
|
||||
EXPECT_EQ(0, socket->Bind(SocketAddress(loopback, 0)));
|
||||
SocketAddress addr1 = socket->GetLocalAddress();
|
||||
EXPECT_EQ(0, socket->Connect(addr1));
|
||||
EXPECT_EQ(AsyncSocket::CS_CONNECTED, socket->GetState());
|
||||
EXPECT_EQ(Socket::CS_CONNECTED, socket->GetState());
|
||||
socket->Close();
|
||||
EXPECT_EQ(AsyncSocket::CS_CLOSED, socket->GetState());
|
||||
EXPECT_EQ(Socket::CS_CLOSED, socket->GetState());
|
||||
delete socket;
|
||||
|
||||
// Test send/receive behavior.
|
||||
@ -1041,8 +1039,8 @@ void SocketTest::UdpReadyToSend(const IPAddress& loopback) {
|
||||
}
|
||||
|
||||
void SocketTest::GetSetOptionsInternal(const IPAddress& loopback) {
|
||||
std::unique_ptr<AsyncSocket> socket(
|
||||
ss_->CreateAsyncSocket(loopback.family(), SOCK_DGRAM));
|
||||
std::unique_ptr<Socket> socket(
|
||||
ss_->CreateSocket(loopback.family(), SOCK_DGRAM));
|
||||
socket->Bind(SocketAddress(loopback, 0));
|
||||
|
||||
// Check SNDBUF/RCVBUF.
|
||||
|
||||
Reference in New Issue
Block a user