From 1472308d679fe7ed165c203070335fd58024d4da Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Tue, 19 Mar 2013 11:35:04 -0400 Subject: [PATCH] Some unit tests for CAlert --- src/test/alert_tests.cpp | 132 +++++++++++++++++++++++++++++++++++++++ src/test/data/alertTests | Bin 0 -> 1123 bytes 2 files changed, 132 insertions(+) create mode 100644 src/test/alert_tests.cpp create mode 100644 src/test/data/alertTests diff --git a/src/test/alert_tests.cpp b/src/test/alert_tests.cpp new file mode 100644 index 000000000..c8d409db9 --- /dev/null +++ b/src/test/alert_tests.cpp @@ -0,0 +1,132 @@ +// +// Unit tests for alert system +// + +#include +#include + +#include "alert.h" +#include "serialize.h" +#include "util.h" + +BOOST_AUTO_TEST_SUITE(Alert_tests) + +#if 0 +// +// alertTests contains 7 alerts, generated with this code: +// (SignAndSave code not shown, alert signing key is secret) +// +{ + CAlert alert; + alert.nRelayUntil = 60; + alert.nExpiration = 24 * 60 * 60; + alert.nID = 1; + alert.nCancel = 0; // cancels previous messages up to this ID number + alert.nMinVer = 0; // These versions are protocol versions + alert.nMaxVer = 70001; + alert.nPriority = 1; + alert.strComment = "Alert comment"; + alert.strStatusBar = "Alert 1"; + + SignAndSave(alert, "test/alertTests"); + + alert.setSubVer.insert(std::string("/Satoshi:0.1.0/")); + alert.strStatusBar = "Alert 1 for Satoshi 0.1.0"; + SignAndSave(alert, "test/alertTests"); + + alert.setSubVer.insert(std::string("/Satoshi:0.2.0/")); + alert.strStatusBar = "Alert 1 for Satoshi 0.1.0, 0.2.0"; + SignAndSave(alert, "test/alertTests"); + + alert.setSubVer.clear(); + alert.nID = 2; + alert.nCancel = 1; + alert.strStatusBar = "Alert 2, cancels 1"; + SignAndSave(alert, "test/alertTests"); + + alert.nExpiration += 60; + SignAndSave(alert, "test/alertTests"); + + alert.nMinVer = 11; + alert.nMaxVer = 22; + SignAndSave(alert, "test/alertTests"); + + alert.strStatusBar = "Alert 2 for Satoshi 0.1.0"; + alert.setSubVer.insert(std::string("/Satoshi:0.1.0/")); + SignAndSave(alert, "test/alertTests"); +} +#endif + + +std::vector +read_alerts(const std::string& filename) +{ + std::vector result; + + namespace fs = boost::filesystem; + fs::path testFile = fs::current_path() / "test" / "data" / filename; +#ifdef TEST_DATA_DIR + if (!fs::exists(testFile)) + { + testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename; + } +#endif + FILE* fp = fopen(testFile.string().c_str(), "rb"); + if (!fp) return result; + + + CAutoFile filein = CAutoFile(fp, SER_DISK, CLIENT_VERSION); + if (!filein) return result; + + try { + while (!feof(filein)) + { + CAlert alert; + filein >> alert; + result.push_back(alert); + } + } + catch (std::exception) { } + + return result; +} + +BOOST_AUTO_TEST_CASE(AlertApplies) +{ + SetMockTime(11); + + std::vector alerts = read_alerts("alertTests"); + + BOOST_FOREACH(const CAlert& alert, alerts) + { + BOOST_CHECK(alert.CheckSignature()); + } + // Matches: + BOOST_CHECK(alerts[0].AppliesTo(1, "")); + BOOST_CHECK(alerts[0].AppliesTo(70001, "")); + BOOST_CHECK(alerts[0].AppliesTo(1, "/Satoshi:11.11.11/")); + + BOOST_CHECK(alerts[1].AppliesTo(1, "/Satoshi:0.1.0/")); + BOOST_CHECK(alerts[1].AppliesTo(70001, "/Satoshi:0.1.0/")); + + BOOST_CHECK(alerts[2].AppliesTo(1, "/Satoshi:0.1.0/")); + BOOST_CHECK(alerts[2].AppliesTo(1, "/Satoshi:0.2.0/")); + + // Don't match: + BOOST_CHECK(!alerts[0].AppliesTo(-1, "")); + BOOST_CHECK(!alerts[0].AppliesTo(70002, "")); + + BOOST_CHECK(!alerts[1].AppliesTo(1, "")); + BOOST_CHECK(!alerts[1].AppliesTo(1, "Satoshi:0.1.0")); + BOOST_CHECK(!alerts[1].AppliesTo(1, "/Satoshi:0.1.0")); + BOOST_CHECK(!alerts[1].AppliesTo(1, "Satoshi:0.1.0/")); + BOOST_CHECK(!alerts[1].AppliesTo(-1, "/Satoshi:0.1.0/")); + BOOST_CHECK(!alerts[1].AppliesTo(70002, "/Satoshi:0.1.0/")); + BOOST_CHECK(!alerts[1].AppliesTo(1, "/Satoshi:0.2.0/")); + + BOOST_CHECK(!alerts[2].AppliesTo(1, "/Satoshi:0.3.0/")); + + SetMockTime(0); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/data/alertTests b/src/test/data/alertTests new file mode 100644 index 0000000000000000000000000000000000000000..126954e024e168e20f5b5929cbe3437fe8960577 GIT binary patch literal 1123 zcmZ={WME*h0b&qn2n6vM7$78=$-q!32;_o9cpY<6i%Jxd^K)}k^GetuJVORI0~aQR ztXW~Rmv3BJ{H|EOe)ckn8DFy^R_JiHubv(sJzXSx*-a(|ollGVPrkT+ukQEH(kV+K zZZ#Kudsm)zyJGGM^^D{HmwreFSwYYtjQsk+i6!~P8JSiFdWL!i`j`%rggQ(iEx$+s zs#pQ6n8CxqjY*N=+0F+Z2MW!HyjuQlW;c)h@JBdDOeSfCe zTsOG5SzdVZ<$Qq)QBpz6qtv#(IT+)E%?nJ(k&h$dg&3BTfaD3LSvl`PcJTm7i zp8U&n>c5X`w*Vcrklj*fkxt6wz8%^BT|fV3>AqF6#6xp-b&((2nYZ_E|HbbpZeW;+ z0Wp?5f-R`P*~NX*O`-p%V=fx4$~U_e`AWP=KfLPBWYfw2H(&J4cA4bPq!7N6A^tFH zt8ZoHeYQZ4sLcsZZhqI-e{ZnQwD=$J|MRqD}wJ%6fcCjg2DH{6xL=0sng}7eomE?PpRDe00fQW-rgie(jXgTt$9+rT%Z0*;D7; Nwbf*$yJvE}1OUofU*7-# literal 0 HcmV?d00001