def staking_participant(funded_blockchain, blockchain_ursulas): # Start up the local fleet for teacher in blockchain_ursulas: start_pytest_ursula_services(ursula=teacher) teachers = list(blockchain_ursulas) staking_participant = teachers[-1] return staking_participant
def test_availability_tracker_integration(blockchain_ursulas, monkeypatch): # Start up self-services ursula = blockchain_ursulas.pop() start_pytest_ursula_services(ursula=ursula) ursula._availability_tracker = AvailabilityTracker(ursula=ursula) def maintain(): tracker = ursula._availability_tracker def mock_node_information_endpoint(middleware, port, *args, **kwargs): ursula_were_looking_for = ursula.rest_interface.port == port if ursula_were_looking_for: raise RestMiddleware.NotFound("Fake Reason") # Make this node unreachable else: response = Response(response=bytes(ursula), mimetype='application/octet-stream') return response # apply the monkeypatch for requests.get to mock_get monkeypatch.setattr(NucypherMiddlewareClient, NucypherMiddlewareClient.node_information.__name__, mock_node_information_endpoint) ursula._availability_tracker.start() tracker.measure_sample() # This makes a REST Call start, timeout = maya.now(), 1 # seconds while True: try: assert len(tracker.excuses) except AssertionError: now = maya.now() if (now - start).total_seconds() > timeout: pytest.fail() time.sleep(0.1) continue else: break # Run the Callbacks try: d = threads.deferToThread(maintain) yield d finally: if ursula._availability_tracker: ursula._availability_tracker.stop() ursula._availability_tracker = None
def test_availability_sensor_integration(blockchain_ursulas, monkeypatch): # Start up self-services ursula = blockchain_ursulas.pop() start_pytest_ursula_services(ursula=ursula) ursula._availability_sensor = AvailabilitySensor(ursula=ursula) def maintain(): sensor = ursula._availability_sensor def mock_node_information_endpoint(middleware, port, *args, **kwargs): ursula_were_looking_for = ursula.rest_interface.port == port if ursula_were_looking_for: raise RestMiddleware.NotFound( "Fake Reason") # Make this node unreachable else: response = Response(response=bytes(ursula), mimetype='application/octet-stream') return response # apply the monkeypatch for requests.get to mock_get monkeypatch.setattr(NucypherMiddlewareClient, NucypherMiddlewareClient.node_information.__name__, mock_node_information_endpoint) ursula._availability_sensor.start() sensor.measure() # This makes a REST Call # to keep this test fast, were just checking for a single entry # (technically there will be 10, but resolution is one second.) assert len(sensor._AvailabilitySensor__excuses) > 0 # Run the Callbacks try: d = threads.deferToThread(maintain) yield d finally: if ursula._availability_sensor: ursula._availability_sensor.stop() ursula._availability_sensor = None
def _run_teacher(_encrypt_result): start_pytest_ursula_services(ursula=teacher) return teacher_uri
def run_teacher(): start_pytest_ursula_services(ursula=teacher) return teacher_uri
def test_persistent_node_storage_integration(click_runner, custom_filepath, testerchain, blockchain_ursulas, agency_local_registry): alice, ursula, another_ursula, felix, staker, *all_yall = testerchain.unassigned_accounts filename = UrsulaConfiguration.generate_filename() another_ursula_configuration_file_location = os.path.join(custom_filepath, filename) init_args = ('ursula', 'init', '--provider', TEST_PROVIDER_URI, '--worker-address', another_ursula, '--network', TEMPORARY_DOMAIN, '--rest-host', MOCK_IP_ADDRESS, '--config-root', custom_filepath, '--registry-filepath', agency_local_registry.filepath, ) envvars = {NUCYPHER_ENVVAR_KEYRING_PASSWORD: INSECURE_DEVELOPMENT_PASSWORD} result = click_runner.invoke(nucypher_cli, init_args, catch_exceptions=False, env=envvars) assert result.exit_code == 0 teacher = blockchain_ursulas.pop() teacher_uri = teacher.rest_information()[0].uri start_pytest_ursula_services(ursula=teacher) user_input = f'{INSECURE_DEVELOPMENT_PASSWORD}\n' run_args = ('ursula', 'run', '--dry-run', '--debug', '--interactive', '--config-file', another_ursula_configuration_file_location, '--teacher', teacher_uri) Worker.BONDING_TIMEOUT = 1 with pytest.raises(Teacher.DetachedWorker): # Worker init success, but unassigned. result = yield threads.deferToThread(click_runner.invoke, nucypher_cli, run_args, catch_exceptions=False, input=user_input, env=envvars) assert result.exit_code == 0 # Run an Ursula amidst the other configuration files run_args = ('ursula', 'run', '--dry-run', '--debug', '--interactive', '--config-file', another_ursula_configuration_file_location) with pytest.raises(Teacher.DetachedWorker): # Worker init success, but unassigned. result = yield threads.deferToThread(click_runner.invoke, nucypher_cli, run_args, catch_exceptions=False, input=user_input, env=envvars) assert result.exit_code == 0
def start(): # Start running the worker start_pytest_ursula_services(ursula=ursula) ursula.work_tracker.start()
def test_availability_tracker_success(blockchain_ursulas): # Start up self-services ursula = blockchain_ursulas.pop() start_pytest_ursula_services(ursula=ursula) ursula._availability_tracker = AvailabilityTracker(ursula=ursula) def measure(): ursula._availability_tracker.start() assert ursula._availability_tracker.score == 10 ursula._availability_tracker.record(False) assert ursula._availability_tracker.score == 9.0 for i in range(7): ursula._availability_tracker.record(True) assert ursula._availability_tracker.score > 9.5 def maintain(): tracker = ursula._availability_tracker tracker.maintain() # The node goes offline for some time... for _ in range(10): ursula._availability_tracker.record(False, reason={'error': 'fake failure reason'}) assert tracker.score < 4 assert tracker.status() == (tracker.score > (tracker.SENSITIVITY * tracker.MAXIMUM_SCORE)) assert not tracker.status() original_issuer = AvailabilityTracker.issue_warnings warnings = dict() def issue_warnings(tracker, *args, **kwargs): result = original_issuer(tracker, *args, **kwargs) warnings[tracker.score] = result AvailabilityTracker.issue_warnings = issue_warnings tracker.maintain() assert warnings AvailabilityTracker.issue_warnings = original_issuer # to keep this test fast, were just checking for a single entry # (technically there will be 10, but resolution is one second.) assert len(tracker.excuses) > 0 def raise_to_maximum(): tracker = ursula._availability_tracker for i in range(150): tracker.record(True) assert tracker.score > 9.98 assert tracker.status() == bool(tracker.score > (tracker.SENSITIVITY * tracker.MAXIMUM_SCORE)) assert tracker.status() # Run the Callbacks try: d = threads.deferToThread(measure) yield d d = threads.deferToThread(maintain) yield d d = threads.deferToThread(raise_to_maximum) yield d finally: if ursula._availability_tracker: ursula._availability_tracker.stop() ursula._availability_tracker = None