def test_unlock_nucypher_keyring(mocker, test_emitter, capsys, alice_blockchain_test_config, patch_keystore, tmpdir): # Setup # Do not test "real" unlocking here, just the plumbing unlock_spy = mocker.patch.object(NucypherKeyring, 'unlock', return_value=True) attach_spy = mocker.spy(CharacterConfiguration, 'attach_keyring') mocker.patch.object(CharacterConfiguration, 'dev_mode', return_value=False, new_callable=mocker.PropertyMock) # Test result = unlock_nucypher_keyring( emitter=test_emitter, password=INSECURE_DEVELOPMENT_PASSWORD, character_configuration=alice_blockchain_test_config) assert result captured = capsys.readouterr() message = DECRYPTING_CHARACTER_KEYRING.format( name=alice_blockchain_test_config.NAME) assert message in captured.out unlock_spy.assert_called_once_with(password=INSECURE_DEVELOPMENT_PASSWORD) attach_spy.assert_called_once()
def unlock_nucypher_keyring(emitter: StdoutEmitter, password: str, character_configuration: CharacterConfiguration) -> bool: """Unlocks a nucypher keyring and attaches it to the supplied configuration if successful.""" emitter.message(DECRYPTING_CHARACTER_KEYRING.format(name=character_configuration.NAME.capitalize()), color='yellow') # precondition if character_configuration.dev_mode: return True # Dev accounts are always unlocked # unlock try: character_configuration.attach_keyring() character_configuration.keyring.unlock(password=password) # Takes ~3 seconds, ~1GB Ram except CryptoError: raise NucypherKeyring.AuthenticationFailed else: return True
def test_unlock_nucypher_keyring_invalid_password(mocker, test_emitter, alice_blockchain_test_config, capsys): # Setup keyring_attach_spy = mocker.spy(CharacterConfiguration, 'attach_keyring') mocker.patch.object(NucypherKeyring, 'unlock', side_effect=CryptoError) mocker.patch.object(CharacterConfiguration, 'dev_mode', return_value=False, new_callable=mocker.PropertyMock) # Test with pytest.raises(NucypherKeyring.AuthenticationFailed): unlock_nucypher_keyring( emitter=test_emitter, password=INSECURE_DEVELOPMENT_PASSWORD + 'typo', character_configuration=alice_blockchain_test_config) keyring_attach_spy.assert_called_once() captured = capsys.readouterr() assert DECRYPTING_CHARACTER_KEYRING.format(name='alice') in captured.out
def test_unlock_nucypher_keyring_dev_mode(mocker, test_emitter, capsys, alice_blockchain_test_config): # Setup unlock_spy = mocker.spy(NucypherKeyring, 'unlock') attach_spy = mocker.spy(CharacterConfiguration, 'attach_keyring') mocker.patch.object(CharacterConfiguration, 'dev_mode', return_value=True, new_callable=mocker.PropertyMock) # Test result = unlock_nucypher_keyring( emitter=test_emitter, password=INSECURE_DEVELOPMENT_PASSWORD, character_configuration=alice_blockchain_test_config) assert result output = capsys.readouterr().out message = DECRYPTING_CHARACTER_KEYRING.format( name=alice_blockchain_test_config.NAME) assert message in output unlock_spy.assert_not_called() attach_spy.assert_not_called()