diff options
author | Dimitry <winsvega@mail.ru> | 2016-06-09 01:22:36 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2016-06-29 05:18:54 +0800 |
commit | 55cfba6514c5d53ebd566799ab9a9ee4e60ed2b0 (patch) | |
tree | 4d647bd41d2df6e84652852dfc5e2b1bb428421f /test/IPCSocket.h | |
parent | 5aca97af0d7719dea36f4c33df35966e5e83be11 (diff) | |
download | dexon-solidity-55cfba6514c5d53ebd566799ab9a9ee4e60ed2b0.tar.gz dexon-solidity-55cfba6514c5d53ebd566799ab9a9ee4e60ed2b0.tar.zst dexon-solidity-55cfba6514c5d53ebd566799ab9a9ee4e60ed2b0.zip |
test framework
IPC socket and RPC communication with node
Diffstat (limited to 'test/IPCSocket.h')
-rw-r--r-- | test/IPCSocket.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/test/IPCSocket.h b/test/IPCSocket.h new file mode 100644 index 00000000..fbb07c1f --- /dev/null +++ b/test/IPCSocket.h @@ -0,0 +1,132 @@ +/* + 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 IPCSocket.h + * @author Dimtiry Khokhlov <dimitry@ethdev.com> + * @date 2016 + */ + +#include <string> +#include <stdio.h> +#include <map> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <boost/test/unit_test.hpp> + +using namespace std; + +class IPCSocket +{ +public: + IPCSocket(string const& _address); + string sendRequest(string const& _req); + ~IPCSocket() { close(m_socket); fclose(m_fp); } + +private: + FILE *m_fp; + string m_address; + int m_socket; + +}; + +class RPCRequest +{ +public: + struct transactionData + { + string from; + string to; + string gas; + string gasPrice; + string value; + string data; + }; + + struct transactionReceipt + { + string gasUsed; + string contractAddress; + }; + + RPCRequest(string const& _localSocketAddress): m_ipcSocket(_localSocketAddress) {} + string eth_getCode(string const& _address, string const& _blockNumber); + string eth_call(transactionData const& _td, string const& _blockNumber); + transactionReceipt eth_getTransactionReceipt(string const& _transactionHash); + string eth_sendTransaction(transactionData const& _transactionData); + string eth_sendTransaction(string const& _transaction); + string eth_getBalance(string const& _address, string const& _blockNumber); + string personal_newAccount(string const& _password); + void personal_unlockAccount(string const& _address, string const& _password, int _duration); + void test_setChainParams(string const& _author, string const& _account, string const& _balance); + void test_setChainParams(string const& _config); + void test_mineBlocks(int _number); + string rpcCall(string const& _methodName, vector<string> const& _args); + +private: + inline string makeString(string const& _arg) { return "\"" + _arg + "\""; } + inline string getReply(string const& _what, string const& _arg); + /// Parse string replacing keywords to values + void parseString(string& _string, map<string, string> const& _varMap); + + IPCSocket m_ipcSocket; + size_t m_rpcSequence = 1; + + //Just working example of the node configuration file + string const c_genesisConfiguration = R"( + { + "sealEngine": "NoProof", + "options": { + }, + "params": { + "accountStartNonce": "0x", + "maximumExtraDataSize": "0x1000000", + "blockReward": "0x", + "registrar": "" + }, + "genesis": { + "author": "[AUTHOR]", + "timestamp": "0x00", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x", + "gasLimit": "0x1000000000000" + }, + "accounts": { + "0000000000000000000000000000000000000001": { "wei": "1", "precompiled": { "name": "ecrecover", "linear": { "base": 3000, "word": 0 } } }, + "0000000000000000000000000000000000000002": { "wei": "1", "precompiled": { "name": "sha256", "linear": { "base": 60, "word": 12 } } }, + "0000000000000000000000000000000000000003": { "wei": "1", "precompiled": { "name": "ripemd160", "linear": { "base": 600, "word": 120 } } }, + "0000000000000000000000000000000000000004": { "wei": "1", "precompiled": { "name": "identity", "linear": { "base": 15, "word": 3 } } }, + "[ACCOUNT]": { "wei": "[BALANCE]" } + }, + "network": { + "nodes": [ + ] + } + } + )"; + + string const c_transaction = R"( + { + "from": "[FROM]", + "to": "[TO]", + "gas": "[GAS]", + "gasPrice": "[GASPRICE]", + "value": "[VALUE]", + "data": "[DATA]" + } + )"; +}; + |