Use fake clock for SSLStreamAdapter unit tests

BUG=webrtc:375552698

Change-Id: I2859b6220194ff747637a9a3870c5b8979c83ca8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/366940
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@meta.com>
Cr-Commit-Position: refs/heads/main@{#43333}
This commit is contained in:
Philipp Hancke 2024-10-28 18:01:38 +01:00 committed by WebRTC LUCI CQ
parent dd493e56a4
commit 130bdcea7e

View File

@ -583,20 +583,19 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
// Now run the handshake // Now run the handshake
if (expect_success) { if (expect_success) {
EXPECT_TRUE_WAIT((client_ssl_->GetState() == rtc::SS_OPEN) && EXPECT_TRUE_SIMULATED_WAIT((client_ssl_->GetState() == rtc::SS_OPEN) &&
(server_ssl_->GetState() == rtc::SS_OPEN), (server_ssl_->GetState() == rtc::SS_OPEN),
handshake_wait_); handshake_wait_, clock_);
} else { } else {
EXPECT_TRUE_WAIT(client_ssl_->GetState() == rtc::SS_CLOSED, EXPECT_TRUE_SIMULATED_WAIT(client_ssl_->GetState() == rtc::SS_CLOSED,
handshake_wait_); handshake_wait_, clock_);
} }
} }
// This tests that we give up after 12 DTLS resends. // This tests that we give up after 12 DTLS resends.
// Only works for BoringSSL which allows advancing the fake clock. // Only works for BoringSSL which allows advancing the fake clock.
void TestHandshakeTimeout() { void TestHandshakeTimeout() {
rtc::ScopedFakeClock clock; int64_t time_start = clock_.TimeNanos();
int64_t time_start = clock.TimeNanos();
webrtc::TimeDelta time_increment = webrtc::TimeDelta::Millis(1000); webrtc::TimeDelta time_increment = webrtc::TimeDelta::Millis(1000);
if (!dtls_) { if (!dtls_) {
@ -624,12 +623,12 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
// Now wait for the handshake to timeout (or fail after an hour of simulated // Now wait for the handshake to timeout (or fail after an hour of simulated
// time). // time).
while (client_ssl_->GetState() == rtc::SS_OPENING && while (client_ssl_->GetState() == rtc::SS_OPENING &&
(rtc::TimeDiff(clock.TimeNanos(), time_start) < (rtc::TimeDiff(clock_.TimeNanos(), time_start) <
3600 * rtc::kNumNanosecsPerSec)) { 3600 * rtc::kNumNanosecsPerSec)) {
EXPECT_TRUE_WAIT(!((client_ssl_->GetState() == rtc::SS_OPEN) && EXPECT_TRUE_SIMULATED_WAIT(!((client_ssl_->GetState() == rtc::SS_OPEN) &&
(server_ssl_->GetState() == rtc::SS_OPEN)), (server_ssl_->GetState() == rtc::SS_OPEN)),
1000); 1000, clock_);
clock.AdvanceTime(time_increment); clock_.AdvanceTime(time_increment);
} }
EXPECT_EQ(client_ssl_->GetState(), rtc::SS_CLOSED); EXPECT_EQ(client_ssl_->GetState(), rtc::SS_CLOSED);
} }
@ -653,9 +652,9 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
ASSERT_EQ(0, client_ssl_->StartSSL()); ASSERT_EQ(0, client_ssl_->StartSSL());
// Now run the handshake. // Now run the handshake.
EXPECT_TRUE_WAIT( EXPECT_TRUE_SIMULATED_WAIT(
client_ssl_->IsTlsConnected() && server_ssl_->IsTlsConnected(), client_ssl_->IsTlsConnected() && server_ssl_->IsTlsConnected(),
handshake_wait_); handshake_wait_, clock_);
// Until the identity has been verified, the state should still be // Until the identity has been verified, the state should still be
// SS_OPENING and writes should return SR_BLOCK. // SS_OPENING and writes should return SR_BLOCK.
@ -856,6 +855,7 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
} }
rtc::AutoThread main_thread_; rtc::AutoThread main_thread_;
rtc::ScopedFakeClock clock_;
std::string client_cert_pem_; std::string client_cert_pem_;
std::string client_private_key_pem_; std::string client_private_key_pem_;
rtc::KeyParams client_key_type_; rtc::KeyParams client_key_type_;
@ -973,14 +973,15 @@ class SSLStreamAdapterTestDTLSBase : public SSLStreamAdapterTestBase {
WriteData(); WriteData();
EXPECT_TRUE_WAIT(sent_ == count_, 10000); EXPECT_TRUE_SIMULATED_WAIT(sent_ == count_, 10000, clock_);
RTC_LOG(LS_INFO) << "sent_ == " << sent_; RTC_LOG(LS_INFO) << "sent_ == " << sent_;
if (damage_) { if (damage_) {
WAIT(false, 2000); SIMULATED_WAIT(false, 2000, clock_);
EXPECT_EQ(0U, received_.size()); EXPECT_EQ(0U, received_.size());
} else if (loss_ == 0) { } else if (loss_ == 0) {
EXPECT_EQ_WAIT(static_cast<size_t>(sent_), received_.size(), 1000); EXPECT_EQ_SIMULATED_WAIT(static_cast<size_t>(sent_), received_.size(),
1000, clock_);
} else { } else {
RTC_LOG(LS_INFO) << "Sent " << sent_ << " packets; received " RTC_LOG(LS_INFO) << "Sent " << sent_ << " packets; received "
<< received_.size(); << received_.size();