mirror of https://github.com/nucypher/nucypher.git
40 lines
1.8 KiB
Python
40 lines
1.8 KiB
Python
|
from functools import partial
|
||
|
|
||
|
from nucypher.utilities.sandbox.ursula import make_federated_ursulas
|
||
|
|
||
|
|
||
|
def test_learner_learns_about_domains_separately(ursula_federated_test_config, caplog):
|
||
|
lonely_ursula_maker = partial(make_federated_ursulas,
|
||
|
ursula_config=ursula_federated_test_config,
|
||
|
quantity=3,
|
||
|
know_each_other=True)
|
||
|
global_learners = lonely_ursula_maker()
|
||
|
first_domain_learners = lonely_ursula_maker(domains=set([b"nucypher1.test_suite"]))
|
||
|
second_domain_learners = lonely_ursula_maker(domains=set([b"nucypher2.test_suite"]))
|
||
|
|
||
|
big_learner = global_learners.pop()
|
||
|
|
||
|
assert len(big_learner.known_nodes) == 2
|
||
|
|
||
|
# Learn about the fist domain.
|
||
|
big_learner._current_teacher_node = first_domain_learners.pop()
|
||
|
big_learner.learn_from_teacher_node()
|
||
|
|
||
|
# Learn about the second domain.
|
||
|
big_learner._current_teacher_node = second_domain_learners.pop()
|
||
|
big_learner.learn_from_teacher_node()
|
||
|
|
||
|
assert len(big_learner.known_nodes) == 8
|
||
|
|
||
|
new_first_domain_learner = lonely_ursula_maker(domains=set([b"nucypher1.test_suite"])).pop()
|
||
|
new_second_domain_learner = lonely_ursula_maker(domains=set([b"nucypher2.test_suite"]))
|
||
|
|
||
|
new_first_domain_learner._current_teacher_node = big_learner
|
||
|
new_first_domain_learner.learn_from_teacher_node()
|
||
|
|
||
|
# This node, in the first domain, didn't learn about the second domain.
|
||
|
assert not set(second_domain_learners).intersection(set(new_first_domain_learner.known_nodes))
|
||
|
|
||
|
# However, it learned about *all* of the nodes in its own domain.
|
||
|
assert set(first_domain_learners).intersection(set(new_first_domain_learner.known_nodes)) == first_domain_learners
|