Skip to content

Commit d97de75

Browse files
authored
creating separate e2e tests for VirtualCluster & JobRuns (#20)
Issue #, if available: aws-controllers-k8s/community#1439 Description of changes: creating separate e2e tests for virtualcluster & jobrun to streamline issues with testing. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent a286a5a commit d97de75

File tree

4 files changed

+132
-33
lines changed

4 files changed

+132
-33
lines changed

test/e2e/bootstrap_resources.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
@dataclass
2525
class BootstrapResources(Resources):
2626
JobExecutionRole: Role
27-
HostCluster: EMREnabledEKSCluster
27+
HostCluster_VC: EMREnabledEKSCluster
28+
HostCluster_JR: EMREnabledEKSCluster
2829

2930
_bootstrap_resources = None
3031

test/e2e/service_bootstrap.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ def service_bootstrap() -> Resources:
6363
JobExecutionRole=Role("ack-emrcontainers-job-execution-role", "ec2.amazonaws.com",
6464
user_policies=UserPolicies("ack-emrcontainers-job-execution-policy", [job_execution_policy])
6565
),
66-
HostCluster=EMREnabledEKSCluster("ack-emr-eks", "emr-ns")
66+
HostCluster_VC=EMREnabledEKSCluster("ack-emr-eks", "emr-ns"),
67+
HostCluster_JR=EMREnabledEKSCluster("ack-emr-eks", "emr-ns")
6768
)
6869

6970
try:

test/e2e/tests/test_virtualcluster_jobrun.py renamed to test/e2e/tests/test_jobrun.py

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,13 @@ def iam_client():
4242
return boto3.client("iam")
4343

4444
@pytest.fixture
45-
def virtualcluster_jobrun():
45+
def jobrun():
4646
virtual_cluster_name = random_suffix_name("emr-virtual-cluster", 32)
4747
job_run_name = random_suffix_name("emr-job-run", 32)
48-
hostcluster_data = get_bootstrap_resources()
4948

5049
replacements = REPLACEMENT_VALUES.copy()
5150
replacements["VIRTUALCLUSTER_NAME"] = virtual_cluster_name
52-
replacements["EKS_CLUSTER_NAME"] = get_bootstrap_resources().HostCluster.cluster.name
51+
replacements["EKS_CLUSTER_NAME"] = get_bootstrap_resources().HostCluster_JR.cluster.name
5352

