aboutsummaryrefslogtreecommitdiffstats
path: root/transaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'transaction.cpp')
-rw-r--r--transaction.cpp200
1 files changed, 0 insertions, 200 deletions
diff --git a/transaction.cpp b/transaction.cpp
deleted file mode 100644
index b87cc37e..00000000
--- a/transaction.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- This file is part of cpp-ethereum.
-
- cpp-ethereum is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- cpp-ethereum is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file transaction.cpp
- * @author Dmitrii Khokhlov <winsvega@mail.ru>
- * @date 2015
- * Transaaction test functions.
- */
-
-#include "TestHelper.h"
-
-using namespace std;
-using namespace json_spirit;
-using namespace dev;
-using namespace dev::eth;
-
-namespace dev { namespace test {
-
-void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
-{
- for (auto& i: _v.get_obj())
- {
- cerr << i.first << endl;
- mObject& o = i.second.get_obj();
-
- if (_fillin)
- {
- BOOST_REQUIRE(o.count("transaction") > 0);
- mObject tObj = o["transaction"].get_obj();
-
- //Construct Rlp of the given transaction
- RLPStream rlpStream = createRLPStreamFromTransactionFields(tObj);
- o["rlp"] = "0x" + toHex(rlpStream.out());
-
- try
- {
- Transaction txFromFields(rlpStream.out(), CheckTransaction::Everything);
- if (!txFromFields.signature().isValid())
- BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("transaction from RLP signature is invalid") );
-
- o["sender"] = toString(txFromFields.sender());
- }
- catch(Exception const& _e)
- {
- //Transaction is InValid
- cnote << "Transaction Exception: " << diagnostic_information(_e);
- o.erase(o.find("transaction"));
- if (o.count("expect") > 0)
- {
- bool expectInValid = (o["expect"].get_str() == "invalid");
- if (Options::get().checkState)
- BOOST_CHECK_MESSAGE(expectInValid, "Check state: Transaction '" << i.first << "' is expected to be valid!");
- else
- BOOST_WARN_MESSAGE(expectInValid, "Check state: Transaction '" << i.first << "' is expected to be valid!");
-
- o.erase(o.find("expect"));
- }
- }
-
- //Transaction is Valid
- if (o.count("expect") > 0)
- {
- bool expectValid = (o["expect"].get_str() == "valid");
- if (Options::get().checkState)
- BOOST_CHECK_MESSAGE(expectValid, "Check state: Transaction '" << i.first << "' is expected to be invalid!");
- else
- BOOST_WARN_MESSAGE(expectValid, "Check state: Transaction '" << i.first << "' is expected to be invalid!");
-
- o.erase(o.find("expect"));
- }
- }
- else
- {
- BOOST_REQUIRE(o.count("rlp") > 0);
- Transaction txFromRlp;
- try
- {
- bytes stream = importByteArray(o["rlp"].get_str());
- RLP rlp(stream);
- txFromRlp = Transaction(rlp.data(), CheckTransaction::Everything);
- if (!txFromRlp.signature().isValid())
- BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("transaction from RLP signature is invalid") );
- }
- catch(Exception const& _e)
- {
- cnote << i.first;
- cnote << "Transaction Exception: " << diagnostic_information(_e);
- BOOST_CHECK_MESSAGE(o.count("transaction") == 0, "A transaction object should not be defined because the RLP is invalid!");
- continue;
- }
- catch(...)
- {
- BOOST_CHECK_MESSAGE(o.count("transaction") == 0, "A transaction object should not be defined because the RLP is invalid!");
- continue;
- }
-
- BOOST_REQUIRE(o.count("transaction") > 0);
-
- mObject tObj = o["transaction"].get_obj();
- Transaction txFromFields(createRLPStreamFromTransactionFields(tObj).out(), CheckTransaction::Everything);
-
- //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!");
- BOOST_CHECK_MESSAGE(txFromFields.value() == txFromRlp.value(), "Value in given RLP not matching the Transaction value!");
- BOOST_CHECK_MESSAGE(txFromFields.gasPrice() == txFromRlp.gasPrice(), "GasPrice in given RLP not matching the Transaction gasPrice!");
- BOOST_CHECK_MESSAGE(txFromFields.gas() == txFromRlp.gas(),"Gas in given RLP not matching the Transaction gas!");
- BOOST_CHECK_MESSAGE(txFromFields.nonce() == txFromRlp.nonce(),"Nonce in given RLP not matching the Transaction nonce!");
- BOOST_CHECK_MESSAGE(txFromFields.receiveAddress() == txFromRlp.receiveAddress(), "Receive address in given RLP not matching the Transaction 'to' address!");
- BOOST_CHECK_MESSAGE(txFromFields.sender() == txFromRlp.sender(), "Transaction sender address in given RLP not matching the Transaction 'vrs' signature!");
- BOOST_CHECK_MESSAGE(txFromFields == txFromRlp, "However, txFromFields != txFromRlp!");
- BOOST_REQUIRE (o.count("sender") > 0);
-
- Address addressReaded = Address(o["sender"].get_str());
- BOOST_CHECK_MESSAGE(txFromFields.sender() == addressReaded || txFromRlp.sender() == addressReaded, "Signature address of sender does not match given sender address!");
- }
- }//for
-}//doTransactionTests
-
-} }// Namespace Close
-
-
-BOOST_AUTO_TEST_SUITE(TransactionTests)
-
-BOOST_AUTO_TEST_CASE(ttTransactionTest)
-{
- dev::test::executeTests("ttTransactionTest", "/TransactionTests", dev::test::doTransactionTests);
-}
-
-BOOST_AUTO_TEST_CASE(ttWrongRLPTransaction)
-{
- dev::test::executeTests("ttWrongRLPTransaction", "/TransactionTests", dev::test::doTransactionTests);
-}
-
-BOOST_AUTO_TEST_CASE(tt10mbDataField)
-{
- if (test::Options::get().bigData)
- {
- auto start = chrono::steady_clock::now();
-
- dev::test::executeTests("tt10mbDataField", "/TransactionTests", dev::test::doTransactionTests);
-
- auto end = chrono::steady_clock::now();
- auto duration(chrono::duration_cast<chrono::milliseconds>(end - start));
- cnote << "test duration: " << duration.count() << " milliseconds.\n";
- }
-}
-
-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::doTransactionTests(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 transaction test with Exception: " << diagnostic_information(_e));
- }
- catch (std::exception const& _e)
- {
- BOOST_ERROR("Failed transaction test with Exception: " << _e.what());
- }
- }
- }
-}
-
-BOOST_AUTO_TEST_CASE(userDefinedFile)
-{
- dev::test::userDefinedTest("--singletest", dev::test::doTransactionTests);
-}
-
-BOOST_AUTO_TEST_SUITE_END()