2#include <test/jtx/Env.h>
4#include <xrpld/overlay/Message.h>
5#include <xrpld/overlay/detail/OverlayImpl.h>
6#include <xrpld/overlay/detail/PeerImp.h>
7#include <xrpld/overlay/detail/Tuning.h>
8#include <xrpld/peerfinder/detail/SlotImp.h>
10#include <xrpl/basics/make_SSLContext.h>
11#include <xrpl/beast/unit_test.h>
12#include <xrpl/nodestore/NodeObject.h>
13#include <xrpl/protocol/digest.h>
14#include <xrpl/protocol/messages.h>
57 std::move(stream_ptr),
99 boost::beast::http::request<boost::beast::http::dynamic_body> request;
104 boost::asio::ip::make_address(
"172.1.1.1"), 51235);
106 boost::asio::ip::make_address(
"172.1.1.2"), 51235);
109 auto consumer = overlay.resourceManager().newInboundEndpoint(remote);
110 auto [slot, _] = overlay.peerFinder().new_inbound_slot(local, remote);
119 std::move(stream_ptr),
122 overlay.add_active(peer);
135 for (
int i = 0; i < numObjects; ++i)
140 Blob data(100,
static_cast<unsigned char>(i % 256));
145 nodeStore.earliestLedgerSeq());
150 request->set_type(protocol::TMGetObjectByHash_ObjectType_otLEDGER);
151 request->set_query(
true);
153 for (
int i = 0; i < numObjects; ++i)
155 auto object = request->add_objects();
156 object->set_hash(hashes[i].
data(), hashes[i].size());
157 object->set_ledgerseq(i);
178 peer->onMessage(request);
181 auto sentMessage = peer->getLastSentMessage();
182 BEAST_EXPECT(sentMessage !=
nullptr);
188 BEAST_EXPECT(buffer.size() > 6);
190 protocol::TMGetObjectByHash reply;
192 reply.ParseFromArray(buffer.data() + 6, buffer.size() - 6) ==
true);
195 BEAST_EXPECT(reply.objects_size() == expectedReplySize);
208BEAST_DEFINE_TESTSUITE(TMGetObjectByHash, overlay,
xrpl);
A version-independent IP address and port combination.
testcase_t testcase
Memberspace for declaring test cases.
virtual NodeStore::Database & getNodeStore()=0
virtual boost::asio::io_context & getIOContext()=0
virtual Overlay & overlay()=0
This class manages established peer-to-peer connections, handles message exchange,...
std::shared_ptr< PeerFinder::Slot > const & slot()
An endpoint that consumes resources.
Test peer that captures sent messages for verification.
std::shared_ptr< Message > getLastSentMessage() const
void send(std::shared_ptr< Message > const &m) override
PeerTest(Application &app, std::shared_ptr< PeerFinder::Slot > const &slot, http_request_type &&request, PublicKey const &publicKey, ProtocolVersion protocol, Resource::Consumer consumer, std::unique_ptr< TMGetObjectByHash_test::stream_type > &&stream_ptr, OverlayImpl &overlay)
std::shared_ptr< Message > lastSentMessage_
Test for TMGetObjectByHash reply size limiting.
std::shared_ptr< protocol::TMGetObjectByHash > createRequest(size_t const numObjects, Env &env)
boost::beast::ssl_stream< middle_type > stream_type
void testReplyLimit(size_t const numObjects, int const expectedReplySize)
Test that reply is limited to hardMaxReplyNodes when more objects are requested than the limit allows...
boost::beast::tcp_stream middle_type
std::shared_ptr< PeerTest > createPeer(jtx::Env &env)
ProtocolVersion protocolVersion_
boost::asio::ip::tcp::socket socket_type
void run() override
Runs the suite.
A transaction testing environment.
@ hardMaxReplyNodes
The hard cap on the number of ledger entries in a single reply.
auto const data
General field definitions, or fields used in multiple transaction namespaces.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::pair< PublicKey, SecretKey > randomKeyPair(KeyType type)
Create a key pair using secure random numbers.
sha512_half_hasher::result_type sha512Half(Args const &... args)
Returns the SHA512-Half of a series of objects.
boost::beast::http::request< boost::beast::http::dynamic_body > http_request_type
std::shared_ptr< boost::asio::ssl::context > make_SSLContext(std::string const &cipherList)
Create a self-signed SSL context that allows anonymous Diffie Hellman.