mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Refactor testing via IPC.
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
cmake_policy(SET CMP0015 NEW)
|
||||
|
||||
aux_source_directory(. SRCS)
|
||||
|
||||
add_sources(${SRCS})
|
||||
@@ -20,7 +20,7 @@
|
||||
* Unit tests for the gas estimator.
|
||||
*/
|
||||
|
||||
#include <test/libsolidity/solidityExecutionFramework.h>
|
||||
#include <test/libsolidity/SolidityExecutionFramework.h>
|
||||
#include <libevmasm/GasMeter.h>
|
||||
#include <libevmasm/KnownState.h>
|
||||
#include <libevmasm/PathGasMeter.h>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <boost/test/unit_test.hpp>
|
||||
#include <libdevcore/Hash.h>
|
||||
#include <libsolidity/interface/Exceptions.h>
|
||||
#include <test/libsolidity/solidityExecutionFramework.h>
|
||||
#include <test/libsolidity/SolidityExecutionFramework.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
/**
|
||||
* @author Christian <c@ethdev.com>
|
||||
* @date 2016
|
||||
* Framework for executing Solidity contracts and testing them against C++ implementation.
|
||||
*/
|
||||
|
||||
#include <test/libsolidity/SolidityExecutionFramework.h>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace dev;
|
||||
using namespace dev::solidity;
|
||||
using namespace dev::solidity::test;
|
||||
|
||||
|
||||
ExecutionFramework::ExecutionFramework():
|
||||
m_rpc(RPCSession::instance("/tmp/test/geth.ipc")),
|
||||
m_sender(m_rpc.account(0)),
|
||||
m_state(0)
|
||||
{
|
||||
eth::NoProof::init();
|
||||
m_sealEngine.reset(eth::ChainParams().createSealEngine());
|
||||
if (g_logVerbosity != -1)
|
||||
g_logVerbosity = 0;
|
||||
|
||||
cout << "New Framework" << endl;
|
||||
m_rpc.test_rewindToBlock(0);
|
||||
}
|
||||
|
||||
void ExecutionFramework::sendMessage(bytes const& _data, bool _isCreation, u256 const& _value)
|
||||
{
|
||||
RPCSession::TransactionData d;
|
||||
d.data = "0x" + toHex(_data);
|
||||
d.from = "0x" + toString(m_sender);
|
||||
d.gas = toHex(m_gas, HexPrefix::Add);
|
||||
d.gasPrice = toHex(m_gasPrice, HexPrefix::Add);
|
||||
d.value = toHex(_value, HexPrefix::Add);
|
||||
if (!_isCreation)
|
||||
{
|
||||
d.to = dev::toString(m_contractAddress);
|
||||
BOOST_REQUIRE(m_rpc.eth_getCode(d.to, "latest").size() > 2);
|
||||
// Use eth_call to get the output
|
||||
m_output = fromHex(m_rpc.eth_call(d, "latest"), WhenError::Throw);
|
||||
}
|
||||
|
||||
string txHash = m_rpc.eth_sendTransaction(d);
|
||||
m_rpc.test_mineBlocks(1);
|
||||
RPCSession::TransactionReceipt receipt(m_rpc.eth_getTransactionReceipt(txHash));
|
||||
|
||||
if (_isCreation)
|
||||
{
|
||||
m_contractAddress = Address(receipt.contractAddress);
|
||||
BOOST_REQUIRE(m_contractAddress);
|
||||
string code = m_rpc.eth_getCode(receipt.contractAddress, "latest");
|
||||
BOOST_REQUIRE(code.size() > 2);
|
||||
m_output = asBytes(code);
|
||||
}
|
||||
|
||||
m_gasUsed = u256(receipt.gasUsed);
|
||||
m_logs.clear();
|
||||
}
|
||||
+3
-54
@@ -39,7 +39,6 @@
|
||||
|
||||
namespace dev
|
||||
{
|
||||
|
||||
namespace solidity
|
||||
{
|
||||
namespace test
|
||||
@@ -49,24 +48,7 @@ class ExecutionFramework
|
||||
{
|
||||
|
||||
public:
|
||||
ExecutionFramework():
|
||||
m_state(0),
|
||||
m_socket("/tmp/test/geth.ipc")
|
||||
{
|
||||
eth::NoProof::init();
|
||||
m_sealEngine.reset(eth::ChainParams().createSealEngine());
|
||||
if (g_logVerbosity != -1)
|
||||
g_logVerbosity = 0;
|
||||
|
||||
string account = m_socket.personal_newAccount("qwerty");
|
||||
m_socket.test_setChainParams(
|
||||
"0x1000000000000000000000000000000000000000",
|
||||
account,
|
||||
"1000000000000000000000000000000000000000000000"
|
||||
);
|
||||
m_socket.personal_unlockAccount(account, "qwerty", 10000);
|
||||
m_sender = Address(account);
|
||||
}
|
||||
ExecutionFramework();
|
||||
|
||||
bytes const& compileAndRunWithoutCheck(
|
||||
std::string const& _sourceCode,
|
||||
@@ -267,40 +249,9 @@ private:
|
||||
}
|
||||
|
||||
protected:
|
||||
void sendMessage(bytes const& _data, bool _isCreation, u256 const& _value = 0)
|
||||
{
|
||||
RPCRequest::transactionData d;
|
||||
d.data = "0x" + toHex(_data);
|
||||
d.from = "0x" + toString(m_sender);
|
||||
d.gas = toHex(m_gas, HexPrefix::Add);
|
||||
d.gasPrice = toHex(m_gasPrice, HexPrefix::Add);
|
||||
d.value = toHex(_value, HexPrefix::Add);
|
||||
if (_isCreation)
|
||||
d.to = "";
|
||||
else
|
||||
d.to = dev::toString(m_contractAddress);
|
||||
void sendMessage(bytes const& _data, bool _isCreation, u256 const& _value = 0);
|
||||
|
||||
string code = m_socket.eth_getCode(d.to, "latest");
|
||||
string output = m_socket.eth_call(d, "latest");
|
||||
string hash = m_socket.eth_sendTransaction(d);
|
||||
m_socket.test_mineBlocks(1);
|
||||
RPCRequest::transactionReceipt receipt;
|
||||
receipt = m_socket.eth_getTransactionReceipt(hash);
|
||||
|
||||
if (_isCreation)
|
||||
{
|
||||
m_contractAddress = Address(receipt.contractAddress);
|
||||
BOOST_REQUIRE(m_contractAddress);
|
||||
string code = m_socket.eth_getCode(receipt.contractAddress, "latest");
|
||||
BOOST_REQUIRE(code.size() > 2);
|
||||
}
|
||||
else
|
||||
BOOST_REQUIRE(code.size() > 2);
|
||||
|
||||
m_gasUsed = u256(receipt.gasUsed);
|
||||
m_output = fromHex(output, WhenError::Throw);
|
||||
m_logs.clear();
|
||||
}
|
||||
RPCSession& m_rpc;
|
||||
|
||||
std::unique_ptr<eth::SealEngineFace> m_sealEngine;
|
||||
size_t m_optimizeRuns = 200;
|
||||
@@ -316,8 +267,6 @@ protected:
|
||||
bytes m_output;
|
||||
eth::LogEntries m_logs;
|
||||
u256 m_gasUsed;
|
||||
|
||||
RPCRequest m_socket;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <memory>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <test/libsolidity/solidityExecutionFramework.h>
|
||||
#include <test/libsolidity/SolidityExecutionFramework.h>
|
||||
#include <libevmasm/CommonSubexpressionEliminator.h>
|
||||
#include <libevmasm/ControlFlowGraph.h>
|
||||
#include <libevmasm/Assembly.h>
|
||||
|
||||
Reference in New Issue
Block a user