aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TestHelper.cpp76
-rw-r--r--TestHelper.h8
2 files changed, 50 insertions, 34 deletions
diff --git a/TestHelper.cpp b/TestHelper.cpp
index 39977975..4a3de4dc 100644
--- a/TestHelper.cpp
+++ b/TestHelper.cpp
@@ -121,10 +121,21 @@ bytes ImportTest::executeTest()
{
ExecutionResult res;
eth::State tmpState = m_statePre;
+ try
+ {
+ std::pair<ExecutionResult, TransactionReceipt> execOut = m_statePre.execute(m_envInfo, m_transaction);
+ res = execOut.first;
+ m_logs = execOut.second.log();
+ }
+ catch (Exception const& _e)
+ {
+ cnote << "Exception: " << diagnostic_information(_e);
+ }
+ catch (std::exception const& _e)
+ {
+ cnote << "state execution exception: " << _e.what();
+ }
- std::pair<ExecutionResult, TransactionReceipt> execOut = m_statePre.execute(m_envInfo, m_transaction);
- res = execOut.first;
- m_logs = execOut.second.log();
m_statePre.commit();
m_statePost = m_statePre;
m_statePre = tmpState;
@@ -191,7 +202,7 @@ void ImportTest::importState(json_spirit::mObject& _o, State& _state)
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)
{
@@ -202,18 +213,18 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
assert(_o.count("value") > 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") );
- 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") );
- 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") );
- 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") );
- m_transaction = _o["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["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), Address(_o["to"].get_str()), importData(_o), toInt(_o["nonce"]), Secret(_o["secretKey"].get_str()));
+ o_tr = _o.at("to").get_str().empty() ?
+ 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.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
{
@@ -221,14 +232,14 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
RLP transactionRLP(transactionRLPStream.out());
try
{
- m_transaction = Transaction(transactionRLP.data(), CheckTransaction::Everything);
+ o_tr = Transaction(transactionRLP.data(), CheckTransaction::Everything);
}
catch (InvalidSignature)
{
// create unsigned transaction
- m_transaction = _o["to"].get_str().empty() ?
- Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), importData(_o), toInt(_o["nonce"])) :
- Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), Address(_o["to"].get_str()), importData(_o), toInt(_o["nonce"]));
+ o_tr = _o.at("to").get_str().empty() ?
+ Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), importData(_o), toInt(_o.at("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)
{
@@ -237,6 +248,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)
{
#define CHECK(a,b) \
@@ -421,13 +437,13 @@ bytes importByteArray(std::string const& _str)
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;
- if (_o["data"].type() == json_spirit::str_type)
- data = importByteArray(_o["data"].get_str());
+ if (_o.at("data").type() == json_spirit::str_type)
+ data = importByteArray(_o.at("data").get_str());
else
- for (auto const& j: _o["data"].get_array())
+ for (auto const& j: _o.at("data").get_array())
data.push_back(toByte(j));
return data;
}
@@ -633,46 +649,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
RLPStream rlpStream;
rlpStream.appendList(_tObj.size());
if (_tObj.count("nonce"))
- rlpStream << bigint(_tObj["nonce"].get_str());
+ rlpStream << bigint(_tObj.at("nonce").get_str());
if (_tObj.count("gasPrice"))
- rlpStream << bigint(_tObj["gasPrice"].get_str());
+ rlpStream << bigint(_tObj.at("gasPrice").get_str());
if (_tObj.count("gasLimit"))
- rlpStream << bigint(_tObj["gasLimit"].get_str());
+ rlpStream << bigint(_tObj.at("gasLimit").get_str());
if (_tObj.count("to"))
{
- if (_tObj["to"].get_str().empty())
+ if (_tObj.at("to").get_str().empty())
rlpStream << "";
else
- rlpStream << importByteArray(_tObj["to"].get_str());
+ rlpStream << importByteArray(_tObj.at("to").get_str());
}
if (_tObj.count("value"))
- rlpStream << bigint(_tObj["value"].get_str());
+ rlpStream << bigint(_tObj.at("value").get_str());
if (_tObj.count("data"))
rlpStream << importData(_tObj);
if (_tObj.count("v"))
- rlpStream << bigint(_tObj["v"].get_str());
+ rlpStream << bigint(_tObj.at("v").get_str());
if (_tObj.count("r"))
- rlpStream << bigint(_tObj["r"].get_str());
+ rlpStream << bigint(_tObj.at("r").get_str());
if (_tObj.count("s"))
- rlpStream << bigint(_tObj["s"].get_str());
+ rlpStream << bigint(_tObj.at("s").get_str());
if (_tObj.count("extrafield"))
- rlpStream << bigint(_tObj["extrafield"].get_str());
+ rlpStream << bigint(_tObj.at("extrafield").get_str());
return rlpStream;
}
diff --git a/TestHelper.h b/TestHelper.h
index 9d2625e1..5f2f8d6d 100644
--- a/TestHelper.h
+++ b/TestHelper.h
@@ -32,7 +32,6 @@
#include <libevm/ExtVMFace.h>
#include <libtestutils/Common.h>
-
#ifdef NOBOOST
#define TBOOST_REQUIRE(arg) if(arg == false) 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);
static void importState(json_spirit::mObject& _o, eth::State& _state);
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);
bytes executeTest();
@@ -168,7 +168,7 @@ protected:
u256 toInt(json_spirit::mValue const& _v);
byte toByte(json_spirit::mValue const& _v);
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);
eth::LogEntries importLog(json_spirit::mArray& _o);
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 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);
-RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj);
+RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject const& _tObj);
eth::LastHashes lastHashes(u256 _currentBlockNumber);
json_spirit::mObject fillJsonWithState(eth::State _state);
json_spirit::mObject fillJsonWithTransaction(eth::Transaction _txn);