forked from TrueCloudLab/s3-tests
Compare commits
1 commit
master
...
feature/ap
Author | SHA1 | Date | |
---|---|---|---|
f8120b10f7 |
1 changed files with 177 additions and 0 deletions
177
s3tests_boto3/functional/test_frostfs.py
Normal file
177
s3tests_boto3/functional/test_frostfs.py
Normal file
|
@ -0,0 +1,177 @@
|
|||
from botocore.exceptions import ClientError
|
||||
import json
|
||||
import time
|
||||
|
||||
from .utils import assert_raises
|
||||
from .utils import _get_status_and_error_code
|
||||
|
||||
from . import (
|
||||
configfile, setup_teardown, # we need this to parse config
|
||||
get_client,
|
||||
get_unauthenticated_client,
|
||||
get_new_bucket,
|
||||
)
|
||||
|
||||
|
||||
def test_bucket_policy_frostfs_deny():
|
||||
bucket_name = get_new_bucket()
|
||||
client = get_client()
|
||||
key = 'tmp'
|
||||
|
||||
resource1 = "arn:aws:s3:::" + bucket_name
|
||||
resource2 = "arn:aws:s3:::" + bucket_name + "/*"
|
||||
policy_document = json.dumps(
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [{
|
||||
"Effect": "Deny",
|
||||
"Principal": "*",
|
||||
"Action": "s3:PutObject",
|
||||
"Resource": [
|
||||
"{}".format(resource1),
|
||||
"{}".format(resource2)
|
||||
],
|
||||
"Condition": {
|
||||
"StringNotEquals": {
|
||||
"s3:RequestObjectTag/environment": "production"
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
)
|
||||
client.put_bucket_policy(Bucket=bucket_name, Policy=policy_document)
|
||||
|
||||
# TEST 7
|
||||
client.put_object(Bucket=bucket_name, Key=key, Tagging='environment=production')
|
||||
|
||||
# TEST 8
|
||||
e = assert_raises(ClientError, client.put_object, Bucket=bucket_name, Key=key, Tagging='environment=development')
|
||||
status, error_code = _get_status_and_error_code(e.response)
|
||||
assert status == 403
|
||||
assert error_code == 'AccessDenied'
|
||||
|
||||
# TEST 9
|
||||
e = assert_raises(ClientError, client.put_object, Bucket=bucket_name, Key=key)
|
||||
status, error_code = _get_status_and_error_code(e.response)
|
||||
assert status == 403
|
||||
assert error_code == 'AccessDenied'
|
||||
|
||||
|
||||
|
||||
policy_document = json.dumps(
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [{
|
||||
"Effect": "Deny",
|
||||
"Principal": "*",
|
||||
"Action": "s3:PutObject",
|
||||
"Resource": [
|
||||
"{}".format(resource1),
|
||||
"{}".format(resource2)
|
||||
],
|
||||
"Condition": {
|
||||
"StringEquals": {
|
||||
"s3:RequestObjectTag/environment": "production"
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
)
|
||||
client.put_bucket_policy(Bucket=bucket_name, Policy=policy_document)
|
||||
|
||||
# TEST 10
|
||||
e = assert_raises(ClientError, client.put_object, Bucket=bucket_name, Key=key, Tagging='environment=production')
|
||||
status, error_code = _get_status_and_error_code(e.response)
|
||||
assert status == 403
|
||||
assert error_code == 'AccessDenied'
|
||||
|
||||
# TEST 11
|
||||
client.put_object(Bucket=bucket_name, Key=key, Tagging='environment=development')
|
||||
|
||||
# TEST 12
|
||||
client.put_object(Bucket=bucket_name, Key=key)
|
||||
|
||||
def test_bucket_policy_frostfs_allow():
|
||||
bucket_name = get_new_bucket()
|
||||
client = get_client()
|
||||
key = 'tmp'
|
||||
|
||||
client.put_object(Bucket=bucket_name, Key=key)
|
||||
|
||||
resource1 = "arn:aws:s3:::" + bucket_name
|
||||
resource2 = "arn:aws:s3:::" + bucket_name + "/*"
|
||||
policy_document = json.dumps(
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [{
|
||||
"Effect": "Allow",
|
||||
"Principal": "*",
|
||||
"Action": "s3:PutObjectTagging",
|
||||
"Resource": [
|
||||
"{}".format(resource1),
|
||||
"{}".format(resource2)
|
||||
],
|
||||
"Condition": {
|
||||
"StringNotEquals": {
|
||||
"s3:RequestObjectTag/environment": "production"
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
)
|
||||
client.put_bucket_policy(Bucket=bucket_name, Policy=policy_document)
|
||||
time.sleep(3)
|
||||
|
||||
alt_client = get_unauthenticated_client()
|
||||
|
||||
# TEST 1
|
||||
e = assert_raises(ClientError, alt_client.put_object_tagging, Bucket=bucket_name, Key=key, Tagging={'TagSet':[{'Key':'environment','Value':'production'}]})
|
||||
status, error_code = _get_status_and_error_code(e.response)
|
||||
assert status == 403
|
||||
assert error_code == 'AccessDenied'
|
||||
|
||||
# TEST 2
|
||||
alt_client.put_object_tagging(Bucket=bucket_name, Key=key, Tagging={'TagSet':[{'Key':'environment','Value':'development'}]})
|
||||
|
||||
# TEST 3
|
||||
alt_client.put_object_tagging(Bucket=bucket_name, Key=key, Tagging={'TagSet':[]})
|
||||
|
||||
|
||||
|
||||
policy_document2 = json.dumps(
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [{
|
||||
"Effect": "Allow",
|
||||
"Principal": "*",
|
||||
"Action": "s3:PutObjectTagging",
|
||||
"Resource": [
|
||||
"{}".format(resource1),
|
||||
"{}".format(resource2)
|
||||
],
|
||||
"Condition": {
|
||||
"StringEquals": {
|
||||
"s3:RequestObjectTag/environment": "production"
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
)
|
||||
client.put_bucket_policy(Bucket=bucket_name, Policy=policy_document2)
|
||||
time.sleep(15) # probably we can reduce this
|
||||
|
||||
# TEST 4
|
||||
alt_client.put_object_tagging(Bucket=bucket_name, Key=key, Tagging={'TagSet':[{'Key':'environment','Value':'production'}]})
|
||||
|
||||
# TEST 5
|
||||
e = assert_raises(ClientError, alt_client.put_object_tagging, Bucket=bucket_name, Key=key, Tagging={'TagSet':[{'Key':'environment','Value':'development'}]})
|
||||
status, error_code = _get_status_and_error_code(e.response)
|
||||
assert status == 403
|
||||
assert error_code == 'AccessDenied'
|
||||
|
||||
# TEST 6
|
||||
e = assert_raises(ClientError, alt_client.put_object_tagging, Bucket=bucket_name, Key=key, Tagging={'TagSet':[]})
|
||||
status, error_code = _get_status_and_error_code(e.response)
|
||||
assert status == 403
|
||||
assert error_code == 'AccessDenied'
|
||||
|
Loading…
Reference in a new issue