"""Fixtures for lambda testing.""" import os import boto3 import pytest from moto import mock_aws from update_waf_ipsets import config as 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 sts_client(aws_credentials): """Return an STS client.""" with mock_aws(): yield boto3.client("sts") @pytest.fixture() def s3_client(aws_credentials): """Return an S3 client.""" with mock_aws(): yield boto3.client("s3") @pytest.fixture() def wafv2_client(aws_credentials): """Return an WAFV2 client.""" with mock_aws(): yield boto3.client("wafv2") @pytest.fixture() def regional_ip_set(wafv2_client): """Create regional IP set""" ip_set = wafv2_client.create_ip_set( Name=Config.DEFAULT_IP_SET_NAME, Scope="REGIONAL", Description="Test set", IPAddressVersion="IPV4", Addresses=[], ) return ip_set["Summary"] @pytest.fixture() def cloudfront_ip_set(wafv2_client): """Create cloudfront IP set""" ip_set = wafv2_client.create_ip_set( Name=Config.DEFAULT_IP_SET_NAME, Scope="CLOUDFRONT", Description="Test set", IPAddressVersion="IPV4", Addresses=[], ) return ip_set["Summary"] @pytest.fixture() def regional_ip_set_empty_desc(wafv2_client): """Create regional IP set without a description""" ip_set = wafv2_client.create_ip_set( Name=Config.DEFAULT_IP_SET_NAME, Scope="REGIONAL", IPAddressVersion="IPV4", Addresses=[], ) return ip_set["Summary"] @pytest.fixture() def valid_ip_list(): """Provides valid IP ranges list""" return [ "10.0.0.1/32", "10.1.1.0/24", "10.2.0.0/16", "11.0.0.0/8", ] @pytest.fixture() def invalid_ip_list(): """Provides invalid IP ranges list""" return [ "10.0.0.1/45", "1000.1.1.0/24", "10.2.0.0.55", "11.0.0.0/8", ] @pytest.fixture() def s3_bucket_name(): """Test bucket name""" return "test-s3-bucket" @pytest.fixture() def s3_bucket(s3_client, s3_bucket_name): """Create bucket for IP list storage""" _ = s3_client.create_bucket( Bucket=s3_bucket_name, ) return s3_bucket_name @pytest.fixture() def valid_s3_object(s3_client, s3_bucket, valid_ip_list): """Create a file in s3 containing valid ip list""" key = "valid_ip_block_list.txt" _ = s3_client.put_object(Bucket=s3_bucket, Key=key, Body="\n".join(valid_ip_list).encode("utf-8")) return key @pytest.fixture() def invalid_s3_object(s3_client, s3_bucket, invalid_ip_list): """Create a file in s3 containing invalid ip list""" key = "invalid_ip_block_list.txt" _ = s3_client.put_object(Bucket=s3_bucket, Key=key, Body="\n".join(invalid_ip_list).encode("utf-8")) return key