"""Token verification unit tests.""" from unittest.mock import MagicMock from unittest.mock import patch from feature_fm import config from feature_fm.connectors import aws_secrets_manager from feature_fm.utils import token_verification def test_sign_token(): """Test for sign token function.""" token = bytes( 'timestamp=1530106655&label_id=456&user_id=alw:123&secret_id=1', 'utf-8') shared_secret = bytes('I am a shared secret', 'utf-8') expected_result = bytes('74258497b80b590663b566fd0889efa8bb510206', 'utf-8') result = token_verification.sign_token(token, shared_secret) assert result == expected_result @patch('json.loads', return_value={'shared_secret': 'I am a shared secret'}) @patch('feature_fm.connectors.aws_secrets_manager.boto3') def test_verify_token_fresh(mock_secret, mock_json, monkeypatch): """Test verify token.""" monkeypatch.setattr( config, 'SECRET_TOKEN_KEY', 'shared_secret') token_to_verify = bytes( 'timestamp=1530106655&label_id=456&user_id=alw:123&secret_id=1', 'utf-8') signed_token = bytes('74258497b80b590663b566fd0889efa8bb510206', 'utf-8') result = token_verification.verify_token( token_to_verify, signed_token) assert result @patch('feature_fm.connectors.aws_secrets_manager.boto3') def test_verify_token_from_cache(mock_secret, monkeypatch): """Test verify token.""" monkeypatch.setattr( config, 'SECRET_TOKEN_KEY', 'shared_secret') aws_secrets_manager.get_secret.cache_clear() monkeypatch.setattr( aws_secrets_manager, 'get_aws_secret', MagicMock(return_value={'shared_secret': 'I am a shared secret'})) token_to_verify = bytes( 'timestamp=1530106655&label_id=456&user_id=alw:123&secret_id=1', 'utf-8') signed_token = bytes('74258497b80b590663b566fd0889efa8bb510206', 'utf-8') result = token_verification.verify_token( token_to_verify, signed_token) assert result result = token_verification.verify_token( token_to_verify, signed_token) assert result aws_secrets_manager.get_aws_secret.assert_called_once() @patch('feature_fm.connectors.aws_secrets_manager.boto3') def test_verify_token_clear_cache_when_invalid(mock_secret, monkeypatch): """Test verify token.""" monkeypatch.setattr( config, 'SECRET_TOKEN_KEY', 'shared_secret') aws_secrets_manager.get_secret.cache_clear() monkeypatch.setattr( aws_secrets_manager, 'get_aws_secret', MagicMock(return_value={'shared_secret': 'I am the wrong secret'})) token_to_verify = bytes( 'timestamp=1530106655&label_id=456&user_id=alw:123&secret_id=1', 'utf-8') signed_token = bytes('74258497b80b590663b566fd0889efa8bb510206', 'utf-8') result = token_verification.verify_token( token_to_verify, signed_token) assert not result aws_secrets_manager.get_aws_secret.assert_called() monkeypatch.setattr( aws_secrets_manager, 'get_aws_secret', MagicMock(return_value={'shared_secret': 'I am a shared secret'})) result = token_verification.verify_token( token_to_verify, signed_token) assert result aws_secrets_manager.get_aws_secret.assert_called_once()