From 3cb9d9c861710c0cff018bee90b1969193d3ed68 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 22 Jul 2021 18:23:21 +0200 Subject: [PATCH] net: make CaptureMessage() mockable Rename `CaptureMessage()` to `CaptureMessageToFile()` and introduce a `std::function` variable called `CaptureMessage` whose value can be changed by unit tests, should they need to inspect message contents. --- src/net.cpp | 11 ++++++++++- src/net.h | 13 ++++++++++++- test/functional/p2p_message_capture.py | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 9bb264a38a..b31b618eea 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3085,7 +3085,10 @@ uint64_t CConnman::CalculateKeyedNetGroup(const CAddress& ad) const return GetDeterministicRandomizer(RANDOMIZER_ID_NETGROUP).Write(vchNetGroup.data(), vchNetGroup.size()).Finalize(); } -void CaptureMessage(const CAddress& addr, const std::string& msg_type, const Span& data, bool is_incoming) +void CaptureMessageToFile(const CAddress& addr, + const std::string& msg_type, + const Span& data, + bool is_incoming) { // Note: This function captures the message at the time of processing, // not at socket receive/send time. @@ -3112,3 +3115,9 @@ void CaptureMessage(const CAddress& addr, const std::string& msg_type, const Spa ser_writedata32(f, size); f.write(AsBytes(data)); } + +std::function& data, + bool is_incoming)> + CaptureMessage = CaptureMessageToFile; diff --git a/src/net.h b/src/net.h index bbc253e7ff..23254e6445 100644 --- a/src/net.h +++ b/src/net.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -1272,7 +1273,17 @@ private: }; /** Dump binary message to file, with timestamp */ -void CaptureMessage(const CAddress& addr, const std::string& msg_type, const Span& data, bool is_incoming); +void CaptureMessageToFile(const CAddress& addr, + const std::string& msg_type, + const Span& data, + bool is_incoming); + +/** Defaults to `CaptureMessageToFile()`, but can be overridden by unit tests. */ +extern std::function& data, + bool is_incoming)> + CaptureMessage; struct NodeEvictionCandidate { diff --git a/test/functional/p2p_message_capture.py b/test/functional/p2p_message_capture.py index edde9a6ecf..0a7ae44de4 100755 --- a/test/functional/p2p_message_capture.py +++ b/test/functional/p2p_message_capture.py @@ -20,7 +20,7 @@ LENGTH_SIZE = 4 MSGTYPE_SIZE = 12 def mini_parser(dat_file): - """Parse a data file created by CaptureMessage. + """Parse a data file created by CaptureMessageToFile. From the data file we'll only check the structure.