Remove the incremental IP address behavior from virtualsocketserver

VirtualSocketServer, when binding to any address (all 0s), will assign a unique IP address by incrementing the IP address, resulted in 0.0.0.1. However, this breaks the testing of 4276 where we bind to all 0s and expect the local address should remain all 0s.

BUG=4276
R=pthatcher@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/35189004

Cr-Commit-Position: refs/heads/master@{#8370}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8370 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
guoweis@webrtc.org 2015-02-14 00:43:41 +00:00
parent 3341b401cc
commit d3b453be17
2 changed files with 34 additions and 31 deletions

View File

@ -130,8 +130,8 @@ class VirtualSocketServerTest : public testing::Test {
kIPv6AnyAddress(IPAddress(in6addr_any), 0) {
}
void CheckAddressIncrementalization(const SocketAddress& post,
const SocketAddress& pre) {
void CheckPortIncrementalization(const SocketAddress& post,
const SocketAddress& pre) {
EXPECT_EQ(post.port(), pre.port() + 1);
IPAddress post_ip = post.ipaddr();
IPAddress pre_ip = pre.ipaddr();
@ -139,14 +139,13 @@ class VirtualSocketServerTest : public testing::Test {
if (post_ip.family() == AF_INET) {
in_addr pre_ipv4 = pre_ip.ipv4_address();
in_addr post_ipv4 = post_ip.ipv4_address();
int difference = ntohl(post_ipv4.s_addr) - ntohl(pre_ipv4.s_addr);
EXPECT_EQ(1, difference);
EXPECT_EQ(post_ipv4.s_addr, pre_ipv4.s_addr);
} else if (post_ip.family() == AF_INET6) {
in6_addr post_ip6 = post_ip.ipv6_address();
in6_addr pre_ip6 = pre_ip.ipv6_address();
uint32* post_as_ints = reinterpret_cast<uint32*>(&post_ip6.s6_addr);
uint32* pre_as_ints = reinterpret_cast<uint32*>(&pre_ip6.s6_addr);
EXPECT_EQ(post_as_ints[3], pre_as_ints[3] + 1);
EXPECT_EQ(post_as_ints[3], pre_as_ints[3]);
}
}
@ -179,7 +178,7 @@ class VirtualSocketServerTest : public testing::Test {
SocketAddress next_client2_addr;
EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr));
EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &next_client2_addr));
CheckAddressIncrementalization(next_client2_addr, client2_addr);
CheckPortIncrementalization(next_client2_addr, client2_addr);
// EXPECT_EQ(next_client2_addr.port(), client2_addr.port() + 1);
SocketAddress server_addr2;
@ -606,15 +605,16 @@ class VirtualSocketServerTest : public testing::Test {
}
}
void BandwidthTest(const SocketAddress& initial_addr) {
void BandwidthTest(const SocketAddress& send_address,
const SocketAddress& recv_address) {
AsyncSocket* send_socket =
ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM);
ss_->CreateAsyncSocket(send_address.family(), SOCK_DGRAM);
AsyncSocket* recv_socket =
ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM);
ASSERT_EQ(0, send_socket->Bind(initial_addr));
ASSERT_EQ(0, recv_socket->Bind(initial_addr));
EXPECT_EQ(send_socket->GetLocalAddress().family(), initial_addr.family());
EXPECT_EQ(recv_socket->GetLocalAddress().family(), initial_addr.family());
ss_->CreateAsyncSocket(recv_address.family(), SOCK_DGRAM);
ASSERT_EQ(0, send_socket->Bind(send_address));
ASSERT_EQ(0, recv_socket->Bind(recv_address));
EXPECT_EQ(send_socket->GetLocalAddress().family(), send_address.family());
EXPECT_EQ(recv_socket->GetLocalAddress().family(), recv_address.family());
ASSERT_EQ(0, send_socket->Connect(recv_socket->GetLocalAddress()));
uint32 bandwidth = 64 * 1024;
@ -634,7 +634,8 @@ class VirtualSocketServerTest : public testing::Test {
ss_->set_bandwidth(0);
}
void DelayTest(const SocketAddress& initial_addr) {
void DelayTest(const SocketAddress& send_addr,
const SocketAddress& recv_addr) {
time_t seed = ::time(NULL);
LOG(LS_VERBOSE) << "seed = " << seed;
srand(static_cast<unsigned int>(seed));
@ -647,13 +648,13 @@ class VirtualSocketServerTest : public testing::Test {
ss_->UpdateDelayDistribution();
AsyncSocket* send_socket =
ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM);
ss_->CreateAsyncSocket(send_addr.family(), SOCK_DGRAM);
AsyncSocket* recv_socket =
ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM);
ASSERT_EQ(0, send_socket->Bind(initial_addr));
ASSERT_EQ(0, recv_socket->Bind(initial_addr));
EXPECT_EQ(send_socket->GetLocalAddress().family(), initial_addr.family());
EXPECT_EQ(recv_socket->GetLocalAddress().family(), initial_addr.family());
ss_->CreateAsyncSocket(recv_addr.family(), SOCK_DGRAM);
ASSERT_EQ(0, send_socket->Bind(send_addr));
ASSERT_EQ(0, recv_socket->Bind(recv_addr));
EXPECT_EQ(send_socket->GetLocalAddress().family(), send_addr.family());
EXPECT_EQ(recv_socket->GetLocalAddress().family(), recv_addr.family());
ASSERT_EQ(0, send_socket->Connect(recv_socket->GetLocalAddress()));
Thread* pthMain = Thread::Current();
@ -835,24 +836,28 @@ TEST_F(VirtualSocketServerTest, TcpSendsPacketsInOrder_v6) {
}
TEST_F(VirtualSocketServerTest, bandwidth_v4) {
SocketAddress ipv4_test_addr(IPAddress(INADDR_ANY), 1000);
BandwidthTest(ipv4_test_addr);
SocketAddress send_address("1.1.1.1", 1000);
SocketAddress recv_address("1.1.1.2", 1000);
BandwidthTest(send_address, recv_address);
}
TEST_F(VirtualSocketServerTest, bandwidth_v6) {
SocketAddress ipv6_test_addr(IPAddress(in6addr_any), 1000);
BandwidthTest(ipv6_test_addr);
SocketAddress send_address("::1", 1000);
SocketAddress recv_address("::2", 1000);
BandwidthTest(send_address, recv_address);
}
TEST_F(VirtualSocketServerTest, delay_v4) {
SocketAddress ipv4_test_addr(IPAddress(INADDR_ANY), 1000);
DelayTest(ipv4_test_addr);
SocketAddress send_address("1.1.1.1", 1000);
SocketAddress recv_address("1.1.1.2", 1000);
DelayTest(send_address, recv_address);
}
// See: https://code.google.com/p/webrtc/issues/detail?id=2409
TEST_F(VirtualSocketServerTest, DISABLED_delay_v6) {
SocketAddress ipv6_test_addr(IPAddress(in6addr_any), 1000);
DelayTest(ipv6_test_addr);
SocketAddress send_address("::1", 1000);
SocketAddress recv_address("::2", 1000);
DelayTest(send_address, recv_address);
}
// Works, receiving socket sees 127.0.0.2.

View File

@ -623,9 +623,7 @@ int VirtualSocketServer::Bind(VirtualSocket* socket,
int VirtualSocketServer::Bind(VirtualSocket* socket, SocketAddress* addr) {
ASSERT(NULL != socket);
if (IPIsAny(addr->ipaddr())) {
addr->SetIP(GetNextIP(addr->ipaddr().family()));
} else if (!IPIsUnspec(addr->ipaddr())) {
if (!IPIsUnspec(addr->ipaddr())) {
addr->SetIP(addr->ipaddr().Normalized());
} else {
ASSERT(false);