"""Fargate test module.""" import boto3 import pytest from moto import mock_aws from moto.core import DEFAULT_ACCOUNT_ID import app as index import config @pytest.fixture() def mock_account_id(): """Return an AWS account id.""" return DEFAULT_ACCOUNT_ID @pytest.fixture() def mock_secretsmanager_secret_name(): """Return an secretsmanager secret name.""" return 'backup-secret' @pytest.fixture() @mock_aws def mock_secretsmanager_client(mock_account_id, monkeypatch): """Return a mock secretsmanager client.""" monkeypatch.setattr(index.config, 'EXTERNAL_ID', 'abc1234') credentials = index.assume_source_account_role(mock_account_id) client = boto3.client( 'secretsmanager', region_name='us-east-1', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'] ) return client @mock_aws def test_assume_source_account_role(mock_account_id, monkeypatch): """Test assume_source_account_role function.""" aws_credentials = ['AccessKeyId', 'SecretAccessKey', 'SessionToken'] monkeypatch.setattr(index.config, 'EXTERNAL_ID', 'abc1234') result = index.assume_source_account_role(mock_account_id) for credential in aws_credentials: assert result[credential] @mock_aws def test_list_secrets(mock_secretsmanager_client, mock_account_id): """Test list_secrets function.""" secret_name = 'test_secret' mock_secretsmanager_client.create_secret(Name=secret_name) secrets = index.list_secrets(mock_account_id) assert secret_name in secrets @mock_aws def test_get_secret_value_sm(mock_secretsmanager_client, mock_account_id): """Test get_secret_value_sm function.""" secret_name = 'test_secret' secret_value = 'test_value' mock_secretsmanager_client.create_secret(Name=secret_name, SecretString=secret_value) returned_value = index.get_secret_value_sm(mock_account_id, secret_name) assert returned_value == secret_value @mock_aws def test_get_secret_version_id(mock_account_id, mock_secretsmanager_client, mock_secretsmanager_secret_name): """Test get_secret_version_id function.""" mock_secretsmanager_client.create_secret(Name=mock_secretsmanager_secret_name, SecretString='test_secret') version_id = index.get_secret_version_id(mock_account_id, mock_secretsmanager_secret_name) assert version_id is not None @mock_aws def test_get_secret_version_id_no_versions(mock_account_id, mock_secretsmanager_client, mock_secretsmanager_secret_name): """Test get_secret_version_id function.""" mock_secretsmanager_client.create_secret(Name=mock_secretsmanager_secret_name) version_id = index.get_secret_version_id(mock_account_id, mock_secretsmanager_secret_name) assert version_id is None @mock_aws def test_get_s3_bucket_object_keys(mock_secretsmanager_client, mock_secretsmanager_secret_name, mock_account_id): """Test get_s3_bucket_object_keys function.""" s3 = boto3.client('s3') mock_secretsmanager_client.create_secret(Name=mock_secretsmanager_secret_name) s3.create_bucket(Bucket=config.BUCKET_NAME) object_list = index.get_s3_bucket_object_keys(s3, config.BUCKET_NAME, mock_account_id) assert mock_secretsmanager_secret_name not in object_list @mock_aws def test_is_secret_created_in_s3(mock_secretsmanager_client, mock_secretsmanager_secret_name, mock_account_id): """Test put_secret_to_s3 function.""" s3 = boto3.client('s3') secret_value = 'test_value' mock_secretsmanager_client.create_secret(Name=mock_secretsmanager_secret_name, SecretString=secret_value) s3.create_bucket(Bucket=config.BUCKET_NAME) index.put_secret_to_s3(s3, config.BUCKET_NAME, mock_secretsmanager_secret_name, secret_value, mock_account_id) object_list = index.get_s3_bucket_object_keys(s3, config.BUCKET_NAME, mock_account_id) assert f'{mock_account_id}/{mock_secretsmanager_secret_name}' in object_list @mock_aws def test_get_s3_metadata(mock_secretsmanager_client, mock_secretsmanager_secret_name, mock_account_id): """Test get_s3_metadata function.""" s3 = boto3.client('s3') secret_value = 'test_value' mock_secretsmanager_client.create_secret(Name=mock_secretsmanager_secret_name, SecretString=secret_value) s3.create_bucket(Bucket=config.BUCKET_NAME) index.put_secret_to_s3(s3, config.BUCKET_NAME, mock_secretsmanager_secret_name, secret_value, mock_account_id) metadata = index.get_s3_metadata(s3, config.BUCKET_NAME, f'{mock_account_id}/{mock_secretsmanager_secret_name}') version_id = index.get_secret_version_id(mock_account_id, mock_secretsmanager_secret_name) assert metadata == version_id