aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TestHelper.cpp27
-rw-r--r--TestHelper.h1
-rw-r--r--blFirstTestFiller.json15
-rw-r--r--block.cpp197
-rw-r--r--transaction.cpp30
5 files changed, 169 insertions, 101 deletions
diff --git a/TestHelper.cpp b/TestHelper.cpp
index 5a579702..3289305c 100644
--- a/TestHelper.cpp
+++ b/TestHelper.cpp
@@ -487,6 +487,33 @@ void executeTests(const string& _name, const string& _testPathAppendix, std::fun
}
}
+bytes createTransactionFromFields(json_spirit::mObject& _tObj)
+{
+ BOOST_REQUIRE(_tObj.count("data") > 0);
+ BOOST_REQUIRE(_tObj.count("value") > 0);
+ BOOST_REQUIRE(_tObj.count("gasPrice") > 0);
+ BOOST_REQUIRE(_tObj.count("gasLimit") > 0);
+ BOOST_REQUIRE(_tObj.count("nonce")> 0);
+ BOOST_REQUIRE(_tObj.count("to") > 0);
+
+ BOOST_REQUIRE(_tObj.count("v") > 0);
+ BOOST_REQUIRE(_tObj.count("r") > 0);
+ BOOST_REQUIRE(_tObj.count("s") > 0);
+
+ //Construct Rlp of the given transaction
+ RLPStream rlpStream;
+ rlpStream.appendList(9);
+ rlpStream << bigint(_tObj["nonce"].get_str()) << bigint(_tObj["gasPrice"].get_str()) << bigint(_tObj["gasLimit"].get_str());
+ if (_tObj["to"].get_str().empty())
+ rlpStream << "";
+ else
+ rlpStream << Address(_tObj["to"].get_str());
+ rlpStream << bigint(_tObj["value"].get_str()) << importData(_tObj);
+ rlpStream << bigint(_tObj["v"].get_str()) << bigint(_tObj["r"].get_str()) << bigint(_tObj["s"].get_str());
+
+ return rlpStream.out();
+}
+
void processCommandLineOptions()
{
diff --git a/TestHelper.h b/TestHelper.h
index ae6ea20c..344f61a3 100644
--- a/TestHelper.h
+++ b/TestHelper.h
@@ -79,6 +79,7 @@ void checkCallCreates(eth::Transactions _resultCallCreates, eth::Transactions _e
void executeTests(const std::string& _name, const std::string& _testPathAppendix, std::function<void(json_spirit::mValue&, bool)> doTests);
std::string getTestPath();
void userDefinedTest(std::string testTypeFlag, std::function<void(json_spirit::mValue&, bool)> doTests);
+bytes createTransactionFromFields(json_spirit::mObject& _tObj);
void processCommandLineOptions();
eth::LastHashes lastHashes(u256 _currentBlockNumber);
diff --git a/blFirstTestFiller.json b/blFirstTestFiller.json
new file mode 100644
index 00000000..0084fda1
--- /dev/null
+++ b/blFirstTestFiller.json
@@ -0,0 +1,15 @@
+{
+ "firstBlockTest" : {
+ "transactions": [{
+ "nonce": "0",
+ "gasPrice": "0x09184e72a000",
+ "gasLimit": "0x0f3e6f",
+ "to": "",
+ "value": "",
+ "data": "0x60056013565b6101918061001d6000396000f35b3360008190555056006001600060e060020a6000350480630a874df61461003a57806341c0e1b514610058578063a02b161e14610066578063dbbdf0831461007757005b610045600435610149565b80600160a060020a031660005260206000f35b610060610161565b60006000f35b6100716004356100d4565b60006000f35b61008560043560243561008b565b60006000f35b600054600160a060020a031632600160a060020a031614156100ac576100b1565b6100d0565b8060018360005260205260406000208190555081600060005260206000a15b5050565b600054600160a060020a031633600160a060020a031614158015610118575033600160a060020a0316600182600052602052604060002054600160a060020a031614155b61012157610126565b610146565b600060018260005260205260406000208190555080600060005260206000a15b50565b60006001826000526020526040600020549050919050565b600054600160a060020a031633600160a060020a0316146101815761018f565b600054600160a060020a0316ff5b56",
+ "v": "0x1b",
+ "r": "0xd4287e915ebac7a8af390560fa53c8f0b7f13802ba0393d7afa5823c2560ca89",
+ "s": "0xae75db31a34f7e386ad459646de98ec3a1c88cc91b11620b4ffd86871f579942"
+ }]
+ }
+}
diff --git a/block.cpp b/block.cpp
index 40984e8d..518b6123 100644
--- a/block.cpp
+++ b/block.cpp
@@ -20,6 +20,7 @@
* block test functions.
*/
+#include <libethereum/CanonBlockChain.h>
#include "TestHelper.h"
using namespace std;
@@ -116,40 +117,42 @@ void doBlockTests(json_spirit::mValue& _v, bool _fillin)
}
else
{
- BOOST_REQUIRE(o.count("block") > 0);
-
- // construct Rlp of the given block
- bytes blockRLP = createBlockRLPFromFields(o["block"].get_obj());
- RLP myRLP(blockRLP);
- o["rlp"] = toHex(blockRLP);
-
- try
- {
- BlockInfo blockFromFields;
- blockFromFields.populateFromHeader(myRLP, false);
- (void)blockFromFields;
- //blockFromFields.verifyInternals(blockRLP);
- }
- catch (Exception const& _e)
- {
- cnote << "block construction did throw an exception: " << diagnostic_information(_e);
- BOOST_ERROR("Failed block construction Test with Exception: " << _e.what());
- o.erase(o.find("block"));
- }
- catch (std::exception const& _e)
- {
- cnote << "block construction did throw an exception: " << _e.what();
- BOOST_ERROR("Failed block construction Test with Exception: " << _e.what());
- o.erase(o.find("block"));
- }
- catch(...)
- {
- cnote << "block construction did throw an unknow exception\n";
- o.erase(o.find("block"));
- }
+// BOOST_REQUIRE(o.count("block") > 0);
+
+// // construct Rlp of the given block
+// bytes blockRLP = createBlockRLPFromFields(o["block"].get_obj());
+// RLP myRLP(blockRLP);
+// o["rlp"] = toHex(blockRLP);
+
+// try
+// {
+// BlockInfo blockFromFields;
+// blockFromFields.populateFromHeader(myRLP, false);
+// (void)blockFromFields;
+// //blockFromFields.verifyInternals(blockRLP);
+// }
+// catch (Exception const& _e)
+// {
+// cnote << "block construction did throw an exception: " << diagnostic_information(_e);
+// BOOST_ERROR("Failed block construction Test with Exception: " << _e.what());
+// o.erase(o.find("block"));
+// }
+// catch (std::exception const& _e)
+// {
+// cnote << "block construction did throw an exception: " << _e.what();
+// BOOST_ERROR("Failed block construction Test with Exception: " << _e.what());
+// o.erase(o.find("block"));
+// }
+// catch(...)
+// {
+// cnote << "block construction did throw an unknow exception\n";
+// o.erase(o.find("block"));
+// }
BOOST_REQUIRE(o.count("transactions") > 0);
+ TransactionQueue txs;
+
for (auto const& txObj: o["transactions"].get_array())
{
mObject tx = txObj.get_obj();
@@ -162,12 +165,60 @@ void doBlockTests(json_spirit::mValue& _v, bool _fillin)
BOOST_REQUIRE(tx.count("r") > 0);
BOOST_REQUIRE(tx.count("s") > 0);
BOOST_REQUIRE(tx.count("data") > 0);
+ cout << "attempt to import transaction\n";
+ txs.attemptImport(createTransactionFromFields(tx));
+ }
+ cout << "done importing txs\n";
- Transaction txFromFields = createTransactionFromFields(tx);
+ //BOOST_REQUIRE(o.count("env") > 0);
+ //BOOST_REQUIRE(o.count("pre") > 0);
+
+// ImportTest importer;
+// importer.importEnv(o["env"].get_obj());
+// importer.importState(o["pre"].get_obj(), m_statePre);
+
+// State theState = importer.m_statePre;
+// bytes output;
+
+ cout << "construct bc\n";
+ CanonBlockChain bc(true);
+ cout << "construct state\n";
+ State theState;
+
+ try
+ {
+ cout << "sync bc and txs in state\n";
+ theState.sync(bc,txs);
+ // lock
+ cout << "commit to mine\n";
+ theState.commitToMine(bc); // will call uncommitToMine if a repeat.
+ // unlock
+ MineInfo info;
+ cout << "mine...\n";
+ for (info.completed = false; !info.completed; info = theState.mine()) {}
+ cout << "done mining, completeMine\n";
+ // lock
+ theState.completeMine();
+ // unlock
+
+ cout << "new block: " << theState.blockData() << endl << theState.info() << endl;
+ }
+ catch (Exception const& _e)
+ {
+ cnote << "state sync did throw an exception: " << diagnostic_information(_e);
+ }
+ catch (std::exception const& _e)
+ {
+ cnote << "state sync did throw an exception: " << _e.what();
+ }
+
+ // write block and rlp to json
+
+ //TODO if block rlp is invalid, delete transactions, and block
+
- }
}
}
}
@@ -177,48 +228,48 @@ void doBlockTests(json_spirit::mValue& _v, bool _fillin)
BOOST_AUTO_TEST_SUITE(BlockTests)
-BOOST_AUTO_TEST_CASE(blValidBlocksTest)
-{
- dev::test::executeTests("blValidBlockTest", "/BlockTests", dev::test::doBlockTests);
-}
-
-BOOST_AUTO_TEST_CASE(ttCreateTest)
+BOOST_AUTO_TEST_CASE(blFirstTest)
{
- for (int i = 1; i < boost::unit_test::framework::master_test_suite().argc; ++i)
- {
- string arg = boost::unit_test::framework::master_test_suite().argv[i];
- if (arg == "--createtest")
- {
- if (boost::unit_test::framework::master_test_suite().argc <= i + 2)
- {
- cnote << "usage: ./testeth --createtest <PathToConstructor> <PathToDestiny>\n";
- return;
- }
- try
- {
- cnote << "Populating tests...";
- json_spirit::mValue v;
- string s = asString(dev::contents(boost::unit_test::framework::master_test_suite().argv[i + 1]));
- BOOST_REQUIRE_MESSAGE(s.length() > 0, "Content of " + (string)boost::unit_test::framework::master_test_suite().argv[i + 1] + " is empty.");
- json_spirit::read_string(s, v);
- dev::test::doBlockTests(v, true);
- writeFile(boost::unit_test::framework::master_test_suite().argv[i + 2], asBytes(json_spirit::write_string(v, true)));
- }
- catch (Exception const& _e)
- {
- BOOST_ERROR("Failed block test with Exception: " << diagnostic_information(_e));
- }
- catch (std::exception const& _e)
- {
- BOOST_ERROR("Failed block test with Exception: " << _e.what());
- }
- }
- }
+ dev::test::executeTests("blFirstTest", "/BlockTests", dev::test::doBlockTests);
}
-BOOST_AUTO_TEST_CASE(userDefinedFileTT)
-{
- dev::test::userDefinedTest("--bltest", dev::test::doBlockTests);
-}
+//BOOST_AUTO_TEST_CASE(ttCreateTest)
+//{
+// for (int i = 1; i < boost::unit_test::framework::master_test_suite().argc; ++i)
+// {
+// string arg = boost::unit_test::framework::master_test_suite().argv[i];
+// if (arg == "--createtest")
+// {
+// if (boost::unit_test::framework::master_test_suite().argc <= i + 2)
+// {
+// cnote << "usage: ./testeth --createtest <PathToConstructor> <PathToDestiny>\n";
+// return;
+// }
+// try
+// {
+// cnote << "Populating tests...";
+// json_spirit::mValue v;
+// string s = asString(dev::contents(boost::unit_test::framework::master_test_suite().argv[i + 1]));
+// BOOST_REQUIRE_MESSAGE(s.length() > 0, "Content of " + (string)boost::unit_test::framework::master_test_suite().argv[i + 1] + " is empty.");
+// json_spirit::read_string(s, v);
+// dev::test::doBlockTests(v, true);
+// writeFile(boost::unit_test::framework::master_test_suite().argv[i + 2], asBytes(json_spirit::write_string(v, true)));
+// }
+// catch (Exception const& _e)
+// {
+// BOOST_ERROR("Failed block test with Exception: " << diagnostic_information(_e));
+// }
+// catch (std::exception const& _e)
+// {
+// BOOST_ERROR("Failed block test with Exception: " << _e.what());
+// }
+// }
+// }
+//}
+
+//BOOST_AUTO_TEST_CASE(userDefinedFileTT)
+//{
+// dev::test::userDefinedTest("--bltest", dev::test::doBlockTests);
+//}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/transaction.cpp b/transaction.cpp
index e1e27530..00de5fb2 100644
--- a/transaction.cpp
+++ b/transaction.cpp
@@ -29,33 +29,6 @@ using namespace dev::eth;
namespace dev { namespace test {
-Transaction createTransactionFromFields(mObject& _tObj)
-{
- BOOST_REQUIRE(_tObj.count("data") > 0);
- BOOST_REQUIRE(_tObj.count("value") > 0);
- BOOST_REQUIRE(_tObj.count("gasPrice") > 0);
- BOOST_REQUIRE(_tObj.count("gasLimit") > 0);
- BOOST_REQUIRE(_tObj.count("nonce")> 0);
- BOOST_REQUIRE(_tObj.count("to") > 0);
-
- BOOST_REQUIRE(_tObj.count("v") > 0);
- BOOST_REQUIRE(_tObj.count("r") > 0);
- BOOST_REQUIRE(_tObj.count("s") > 0);
-
- //Construct Rlp of the given transaction
- RLPStream rlpStream;
- rlpStream.appendList(9);
- rlpStream << bigint(_tObj["nonce"].get_str()) << bigint(_tObj["gasPrice"].get_str()) << bigint(_tObj["gasLimit"].get_str());
- if (_tObj["to"].get_str().empty())
- rlpStream << "";
- else
- rlpStream << Address(_tObj["to"].get_str());
- rlpStream << bigint(_tObj["value"].get_str()) << importData(_tObj);
- rlpStream << bigint(_tObj["v"].get_str()) << bigint(_tObj["r"].get_str()) << bigint(_tObj["s"].get_str());
-
- return Transaction(rlpStream.out(), CheckSignature::Sender);
-}
-
void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
{
for (auto& i: _v.get_obj())
@@ -84,7 +57,8 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
BOOST_REQUIRE(o.count("transaction") > 0);
mObject tObj = o["transaction"].get_obj();
- Transaction txFromFields = createTransactionFromFields(tObj);
+ bytes txRLP = createTransactionFromFields(tObj);
+ Transaction txFromFields(txRLP, CheckSignature::Sender);
//Check the fields restored from RLP to original fields
BOOST_CHECK_MESSAGE(txFromFields.data() == txFromRlp.data(), "Data in given RLP not matching the Transaction data!");