Run black on moto & test directories.
This commit is contained in:
parent
c820395dbf
commit
96e5b1993d
507 changed files with 52541 additions and 47814 deletions
|
|
@ -11,110 +11,104 @@ from botocore.exceptions import ClientError
|
|||
from moto import mock_acm
|
||||
|
||||
|
||||
RESOURCE_FOLDER = os.path.join(os.path.dirname(__file__), 'resources')
|
||||
_GET_RESOURCE = lambda x: open(os.path.join(RESOURCE_FOLDER, x), 'rb').read()
|
||||
CA_CRT = _GET_RESOURCE('ca.pem')
|
||||
CA_KEY = _GET_RESOURCE('ca.key')
|
||||
SERVER_CRT = _GET_RESOURCE('star_moto_com.pem')
|
||||
SERVER_COMMON_NAME = '*.moto.com'
|
||||
SERVER_CRT_BAD = _GET_RESOURCE('star_moto_com-bad.pem')
|
||||
SERVER_KEY = _GET_RESOURCE('star_moto_com.key')
|
||||
BAD_ARN = 'arn:aws:acm:us-east-2:123456789012:certificate/_0000000-0000-0000-0000-000000000000'
|
||||
RESOURCE_FOLDER = os.path.join(os.path.dirname(__file__), "resources")
|
||||
_GET_RESOURCE = lambda x: open(os.path.join(RESOURCE_FOLDER, x), "rb").read()
|
||||
CA_CRT = _GET_RESOURCE("ca.pem")
|
||||
CA_KEY = _GET_RESOURCE("ca.key")
|
||||
SERVER_CRT = _GET_RESOURCE("star_moto_com.pem")
|
||||
SERVER_COMMON_NAME = "*.moto.com"
|
||||
SERVER_CRT_BAD = _GET_RESOURCE("star_moto_com-bad.pem")
|
||||
SERVER_KEY = _GET_RESOURCE("star_moto_com.key")
|
||||
BAD_ARN = "arn:aws:acm:us-east-2:123456789012:certificate/_0000000-0000-0000-0000-000000000000"
|
||||
|
||||
|
||||
def _import_cert(client):
|
||||
response = client.import_certificate(
|
||||
Certificate=SERVER_CRT,
|
||||
PrivateKey=SERVER_KEY,
|
||||
CertificateChain=CA_CRT
|
||||
Certificate=SERVER_CRT, PrivateKey=SERVER_KEY, CertificateChain=CA_CRT
|
||||
)
|
||||
return response['CertificateArn']
|
||||
return response["CertificateArn"]
|
||||
|
||||
|
||||
# Also tests GetCertificate
|
||||
@mock_acm
|
||||
def test_import_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
resp = client.import_certificate(
|
||||
Certificate=SERVER_CRT,
|
||||
PrivateKey=SERVER_KEY,
|
||||
CertificateChain=CA_CRT
|
||||
Certificate=SERVER_CRT, PrivateKey=SERVER_KEY, CertificateChain=CA_CRT
|
||||
)
|
||||
resp = client.get_certificate(CertificateArn=resp['CertificateArn'])
|
||||
resp = client.get_certificate(CertificateArn=resp["CertificateArn"])
|
||||
|
||||
resp['Certificate'].should.equal(SERVER_CRT.decode())
|
||||
resp.should.contain('CertificateChain')
|
||||
resp["Certificate"].should.equal(SERVER_CRT.decode())
|
||||
resp.should.contain("CertificateChain")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_import_bad_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
try:
|
||||
client.import_certificate(
|
||||
Certificate=SERVER_CRT_BAD,
|
||||
PrivateKey=SERVER_KEY,
|
||||
)
|
||||
client.import_certificate(Certificate=SERVER_CRT_BAD, PrivateKey=SERVER_KEY)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ValidationException')
|
||||
err.response["Error"]["Code"].should.equal("ValidationException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ValidationException')
|
||||
raise RuntimeError("Should of raised ValidationException")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_list_certificates():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
resp = client.list_certificates()
|
||||
len(resp['CertificateSummaryList']).should.equal(1)
|
||||
len(resp["CertificateSummaryList"]).should.equal(1)
|
||||
|
||||
resp['CertificateSummaryList'][0]['CertificateArn'].should.equal(arn)
|
||||
resp['CertificateSummaryList'][0]['DomainName'].should.equal(SERVER_COMMON_NAME)
|
||||
resp["CertificateSummaryList"][0]["CertificateArn"].should.equal(arn)
|
||||
resp["CertificateSummaryList"][0]["DomainName"].should.equal(SERVER_COMMON_NAME)
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_list_certificates_by_status():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
issued_arn = _import_cert(client)
|
||||
pending_arn = client.request_certificate(DomainName='google.com')['CertificateArn']
|
||||
pending_arn = client.request_certificate(DomainName="google.com")["CertificateArn"]
|
||||
|
||||
resp = client.list_certificates()
|
||||
len(resp['CertificateSummaryList']).should.equal(2)
|
||||
resp = client.list_certificates(CertificateStatuses=['EXPIRED', 'INACTIVE'])
|
||||
len(resp['CertificateSummaryList']).should.equal(0)
|
||||
resp = client.list_certificates(CertificateStatuses=['PENDING_VALIDATION'])
|
||||
len(resp['CertificateSummaryList']).should.equal(1)
|
||||
resp['CertificateSummaryList'][0]['CertificateArn'].should.equal(pending_arn)
|
||||
len(resp["CertificateSummaryList"]).should.equal(2)
|
||||
resp = client.list_certificates(CertificateStatuses=["EXPIRED", "INACTIVE"])
|
||||
len(resp["CertificateSummaryList"]).should.equal(0)
|
||||
resp = client.list_certificates(CertificateStatuses=["PENDING_VALIDATION"])
|
||||
len(resp["CertificateSummaryList"]).should.equal(1)
|
||||
resp["CertificateSummaryList"][0]["CertificateArn"].should.equal(pending_arn)
|
||||
|
||||
resp = client.list_certificates(CertificateStatuses=['ISSUED'])
|
||||
len(resp['CertificateSummaryList']).should.equal(1)
|
||||
resp['CertificateSummaryList'][0]['CertificateArn'].should.equal(issued_arn)
|
||||
resp = client.list_certificates(CertificateStatuses=['ISSUED', 'PENDING_VALIDATION'])
|
||||
len(resp['CertificateSummaryList']).should.equal(2)
|
||||
arns = {cert['CertificateArn'] for cert in resp['CertificateSummaryList']}
|
||||
resp = client.list_certificates(CertificateStatuses=["ISSUED"])
|
||||
len(resp["CertificateSummaryList"]).should.equal(1)
|
||||
resp["CertificateSummaryList"][0]["CertificateArn"].should.equal(issued_arn)
|
||||
resp = client.list_certificates(
|
||||
CertificateStatuses=["ISSUED", "PENDING_VALIDATION"]
|
||||
)
|
||||
len(resp["CertificateSummaryList"]).should.equal(2)
|
||||
arns = {cert["CertificateArn"] for cert in resp["CertificateSummaryList"]}
|
||||
arns.should.contain(issued_arn)
|
||||
arns.should.contain(pending_arn)
|
||||
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_get_invalid_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
try:
|
||||
client.get_certificate(CertificateArn=BAD_ARN)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
# Also tests deleting invalid certificate
|
||||
@mock_acm
|
||||
def test_delete_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
# If it does not raise an error and the next call does, all is fine
|
||||
|
|
@ -123,222 +117,209 @@ def test_delete_certificate():
|
|||
try:
|
||||
client.delete_certificate(CertificateArn=arn)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_describe_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
resp = client.describe_certificate(CertificateArn=arn)
|
||||
resp['Certificate']['CertificateArn'].should.equal(arn)
|
||||
resp['Certificate']['DomainName'].should.equal(SERVER_COMMON_NAME)
|
||||
resp['Certificate']['Issuer'].should.equal('Moto')
|
||||
resp['Certificate']['KeyAlgorithm'].should.equal('RSA_2048')
|
||||
resp['Certificate']['Status'].should.equal('ISSUED')
|
||||
resp['Certificate']['Type'].should.equal('IMPORTED')
|
||||
resp["Certificate"]["CertificateArn"].should.equal(arn)
|
||||
resp["Certificate"]["DomainName"].should.equal(SERVER_COMMON_NAME)
|
||||
resp["Certificate"]["Issuer"].should.equal("Moto")
|
||||
resp["Certificate"]["KeyAlgorithm"].should.equal("RSA_2048")
|
||||
resp["Certificate"]["Status"].should.equal("ISSUED")
|
||||
resp["Certificate"]["Type"].should.equal("IMPORTED")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_describe_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
try:
|
||||
client.describe_certificate(CertificateArn=BAD_ARN)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
# Also tests ListTagsForCertificate
|
||||
@mock_acm
|
||||
def test_add_tags_to_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
client.add_tags_to_certificate(
|
||||
CertificateArn=arn,
|
||||
Tags=[
|
||||
{'Key': 'key1', 'Value': 'value1'},
|
||||
{'Key': 'key2'},
|
||||
]
|
||||
CertificateArn=arn, Tags=[{"Key": "key1", "Value": "value1"}, {"Key": "key2"}]
|
||||
)
|
||||
|
||||
resp = client.list_tags_for_certificate(CertificateArn=arn)
|
||||
tags = {item['Key']: item.get('Value', '__NONE__') for item in resp['Tags']}
|
||||
tags = {item["Key"]: item.get("Value", "__NONE__") for item in resp["Tags"]}
|
||||
|
||||
tags.should.contain('key1')
|
||||
tags.should.contain('key2')
|
||||
tags['key1'].should.equal('value1')
|
||||
tags.should.contain("key1")
|
||||
tags.should.contain("key2")
|
||||
tags["key1"].should.equal("value1")
|
||||
|
||||
# This way, it ensures that we can detect if None is passed back when it shouldnt,
|
||||
# as we store keys without values with a value of None, but it shouldnt be passed back
|
||||
tags['key2'].should.equal('__NONE__')
|
||||
tags["key2"].should.equal("__NONE__")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_add_tags_to_invalid_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
try:
|
||||
client.add_tags_to_certificate(
|
||||
CertificateArn=BAD_ARN,
|
||||
Tags=[
|
||||
{'Key': 'key1', 'Value': 'value1'},
|
||||
{'Key': 'key2'},
|
||||
]
|
||||
Tags=[{"Key": "key1", "Value": "value1"}, {"Key": "key2"}],
|
||||
)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_list_tags_for_invalid_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
try:
|
||||
client.list_tags_for_certificate(CertificateArn=BAD_ARN)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_remove_tags_from_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
client.add_tags_to_certificate(
|
||||
CertificateArn=arn,
|
||||
Tags=[
|
||||
{'Key': 'key1', 'Value': 'value1'},
|
||||
{'Key': 'key2'},
|
||||
{'Key': 'key3', 'Value': 'value3'},
|
||||
{'Key': 'key4', 'Value': 'value4'},
|
||||
]
|
||||
{"Key": "key1", "Value": "value1"},
|
||||
{"Key": "key2"},
|
||||
{"Key": "key3", "Value": "value3"},
|
||||
{"Key": "key4", "Value": "value4"},
|
||||
],
|
||||
)
|
||||
|
||||
client.remove_tags_from_certificate(
|
||||
CertificateArn=arn,
|
||||
Tags=[
|
||||
{'Key': 'key1', 'Value': 'value2'}, # Should not remove as doesnt match
|
||||
{'Key': 'key2'}, # Single key removal
|
||||
{'Key': 'key3', 'Value': 'value3'}, # Exact match removal
|
||||
{'Key': 'key4'} # Partial match removal
|
||||
]
|
||||
{"Key": "key1", "Value": "value2"}, # Should not remove as doesnt match
|
||||
{"Key": "key2"}, # Single key removal
|
||||
{"Key": "key3", "Value": "value3"}, # Exact match removal
|
||||
{"Key": "key4"}, # Partial match removal
|
||||
],
|
||||
)
|
||||
|
||||
resp = client.list_tags_for_certificate(CertificateArn=arn)
|
||||
tags = {item['Key']: item.get('Value', '__NONE__') for item in resp['Tags']}
|
||||
tags = {item["Key"]: item.get("Value", "__NONE__") for item in resp["Tags"]}
|
||||
|
||||
for key in ('key2', 'key3', 'key4'):
|
||||
for key in ("key2", "key3", "key4"):
|
||||
tags.should_not.contain(key)
|
||||
|
||||
tags.should.contain('key1')
|
||||
tags.should.contain("key1")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_remove_tags_from_invalid_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
try:
|
||||
client.remove_tags_from_certificate(
|
||||
CertificateArn=BAD_ARN,
|
||||
Tags=[
|
||||
{'Key': 'key1', 'Value': 'value1'},
|
||||
{'Key': 'key2'},
|
||||
]
|
||||
Tags=[{"Key": "key1", "Value": "value1"}, {"Key": "key2"}],
|
||||
)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_resend_validation_email():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
client.resend_validation_email(
|
||||
CertificateArn=arn,
|
||||
Domain='*.moto.com',
|
||||
ValidationDomain='NOTUSEDYET'
|
||||
CertificateArn=arn, Domain="*.moto.com", ValidationDomain="NOTUSEDYET"
|
||||
)
|
||||
# Returns nothing, boto would raise Exceptions otherwise
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_resend_validation_email_invalid():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
arn = _import_cert(client)
|
||||
|
||||
try:
|
||||
client.resend_validation_email(
|
||||
CertificateArn=arn,
|
||||
Domain='no-match.moto.com',
|
||||
ValidationDomain='NOTUSEDYET'
|
||||
Domain="no-match.moto.com",
|
||||
ValidationDomain="NOTUSEDYET",
|
||||
)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('InvalidDomainValidationOptionsException')
|
||||
err.response["Error"]["Code"].should.equal(
|
||||
"InvalidDomainValidationOptionsException"
|
||||
)
|
||||
else:
|
||||
raise RuntimeError('Should of raised InvalidDomainValidationOptionsException')
|
||||
raise RuntimeError("Should of raised InvalidDomainValidationOptionsException")
|
||||
|
||||
try:
|
||||
client.resend_validation_email(
|
||||
CertificateArn=BAD_ARN,
|
||||
Domain='no-match.moto.com',
|
||||
ValidationDomain='NOTUSEDYET'
|
||||
Domain="no-match.moto.com",
|
||||
ValidationDomain="NOTUSEDYET",
|
||||
)
|
||||
except ClientError as err:
|
||||
err.response['Error']['Code'].should.equal('ResourceNotFoundException')
|
||||
err.response["Error"]["Code"].should.equal("ResourceNotFoundException")
|
||||
else:
|
||||
raise RuntimeError('Should of raised ResourceNotFoundException')
|
||||
raise RuntimeError("Should of raised ResourceNotFoundException")
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_request_certificate():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
token = str(uuid.uuid4())
|
||||
|
||||
resp = client.request_certificate(
|
||||
DomainName='google.com',
|
||||
DomainName="google.com",
|
||||
IdempotencyToken=token,
|
||||
SubjectAlternativeNames=['google.com', 'www.google.com', 'mail.google.com'],
|
||||
SubjectAlternativeNames=["google.com", "www.google.com", "mail.google.com"],
|
||||
)
|
||||
resp.should.contain('CertificateArn')
|
||||
arn = resp['CertificateArn']
|
||||
resp.should.contain("CertificateArn")
|
||||
arn = resp["CertificateArn"]
|
||||
arn.should.match(r"arn:aws:acm:eu-central-1:\d{12}:certificate/")
|
||||
|
||||
resp = client.request_certificate(
|
||||
DomainName='google.com',
|
||||
DomainName="google.com",
|
||||
IdempotencyToken=token,
|
||||
SubjectAlternativeNames=['google.com', 'www.google.com', 'mail.google.com'],
|
||||
SubjectAlternativeNames=["google.com", "www.google.com", "mail.google.com"],
|
||||
)
|
||||
resp['CertificateArn'].should.equal(arn)
|
||||
resp["CertificateArn"].should.equal(arn)
|
||||
|
||||
|
||||
@mock_acm
|
||||
def test_request_certificate_no_san():
|
||||
client = boto3.client('acm', region_name='eu-central-1')
|
||||
client = boto3.client("acm", region_name="eu-central-1")
|
||||
|
||||
resp = client.request_certificate(
|
||||
DomainName='google.com'
|
||||
)
|
||||
resp.should.contain('CertificateArn')
|
||||
resp = client.request_certificate(DomainName="google.com")
|
||||
resp.should.contain("CertificateArn")
|
||||
|
||||
resp2 = client.describe_certificate(CertificateArn=resp["CertificateArn"])
|
||||
resp2.should.contain("Certificate")
|
||||
|
||||
resp2 = client.describe_certificate(
|
||||
CertificateArn=resp['CertificateArn']
|
||||
)
|
||||
resp2.should.contain('Certificate')
|
||||
|
||||
# # Also tests the SAN code
|
||||
# # requires Pull: https://github.com/spulec/freezegun/pull/210
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue