Skip to content

Commit dfbd3a6

Browse files
committed
[addrman] [tests] Remove AddrManCorrupted subclass
It's only used to create a corrupted peers.dat file. We can do that directly in a pure function.
1 parent d02098d commit dfbd3a6

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

Diff for: src/test/addrman_tests.cpp

+31-31
Original file line numberDiff line numberDiff line change
@@ -41,32 +41,6 @@ class AddrManUncorrupted : public AddrManSerializationMock
4141
}
4242
};
4343

44-
class AddrManCorrupted : public AddrManSerializationMock
45-
{
46-
public:
47-
void Serialize(CDataStream& s) const override
48-
{
49-
// Produces corrupt output that claims addrman has 20 addrs when it only has one addr.
50-
unsigned char nVersion = 1;
51-
s << nVersion;
52-
s << ((unsigned char)32);
53-
s << uint256::ONE;
54-
s << 10; // nNew
55-
s << 10; // nTried
56-
57-
int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT ^ (1 << 30);
58-
s << nUBuckets;
59-
60-
CService serv;
61-
BOOST_CHECK(Lookup("252.1.1.1", serv, 7777, false));
62-
CAddress addr = CAddress(serv, NODE_NONE);
63-
CNetAddr resolved;
64-
BOOST_CHECK(LookupHost("252.2.2.2", resolved, false));
65-
AddrInfo info = AddrInfo(addr, resolved);
66-
s << info;
67-
}
68-
};
69-
7044
static CDataStream AddrmanToStream(const AddrManSerializationMock& _addrman)
7145
{
7246
CDataStream ssPeersIn(SER_DISK, CLIENT_VERSION);
@@ -1043,13 +1017,39 @@ BOOST_AUTO_TEST_CASE(load_addrman)
10431017
BOOST_CHECK(addrman2.size() == 3);
10441018
}
10451019

1020+
// Produce a corrupt peers.dat that claims 20 addrs when it only has one addr.
1021+
static CDataStream MakeCorruptPeersDat()
1022+
{
1023+
CDataStream s(SER_DISK, CLIENT_VERSION);
1024+
s << ::Params().MessageStart();
1025+
1026+
unsigned char nVersion = 1;
1027+
s << nVersion;
1028+
s << ((unsigned char)32);
1029+
s << uint256::ONE;
1030+
s << 10; // nNew
1031+
s << 10; // nTried
1032+
1033+
int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT ^ (1 << 30);
1034+
s << nUBuckets;
1035+
1036+
CService serv;
1037+
BOOST_CHECK(Lookup("252.1.1.1", serv, 7777, false));
1038+
CAddress addr = CAddress(serv, NODE_NONE);
1039+
CNetAddr resolved;
1040+
BOOST_CHECK(LookupHost("252.2.2.2", resolved, false));
1041+
AddrInfo info = AddrInfo(addr, resolved);
1042+
s << info;
1043+
1044+
std::string str = s.str();
1045+
std::vector<unsigned char> vchData(str.begin(), str.end());
1046+
return CDataStream(vchData, SER_DISK, CLIENT_VERSION);
1047+
}
10461048

10471049
BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
10481050
{
1049-
AddrManCorrupted addrmanCorrupted;
1050-
1051-
// Test that the de-serialization of corrupted addrman throws an exception.
1052-
CDataStream ssPeers1 = AddrmanToStream(addrmanCorrupted);
1051+
// Test that the de-serialization of corrupted peers.dat throws an exception.
1052+
CDataStream ssPeers1 = MakeCorruptPeersDat();
10531053
bool exceptionThrown = false;
10541054
AddrMan addrman1(/* asmap */ std::vector<bool>(), /* deterministic */ false, /* consistency_check_ratio */ 100);
10551055
BOOST_CHECK(addrman1.size() == 0);
@@ -1065,7 +1065,7 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
10651065
BOOST_CHECK(exceptionThrown);
10661066

10671067
// Test that ReadFromStream fails if peers.dat is corrupt
1068-
CDataStream ssPeers2 = AddrmanToStream(addrmanCorrupted);
1068+
CDataStream ssPeers2 = MakeCorruptPeersDat();
10691069

10701070
AddrMan addrman2(/* asmap */ std::vector<bool>(), /* deterministic */ false, /* consistency_check_ratio */ 100);
10711071
BOOST_CHECK(addrman2.size() == 0);

0 commit comments

Comments
 (0)