kopia lustrzana https://github.com/simonw/s3-credentials
82 wiersze
2.9 KiB
Python
82 wiersze
2.9 KiB
Python
from click.testing import CliRunner
|
|
from s3_credentials.cli import cli
|
|
import pytest
|
|
import re
|
|
import textwrap
|
|
|
|
|
|
def assert_match_with_wildcards(pattern, input):
|
|
# Pattern language is simple: '*' becomes '.*?'
|
|
bits = pattern.split("*")
|
|
regex = "^{}$".format(".*?".join(re.escape(bit) for bit in bits))
|
|
print(regex)
|
|
match = re.compile(regex.strip(), re.DOTALL).match(input.strip())
|
|
if match is None:
|
|
# Build a useful message
|
|
message = "Pattern:\n{}\n\nDoes not match input:\n\n{}".format(pattern, input)
|
|
bad_bits = [bit for bit in bits if bit not in input]
|
|
if bad_bits:
|
|
message += "\nThese parts were not found in the input:\n\n"
|
|
for bit in bad_bits:
|
|
message += textwrap.indent("{}\n\n".format(bit), " ")
|
|
assert False, message
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"options,expected",
|
|
(
|
|
(
|
|
[],
|
|
(
|
|
"""Would create bucket: 'my-bucket'
|
|
Would create user: 's3.read-write.my-bucket' with permissions boundary: 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
|
|
Would attach policy called 's3.read-write.my-bucket' to user 's3.read-write.my-bucket', details:*
|
|
Would call create access key for user 's3.read-write.my-bucket'"""
|
|
),
|
|
),
|
|
(
|
|
["--username", "frank"],
|
|
(
|
|
"""Would create bucket: 'my-bucket'
|
|
Would create user: 'frank' with permissions boundary: 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
|
|
Would attach policy called 's3.read-write.my-bucket' to user 'frank', details:*
|
|
Would call create access key for user 'frank'"""
|
|
),
|
|
),
|
|
(
|
|
["--duration", "20m"],
|
|
(
|
|
"""Would create bucket: 'my-bucket'
|
|
Would ensure role: 's3-credentials.AmazonS3FullAccess'
|
|
Would assume role using following policy for 1200 seconds:*"""
|
|
),
|
|
),
|
|
(
|
|
["--public"],
|
|
(
|
|
"""Would create bucket: 'my-bucket'
|
|
... then attach the following bucket policy to it:*
|
|
Would create user: 's3.read-write.my-bucket' with permissions boundary: 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
|
|
Would attach policy called 's3.read-write.my-bucket' to user 's3.read-write.my-bucket', details:*
|
|
Would call create access key for user 's3.read-write.my-bucket'"""
|
|
),
|
|
),
|
|
(
|
|
[
|
|
"--statement",
|
|
'{"Effect": "Allow", "Action": "textract:*", "Resource": "*"}',
|
|
],
|
|
(
|
|
"""Would create bucket: 'my-bucket'
|
|
Would create user: 's3.custom.my-bucket'
|
|
*"Action": "textract:*"""
|
|
),
|
|
),
|
|
),
|
|
)
|
|
def test_dry_run(options, expected):
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["create", "my-bucket", "--dry-run"] + options)
|
|
assert result.exit_code == 0, result.output
|
|
assert_match_with_wildcards(expected, result.output)
|