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