Allow creation of 'bare' ursula in utils.

pull/328/head
Kieran Prasch 2018-06-24 23:24:51 -07:00
parent 8204351b6f
commit 54d939c81a
1 changed files with 42 additions and 27 deletions

View File

@ -24,34 +24,59 @@ constants.NUMBER_OF_URSULAS_IN_NETWORK(10)
_ALL_URSULAS = {}
def make_ursulas(ether_addresses: list, ursula_starting_port: int, miner_agent=None, miners=False) -> List[Ursula]:
def make_ursulas(ether_addresses: list, ursula_starting_port: int,
miner_agent=None, miners=False, bare=False) -> Set[Ursula]:
"""
:param ether_addresses: Ethereum addresses to create ursulas with.
:param how_many_ursulas: How many Ursulas to create.
:param ursula_starting_port: The port of the first created Ursula; subsequent Ursulas will increment the port number by 1.
:return: A list of created Ursulas
"""
event_loop = asyncio.get_event_loop()
ursulas = set()
for port, ether_address in enumerate(ether_addresses, start=ursula_starting_port):
ursula = Ursula(is_me=True,
ether_address=ether_address,
dht_host="127.0.0.1",
dht_port=port,
db_name="test-{}".format(port),
rest_host="127.0.0.1",
rest_port=port+100,
always_be_learning=False,
miner_agent=miner_agent,
)
ursula.attach_rest_server()
class MockDatastoreThreadPool(object):
def callInThread(self, f, *args, **kwargs):
return f(*args, **kwargs)
if bare:
ursula = Ursula(is_me=False, # do not attach dht server
rest_host="127.0.0.1",
rest_port=port + 100,
ether_address=ether_address,
always_be_learning=False,
miner_agent=miner_agent)
ursula.datastore_threadpool = MockDatastoreThreadPool()
ursula.dht_listen()
ursula.is_me = True # Patch to allow execution of transacting methods in tests
else:
ursula = Ursula(is_me=True,
ether_address=ether_address,
dht_host="127.0.0.1",
dht_port=port,
db_name="test-{}".format(port),
rest_host="127.0.0.1",
rest_port=port+100,
always_be_learning=False,
miner_agent=miner_agent)
ursula.attach_rest_server()
class MockDatastoreThreadPool(object):
def callInThread(self, f, *args, **kwargs):
return f(*args, **kwargs)
ursula.datastore_threadpool = MockDatastoreThreadPool()
ursula.dht_listen()
for ursula_to_teach in ursulas:
# Add other Ursulas as known nodes.
for ursula_to_learn_about in ursulas:
ursula_to_teach.remember_node(ursula_to_learn_about)
event_loop.run_until_complete(
ursula.dht_server.bootstrap(
[("127.0.0.1", ursula_starting_port + _c) for _c in range(len(ursulas))]))
ursula.publish_dht_information()
if miners is True:
# TODO: 309
@ -64,20 +89,10 @@ def make_ursulas(ether_addresses: list, ursula_starting_port: int, miner_agent=N
periods = random.randint(min_locktime, max_locktime)
ursula.stake(amount=amount, lock_periods=periods)
ursula.miner_agent.blockchain.time_travel(periods=1)
ursulas.add(ursula)
_ALL_URSULAS[ursula.rest_interface.port] = ursula
for ursula_to_teach in ursulas:
# Add other Ursulas as known nodes.
for ursula_to_learn_about in ursulas:
ursula_to_teach.remember_node(ursula_to_learn_about)
event_loop.run_until_complete(
ursula.dht_server.bootstrap([("127.0.0.1", ursula_starting_port + _c) for _c in range(len(ursulas))]))
ursula.publish_dht_information()
return ursulas