Test fallback behaviour

pull/2657/head
Piotr Roslaniec 2021-04-22 12:21:39 +02:00
parent 58f37da94a
commit 9669280639
3 changed files with 48 additions and 2 deletions

View File

@ -1035,4 +1035,4 @@ def stakeholder_configuration_file_location(custom_filepath):
@pytest.fixture(autouse=True)
def mock_teacher_nodes(mocker):
mock_nodes = tuple(u.rest_url() for u in MOCK_KNOWN_URSULAS_CACHE.values())[0:2]
mocker.patch.dict(TEACHER_NODES, {TEMPORARY_DOMAIN: mock_nodes})
mocker.patch.dict(TEACHER_NODES, {TEMPORARY_DOMAIN: mock_nodes}, clear=True)

View File

@ -16,7 +16,9 @@
"""
from nucypher.acumen.perception import FleetSensor
from nucypher.characters.lawful import Ursula
from nucypher.config.storages import LocalFileBasedNodeStorage
from nucypher.network.nodes import TEACHER_NODES
def test_learner_learns_about_domains_separately(lonely_ursula_maker, caplog):
@ -118,3 +120,47 @@ def test_learner_ignores_stored_nodes_from_other_domains(lonely_ursula_maker, tm
other_staker._current_teacher_node = learner
other_staker.learn_from_teacher_node() # And once it did, the node from the wrong domain spread.
assert pest not in other_staker.known_nodes # But not anymore.
def test_learner_with_empty_storage_uses_fallback_nodes(lonely_ursula_maker, mocker):
domain = "learner-domain"
mocker.patch.dict(TEACHER_NODES, {domain: ("teacher-uri",)}, clear=True)
# Create a learner and a teacher
learner, teacher = lonely_ursula_maker(domain=domain, quantity=2, save_metadata=False)
mocker.patch.object(Ursula, 'from_teacher_uri', return_value=teacher)
# Since there are no nodes in local node storage, the learner should only learn about the teacher
learner.learn_from_teacher_node()
assert set(learner.known_nodes) == {teacher}
def test_learner_uses_both_nodes_from_storage_and_fallback_nodes(lonely_ursula_maker, tmpdir, mocker):
domain = "learner-domain"
mocker.patch.dict(TEACHER_NODES, {domain: ("teacher-uri",)}, clear=True)
# Create a local file-based node storage
root = tmpdir.mkdir("known_nodes")
metadata = root.mkdir("metadata")
certs = root.mkdir("certs")
node_storage = LocalFileBasedNodeStorage(federated_only=True,
metadata_dir=metadata,
certificates_dir=certs,
storage_root=root)
# Create some nodes and persist them to local storage
other_nodes = lonely_ursula_maker(domain=domain,
node_storage=node_storage,
know_each_other=True,
quantity=3,
save_metadata=True)
# Create a teacher and a learner using existing node storage
learner, teacher = lonely_ursula_maker(domain=domain, node_storage=node_storage, quantity=2)
mocker.patch.object(Ursula, 'from_teacher_uri', return_value=teacher)
# The learner should learn about all nodes
learner.learn_from_teacher_node()
all_nodes = {teacher}
all_nodes.update(other_nodes)
assert set(learner.known_nodes) == all_nodes

View File

@ -79,7 +79,7 @@ def mock_client(mocker):
@pytest.fixture(autouse=True)
def mock_default_teachers(mocker):
teachers = {MOCK_NETWORK: (MOCK_IP_ADDRESS, )}
mocker.patch.dict(TEACHER_NODES, teachers)
mocker.patch.dict(TEACHER_NODES, teachers, clear=True)
def test_get_external_ip_from_centralized_source(mock_requests):