Skip to content

Commit dcd8df2

Browse files
authored
Add smoke tests for Bucket resource (#21)
Issue aws-controllers-k8s/community#799 Description of changes: - Add s3 `Bucket` e2e tests for create and delete operations By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 9c8e7e2 commit dcd8df2

File tree

2 files changed

+99
-3
lines changed

2 files changed

+99
-3
lines changed

test/e2e/resources/bucket.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: s3.services.k8s.aws/v1alpha1
2+
kind: Bucket
3+
metadata:
4+
name: $BUCKET_NAME
5+
spec:
6+
name: $BUCKET_NAME

test/e2e/tests/test_bucket.py

Lines changed: 93 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,96 @@
1+
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License"). You may
4+
# not use this file except in compliance with the License. A copy of the
5+
# License is located at
6+
#
7+
# http://aws.amazon.com/apache2.0/
8+
#
9+
# or in the "license" file accompanying this file. This file is distributed
10+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
11+
# express or implied. See the License for the specific language governing
12+
# permissions and limitations under the License.
13+
14+
"""Integration tests for the S3 Bucket API.
15+
"""
16+
17+
import boto3
118
import pytest
2-
from e2e import SERVICE_NAME
19+
import time
20+
import logging
21+
from typing import Dict, Tuple
22+
23+
from acktest.resources import random_suffix_name
24+
from acktest.k8s import resource as k8s
25+
from e2e import service_marker, CRD_GROUP, CRD_VERSION, load_s3_resource
26+
from e2e.replacement_values import REPLACEMENT_VALUES
27+
from e2e.bootstrap_resources import TestBootstrapResources, get_bootstrap_resources
28+
29+
RESOURCE_PLURAL = "buckets"
30+
31+
CREATE_WAIT_AFTER_SECONDS = 10
32+
DELETE_WAIT_AFTER_SECONDS = 10
333

34+
@pytest.fixture(scope="module")
35+
def s3_client():
36+
return boto3.client("s3")
37+
38+
@service_marker
39+
@pytest.mark.canary
440
class TestBucket:
5-
def test_bucket(self):
6-
pytest.skip(f"No tests for {SERVICE_NAME}")
41+
def get_bucket(self, s3_client, bucket_name: str) -> dict:
42+
try:
43+
resp = s3_client.list_buckets()
44+
except Exception as e:
45+
logging.debug(e)
46+
return None
47+
48+
buckets = resp["Buckets"]
49+
for bucket in buckets:
50+
if bucket["Name"] == bucket_name:
51+
return bucket
52+
53+
return None
54+
55+
def bucket_exists(self, s3_client, bucket_name: str) -> bool:
56+
return self.get_bucket(s3_client, bucket_name) is not None
57+
58+
def test_smoke(self, s3_client):
59+
resource_name = random_suffix_name("s3-bucket", 24)
60+
61+
replacements = REPLACEMENT_VALUES.copy()
62+
replacements["BUCKET_NAME"] = resource_name
63+
64+
# Load Bucket CR
65+
resource_data = load_s3_resource(
66+
"bucket",
67+
additional_replacements=replacements,
68+
)
69+
logging.debug(resource_data)
70+
71+
# Create k8s resource
72+
ref = k8s.CustomResourceReference(
73+
CRD_GROUP, CRD_VERSION, RESOURCE_PLURAL,
74+
resource_name, namespace="default",
75+
)
76+
k8s.create_custom_resource(ref, resource_data)
77+
cr = k8s.wait_resource_consumed_by_controller(ref)
78+
79+
assert cr is not None
80+
assert k8s.get_resource_exists(ref)
81+
82+
time.sleep(CREATE_WAIT_AFTER_SECONDS)
83+
84+
# Check S3 Bucket exists
85+
exists = self.bucket_exists(s3_client, resource_name)
86+
assert exists
87+
88+
# Delete k8s resource
89+
_, deleted = k8s.delete_custom_resource(ref)
90+
assert deleted is True
91+
92+
time.sleep(DELETE_WAIT_AFTER_SECONDS)
93+
94+
# Check S3 Bucket doesn't exists
95+
exists = self.bucket_exists(s3_client, resource_name)
96+
assert not exists

0 commit comments

Comments
 (0)