46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import uuid
|
|
|
|
import boto3
|
|
import pytest
|
|
from botocore.client import Config
|
|
|
|
|
|
@pytest.mark.integration
|
|
def test_boto3_basic_operations(live_server):
|
|
bucket_name = f"boto3-test-{uuid.uuid4().hex[:8]}"
|
|
object_key = "folder/hello.txt"
|
|
|
|
s3 = boto3.client(
|
|
"s3",
|
|
endpoint_url=live_server,
|
|
aws_access_key_id="test",
|
|
aws_secret_access_key="secret",
|
|
region_name="us-east-1",
|
|
use_ssl=False,
|
|
config=Config(
|
|
signature_version="s3v4",
|
|
retries={"max_attempts": 1},
|
|
s3={"addressing_style": "path"},
|
|
),
|
|
)
|
|
|
|
s3.create_bucket(Bucket=bucket_name)
|
|
|
|
try:
|
|
put_response = s3.put_object(Bucket=bucket_name, Key=object_key, Body=b"hello from boto3")
|
|
assert "ETag" in put_response
|
|
|
|
obj = s3.get_object(Bucket=bucket_name, Key=object_key)
|
|
assert obj["Body"].read() == b"hello from boto3"
|
|
|
|
listing = s3.list_objects_v2(Bucket=bucket_name)
|
|
contents = listing.get("Contents", [])
|
|
assert contents, "list_objects_v2 should return at least the object we uploaded"
|
|
keys = {entry["Key"] for entry in contents}
|
|
assert object_key in keys
|
|
|
|
s3.delete_object(Bucket=bucket_name, Key=object_key)
|
|
post_delete = s3.list_objects_v2(Bucket=bucket_name)
|
|
assert not post_delete.get("Contents"), "Object should be removed before deleting bucket"
|
|
finally:
|
|
s3.delete_bucket(Bucket=bucket_name) |