Add admin interface

This commit is contained in:
Piper Merriam 2016-08-12 16:56:08 -06:00
parent 004ce38efa
commit 762aa2d63b
7 changed files with 132 additions and 4 deletions

View File

@ -0,0 +1,4 @@
def test_admin_addPeer(web3, skip_if_testrpc):
skip_if_testrpc(web3)
assert web3.admin.addPeer('enode://44826a5d6a55f88a18298bca4773fca5749cdc3a5c9f308aa7d810e9b31123f3e7c5fba0b1d70aac5308426f47df2a128a6747040a3815cc7dd7167d03be320d@127.0.0.1:30304') is True

View File

@ -0,0 +1,7 @@
def test_admin_nodeInfo(web3, skip_if_testrpc):
skip_if_testrpc(web3)
node_info = web3.admin.nodeInfo
assert 'enode' in node_info
assert 'id' in node_info

View File

@ -0,0 +1,4 @@
def test_admin_peers(web3, skip_if_testrpc):
skip_if_testrpc(web3)
assert web3.admin.peers == []

View File

@ -0,0 +1,18 @@
import pytest
import subprocess
from web3.utils.string import force_text
def test_admin_setSolc(web3, skip_if_testrpc):
skip_if_testrpc(web3)
try:
solc_path = subprocess.check_output(['which', 'solc']).strip()
except subprocess.CalledProcessError:
pytest.skip('solc binary not found')
solc_version = subprocess.check_output(['solc', '--version']).strip()
actual = web3.admin.setSolc(solc_path)
assert force_text(solc_version) in actual
assert force_text(solc_path) in actual

View File

@ -0,0 +1,54 @@
import pytest
from flaky import flaky
def get_open_port():
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 0))
s.listen(1)
port = s.getsockname()[1]
s.close()
return port
@flaky(max_runs=3)
def test_admin_startRPC(web3_ipc_empty, skip_if_testrpc):
web3 = web3_ipc_empty
skip_if_testrpc(web3)
with pytest.raises(ValueError):
web3.admin.startRPC()
assert web3.admin.stopRPC()
assert web3.admin.startRPC(port=get_open_port())
@flaky(max_runs=3)
def test_admin_stopRPC(web3_ipc_empty, skip_if_testrpc):
web3 = web3_ipc_empty
skip_if_testrpc(web3)
assert web3.admin.stopRPC()
with pytest.raises(ValueError):
web3.admin.stopRPC()
@flaky(max_runs=3)
def test_admin_startWS(web3_ipc_empty, skip_if_testrpc):
web3 = web3_ipc_empty
skip_if_testrpc(web3)
with pytest.raises(ValueError):
web3.admin.startWS()
assert web3.admin.stopWS()
assert web3.admin.startWS(port=get_open_port())
@flaky(max_runs=3)
def test_admin_stopWS(web3_ipc_empty, skip_if_testrpc):
web3 = web3_ipc_empty
skip_if_testrpc(web3)
assert web3.admin.stopWS()
with pytest.raises(ValueError):
web3.admin.stopWS()

39
web3/admin.py Normal file
View File

@ -0,0 +1,39 @@
class Admin(object):
def __init__(self, request_manager):
self.request_manager = request_manager
def addPeer(self, node_url):
return self.request_manager.request_blocking("admin_addPeer", [node_url])
@property
def datadir(self):
return self.request_manager.request_blocking("admin_datadir", [])
@property
def nodeInfo(self):
return self.request_manager.request_blocking("admin_nodeInfo", [])
@property
def peers(self):
return self.request_manager.request_blocking("admin_peers", [])
def setSolc(self, solc_path):
return self.request_manager.request_blocking("admin_setSolc", [solc_path])
def startRPC(self, host='localhost', port='8545', cors="", apis="eth,net,web3"):
return self.request_manager.request_blocking(
"admin_startRPC",
[host, port, cors, apis],
)
def startWS(self, host='localhost', port='8546', cors="", apis="eth,net,web3"):
return self.request_manager.request_blocking(
"admin_startWS",
[host, port, cors, apis],
)
def stopRPC(self):
return self.request_manager.request_blocking("admin_stopRPC", [])
def stopWS(self):
return self.request_manager.request_blocking("admin_stopWS", [])

View File

@ -1,13 +1,14 @@
from __future__ import absolute_import
from web3.eth import Eth
from web3.admin import Admin
from web3.db import Db
from web3.shh import Shh
from web3.eth import Eth
from web3.miner import Miner
from web3.net import Net
from web3.personal import Personal
from web3.version import Version
from web3.shh import Shh
from web3.txpool import TxPool
from web3.miner import Miner
from web3.version import Version
from web3.providers.rpc import (
RPCProvider,
@ -54,6 +55,7 @@ class Web3(object):
self.version = Version(self._requestManager)
self.txpool = TxPool(self._requestManager)
self.miner = Miner(self._requestManager)
self.admin = Admin(self._requestManager)
self.providers = {
'RPCProvider': RPCProvider,