Use injected clock in FakePacketTransport Bug: webrtc:42223992 Change-Id: I2b03265427c3eb8557499207de729dbd3edf85cf Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/481060 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47981}
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn index 8b41c90..1d31cbb 100644 --- a/p2p/BUILD.gn +++ b/p2p/BUILD.gn
@@ -1084,7 +1084,6 @@ "../rtc_base:ssl", "../rtc_base:ssl_adapter", "../rtc_base:threading", - "../rtc_base:timeutils", "../rtc_base/network:received_packet", "../rtc_base/network:sent_packet", "../rtc_base/synchronization:mutex",
diff --git a/p2p/base/packet_transport_internal_unittest.cc b/p2p/base/packet_transport_internal_unittest.cc index 99e6446..fa953e6 100644 --- a/p2p/base/packet_transport_internal_unittest.cc +++ b/p2p/base/packet_transport_internal_unittest.cc
@@ -16,6 +16,7 @@ #include "p2p/test/fake_packet_transport.h" #include "rtc_base/network/received_packet.h" #include "rtc_base/socket_address.h" +#include "test/create_test_environment.h" #include "test/gmock.h" #include "test/gtest.h" @@ -26,7 +27,7 @@ TEST(PacketTransportInternal, NotifyPacketReceivedPassthrougPacketToRegisteredListener) { - FakePacketTransport packet_transport("test"); + FakePacketTransport packet_transport(CreateTestEnvironment(), "test"); MockFunction<void(PacketTransportInternal*, const ReceivedIpPacket&)> receiver; @@ -44,7 +45,7 @@ } TEST(PacketTransportInternal, NotifiesOnceOnClose) { - FakePacketTransport packet_transport("test"); + FakePacketTransport packet_transport(CreateTestEnvironment(), "test"); int call_count = 0; packet_transport.SetOnCloseCallback([&]() { ++call_count; }); ASSERT_EQ(call_count, 0);
diff --git a/p2p/test/fake_packet_transport.h b/p2p/test/fake_packet_transport.h index 0a91225..6cf7260 100644 --- a/p2p/test/fake_packet_transport.h +++ b/p2p/test/fake_packet_transport.h
@@ -16,10 +16,11 @@ #include <optional> #include <string> +#include "absl/strings/string_view.h" +#include "api/environment/environment.h" #include "api/task_queue/pending_task_safety_flag.h" #include "api/task_queue/task_queue_base.h" #include "api/transport/ecn_marking.h" -#include "api/units/timestamp.h" #include "p2p/base/packet_transport_internal.h" #include "rtc_base/async_packet_socket.h" #include "rtc_base/copy_on_write_buffer.h" @@ -28,15 +29,14 @@ #include "rtc_base/network_route.h" #include "rtc_base/socket.h" #include "rtc_base/socket_address.h" -#include "rtc_base/time_utils.h" namespace webrtc { // Used to simulate a packet-based transport. class FakePacketTransport : public PacketTransportInternal { public: - explicit FakePacketTransport(const std::string& transport_name) - : transport_name_(transport_name) {} + FakePacketTransport(const Environment& env, absl::string_view transport_name) + : env_(env), transport_name_(transport_name) {} ~FakePacketTransport() override { if (dest_ && dest_->dest_ == this) { dest_->dest_ = nullptr; @@ -79,7 +79,8 @@ CopyOnWriteBuffer packet(data, len); SendPacketInternal(packet, options); - SentPacketInfo sent_packet(options.packet_id, TimeMillis()); + SentPacketInfo sent_packet(options.packet_id, + env_.clock().TimeInMilliseconds()); // Because handlers of NotifySentPacket may be sending packets, // dispatch this call to a new task. TaskQueueBase::Current()->PostTask( @@ -147,11 +148,12 @@ last_sent_packet_options_ = options; if (dest_) { dest_->NotifyPacketReceived(ReceivedIpPacket( - packet, SocketAddress(), Timestamp::Micros(TimeMicros()), + packet, SocketAddress(), env_.clock().CurrentTime(), options.ect_1 ? EcnMarking::kEct1 : EcnMarking::kNotEct)); } } + const Environment env_; CopyOnWriteBuffer last_sent_packet_; AsyncSocketPacketOptions last_sent_packet_options_; std::string transport_name_;
diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc index 5a2bd15..095e5b5 100644 --- a/pc/channel_unittest.cc +++ b/pc/channel_unittest.cc
@@ -214,11 +214,11 @@ // Based on flags, create fake DTLS or raw packet transports. if (flags1 & RAW_PACKET_TRANSPORT) { - fake_rtp_packet_transport1_.reset( - new FakePacketTransport("channel1_rtp")); + fake_rtp_packet_transport1_ = + std::make_unique<FakePacketTransport>(env_, "channel1_rtp"); if (!(flags1 & RTCP_MUX)) { - fake_rtcp_packet_transport1_.reset( - new FakePacketTransport("channel1_rtcp")); + fake_rtcp_packet_transport1_ = + std::make_unique<FakePacketTransport>(env_, "channel1_rtcp"); } } else { // Confirmed to work with KT_RSA and KT_ECDSA. @@ -239,11 +239,11 @@ } // Based on flags, create fake DTLS or raw packet transports. if (flags2 & RAW_PACKET_TRANSPORT) { - fake_rtp_packet_transport2_.reset( - new FakePacketTransport("channel2_rtp")); + fake_rtp_packet_transport2_ = + std::make_unique<FakePacketTransport>(env_, "channel2_rtp"); if (!(flags2 & RTCP_MUX)) { - fake_rtcp_packet_transport2_.reset( - new FakePacketTransport("channel2_rtcp")); + fake_rtcp_packet_transport2_ = + std::make_unique<FakePacketTransport>(env_, "channel2_rtcp"); } } else { // Confirmed to work with KT_RSA and KT_ECDSA.
diff --git a/pc/rtp_transport_unittest.cc b/pc/rtp_transport_unittest.cc index 9827f97..e7f4d38 100644 --- a/pc/rtp_transport_unittest.cc +++ b/pc/rtp_transport_unittest.cc
@@ -14,6 +14,7 @@ #include <cstdint> #include <optional> +#include "api/environment/environment.h" #include "api/rtc_error.h" #include "api/rtp_header_extension_id.h" #include "api/rtp_parameters.h" @@ -33,7 +34,7 @@ #include "rtc_base/logging.h" #include "rtc_base/network/sent_packet.h" #include "rtc_base/network_route.h" -#include "test/create_test_field_trials.h" +#include "test/create_test_environment.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/run_loop.h" @@ -112,12 +113,13 @@ }; TEST(RtpTransportTest, SettingRtcpAndRtpSignalsReady) { - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtcp("fake_rtcp"); + FakePacketTransport fake_rtcp(env, "fake_rtcp"); fake_rtcp.SetWritable(true); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetWritable(true); transport.SetRtcpPacketTransport(&fake_rtcp); // rtcp ready @@ -127,11 +129,12 @@ } TEST(RtpTransportTest, SettingRtpAndRtcpSignalsReady) { - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtcp("fake_rtcp"); + FakePacketTransport fake_rtcp(env, "fake_rtcp"); fake_rtcp.SetWritable(true); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetWritable(true); transport.SetRtpPacketTransport(&fake_rtp); // rtp ready @@ -141,9 +144,10 @@ } TEST(RtpTransportTest, SettingRtpWithRtcpMuxEnabledSignalsReady) { - RtpTransport transport(kMuxEnabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxEnabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetWritable(true); transport.SetRtpPacketTransport(&fake_rtp); // rtp ready @@ -151,9 +155,10 @@ } TEST(RtpTransportTest, DisablingRtcpMuxSignalsNotReady) { - RtpTransport transport(kMuxEnabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxEnabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetWritable(true); transport.SetRtpPacketTransport(&fake_rtp); // rtp ready @@ -164,9 +169,10 @@ } TEST(RtpTransportTest, EnablingRtcpMuxSignalsReady) { - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetWritable(true); transport.SetRtpPacketTransport(&fake_rtp); // rtp ready @@ -178,9 +184,10 @@ // Tests the SignalNetworkRoute is fired when setting a packet transport. TEST(RtpTransportTest, SetRtpTransportWithNetworkRouteChanged) { - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); EXPECT_FALSE(observer.network_route()); @@ -207,9 +214,10 @@ } TEST(RtpTransportTest, SetRtcpTransportWithNetworkRouteChanged) { - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); SignalObserver observer(&transport); - FakePacketTransport fake_rtcp("fake_rtcp"); + FakePacketTransport fake_rtcp(env, "fake_rtcp"); EXPECT_FALSE(observer.network_route()); @@ -241,9 +249,10 @@ // If the RTCP-mux is not enabled, RTCP packets are expected to be sent over // the RtcpPacketTransport. test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); - FakePacketTransport fake_rtcp("fake_rtcp"); - FakePacketTransport fake_rtp("fake_rtp"); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); + FakePacketTransport fake_rtcp(env, "fake_rtcp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); transport.SetRtcpPacketTransport(&fake_rtcp); // rtcp ready transport.SetRtpPacketTransport(&fake_rtp); // rtp ready SignalObserver observer(&transport); @@ -268,9 +277,10 @@ } TEST(RtpTransportTest, ChangingReadyToSendStateOnlySignalsWhenChanged) { - RtpTransport transport(kMuxEnabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxEnabled, env.field_trials()); TransportObserver observer(&transport); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetWritable(true); // State changes, so we should signal. @@ -292,7 +302,8 @@ TEST(RtpTransportTest, RegisterAndUnregisterRtpHeaderExtensionMap) { test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); RtpHeaderExtensions extensions1 = {RtpExtension( "urn:ietf:params:rtp-hdrext:ssrc-audio-level", RtpHeaderExtensionId(1))}; RtpHeaderExtensions extensions2 = { @@ -311,7 +322,7 @@ 0x10, 0x00, 0x00, 0x00}; CopyOnWriteBuffer rtp_packet1(kRtpData1, sizeof(kRtpData1)); RtpPacketReceived parsed_packet1; - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); TransportObserver observer(&transport); @@ -370,7 +381,8 @@ TEST(RtpTransportTest, VerifyRtpHeaderExtensionMapRejectsIdReassignment) { test::RunLoop loop; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); RtpHeaderExtensions extensions1 = {RtpExtension( "urn:ietf:params:rtp-hdrext:ssrc-audio-level", RtpHeaderExtensionId(1))}; RtpHeaderExtensions extensions2 = { @@ -396,7 +408,8 @@ TEST(RtpTransportTest, VerifyRtpHeaderExtensionMapAllowsIdReuseAfterUnregister) { test::RunLoop loop; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); RtpHeaderExtensions extensions1 = {RtpExtension( "urn:ietf:params:rtp-hdrext:ssrc-audio-level", RtpHeaderExtensionId(1))}; RtpHeaderExtensions extensions2 = { @@ -420,8 +433,9 @@ // received. TEST(RtpTransportTest, SignalDemuxedRtcp) { test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); - FakePacketTransport fake_rtp("fake_rtp"); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); TransportObserver observer(&transport); @@ -444,8 +458,9 @@ // handled payload type is received. TEST(RtpTransportTest, SignalHandledRtpPayloadType) { test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); - FakePacketTransport fake_rtp("fake_rtp"); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); TransportObserver observer(&transport); @@ -469,9 +484,10 @@ TEST(RtpTransportTest, ReceivedPacketEcnMarkingPropagatedToDemuxedPacket) { test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); // Setup FakePacketTransport to send packets to itself. - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); TransportObserver observer(&transport); @@ -494,14 +510,15 @@ TEST(RtpTransportTest, RtcpSentAsEct1IfReceivedRtpPacketAsEct1) { test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); // Setup FakePacketTransport to send packets to itself. - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); // Setup RTCP transport to send to another fake transport. - FakePacketTransport fake_rtcp_recipient("rtcp_recipient"); - FakePacketTransport fake_rtcp("fake_rtcp"); + FakePacketTransport fake_rtcp_recipient(env, "rtcp_recipient"); + FakePacketTransport fake_rtcp(env, "fake_rtcp"); fake_rtcp.SetDestination(&fake_rtcp_recipient, true); transport.SetRtcpPacketTransport(&fake_rtcp); @@ -530,8 +547,9 @@ // unhandled payload type is received. TEST(RtpTransportTest, DontSignalUnhandledRtpPayloadType) { test::RunLoop thread; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); - FakePacketTransport fake_rtp("fake_rtp"); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); TransportObserver observer(&transport); @@ -556,10 +574,11 @@ TEST(RtpTransportTest, DontChangeReadyToSendStateOnSendFailure) { // ReadyToSendState should only care about if transport is writable. test::RunLoop thread; - RtpTransport transport(kMuxEnabled, CreateTestFieldTrials()); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxEnabled, env.field_trials()); TransportObserver observer(&transport); - FakePacketTransport fake_rtp("fake_rtp"); + FakePacketTransport fake_rtp(env, "fake_rtp"); fake_rtp.SetDestination(&fake_rtp, true); transport.SetRtpPacketTransport(&fake_rtp); fake_rtp.SetWritable(true); @@ -579,8 +598,9 @@ TEST(RtpTransportTest, RecursiveOnSentPacketDoesNotCrash) { const int kShortTimeout = 100; test::RunLoop loop; - RtpTransport transport(kMuxDisabled, CreateTestFieldTrials()); - FakePacketTransport fake_rtp("fake_rtp"); + const Environment env = CreateTestEnvironment(); + RtpTransport transport(kMuxDisabled, env.field_trials()); + FakePacketTransport fake_rtp(env, "fake_rtp"); transport.SetRtpPacketTransport(&fake_rtp); fake_rtp.SetDestination(&fake_rtp, true); TransportObserver observer(&transport);
diff --git a/pc/srtp_transport_unittest.cc b/pc/srtp_transport_unittest.cc index c309973..9649c7e 100644 --- a/pc/srtp_transport_unittest.cc +++ b/pc/srtp_transport_unittest.cc
@@ -18,7 +18,7 @@ #include <utility> #include <vector> -#include "api/field_trials.h" +#include "api/environment/environment.h" #include "api/rtp_header_extension_id.h" #include "api/transport/ecn_marking.h" #include "api/units/timestamp.h" @@ -34,7 +34,7 @@ #include "rtc_base/containers/flat_set.h" #include "rtc_base/copy_on_write_buffer.h" #include "rtc_base/ssl_stream_adapter.h" -#include "test/create_test_field_trials.h" +#include "test/create_test_environment.h" #include "test/gtest.h" #include "test/run_loop.h" @@ -60,18 +60,18 @@ bool rtcp_mux_enabled = true; rtp_packet_transport1_ = - std::make_unique<FakePacketTransport>("fake_packet_transport1"); + std::make_unique<FakePacketTransport>(env_, "fake_packet_transport1"); rtp_packet_transport2_ = - std::make_unique<FakePacketTransport>("fake_packet_transport2"); + std::make_unique<FakePacketTransport>(env_, "fake_packet_transport2"); bool asymmetric = false; rtp_packet_transport1_->SetDestination(rtp_packet_transport2_.get(), asymmetric); srtp_transport1_ = - std::make_unique<SrtpTransport>(rtcp_mux_enabled, field_trials_); + std::make_unique<SrtpTransport>(rtcp_mux_enabled, env_.field_trials()); srtp_transport2_ = - std::make_unique<SrtpTransport>(rtcp_mux_enabled, field_trials_); + std::make_unique<SrtpTransport>(rtcp_mux_enabled, env_.field_trials()); srtp_transport1_->SetRtpPacketTransport(rtp_packet_transport1_.get()); srtp_transport2_->SetRtpPacketTransport(rtp_packet_transport2_.get()); @@ -282,6 +282,7 @@ encrypted_headers); } test::RunLoop main_thread; + const Environment env_ = CreateTestEnvironment(); std::unique_ptr<SrtpTransport> srtp_transport1_; std::unique_ptr<SrtpTransport> srtp_transport2_; @@ -293,7 +294,6 @@ TransportObserver rtp_sink2_; int sequence_number_ = 0; - FieldTrials field_trials_ = CreateTestFieldTrials(); }; TEST_F(SrtpTransportTest, SendAndRecvPacket_AES_CM_128_HMAC_SHA1_80) { @@ -354,12 +354,12 @@ } TEST_F(SrtpTransportTest, RemoveSrtpReceiveStream) { - FieldTrials field_trials = - CreateTestFieldTrials("WebRTC-SrtpRemoveReceiveStream/Enabled/"); - auto srtp_transport = - std::make_unique<SrtpTransport>(/*rtcp_mux_enabled=*/true, field_trials); - auto rtp_packet_transport = - std::make_unique<FakePacketTransport>("fake_packet_transport_loopback"); + Environment env = CreateTestEnvironment( + {.field_trials = "WebRTC-SrtpRemoveReceiveStream/Enabled/"}); + auto srtp_transport = std::make_unique<SrtpTransport>( + /*rtcp_mux_enabled=*/true, env.field_trials()); + auto rtp_packet_transport = std::make_unique<FakePacketTransport>( + env, "fake_packet_transport_loopback"); bool asymmetric = false; rtp_packet_transport->SetDestination(rtp_packet_transport.get(), asymmetric);