Current master:
Running 194 test cases...
test/net_tests.cpp:94: error in "caddrdb_read": check addrman1.size() == 3 failed
test/net_tests.cpp:105: error in "caddrdb_read": check addrman2.size() == 3 failed
*** 2 failures detected in test suite "Bitcoin Test Suite"
I extended a debugging:
diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp
index 6debf6a..64afbad 100644
--- a/src/test/net_tests.cpp
+++ b/src/test/net_tests.cpp
@@ -57,6 +57,8 @@ CDataStream AddrmanToStream(CAddrManSerializationMock& addrman)
ssPeersIn << addrman;
std::string str = ssPeersIn.str();
vector<unsigned char> vchData(str.begin(), str.end());
+ cerr << "DBG: vchData.size() = " << vchData.size();
+ cerr << ", vchData = " << HexStr(vchData) << "\n";
return CDataStream(vchData, SER_DISK, CLIENT_VERSION);
}
@@ -89,6 +91,10 @@ BOOST_AUTO_TEST_CASE(caddrdb_read)
exceptionThrown = true;
}
+ if (addrman1.size() != 3)
+ cerr << "addrman1.size() == " << addrman1.size() << "\n";
+ if (exceptionThrown)
+ cerr << "exceptionThrown!\n";
BOOST_CHECK(addrman1.size() == 3);
BOOST_CHECK(exceptionThrown == false);
@@ -99,6 +105,8 @@ BOOST_AUTO_TEST_CASE(caddrdb_read)
CAddrDB adb;
BOOST_CHECK(addrman2.size() == 0);
adb.Read(addrman2, ssPeers2);
+ if (addrman2.size() != 3)
+ cerr << "addrman2.size() == " << addrman2.size();
BOOST_CHECK(addrman2.size() == 3);
}
And to reproduce the problem:
for i in {1..100}; do ./test_bitcoin --run_test=net_tests || break ; done
It looks like the serialization of CAddrMan is fragile...