mirror of https://github.com/nucypher/nucypher.git
Allow creation of 'bare' ursula in utils.
parent
8204351b6f
commit
54d939c81a
|
@ -24,34 +24,59 @@ constants.NUMBER_OF_URSULAS_IN_NETWORK(10)
|
||||||
_ALL_URSULAS = {}
|
_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 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.
|
: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
|
:return: A list of created Ursulas
|
||||||
"""
|
"""
|
||||||
|
|
||||||
event_loop = asyncio.get_event_loop()
|
event_loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
ursulas = set()
|
ursulas = set()
|
||||||
for port, ether_address in enumerate(ether_addresses, start=ursula_starting_port):
|
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):
|
if bare:
|
||||||
def callInThread(self, f, *args, **kwargs):
|
ursula = Ursula(is_me=False, # do not attach dht server
|
||||||
return f(*args, **kwargs)
|
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.is_me = True # Patch to allow execution of transacting methods in tests
|
||||||
ursula.dht_listen()
|
|
||||||
|
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:
|
if miners is True:
|
||||||
# TODO: 309
|
# 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)
|
periods = random.randint(min_locktime, max_locktime)
|
||||||
|
|
||||||
ursula.stake(amount=amount, lock_periods=periods)
|
ursula.stake(amount=amount, lock_periods=periods)
|
||||||
ursula.miner_agent.blockchain.time_travel(periods=1)
|
|
||||||
|
|
||||||
ursulas.add(ursula)
|
ursulas.add(ursula)
|
||||||
_ALL_URSULAS[ursula.rest_interface.port] = 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
|
return ursulas
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue