diff --git a/src/test/overlay/compression_test.cpp b/src/test/overlay/compression_test.cpp index 60cc69a14f2..3ce5ac9a41c 100644 --- a/src/test/overlay/compression_test.cpp +++ b/src/test/overlay/compression_test.cpp @@ -395,6 +395,37 @@ class compression_test : public beast::unit_test::Suite "TMValidatorListCollection"); } + void + testMtSquelchUncompressed() + { + testcase("mtSQUELCH is uncompressed"); + + //construct >70 so should be eligible for compression + auto squelch = std::make_shared(); + squelch->set_squelch(true); + // Use a large validatorPubKey to push the message over the 70-byte + // threshold that triggers compression + std::string largePubKey(256, 'A'); + squelch->set_validatorpubkey(largePubKey); + squelch->set_squelchduration(600); + + Message m(*squelch, protocol::mtSQUELCH); + + auto const& compressed = m.getBuffer(Compressed::On); + auto const& uncompressed = m.getBuffer(Compressed::Off); + + BEAST_EXPECT(compressed.size() == uncompressed.size()); + BEAST_EXPECT(compressed == uncompressed); + + log << " Uncompressed size: " << uncompressed.size() << " bytes\n"; + log << " 'Compressed' size: " << compressed.size() << " bytes\n"; + log << " Buffers are identical: " + << (compressed == uncompressed + ? "YES (mtSQUELCH is non-compressible)" + : "NO — REGRESSION") + << std::endl; + } + void testHandshake() { @@ -455,6 +486,7 @@ class compression_test : public beast::unit_test::Suite { testProtocol(); testHandshake(); + testMtSquelchUncompressed(); } }; diff --git a/src/xrpld/overlay/detail/Message.cpp b/src/xrpld/overlay/detail/Message.cpp index c6e05115152..fff08bb934d 100644 --- a/src/xrpld/overlay/detail/Message.cpp +++ b/src/xrpld/overlay/detail/Message.cpp @@ -73,7 +73,6 @@ Message::compress() if (messageBytes <= 70) return false; - // NOLINTNEXTLINE(bugprone-switch-missing-default-case) switch (type) { case protocol::mtMANIFESTS: @@ -97,6 +96,11 @@ Message::compress() case protocol::mtPROOF_PATH_RESPONSE: case protocol::mtREPLAY_DELTA_REQ: case protocol::mtHAVE_TRANSACTIONS: + case protocol::mtSQUELCH: + break; + default: + XRPL_ASSERT( + false, "xrpl::Message::compress : unknown message type"); break; } return false;