From 1f4f672687861cae29259dd0c652d58de373dcac Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Mon, 10 Oct 2022 09:24:21 +0000 Subject: [PATCH] Add test for StunMessage::ValidateMessageIntegrity This also tests the UMA stats newly added to it. Bug: chromium:1177125 Change-Id: I89bb17c1897565cd91ea5bbd92062018317738ca Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/278600 Reviewed-by: Johannes Kron Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#38345} --- api/transport/BUILD.gn | 1 + api/transport/stun_unittest.cc | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn index c3f6f9fa83..3cc3559f30 100644 --- a/api/transport/BUILD.gn +++ b/api/transport/BUILD.gn @@ -146,6 +146,7 @@ if (rtc_include_tests) { "../../rtc_base:byte_order", "../../rtc_base:macromagic", "../../rtc_base:socket_address", + "../../system_wrappers:metrics", "../../test:test_support", "//testing/gtest", ] diff --git a/api/transport/stun_unittest.cc b/api/transport/stun_unittest.cc index 54f91c522c..a7315404e7 100644 --- a/api/transport/stun_unittest.cc +++ b/api/transport/stun_unittest.cc @@ -20,6 +20,7 @@ #include "rtc_base/byte_buffer.h" #include "rtc_base/byte_order.h" #include "rtc_base/socket_address.h" +#include "system_wrappers/include/metrics.h" #include "test/gtest.h" namespace cricket { @@ -1855,4 +1856,26 @@ TEST_F(StunTest, SizeRestrictionOnAttributes) { ASSERT_FALSE(msg.Write(&out)); } +TEST_F(StunTest, ValidateMessageIntegrityWithParser) { + // Try the messages from RFC 5769. + StunMessage message; + rtc::ByteBufferReader reader( + reinterpret_cast(kRfc5769SampleRequest), + sizeof(kRfc5769SampleRequest)); + EXPECT_TRUE(message.Read(&reader)); + EXPECT_EQ(message.ValidateMessageIntegrity(kRfc5769SampleMsgPassword), + StunMessage::IntegrityStatus::kIntegrityOk); + EXPECT_EQ(webrtc::metrics::NumEvents( + "WebRTC.Stun.Integrity.Request", + static_cast(StunMessage::IntegrityStatus::kIntegrityOk)), + 1); + EXPECT_EQ(message.ValidateMessageIntegrity("Invalid password"), + StunMessage::IntegrityStatus::kIntegrityBad); + EXPECT_EQ(webrtc::metrics::NumEvents( + "WebRTC.Stun.Integrity.Request", + static_cast(StunMessage::IntegrityStatus::kIntegrityBad)), + 1); + EXPECT_EQ(webrtc::metrics::NumSamples("WebRTC.Stun.Integrity.Request"), 2); +} + } // namespace cricket