Update Tests with corrected naming conventions for Flask test client - bug fixes for CLI tests.

pull/760/head
Kieran R. Prasch 2019-02-14 20:48:15 -07:00 committed by jMyles
parent 91b65cb298
commit c43cdd573b
4 changed files with 53 additions and 39 deletions

View File

@ -1,17 +1,15 @@
import datetime
import json
from base64 import b64encode, b64decode
import maya
from base64 import b64encode, b64decode
from umbral.keys import UmbralPublicKey
from nucypher.characters.lawful import Enrico
from nucypher.crypto.kits import UmbralMessageKit
from nucypher.crypto.powers import DecryptingPower
from nucypher.policy.models import TreasureMap
def test_alice_character_control_create_policy(alice_control, federated_bob):
def test_alice_character_control_create_policy(alice_control_test_client, federated_bob):
bob_pubkey_enc = federated_bob.public_keys(DecryptingPower)
request_data = {
@ -22,38 +20,38 @@ def test_alice_character_control_create_policy(alice_control, federated_bob):
'n': 3,
}
response = alice_control.put('/create_policy', data=json.dumps(request_data))
response = alice_control_test_client.put('/create_policy', data=json.dumps(request_data))
assert response.status_code == 200
assert response.data == b'Policy created!'
# Send bad data to assert error returns
response = alice_control.put('/create_policy', data='bad')
response = alice_control_test_client.put('/create_policy', data='bad')
assert response.status_code == 400
del(request_data['bob_encrypting_key'])
response = alice_control.put('/create_policy', data=json.dumps(request_data))
response = alice_control_test_client.put('/create_policy', data=json.dumps(request_data))
def test_alice_character_control_derive_policy_pubkey(alice_control):
def test_alice_character_control_derive_policy_pubkey(alice_control_test_client):
request_data = {
'label': b64encode(b'test').decode(),
}
response = alice_control.post('/derive_policy_pubkey', data=json.dumps(request_data))
response = alice_control_test_client.post('/derive_policy_pubkey', data=json.dumps(request_data))
assert response.status_code == 200
response_data = json.loads(response.data)
assert 'policy_encrypting_pubkey' in response_data['result']
# Test bad data returns an error
response = alice_control.post('/derive_policy_pubkey', data='bad')
response = alice_control_test_client.post('/derive_policy_pubkey', data='bad')
assert response.status_code == 400
del(request_data['label'])
response = alice_control.post('/derive_policy_pubkey', data=request_data)
response = alice_control_test_client.post('/derive_policy_pubkey', data=request_data)
assert response.status_code == 400
def test_alice_character_control_grant(alice_control, federated_bob):
def test_alice_character_control_grant(alice_control_test_client, federated_bob):
bob_pubkey_enc = federated_bob.public_keys(DecryptingPower)
request_data = {
@ -64,7 +62,7 @@ def test_alice_character_control_grant(alice_control, federated_bob):
'n': 3,
'expiration_time': (maya.now() + datetime.timedelta(days=3)).iso8601(),
}
response = alice_control.put('/grant', data=json.dumps(request_data))
response = alice_control_test_client.put('/grant', data=json.dumps(request_data))
assert response.status_code == 200
response_data = json.loads(response.data)
@ -78,32 +76,32 @@ def test_alice_character_control_grant(alice_control, federated_bob):
assert encrypted_map._hrac is not None
# Send bad data to assert error returns
response = alice_control.put('/grant', data='bad')
response = alice_control_test_client.put('/grant', data='bad')
assert response.status_code == 400
del(request_data['bob_encrypting_key'])
response = alice_control.put('/grant', data=json.dumps(request_data))
response = alice_control_test_client.put('/grant', data=json.dumps(request_data))
def test_bob_character_control_join_policy(bob_control, enacted_federated_policy):
def test_bob_character_control_join_policy(bob_control_test_client, enacted_federated_policy):
request_data = {
'label': b64encode(enacted_federated_policy.label).decode(),
'alice_signing_pubkey': bytes(enacted_federated_policy.alice.stamp).hex(),
}
response = bob_control.post('/join_policy', data=json.dumps(request_data))
response = bob_control_test_client.post('/join_policy', data=json.dumps(request_data))
assert response.data == b'Policy joined!'
assert response.status_code == 200
# Send bad data to assert error returns
response = bob_control.post('/join_policy', data='bad')
response = bob_control_test_client.post('/join_policy', data='bad')
assert response.status_code == 400
del(request_data['alice_signing_pubkey'])
response = bob_control.put('/join_policy', data=json.dumps(request_data))
response = bob_control_test_client.put('/join_policy', data=json.dumps(request_data))
def test_bob_character_control_retrieve(bob_control, enacted_federated_policy, capsule_side_channel):
def test_bob_character_control_retrieve(bob_control_test_client, enacted_federated_policy, capsule_side_channel):
message_kit, data_source = capsule_side_channel
request_data = {
@ -114,7 +112,7 @@ def test_bob_character_control_retrieve(bob_control, enacted_federated_policy, c
'datasource_signing_pubkey': bytes(data_source.stamp).hex(),
}
response = bob_control.post('/retrieve', data=json.dumps(request_data))
response = bob_control_test_client.post('/retrieve', data=json.dumps(request_data))
assert response.status_code == 200
response_data = json.loads(response.data)
@ -124,19 +122,19 @@ def test_bob_character_control_retrieve(bob_control, enacted_federated_policy, c
assert b64decode(plaintext) == b'Welcome to the flippering.'
# Send bad data to assert error returns
response = bob_control.post('/retrieve', data='bad')
response = bob_control_test_client.post('/retrieve', data='bad')
assert response.status_code == 400
del(request_data['alice_signing_pubkey'])
response = bob_control.put('/retrieve', data=json.dumps(request_data))
response = bob_control_test_client.put('/retrieve', data=json.dumps(request_data))
def test_enrico_character_control_encrypt_message(enrico_control):
def test_enrico_character_control_encrypt_message(enrico_control_test_client):
request_data = {
'message': b64encode(b"The admiration I had for your work has completely evaporated!").decode(),
}
response = enrico_control.post('/encrypt_message', data=json.dumps(request_data))
response = enrico_control_test_client.post('/encrypt_message', data=json.dumps(request_data))
assert response.status_code == 200
response_data = json.loads(response.data)
@ -148,15 +146,15 @@ def test_enrico_character_control_encrypt_message(enrico_control):
b64decode(response_data['result']['message_kit']))
# Send bad data to assert error return
response = enrico_control.post('/encrypt_message', data='bad')
response = enrico_control_test_client.post('/encrypt_message', data='bad')
assert response.status_code == 400
del(request_data['message'])
response = enrico_control.post('/encrypt_message', data=request_data)
response = enrico_control_test_client.post('/encrypt_message', data=request_data)
assert response.status_code == 400
def test_character_control_lifecycle(alice_control, bob_control,
def test_character_control_lifecycle(alice_control_test_client, bob_control_test_client,
enrico_control_from_alice,
federated_alice, federated_bob):
@ -169,7 +167,7 @@ def test_character_control_lifecycle(alice_control, bob_control,
'expiration_time': (maya.now() + datetime.timedelta(days=3)).iso8601(),
}
response = alice_control.put('/grant', data=json.dumps(alice_request_data))
response = alice_control_test_client.put('/grant', data=json.dumps(alice_request_data))
assert response.status_code == 200
alice_response_data = json.loads(response.data)
@ -209,7 +207,7 @@ def test_character_control_lifecycle(alice_control, bob_control,
'message_kit': b64encode(bob_message_kit.to_bytes()).decode(),
}
response = bob_control.post('/retrieve', data=json.dumps(bob_request_data))
response = bob_control_test_client.post('/retrieve', data=json.dumps(bob_request_data))
assert response.status_code == 200
bob_response_data = json.loads(response.data)

View File

@ -2,7 +2,7 @@ import os
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import AliceConfiguration
from nucypher.utilities.sandbox.constants import MOCK_URSULA_STARTING_PORT, INSECURE_DEVELOPMENT_PASSWORD, \
from nucypher.utilities.sandbox.constants import INSECURE_DEVELOPMENT_PASSWORD, \
MOCK_IP_ADDRESS, MOCK_CUSTOM_INSTALLATION_PATH
@ -11,7 +11,7 @@ def test_initialize_alice_defaults(click_runner, mocker):
mocker.patch.object(AliceConfiguration, 'initialize', autospec=True)
mocker.patch.object(AliceConfiguration, 'to_configuration_file', autospec=True)
# Use default ursula init args
# Use default alice init args
init_args = ('alice', 'init', '--federated-only')
user_input = '{password}\n{password}\n'.format(password=INSECURE_DEVELOPMENT_PASSWORD)
result = click_runner.invoke(nucypher_cli, init_args, input=user_input, catch_exceptions=False)

View File

@ -61,7 +61,7 @@ def test_initialize_custom_configuration_root(custom_filepath, click_runner):
'--rest-host', MOCK_IP_ADDRESS,
'--rest-port', MOCK_URSULA_STARTING_PORT)
user_input = '{password}\n{password}'.format(password=INSECURE_DEVELOPMENT_PASSWORD, ip=MOCK_IP_ADDRESS)
user_input = '{password}\n{password}'.format(password=INSECURE_DEVELOPMENT_PASSWORD)
result = click_runner.invoke(nucypher_cli, init_args, input=user_input, catch_exceptions=False)
assert result.exit_code == 0
@ -172,6 +172,22 @@ def test_run_federated_ursula_from_config_file(custom_filepath, click_runner):
assert "'help' or '?'" in result.output
def test_empty_federated_status(click_runner, custom_filepath):
custom_config_filepath = os.path.join(custom_filepath, UrsulaConfiguration.CONFIG_FILENAME)
assert os.path.isfile(custom_config_filepath), 'Configuration file does not exist'
status_args = ('status', '--config-file', custom_config_filepath)
result = click_runner.invoke(nucypher_cli, status_args, catch_exceptions=True)
assert result.exit_code == 0
assert 'Federated Only' in result.output
heading = 'Known Nodes (connected 0 / seen 0)'
assert heading in result.output
assert 'password' not in result.output
def test_ursula_init_does_not_overrides_existing_files(custom_filepath, click_runner):
# Ensure the configuration file still exists

View File

@ -15,15 +15,15 @@ You should have received a copy of the GNU General Public License
along with nucypher. If not, see <https://www.gnu.org/licenses/>.
"""
import datetime
import os
import tempfile
import datetime
import maya
import pytest
from constant_sorrow.constants import NON_PAYMENT
from sqlalchemy.engine import create_engine
from constant_sorrow.constants import NON_PAYMENT
from nucypher.blockchain.eth.constants import DISPATCHER_SECRET_LENGTH
from nucypher.blockchain.eth.deployers import PolicyManagerDeployer, NucypherTokenDeployer, MinerEscrowDeployer
from nucypher.blockchain.eth.interfaces import BlockchainDeployerInterface
@ -319,7 +319,7 @@ def blockchain_ursulas(three_agents, ursula_decentralized_test_config):
@pytest.fixture(scope='module')
def alice_control(federated_alice, federated_ursulas):
def alice_control_test_client(federated_alice, federated_ursulas):
teacher_node = list(federated_ursulas)[0]
alice_control = federated_alice.make_wsgi_app(teacher_node)
alice_control.config['DEBUG'] = True
@ -328,7 +328,7 @@ def alice_control(federated_alice, federated_ursulas):
@pytest.fixture(scope='module')
def bob_control(federated_bob, federated_ursulas):
def bob_control_test_client(federated_bob, federated_ursulas):
teacher_node = list(federated_ursulas)[0]
bob_control = federated_bob.make_wsgi_app(teacher_node)
bob_control.config['DEBUG'] = True
@ -337,7 +337,7 @@ def bob_control(federated_bob, federated_ursulas):
@pytest.fixture(scope='module')
def enrico_control(capsule_side_channel):
def enrico_control_test_client(capsule_side_channel):
_, data_source = capsule_side_channel
message_kit, enrico = capsule_side_channel
enrico_control = enrico.make_wsgi_app()