mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
Fixes for Alerts Unit Tests
This commit is contained in:
parent
b7764376e5
commit
89c669769b
@ -7,7 +7,7 @@ use the Boost::Test unit-testing framework.
|
||||
To compile and run the tests:
|
||||
|
||||
cd src
|
||||
make -f makefile.unix test_darkcoin # Replace makefile.unix if you're not on unix
|
||||
make -f makefile.unix test_darkcoin UNIT_TEST=1 # Replace makefile.unix if you're not on unix
|
||||
./test_darkcoin # Runs the unit tests
|
||||
|
||||
If all tests succeed the last line of output will be:
|
||||
|
@ -19,7 +19,11 @@ using namespace std;
|
||||
map<uint256, CAlert> mapAlerts;
|
||||
CCriticalSection cs_mapAlerts;
|
||||
|
||||
#ifdef UNIT_TEST
|
||||
static const char* pszMainKey = "043bcb5ad652b5680fadc0002a17c64542d2aff59c605d820960ab568af2c9ac7e3f130f7e4b638cfdc9069282f5500d67ee3f2803d6f0d6be44d387ac7ac286e4";
|
||||
#else
|
||||
static const char* pszMainKey = "048240a8748a80a286b270ba126705ced4f2ce5a7847b3610ea3c06513150dade2a8512ed5ea86320824683fc0818f0ac019214973e677acd1244f6d0571fc5103";
|
||||
#endif
|
||||
static const char* pszTestKey = "04517d8a699cb43d3938d7b24faaff7cda448ca4ea267723ba614784de661949bf632d6304316b244646dea079735b9a6fc4af804efb4752075b9fe2245e14e412";
|
||||
|
||||
void CUnsignedAlert::SetNull()
|
||||
|
@ -37,6 +37,9 @@ xCXXFLAGS=-O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter
|
||||
xLDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static-libgcc -static-libstdc++ $(LDFLAGS)
|
||||
|
||||
TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
|
||||
ifdef UNIT_TEST
|
||||
DEFS+=-DUNIT_TEST=1
|
||||
endif
|
||||
|
||||
ifndef USE_UPNP
|
||||
override USE_UPNP = -
|
||||
|
@ -50,6 +50,9 @@ CFLAGS=-mthreads -O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-par
|
||||
LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware
|
||||
|
||||
TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
|
||||
ifdef UNIT_TEST
|
||||
DEFS+=-DUNIT_TEST=1
|
||||
endif
|
||||
|
||||
ifndef USE_UPNP
|
||||
override USE_UPNP = -
|
||||
|
@ -25,6 +25,9 @@ USE_IPV6:=1
|
||||
LIBS= -dead_strip
|
||||
|
||||
TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
|
||||
ifdef UNIT_TEST
|
||||
DEFS+=-DUNIT_TEST=1
|
||||
endif
|
||||
|
||||
ifdef STATIC
|
||||
# Build STATIC if you are redistributing the bitcoinf
|
||||
|
@ -19,6 +19,9 @@ DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLU
|
||||
LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH))
|
||||
|
||||
TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
|
||||
ifdef UNIT_TEST
|
||||
DEFS+=-DUNIT_TEST=1
|
||||
endif
|
||||
|
||||
LMODE = dynamic
|
||||
LMODE2 = dynamic
|
||||
|
@ -5,99 +5,157 @@
|
||||
#include <boost/foreach.hpp>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "alert.h"
|
||||
#include "base58.h"
|
||||
#include "key.h"
|
||||
#include "serialize.h"
|
||||
#include "util.h"
|
||||
|
||||
#if 0
|
||||
//
|
||||
// alertTests contains 7 alerts, generated with this code:
|
||||
// (SignAndSave code not shown, alert signing key is secret)
|
||||
//
|
||||
using namespace std;
|
||||
namespace fs = boost::filesystem;
|
||||
|
||||
bool SignAndSave(CAlert &alert, std::vector<CAlert> &alerts)
|
||||
{
|
||||
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";
|
||||
CDataStream ds(SER_DISK, PROTOCOL_VERSION);
|
||||
ds << alert.nVersion
|
||||
<< alert.nRelayUntil
|
||||
<< alert.nExpiration
|
||||
<< alert.nID
|
||||
<< alert.nCancel
|
||||
<< alert.setCancel
|
||||
<< alert.nMinVer
|
||||
<< alert.nMaxVer
|
||||
<< alert.setSubVer
|
||||
<< alert.nPriority
|
||||
<< alert.strComment
|
||||
<< alert.strStatusBar
|
||||
<< alert.strReserved;
|
||||
|
||||
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;
|
||||
alert.nCancel = 1;
|
||||
alert.nPriority = 100;
|
||||
alert.strStatusBar = "Alert 2, cancels 1";
|
||||
SignAndSave(alert, "test/alertTests");
|
||||
|
||||
alert.nExpiration += 60;
|
||||
++alert.nID;
|
||||
SignAndSave(alert, "test/alertTests");
|
||||
|
||||
++alert.nID;
|
||||
alert.nMinVer = 11;
|
||||
alert.nMaxVer = 22;
|
||||
SignAndSave(alert, "test/alertTests");
|
||||
|
||||
++alert.nID;
|
||||
alert.strStatusBar = "Alert 2 for Satoshi 0.1.0";
|
||||
alert.setSubVer.insert(std::string("/Satoshi:0.1.0/"));
|
||||
SignAndSave(alert, "test/alertTests");
|
||||
|
||||
++alert.nID;
|
||||
alert.nMinVer = 0;
|
||||
alert.nMaxVer = 999999;
|
||||
alert.strStatusBar = "Evil Alert'; /bin/ls; echo '";
|
||||
alert.setSubVer.clear();
|
||||
SignAndSave(alert, "test/alertTests");
|
||||
}
|
||||
#endif
|
||||
|
||||
struct ReadAlerts
|
||||
{
|
||||
ReadAlerts()
|
||||
alert.vchMsg.assign(ds.begin(),ds.end());
|
||||
uint256 hash = alert.GetHash();
|
||||
std::vector<unsigned char> sig;
|
||||
CBitcoinSecret secret;
|
||||
if (!secret.SetString("7rDMuTnMxWdqRsvk5fYfwkaZoguWJMoDucyZvKmURVukdAkGiVb"))
|
||||
{
|
||||
cout << "Error Setting Private Key" << endl;
|
||||
return false;
|
||||
}
|
||||
CKey key = secret.GetKey();
|
||||
|
||||
if (!key.Sign(hash, sig))
|
||||
{
|
||||
cout << "Could Not Sign Message" << endl;
|
||||
return false;
|
||||
}
|
||||
alert.vchSig = sig;
|
||||
|
||||
try
|
||||
{
|
||||
alerts.push_back(alert);
|
||||
}
|
||||
|
||||
catch (std::exception &e)
|
||||
{
|
||||
cout << "Exception caught " << e.what() << endl;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
struct SetUpAlerts
|
||||
{
|
||||
SetUpAlerts()
|
||||
{
|
||||
|
||||
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";
|
||||
|
||||
if (!SignAndSave(alert, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert2(alert);
|
||||
alert2.setSubVer.insert(std::string("/Satoshi:0.1.0/"));
|
||||
alert2.strStatusBar = "Alert 1 for Satoshi 0.1.0";
|
||||
if (!SignAndSave(alert2, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert3(alert2);
|
||||
alert3.setSubVer.insert(std::string("/Satoshi:0.2.0/"));
|
||||
alert3.strStatusBar = "Alert 1 for Satoshi 0.1.0, 0.2.0";
|
||||
if (!SignAndSave(alert3, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert4(alert3);
|
||||
alert4.setSubVer.clear();
|
||||
++alert4.nID;
|
||||
alert4.nCancel = 1;
|
||||
alert4.nPriority = 100;
|
||||
alert4.strStatusBar = "Alert 2, cancels 1";
|
||||
if (!SignAndSave(alert4, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert5(alert4);
|
||||
alert5.nExpiration += 60;
|
||||
++alert5.nID;
|
||||
if (!SignAndSave(alert5, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert6(alert5);
|
||||
++alert6.nID;
|
||||
alert6.nMinVer = 11;
|
||||
alert6.nMaxVer = 22;
|
||||
if (!SignAndSave(alert6, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert7(alert6);
|
||||
++alert7.nID;
|
||||
alert7.strStatusBar = "Alert 2 for Satoshi 0.1.0";
|
||||
alert7.setSubVer.insert(std::string("/Satoshi:0.1.0/"));
|
||||
if (!SignAndSave(alert7, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CAlert alert8(alert7);
|
||||
++alert8.nID;
|
||||
alert8.nMinVer = 0;
|
||||
alert8.nMaxVer = 999999;
|
||||
alert8.strStatusBar = "Evil Alert'; /bin/ls; echo '";
|
||||
alert8.setSubVer.clear();
|
||||
if (!SignAndSave(alert8, alerts))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
~SetUpAlerts()
|
||||
{
|
||||
std::string filename("alertTests");
|
||||
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;
|
||||
|
||||
|
||||
CAutoFile filein = CAutoFile(fp, SER_DISK, CLIENT_VERSION);
|
||||
if (!filein) return;
|
||||
|
||||
try {
|
||||
while (!feof(filein))
|
||||
{
|
||||
CAlert alert;
|
||||
filein >> alert;
|
||||
alerts.push_back(alert);
|
||||
}
|
||||
}
|
||||
catch (std::exception) { }
|
||||
}
|
||||
~ReadAlerts() { }
|
||||
|
||||
static std::vector<std::string> read_lines(boost::filesystem::path filepath)
|
||||
{
|
||||
@ -105,7 +163,7 @@ struct ReadAlerts
|
||||
|
||||
std::ifstream f(filepath.string().c_str());
|
||||
std::string line;
|
||||
while (std::getline(f,line))
|
||||
while (std::getline(f, line))
|
||||
result.push_back(line);
|
||||
|
||||
return result;
|
||||
@ -114,8 +172,7 @@ struct ReadAlerts
|
||||
std::vector<CAlert> alerts;
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_SUITE(Alert_tests, ReadAlerts)
|
||||
|
||||
BOOST_FIXTURE_TEST_SUITE(Alert_tests, SetUpAlerts)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(AlertApplies)
|
||||
{
|
||||
@ -153,7 +210,6 @@ BOOST_AUTO_TEST_CASE(AlertApplies)
|
||||
SetMockTime(0);
|
||||
}
|
||||
|
||||
|
||||
// This uses sh 'echo' to test the -alertnotify function, writing to a
|
||||
// /tmp file. So skip it on Windows:
|
||||
#ifndef WIN32
|
||||
@ -167,17 +223,17 @@ BOOST_AUTO_TEST_CASE(AlertNotify)
|
||||
mapArgs["-alertnotify"] = std::string("echo %s >> ") + temp.string();
|
||||
|
||||
BOOST_FOREACH(CAlert alert, alerts)
|
||||
alert.ProcessAlert(false);
|
||||
alert.ProcessAlert(false);
|
||||
|
||||
std::vector<std::string> r = read_lines(temp);
|
||||
//
|
||||
// Only want to run these tests if the "alertnotify.txt" has been read OK and has at least one record
|
||||
// in it.
|
||||
//
|
||||
if (r.size() > 0 )
|
||||
if (r.size() > 0)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(r.size(), 1u);
|
||||
BOOST_CHECK_EQUAL(r[0], "Evil Alert; /bin/ls; echo "); // single-quotes should be removed
|
||||
BOOST_CHECK_EQUAL(r.size(), 1u);
|
||||
BOOST_CHECK_EQUAL(r[0], "Evil Alert; /bin/ls; echo "); // single-quotes should be removed
|
||||
}
|
||||
boost::filesystem::remove(temp);
|
||||
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user