5 #include <boost/foreach.hpp>
6 #include <boost/test/unit_test.hpp>
30 SignAndSave(alert,
"test/alertTests");
32 alert.
setSubVer.insert(std::string(
"/Satoshi:0.1.0/"));
34 SignAndSave(alert,
"test/alertTests");
36 alert.
setSubVer.insert(std::string(
"/Satoshi:0.2.0/"));
38 SignAndSave(alert,
"test/alertTests");
45 SignAndSave(alert,
"test/alertTests");
49 SignAndSave(alert,
"test/alertTests");
54 SignAndSave(alert,
"test/alertTests");
58 alert.
setSubVer.insert(std::string(
"/Satoshi:0.1.0/"));
59 SignAndSave(alert,
"test/alertTests");
66 SignAndSave(alert,
"test/alertTests");
74 std::string filename(
"alertTests");
75 namespace fs = boost::filesystem;
76 fs::path testFile = fs::current_path() /
"test" /
"data" / filename;
78 if (!fs::exists(testFile))
80 testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename;
83 FILE* fp = fopen(testFile.string().c_str(),
"rb");
98 catch (std::exception) { }
102 static std::vector<std::string>
read_lines(boost::filesystem::path filepath)
104 std::vector<std::string> result;
106 std::ifstream f(filepath.string().c_str());
108 while (std::getline(f,line))
109 result.push_back(line);
117 BOOST_FIXTURE_TEST_SUITE(Alert_tests,
ReadAlerts)
124 BOOST_FOREACH(
const CAlert& alert, alerts)
129 BOOST_CHECK(alerts[0].AppliesTo(1,
""));
130 BOOST_CHECK(alerts[0].AppliesTo(70001,
""));
131 BOOST_CHECK(alerts[0].AppliesTo(1,
"/Satoshi:11.11.11/"));
133 BOOST_CHECK(alerts[1].AppliesTo(1,
"/Satoshi:0.1.0/"));
134 BOOST_CHECK(alerts[1].AppliesTo(70001,
"/Satoshi:0.1.0/"));
136 BOOST_CHECK(alerts[2].AppliesTo(1,
"/Satoshi:0.1.0/"));
137 BOOST_CHECK(alerts[2].AppliesTo(1,
"/Satoshi:0.2.0/"));
140 BOOST_CHECK(!alerts[0].AppliesTo(-1,
""));
141 BOOST_CHECK(!alerts[0].AppliesTo(70002,
""));
143 BOOST_CHECK(!alerts[1].AppliesTo(1,
""));
144 BOOST_CHECK(!alerts[1].AppliesTo(1,
"Satoshi:0.1.0"));
145 BOOST_CHECK(!alerts[1].AppliesTo(1,
"/Satoshi:0.1.0"));
146 BOOST_CHECK(!alerts[1].AppliesTo(1,
"Satoshi:0.1.0/"));
147 BOOST_CHECK(!alerts[1].AppliesTo(-1,
"/Satoshi:0.1.0/"));
148 BOOST_CHECK(!alerts[1].AppliesTo(70002,
"/Satoshi:0.1.0/"));
149 BOOST_CHECK(!alerts[1].AppliesTo(1,
"/Satoshi:0.2.0/"));
151 BOOST_CHECK(!alerts[2].AppliesTo(1,
"/Satoshi:0.3.0/"));
164 boost::filesystem::path temp =
GetTempPath() /
"alertnotify.txt";
165 boost::filesystem::remove(temp);
167 mapArgs[
"-alertnotify"] = std::string(
"echo %s >> ") + temp.string();
169 BOOST_FOREACH(
CAlert alert, alerts)
172 std::vector<std::string> r = read_lines(temp);
173 BOOST_CHECK_EQUAL(r.size(), 1u);
174 BOOST_CHECK_EQUAL(r[0],
"Evil Alert; /bin/ls; echo ");
176 boost::filesystem::remove(temp);
182 BOOST_AUTO_TEST_SUITE_END()
std::set< std::string > setSubVer
boost::filesystem::path GetTempPath()
bool ProcessAlert(bool fThread=true)
void SetMockTime(int64 nMockTimeIn)
An alert is a combination of a serialized CUnsignedAlert and a signature.
BOOST_AUTO_TEST_CASE(AlertApplies)
static std::vector< std::string > read_lines(boost::filesystem::path filepath)
bool CheckSignature() const
std::vector< CAlert > alerts
map< string, string > mapArgs