Changeset View
Changeset View
Standalone View
Standalone View
src/seeder/test/message_writer_tests.cpp
- This file was added.
// Copyright (c) 2020 The Bitcoin developers | |||||
// Distributed under the MIT software license, see the accompanying | |||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||||
#include <hash.h> | |||||
#include <protocol.h> | |||||
#include <seeder/messagewriter.h> | |||||
#include <version.h> | |||||
#include <boost/test/unit_test.hpp> | |||||
#include <string> | |||||
#include <vector> | |||||
BOOST_AUTO_TEST_SUITE(message_writer_tests) | |||||
template <typename... Args> | |||||
static void | |||||
CheckMessage(CDataStream expectedMessage, int version, std::string command, | |||||
CMessageHeader::MessageMagic netMagic, Args &&... args) { | |||||
std::vector<uint8_t> message = | |||||
WriteMessage(version, command, netMagic, std::forward<Args>(args)...); | |||||
BOOST_CHECK_EQUAL(message.size(), expectedMessage.size()); | |||||
for (size_t i = 0; i < message.size(); i++) { | |||||
BOOST_CHECK_EQUAL(message[i], uint8_t(expectedMessage[i])); | |||||
} | |||||
} | |||||
BOOST_AUTO_TEST_CASE(header_and_payload_message_writer_test) { | |||||
int nVersion = PROTOCOL_VERSION; | |||||
uint64_t now = time(nullptr); | |||||
uint64_t nonce = 0; | |||||
uint64_t serviceFlags = uint64_t(ServiceFlags(NODE_NETWORK)); | |||||
CService service; | |||||
CAddress addrTo(service, ServiceFlags(NODE_NETWORK | NODE_BITCOIN_CASH)); | |||||
CAddress addrFrom(service, ServiceFlags(NODE_NETWORK | NODE_BITCOIN_CASH)); | |||||
std::string user_agent = "/bitcoin-cash-seeder:0.15/"; | |||||
int start_height = 1; | |||||
CDataStream versionPayload(SER_NETWORK, nVersion); | |||||
versionPayload << nVersion << serviceFlags << now << addrTo << addrFrom | |||||
<< nonce << user_agent << start_height; | |||||
CMessageHeader::MessageMagic netMagic = {{0xe3, 0xe1, 0xf3, 0xe8}}; | |||||
CMessageHeader versionhdr(netMagic, NetMsgType::VERSION, | |||||
versionPayload.size()); | |||||
uint256 hash = Hash(versionPayload.data(), | |||||
versionPayload.data() + versionPayload.size()); | |||||
memcpy(versionhdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE); | |||||
CDataStream expectedVersion(SER_NETWORK, nVersion); | |||||
expectedVersion << versionhdr << versionPayload; | |||||
CheckMessage(expectedVersion, nVersion, NetMsgType::VERSION, netMagic, | |||||
nVersion, serviceFlags, now, addrTo, addrFrom, nonce, | |||||
user_agent, start_height); | |||||
} | |||||
BOOST_AUTO_TEST_CASE(header_empty_payload_message_writer_test) { | |||||
int nVersion = PROTOCOL_VERSION; | |||||
CMessageHeader::MessageMagic netMagic = {{0xe3, 0xe1, 0xf3, 0xe8}}; | |||||
CMessageHeader verackHeader(netMagic, NetMsgType::VERACK, 0); | |||||
CDataStream expectedVerack(SER_NETWORK, nVersion); | |||||
std::vector<uint8_t> payload; | |||||
uint256 hash = Hash(payload.data(), payload.data() + payload.size()); | |||||
memcpy(verackHeader.pchChecksum, hash.begin(), | |||||
CMessageHeader::CHECKSUM_SIZE); | |||||
expectedVerack << verackHeader; | |||||
CheckMessage(expectedVerack, nVersion, NetMsgType::VERACK, netMagic); | |||||
} | |||||
BOOST_AUTO_TEST_SUITE_END() |