Coverage: tests

This commit is contained in:
Dimitry 2015-08-05 12:43:42 +03:00
parent d4db96a7ba
commit 641fce2b86
2 changed files with 36 additions and 31 deletions

View File

@ -191,7 +191,7 @@ void ImportTest::importState(json_spirit::mObject& _o, State& _state)
BOOST_THROW_EXCEPTION(MissingFields() << errinfo_comment("Import State: Missing state fields!")); BOOST_THROW_EXCEPTION(MissingFields() << errinfo_comment("Import State: Missing state fields!"));
} }
void ImportTest::importTransaction(json_spirit::mObject& _o) void ImportTest::importTransaction (json_spirit::mObject const& _o, eth::Transaction& o_tr)
{ {
if (_o.count("secretKey") > 0) if (_o.count("secretKey") > 0)
{ {
@ -202,18 +202,18 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
assert(_o.count("value") > 0); assert(_o.count("value") > 0);
assert(_o.count("data") > 0); assert(_o.count("data") > 0);
if (bigint(_o["nonce"].get_str()) >= c_max256plus1) if (bigint(_o.at("nonce").get_str()) >= c_max256plus1)
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'nonce' is equal or greater than 2**256") ); BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'nonce' is equal or greater than 2**256") );
if (bigint(_o["gasPrice"].get_str()) >= c_max256plus1) if (bigint(_o.at("gasPrice").get_str()) >= c_max256plus1)
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'gasPrice' is equal or greater than 2**256") ); BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'gasPrice' is equal or greater than 2**256") );
if (bigint(_o["gasLimit"].get_str()) >= c_max256plus1) if (bigint(_o.at("gasLimit").get_str()) >= c_max256plus1)
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'gasLimit' is equal or greater than 2**256") ); BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'gasLimit' is equal or greater than 2**256") );
if (bigint(_o["value"].get_str()) >= c_max256plus1) if (bigint(_o.at("value").get_str()) >= c_max256plus1)
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'value' is equal or greater than 2**256") ); BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'value' is equal or greater than 2**256") );
m_transaction = _o["to"].get_str().empty() ? o_tr = _o.at("to").get_str().empty() ?
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), importData(_o), toInt(_o["nonce"]), Secret(_o["secretKey"].get_str())) : Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), importData(_o), toInt(_o.at("nonce")), Secret(_o.at("secretKey").get_str())) :
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), Address(_o["to"].get_str()), importData(_o), toInt(_o["nonce"]), Secret(_o["secretKey"].get_str())); Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), Address(_o.at("to").get_str()), importData(_o), toInt(_o.at("nonce")), Secret(_o.at("secretKey").get_str()));
} }
else else
{ {
@ -221,14 +221,14 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
RLP transactionRLP(transactionRLPStream.out()); RLP transactionRLP(transactionRLPStream.out());
try try
{ {
m_transaction = Transaction(transactionRLP.data(), CheckTransaction::Everything); o_tr = Transaction(transactionRLP.data(), CheckTransaction::Everything);
} }
catch (InvalidSignature) catch (InvalidSignature)
{ {
// create unsigned transaction // create unsigned transaction
m_transaction = _o["to"].get_str().empty() ? o_tr = _o.at("to").get_str().empty() ?
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), importData(_o), toInt(_o["nonce"])) : Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), importData(_o), toInt(_o.at("nonce"))) :
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), Address(_o["to"].get_str()), importData(_o), toInt(_o["nonce"])); Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), Address(_o.at("to").get_str()), importData(_o), toInt(_o.at("nonce")));
} }
catch (Exception& _e) catch (Exception& _e)
{ {
@ -237,6 +237,11 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
} }
} }
void ImportTest::importTransaction(json_spirit::mObject const& o_tr)
{
importTransaction(o_tr, m_transaction);
}
void ImportTest::compareStates(State const& _stateExpect, State const& _statePost, AccountMaskMap const _expectedStateOptions, WhenError _throw) void ImportTest::compareStates(State const& _stateExpect, State const& _statePost, AccountMaskMap const _expectedStateOptions, WhenError _throw)
{ {
#define CHECK(a,b) \ #define CHECK(a,b) \
@ -421,13 +426,13 @@ bytes importByteArray(std::string const& _str)
return fromHex(_str.substr(0, 2) == "0x" ? _str.substr(2) : _str, WhenError::Throw); return fromHex(_str.substr(0, 2) == "0x" ? _str.substr(2) : _str, WhenError::Throw);
} }
bytes importData(json_spirit::mObject& _o) bytes importData(json_spirit::mObject const& _o)
{ {
bytes data; bytes data;
if (_o["data"].type() == json_spirit::str_type) if (_o.at("data").type() == json_spirit::str_type)
data = importByteArray(_o["data"].get_str()); data = importByteArray(_o.at("data").get_str());
else else
for (auto const& j: _o["data"].get_array()) for (auto const& j: _o.at("data").get_array())
data.push_back(toByte(j)); data.push_back(toByte(j));
return data; return data;
} }
@ -633,46 +638,46 @@ void executeTests(const string& _name, const string& _testPathAppendix, const bo
} }
} }
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj) RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject const& _tObj)
{ {
//Construct Rlp of the given transaction //Construct Rlp of the given transaction
RLPStream rlpStream; RLPStream rlpStream;
rlpStream.appendList(_tObj.size()); rlpStream.appendList(_tObj.size());
if (_tObj.count("nonce")) if (_tObj.count("nonce"))
rlpStream << bigint(_tObj["nonce"].get_str()); rlpStream << bigint(_tObj.at("nonce").get_str());
if (_tObj.count("gasPrice")) if (_tObj.count("gasPrice"))
rlpStream << bigint(_tObj["gasPrice"].get_str()); rlpStream << bigint(_tObj.at("gasPrice").get_str());
if (_tObj.count("gasLimit")) if (_tObj.count("gasLimit"))
rlpStream << bigint(_tObj["gasLimit"].get_str()); rlpStream << bigint(_tObj.at("gasLimit").get_str());
if (_tObj.count("to")) if (_tObj.count("to"))
{ {
if (_tObj["to"].get_str().empty()) if (_tObj.at("to").get_str().empty())
rlpStream << ""; rlpStream << "";
else else
rlpStream << importByteArray(_tObj["to"].get_str()); rlpStream << importByteArray(_tObj.at("to").get_str());
} }
if (_tObj.count("value")) if (_tObj.count("value"))
rlpStream << bigint(_tObj["value"].get_str()); rlpStream << bigint(_tObj.at("value").get_str());
if (_tObj.count("data")) if (_tObj.count("data"))
rlpStream << importData(_tObj); rlpStream << importData(_tObj);
if (_tObj.count("v")) if (_tObj.count("v"))
rlpStream << bigint(_tObj["v"].get_str()); rlpStream << bigint(_tObj.at("v").get_str());
if (_tObj.count("r")) if (_tObj.count("r"))
rlpStream << bigint(_tObj["r"].get_str()); rlpStream << bigint(_tObj.at("r").get_str());
if (_tObj.count("s")) if (_tObj.count("s"))
rlpStream << bigint(_tObj["s"].get_str()); rlpStream << bigint(_tObj.at("s").get_str());
if (_tObj.count("extrafield")) if (_tObj.count("extrafield"))
rlpStream << bigint(_tObj["extrafield"].get_str()); rlpStream << bigint(_tObj.at("extrafield").get_str());
return rlpStream; return rlpStream;
} }

