"""Tests for Switchboard helper.""" from unittest.mock import MagicMock, patch from ddex_ingester_common.helpers.switchboard import ( generate_switchboard_credentials, generate_switchboard_jwt, get_secrets_manager_value ) import jwt @patch('ddex_ingester_common.helpers.switchboard.generate_switchboard_credentials', return_value='creds') # noqa @patch('ddex_ingester_common.helpers.switchboard.get_secrets_manager_value', return_value={ 'SecretString': 'secret', 'VersionId': 'something'}) @patch('jwt.encode', wraps=jwt.encode) @patch('time.time', return_value=12345) def test_generate_switchboard_jwt(mock_time, spy_jwt_encode, mock_get_secrets_manager_value, mock_generate_switchboard_credentials): """Test generate_jwt.""" role_arn = 'role_arn' secret_arn = 'secret_arn' application = 'test_app' output = generate_switchboard_jwt(role_arn, secret_arn, application) mock_generate_switchboard_credentials.assert_called_once_with( role_arn, application ) mock_get_secrets_manager_value.assert_called_once_with( secret_arn, 'creds' ) expected_payload = { 'systemName': 'ORCHARD', 'exp': 12345 + 7 * 24 * 60 * 60, 'iat': 12345, 'secretId': 'something', } spy_jwt_encode.assert_called_once_with( expected_payload, 'secret' ) assert output @patch('ddex_ingester_common.helpers.switchboard.boto3') def test_generate_switchboard_credentials(mock_boto3): """Test generate_switchboard_credentials.""" role_arn = 'role_arn' application = 'test_app' creds = { 'AccessKeyId': 'test1', 'SecretAccessKey': 'test2', 'SessionToken': 'test3' } assume_role_output = { 'Credentials': creds } sts_client = MagicMock() sts_client.assume_role.return_value = assume_role_output mock_boto3.client.return_value = sts_client output = generate_switchboard_credentials(role_arn, application) sts_client.assume_role.assert_called_once_with( RoleArn=role_arn, RoleSessionName=f'{application}-session' ) assert output == { 'aws_access_key_id': creds['AccessKeyId'], 'aws_secret_access_key': creds['SecretAccessKey'], 'aws_session_token': creds['SessionToken'], } @patch('ddex_ingester_common.helpers.switchboard.boto3') def test_get_secrets_manager_value(mock_boto3): """Test get_secret_value.""" secretsmanager = MagicMock() secret = 'secret' arn = 'arn' secretsmanager.get_secret_value.return_value = secret mock_boto3.client.return_value = secretsmanager creds = {'fake_creds': True} output = get_secrets_manager_value(arn, creds) mock_boto3.client.assert_called_once_with( 'secretsmanager', **creds ) secretsmanager.get_secret_value.assert_called_once_with( SecretId=arn ) assert output == secret