Skip to content

Commit 52217f7

Browse files
authored
test: adopt-or-create for IAM Policy (#135)
Issue [#2459](aws-controllers-k8s/community#2459): Description of changes: Ensure Policy ARN is in cr after adopt-or-create of an existing resource By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 2f1054c commit 52217f7

File tree

4 files changed

+61
-9
lines changed

4 files changed

+61
-9
lines changed

test/e2e/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
acktest @ git+https://github.com/aws-controllers-k8s/test-infra.git@371852014efcb8c26c454f861eb546c93a48f205
1+
acktest @ git+https://github.com/aws-controllers-k8s/test-infra.git@10ce1ccf0f723933960e04c972808d9b4015ba50
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
apiVersion: iam.services.k8s.aws/v1alpha1
2+
kind: Policy
3+
metadata:
4+
name: $POLICY_ADOPTION_NAME
5+
annotations:
6+
services.k8s.aws/adoption-policy: $ADOPTION_POLICY
7+
services.k8s.aws/adoption-fields: "$ADOPTION_FIELDS"
8+
services.k8s.aws/deletion-policy: retain
9+
spec:
10+
name: $POLICY_ADOPTION_NAME
11+
policyDocument: |
12+
{
13+
"Version": "2012-10-17",
14+
"Statement": [
15+
{
16+
"Effect": "Allow",
17+
"Action": [
18+
"s3:ListBucket",
19+
],
20+
"Resource": "*"
21+
}
22+
]
23+
}

test/e2e/tests/test_policy.py

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818

1919
import pytest
2020

21+
from enum import Enum
2122
from acktest.k8s import condition
2223
from acktest.k8s import resource as k8s
2324
from acktest.resources import random_suffix_name
25+
from acktest.adoption import ADOPT_ADOPTION_POLICY, ADOPT_OR_CREATE_ADOPTION_POLICY
2426
from e2e import service_marker, CRD_GROUP, CRD_VERSION, load_resource
2527
from e2e.bootstrap_resources import get_bootstrap_resources
2628
from e2e.common.types import POLICY_RESOURCE_PLURAL
@@ -35,7 +37,6 @@
3537
MODIFY_WAIT_AFTER_SECONDS = 20
3638
CREATE_WAIT_AFTER_SECONDS = 10
3739

38-
3940
@pytest.fixture(scope="module")
4041
def simple_policy():
4142
policy_name = random_suffix_name("my-simple-policy", 24)
@@ -79,17 +80,30 @@ def simple_policy():
7980

8081
policy.wait_until_deleted(policy_arn)
8182

82-
@pytest.fixture(scope="module")
83-
def adopt_policy():
84-
resource_arn = get_bootstrap_resources().AdoptedPolicy.arns[0]
85-
resource_name = random_suffix_name("adopted-policy", 24)
83+
@pytest.fixture
84+
def adopt_policy(request):
85+
filename = ""
86+
resource_name = ""
8687
replacements = REPLACEMENT_VALUES.copy()
88+
89+
marker = request.node.get_closest_marker("resource_data")
90+
assert marker is not None
91+
data = marker.args[0]
92+
assert 'adoption-policy' in data
93+
replacements["ADOPTION_POLICY"] = data['adoption-policy']
94+
assert 'filename' in data
95+
filename = data['filename']
96+
assert 'resource_name' in data
97+
resource_name = data['resource_name']
98+
99+
resource_name = random_suffix_name(resource_name, 24)
100+
resource_arn = get_bootstrap_resources().AdoptedPolicy.arns[0]
87101
replacements["POLICY_ADOPTION_NAME"] = resource_name
88-
replacements["ADOPTION_POLICY"] = "adopt"
89102
replacements["ADOPTION_FIELDS"] = f"{{\\\"arn\\\": \\\"{resource_arn}\\\"}}"
103+
replacements["POLICY_ADOPTION_NAME"] = resource_name
90104

91105
resource_data = load_resource(
92-
"policy_adoption",
106+
filename,
93107
additional_replacements=replacements,
94108
)
95109

@@ -227,10 +241,11 @@ def test_crud(self, simple_policy):
227241
after_doc = after_pv["Document"]
228242
assert after_doc == new_policy_doc
229243

244+
@pytest.mark.resource_data({'adoption-policy': ADOPT_ADOPTION_POLICY, 'filename': 'policy_adopt', 'resource_name': 'adopt'})
230245
def test_policy_adopt_update(self, adopt_policy):
231246
ref, cr, policy_arn = adopt_policy
232247

233-
condition.assert_synced(ref)
248+
k8s.wait_on_condition(ref, "ACK.ResourceSynced", "True", wait_periods=5)
234249

235250
assert cr is not None
236251
assert 'status' in cr
@@ -262,3 +277,17 @@ def test_policy_adopt_update(self, adopt_policy):
262277

263278
policy_doc = policy.get_version(policy_arn, "v2")["Document"]
264279
assert policy_doc == new_policy_doc
280+
281+
@pytest.mark.resource_data({'adoption-policy': ADOPT_OR_CREATE_ADOPTION_POLICY, 'filename': 'policy_adopt_or_create', 'resource_name': 'adopt-or-create'})
282+
def test_policy_adopt_or_create(self, adopt_policy):
283+
ref, cr, policy_arn = adopt_policy
284+
285+
k8s.wait_on_condition(ref, "ACK.ResourceSynced", "True", wait_periods=5)
286+
287+
assert cr is not None
288+
assert 'status' in cr
289+
assert 'defaultVersionID' in cr['status']
290+
assert cr['status']['defaultVersionID'] == 'v1'
291+
assert 'ackResourceMetadata' in cr['status']
292+
assert 'arn' in cr['status']['ackResourceMetadata']
293+
assert cr['status']['ackResourceMetadata']['arn'] == policy_arn

0 commit comments

Comments
 (0)