View File

@ -32,7 +32,6 @@
#include <libevm/ExtVMFace.h> #include <libevm/ExtVMFace.h>
#include <libtestutils/Common.h> #include <libtestutils/Common.h>
#ifdef NOBOOST #ifdef NOBOOST
#define TBOOST_REQUIRE(arg) if(arg == false) throw dev::Exception(); #define TBOOST_REQUIRE(arg) if(arg == false) throw dev::Exception();
#define TBOOST_REQUIRE_EQUAL(arg1, arg2) if(arg1 != arg2) throw dev::Exception(); #define TBOOST_REQUIRE_EQUAL(arg1, arg2) if(arg1 != arg2) throw dev::Exception();
@ -139,7 +138,8 @@ public:
void importEnv(json_spirit::mObject& _o); void importEnv(json_spirit::mObject& _o);
static void importState(json_spirit::mObject& _o, eth::State& _state); static void importState(json_spirit::mObject& _o, eth::State& _state);
static void importState(json_spirit::mObject& _o, eth::State& _state, eth::AccountMaskMap& o_mask); static void importState(json_spirit::mObject& _o, eth::State& _state, eth::AccountMaskMap& o_mask);
void importTransaction(json_spirit::mObject& _o); static void importTransaction (json_spirit::mObject const& _o, eth::Transaction& o_tr);
void importTransaction(json_spirit::mObject const& _o);
static json_spirit::mObject& makeAllFieldsHex(json_spirit::mObject& _o); static json_spirit::mObject& makeAllFieldsHex(json_spirit::mObject& _o);
bytes executeTest(); bytes executeTest();
@ -168,7 +168,7 @@ protected:
u256 toInt(json_spirit::mValue const& _v); u256 toInt(json_spirit::mValue const& _v);
byte toByte(json_spirit::mValue const& _v); byte toByte(json_spirit::mValue const& _v);
bytes importCode(json_spirit::mObject& _o); bytes importCode(json_spirit::mObject& _o);
bytes importData(json_spirit::mObject& _o); bytes importData(json_spirit::mObject const& _o);
bytes importByteArray(std::string const& _str); bytes importByteArray(std::string const& _str);
eth::LogEntries importLog(json_spirit::mArray& _o); eth::LogEntries importLog(json_spirit::mArray& _o);
json_spirit::mArray exportLog(eth::LogEntries _logs); json_spirit::mArray exportLog(eth::LogEntries _logs);
@ -193,7 +193,7 @@ dev::eth::Ethash::BlockHeader constructHeader(
void updateEthashSeal(dev::eth::Ethash::BlockHeader& _header, h256 const& _mixHash, dev::eth::Nonce const& _nonce); void updateEthashSeal(dev::eth::Ethash::BlockHeader& _header, h256 const& _mixHash, dev::eth::Nonce const& _nonce);
void executeTests(const std::string& _name, const std::string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests); void executeTests(const std::string& _name, const std::string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests);
void userDefinedTest(std::function<void(json_spirit::mValue&, bool)> doTests); void userDefinedTest(std::function<void(json_spirit::mValue&, bool)> doTests);
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj); RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject const& _tObj);
eth::LastHashes lastHashes(u256 _currentBlockNumber); eth::LastHashes lastHashes(u256 _currentBlockNumber);
json_spirit::mObject fillJsonWithState(eth::State _state); json_spirit::mObject fillJsonWithState(eth::State _state);
json_spirit::mObject fillJsonWithTransaction(eth::Transaction _txn); json_spirit::mObject fillJsonWithTransaction(eth::Transaction _txn);