"""Fixtures for lambda testing.""" import datetime import os import boto3 import pytest from moto import mock_aws import config @pytest.fixture() def aws_credentials(): """Mock AWS Credentials for moto.""" os.environ['AWS_ACCESS_KEY_ID'] = 'testing' os.environ['AWS_SECRET_ACCESS_KEY'] = 'testing' os.environ['AWS_SECURITY_TOKEN'] = 'testing' os.environ['AWS_SESSION_TOKEN'] = 'testing' os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' @pytest.fixture() def iam_client(aws_credentials): """Return a client.""" with mock_aws(): yield boto3.client('iam') @pytest.fixture() def sample_data_for_get_policies(iam_client): """Generate dummy content for get_policies function.""" date_now = datetime.datetime.now(datetime.timezone.utc) expired_policy_date = date_now - datetime.timedelta( seconds=config.IAM_ROLE_SESSION_DURATION + 60) nonexpired_policy_date = date_now iam_client.create_policy( PolicyName='IAM-assume-role-dummy-policy', PolicyDocument=generate_iam_policy_document() ) iam_client.create_policy( PolicyName='BreakGlass-malformed-timestamp', PolicyDocument=generate_iam_policy_document() ) iam_client.create_policy( PolicyName='BreakGlass-expired-{}'.format( expired_policy_date.strftime('%Y-%m-%d-%H-%M-%S')), PolicyDocument=generate_iam_policy_document() ) iam_client.create_policy( PolicyName='BreakGlass-nonexpired-{}'.format( nonexpired_policy_date.strftime('%Y-%m-%d-%H-%M-%S')), PolicyDocument=generate_iam_policy_document() ) @pytest.fixture() def sample_data_for_detach_user_policy(iam_client): """Generate dummy content for detach_user_policy function.""" user1_policy = iam_client.create_policy( PolicyName='BreakGlass-user1-2021-08-15-14-30-45', PolicyDocument=generate_iam_policy_document() ) iam_client.create_policy( PolicyName='BreakGlass-user2-2021-08-15-14-30-45', PolicyDocument=generate_iam_policy_document() ) iam_client.create_user(UserName='user1.sme') iam_client.create_user(UserName='user2.sme') iam_client.attach_user_policy( UserName='user1.sme', PolicyArn=user1_policy['Policy']['Arn'] ) @pytest.fixture() def sample_data_for_delete_policy(iam_client): """Generate dummy content for delete_policy function.""" iam_client.create_policy( PolicyName='BreakGlass-user1-2021-08-15-14-30-45', PolicyDocument=generate_iam_policy_document() ) def generate_iam_policy_document(): """Generate dummy IAM policy document.""" iam_policy_document = """ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::123456789012:role/example-role" } ] } """ return iam_policy_document