From 5d5559793247e0190e363e4a8776c86c11cb965f Mon Sep 17 00:00:00 2001 From: Artem Titov Date: Thu, 12 Nov 2020 16:15:44 +0100 Subject: [PATCH] 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 Commit-Queue: Artem Titov Cr-Commit-Position: refs/heads/master@{#32596} --- test/network/network_emulation.cc | 6 +++++- test/network/network_emulation_unittest.cc | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/test/network/network_emulation.cc b/test/network/network_emulation.cc index b969dfce38..bf6c0683d4 100644 --- a/test/network/network_emulation.cc +++ b/test/network/network_emulation.cc @@ -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)); + } }); } diff --git a/test/network/network_emulation_unittest.cc b/test/network/network_emulation_unittest.cc index 6b5ca7656b..476906fc87 100644 --- a/test/network/network_emulation_unittest.cc +++ b/test/network/network_emulation_unittest.cc @@ -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