5453
resource_data = load_resource(
5554
"emr_virtual_cluster",
@@ -70,7 +69,7 @@ def virtualcluster_jobrun():
7069

7170
virtual_cluster_id = vc_cr["status"]["id"]
7271
emr_release_label = "emr-6.3.0-latest"
73-
eks_clustername = get_bootstrap_resources().HostCluster.cluster.name
72+
eks_clustername = get_bootstrap_resources().HostCluster_JR.cluster.name
7473
job_execution_role = get_bootstrap_resources().JobExecutionRole.arn
7574

7675
replacements = REPLACEMENT_VALUES.copy()
@@ -115,26 +114,9 @@ def virtualcluster_jobrun():
115114
except:
116115
pass
117116

118-
# check if JobRun is deleted
119-
virtual_cluster_id = vc_cr["status"]["id"]
120-
jobrun_id = jr_cr["status"]["id"]
121-
try:
122-
jr_deleted = self.describe_job_run(id=jobrun_id,virtualClusterId=virtual_cluster_id)
123-
logging.debug('%s is deleted during cleanup', job_run_name)
124-
assert jr_deleted
125-
except:
126-
logging.debug('some resources such as %s did not cleanup as expected', job_run_name)
127-
# check if VirtualCluster is deleted
128-
try:
129-
vc_deleted = self.describe_virtual_cluster(id=virtual_cluster_id)
130-
logging.debug('%s is deleted during cleanup', virtual_cluster_name)
131-
assert vc_deleted
132-
except:
133-
logging.debug('some resources such as %s did not cleanup as expected', virtual_cluster_name)
134-
135117
@service_marker
136118
@pytest.mark.canary
137-
class Test_VirtualCluster_JobRun:
119+
class Test_JobRun:
138120

139121
def base36_str_to_int(self, request):
140122
"""Method to convert given string into decimal representation"""
@@ -245,25 +227,19 @@ def update_assume_role(self, oidc_provider_arn, iam_client):
245227
else:
246228
return TRUST_POLICY_STATEMENT_ALREADY_EXISTS % job_execution_role_name
247229

248-
def test_create_delete_virtualcluster_jobrun(self, virtualcluster_jobrun, emrcontainers_client, iam_client):
249-
oidc_provider_arn = get_bootstrap_resources().HostCluster.export_oidc_arn
230+
def test_create_delete_jobrun(self, jobrun, emrcontainers_client, iam_client):
231+
oidc_provider_arn = get_bootstrap_resources().HostCluster_JR.export_oidc_arn
250232

251233
# Update Job Execution Role
252234
role_update = self.update_assume_role(oidc_provider_arn, iam_client)
253235
assert role_update
254236

255-
(vc_ref, vc_cr, jr_ref, jr_cr) = virtualcluster_jobrun
237+
(vc_ref, vc_cr, jr_ref, jr_cr) = jobrun
256238
assert vc_cr, jr_cr
257239

258240
virtual_cluster_id = vc_cr["status"]["id"]
259241
assert virtual_cluster_id
260242

261-
try:
262-
aws_res = emrcontainers_client.describe_virtual_cluster(id=virtual_cluster_id)
263-
assert aws_res is not None
264-
except emrcontainers_client.exceptions.ResourceNotFoundException:
265-
pytest.fail(f"Could not find virtual cluster with ID '{virtual_cluster_id}' in EMR on EKS")
266-
267243
jobrun_id = jr_cr["status"]["id"]
268244
assert jobrun_id
269245

@@ -279,3 +255,19 @@ def test_create_delete_virtualcluster_jobrun(self, virtualcluster_jobrun, emrcon
279255
assert aws_res is not None
280256
except iam_client.exceptions.InvalidInputException:
281257
pytest.fail(f"Could not delete oidc identity provider")
258+
259+
# check if JobRun is deleted
260+
try:
261+
jr_deleted = emrcontainers_client.describe_job_run(id=jobrun_id,virtualClusterId=virtual_cluster_id)
262+
logging.debug('%s is deleted during cleanup', jobrun_id)
263+
assert jr_deleted
264+
except:
265+
logging.debug('some resources such as %s did not cleanup as expected', jobrun_id)
266+
267+
# check if VirtualCluster is deleted
268+
try:
269+
vc_deleted = emrcontainers_client.describe_virtual_cluster(id=virtual_cluster_id)
270+
logging.debug('%s is deleted during cleanup', virtual_cluster_id)
271+
assert vc_deleted
272+
except:
273+
logging.debug('some resources such as %s did not cleanup as expected', virtual_cluster_id)
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
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 EMR on EKS VirtualCluster resource
15+
"""
16+
17+
import boto3
18+
import json
19+
import logging
20+
import time
21+
from typing import Dict
22+
import pytest
23+
24+
from acktest.k8s import resource as k8s
25+
from acktest.resources import random_suffix_name
26+
from acktest.aws.identity import get_account_id
27+
from e2e import service_marker, CRD_GROUP, CRD_VERSION, load_resource
28+
from e2e.replacement_values import REPLACEMENT_VALUES
29+
from e2e.bootstrap_resources import get_bootstrap_resources
30+
31+
VC_RESOURCE_PLURAL = "virtualclusters"
32+
33+
@pytest.fixture
34+
def iam_client():
35+
return boto3.client("iam")
36+
37+
@pytest.fixture
38+
def virtualcluster():
39+
virtual_cluster_name = random_suffix_name("emr-virtual-cluster", 32)
40+
41+
replacements = REPLACEMENT_VALUES.copy()
42+
replacements["VIRTUALCLUSTER_NAME"] = virtual_cluster_name
43+
replacements["EKS_CLUSTER_NAME"] = get_bootstrap_resources().HostCluster_VC.cluster.name
44+
45+
resource_data = load_resource(
46+
"emr_virtual_cluster",
47+
additional_replacements=replacements,
48+
)
49+
logging.debug(resource_data)
50+
51+
# Create the k8s resource for emr virtual cluster
52+
vc_ref = k8s.CustomResourceReference(
53+
CRD_GROUP, CRD_VERSION, VC_RESOURCE_PLURAL,
54+
virtual_cluster_name, namespace="default",
55+
)
56+
k8s.create_custom_resource(vc_ref, resource_data)
57+
vc_cr = k8s.wait_resource_consumed_by_controller(vc_ref)
58+
59+
assert vc_cr is not None
60+
assert k8s.get_resource_exists(vc_ref)
61+
62+
yield (vc_ref, vc_cr)
63+
64+
# Try to delete, if doesn't already exist
65+
try:
66+
_, deleted = k8s.delete_custom_resource(vc_ref, 3, 10)
67+
assert deleted
68+
except:
69+
pass
70+
71+
72+
@service_marker
73+
@pytest.mark.canary
74+
class Test_VirtualCluster:
75+
def test_create_delete_virtualcluster(self, virtualcluster, emrcontainers_client, iam_client):
76+
oidc_provider_arn = get_bootstrap_resources().HostCluster_VC.export_oidc_arn
77+
78+
(vc_ref, vc_cr) = virtualcluster
79+
assert vc_cr
80+
81+
print("vc_cr=", vc_cr)
82+
83+
virtual_cluster_id = vc_cr["status"]["id"]
84+
assert virtual_cluster_id
85+
86+
try:
87+
aws_res = emrcontainers_client.describe_virtual_cluster(id=virtual_cluster_id)
88+
assert aws_res is not None
89+
except emrcontainers_client.exceptions.ResourceNotFoundException:
90+
pytest.fail(f"Could not find virtual cluster with ID '{virtual_cluster_id}' in EMR on EKS")
91+
92+
# delete oidc provider
93+
try:
94+
aws_res = iam_client.delete_open_id_connect_provider(OpenIDConnectProviderArn=oidc_provider_arn)
95+
assert aws_res is not None
96+
except iam_client.exceptions.InvalidInputException:
97+
pytest.fail(f"Could not delete oidc identity provider")
98+
99+
# check if VirtualCluster is deleted
100+
try:
101+
vc_deleted = emrcontainers_client.describe_virtual_cluster(id=virtual_cluster_id)
102+
logging.debug('%s is deleted during cleanup', virtual_cluster_id)
103+
assert vc_deleted
104+
except:
105+
logging.debug('some resources such as %s did not cleanup as expected', virtual_cluster_id)

0 commit comments

Comments
 (0)