Add support for loopback route on emulated endpoints

Bug: b/172995851
Change-Id: I70b5ec6cd84784dcc452e8f96a02f4be849fa0f7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/192920
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32596}
This commit is contained in:
Artem Titov
2020-11-12 16:15:44 +01:00
committed by Commit Bot
parent 40e2a6830a
commit 5d55597932
2 changed files with 19 additions and 1 deletions

View File

@ -469,7 +469,11 @@ void EmulatedEndpointImpl::SendPacket(const rtc::SocketAddress& from,
packet.arrival_time, clock_->CurrentTime(), packet.to.ipaddr(),
DataSize::Bytes(packet.ip_packet_size()), stats_gathering_mode_);
router_.OnPacketReceived(std::move(packet));
if (packet.to.ipaddr() == peer_local_addr_) {
OnPacketReceived(std::move(packet));
} else {
router_.OnPacketReceived(std::move(packet));
}
});
}

View File

@ -554,5 +554,19 @@ TEST_F(NetworkEmulationManagerThreeNodesRoutingTest,
SendPacketsAndValidateDelivery();
}
TEST(NetworkEmulationManagerTest, EndpointLoopback) {
NetworkEmulationManagerImpl network_manager(TimeMode::kSimulated);
auto endpoint = network_manager.CreateEndpoint(EmulatedEndpointConfig());
MockReceiver receiver;
EXPECT_CALL(receiver, OnPacketReceived(::testing::_)).Times(1);
ASSERT_EQ(endpoint->BindReceiver(80, &receiver), 80);
endpoint->SendPacket(rtc::SocketAddress(endpoint->GetPeerLocalAddress(), 80),
rtc::SocketAddress(endpoint->GetPeerLocalAddress(), 80),
"Hello");
network_manager.time_controller()->AdvanceTime(TimeDelta::Seconds(1));
}
} // namespace test
} // namespace webrtc