The connectivity problem will now manfiest itself as NotEnoughNodes, as Bob won't have learned in time to try to get the map.

pull/2140/head
jMyles 2020-05-28 22:05:08 -07:00
parent d3c6d121d4
commit 1170c27b63
8 changed files with 11 additions and 12 deletions

View File

@ -596,13 +596,13 @@ class Bob(Character):
raise _MapClass.NowhereToBeFound(f"Asked {len(self.known_nodes)} nodes, but none had map {map_id} ")
self.block_until_number_of_known_nodes_is(8, timeout=2, learn_on_this_thread=True)
nodes_with_map = self.matching_nodes_among(self.known_nodes, no_less_than=8)
nodes_with_map = self.matching_nodes_among(self.known_nodes)
random.shuffle(nodes_with_map)
for node in nodes_with_map:
try:
response = network_middleware.get_treasure_map_from_node(node=node, map_id=map_id)
except NodeSeemsToBeDown:
except (NodeSeemsToBeDown, self.NotEnoughNodes):
continue
except network_middleware.NotFound:
self.log.info(f"Node {node} claimed not to have TreasureMap {map_id}")

View File

@ -167,7 +167,7 @@ class BlockchainArrangement(Arrangement):
class PolicyPayloadMutex(DeferredList):
def __init__(self, deferredList, percent_to_complete_before_release=10, *args, **kwargs):
def __init__(self, deferredList, percent_to_complete_before_release=5, *args, **kwargs):
self.percent_to_complete_before_release = percent_to_complete_before_release
self._policy_locking_queue = Queue()

View File

@ -112,7 +112,7 @@ def test_bob_can_retreive_the_treasure_map_and_decrypt_it(enacted_federated_poli
# through a side-channel with Alice.
# If Bob doesn't know about any Ursulas, he can't find the TreasureMap via the REST swarm:
with pytest.raises(bob.NotEnoughTeachers):
with pytest.raises(bob.NotEnoughNodes):
treasure_map_from_wire = bob.get_treasure_map(enacted_federated_policy.alice.stamp,
enacted_federated_policy.label)

View File

@ -357,8 +357,9 @@ def blockchain_alice(alice_blockchain_test_config, testerchain):
@pytest.fixture(scope="module")
def federated_bob(bob_federated_test_config):
_bob = bob_federated_test_config.produce()
return _bob
bob = bob_federated_test_config.produce()
_d = bob.start_learning_loop()
return bob
@pytest.fixture(scope="module")

View File

@ -24,9 +24,6 @@ import pytest_twisted
from twisted.internet.threads import deferToThread
from nucypher.characters.lawful import Ursula
from tests.performance_mocks import NotAPublicKey, NotARestApp, VerificationTracker, mock_cert_loading, \
mock_cert_storage, mock_message_verification, mock_metadata_validation, mock_pubkey_from_bytes, mock_secret_source, \
mock_signature_bytes, mock_stamp_call, mock_verify_node
from tests.utils.middleware import SluggishLargeFleetMiddleware
from umbral.keys import UmbralPublicKey
from tests.mock.performance_mocks import (
@ -170,7 +167,7 @@ def test_mass_treasure_map_placement(fleet_of_highperf_mocked_ursulas,
if policy.treasure_map in list(ursula.treasure_maps.values()):
nodes_that_have_the_map_when_we_unblock.append(ursula)
approximate_number_of_nodes_we_expect_to_have_the_map_already = len(nodes_we_expect_to_have_the_map) / 10
approximate_number_of_nodes_we_expect_to_have_the_map_already = len(nodes_we_expect_to_have_the_map) / 5
assert len(nodes_that_have_the_map_when_we_unblock) == pytest.approx(
approximate_number_of_nodes_we_expect_to_have_the_map_already, .5)

View File

@ -22,8 +22,8 @@ from bytestring_splitter import VariableLengthBytestring
from eth_utils.address import to_checksum_address
from twisted.logger import LogLevel, globalLogPublisher
from nucypher.acumen.nicknames import nickname_from_seed
from nucypher.characters.base import Character
from nucypher.network.nicknames import nickname_from_seed
from tests.utils.middleware import MockRestMiddleware
from tests.utils.ursula import make_federated_ursulas

View File

@ -44,7 +44,7 @@ def test_bob_does_not_let_a_connection_error_stop_him(enacted_federated_policy,
federated_bob.network_middleware = NodeIsDownMiddleware()
federated_bob.network_middleware.node_is_down(ursula1)
with pytest.raises(TreasureMap.NowhereToBeFound):
with pytest.raises(federated_bob.NotEnoughNodes):
federated_bob.get_treasure_map(federated_alice.stamp, enacted_federated_policy.label)
federated_bob.remember_node(ursula2)

View File

@ -40,6 +40,7 @@ def test_alice_sets_treasure_map(enacted_federated_policy, federated_ursulas):
"""
enacted_federated_policy.publish_treasure_map(network_middleware=MockRestMiddleware())
treasure_map_index = bytes.fromhex(enacted_federated_policy.treasure_map.public_id())
# TODO: Ensure that this is... an actual... hmm...
treasure_map_as_set_on_network = list(federated_ursulas)[0].treasure_maps[treasure_map_index]
assert treasure_map_as_set_on_network == enacted_federated_policy.treasure_map