Skip to content

Commit 0e4be83

Browse files
committed
Add update property with E2E tests
1 parent 2dbfbe3 commit 0e4be83

File tree

4 files changed

+88
-1
lines changed

4 files changed

+88
-1
lines changed

apis/v1alpha1/ack-generate-metadata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
ack_generate_info:
2-
build_date: "2024-04-16T16:52:09Z"
2+
build_date: "2024-04-16T23:40:41Z"
33
build_hash: 37f4ba2b5a121a8786bc516e9ec4aa0b8b590c7d
44
go_version: go1.21.6
55
version: v0.33.0-1-g37f4ba2

pkg/resource/function/hooks.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,15 @@ func (rm *resourceManager) updateFunctionConfiguration(
162162
FunctionName: aws.String(*dspec.Name),
163163
}
164164

165+
if delta.DifferentAt("Spec.DeadLetterConfig") {
166+
deadLetterConfig := &svcsdk.DeadLetterConfig{}
167+
if dspec.DeadLetterConfig != nil {
168+
deadLetterConfigCopy := dspec.DeadLetterConfig.DeepCopy()
169+
deadLetterConfig.TargetArn = deadLetterConfigCopy.TargetARN
170+
}
171+
input.DeadLetterConfig = deadLetterConfig
172+
}
173+
165174
if delta.DifferentAt("Spec.Description") {
166175
if dspec.Description != nil {
167176
input.Description = aws.String(*dspec.Description)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: lambda.services.k8s.aws/v1alpha1
2+
kind: Function
3+
metadata:
4+
name: $FUNCTION_NAME
5+
annotations:
6+
services.k8s.aws/region: $AWS_REGION
7+
spec:
8+
name: $FUNCTION_NAME
9+
code:
10+
s3Bucket: $BUCKET_NAME
11+
s3Key: $LAMBDA_FILE_NAME
12+
role: $LAMBDA_ROLE
13+
runtime: python3.9
14+
handler: main
15+
deadLetterConfig:
16+
targetARN: $DEAD_LETTER_CONFIG_TARGET_ARN
17+
description: function created by ACK lambda-controller e2e tests

test/e2e/tests/test_function.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,67 @@ def test_function_architecture(self, lambda_client):
604604
# Check Lambda function doesn't exist
605605
assert not lambda_validator.function_exists(resource_name)
606606

607+
def test_function_features(self, lambda_client):
608+
resource_name = random_suffix_name("functionfeatures", 24)
609+
610+
resources = get_bootstrap_resources()
611+
logging.debug(resources)
612+
613+
replacements = REPLACEMENT_VALUES.copy()
614+
replacements["FUNCTION_NAME"] = resource_name
615+
replacements["BUCKET_NAME"] = resources.FunctionsBucket.name
616+
replacements["LAMBDA_ROLE"] = resources.EICRole.arn
617+
replacements["LAMBDA_FILE_NAME"] = LAMBDA_FUNCTION_FILE_ZIP
618+
replacements["AWS_REGION"] = get_region()
619+
replacements["DEAD_LETTER_CONFIG_TARGET_ARN"] = resources.EICQueueOnSuccess.arn
620+
621+
# Load Lambda CR
622+
resource_data = load_lambda_resource(
623+
"function_features",
624+
additional_replacements=replacements,
625+
)
626+
logging.debug(resource_data)
627+
628+
# Create k8s resource
629+
ref = k8s.CustomResourceReference(
630+
CRD_GROUP, CRD_VERSION, RESOURCE_PLURAL,
631+
resource_name, namespace="default",
632+
)
633+
k8s.create_custom_resource(ref, resource_data)
634+
cr = k8s.wait_resource_consumed_by_controller(ref)
635+
636+
assert cr is not None
637+
assert k8s.get_resource_exists(ref)
638+
639+
time.sleep(CREATE_WAIT_AFTER_SECONDS)
640+
641+
cr = k8s.wait_resource_consumed_by_controller(ref)
642+
643+
lambda_validator = LambdaValidator(lambda_client)
644+
645+
# Check Lambda function exists
646+
assert lambda_validator.function_exists(resource_name)
647+
648+
# Update cr
649+
cr["spec"]["deadLetterConfig"]["targetARN"] = resources.EICQueueOnFailure.arn
650+
651+
#Patch k8s resource
652+
k8s.patch_custom_resource(ref, cr)
653+
time.sleep(UPDATE_WAIT_AFTER_SECONDS)
654+
655+
#Check function_snapstart update fields
656+
function = lambda_validator.get_function(resource_name)
657+
assert function["Configuration"]["DeadLetterConfig"]["TargetArn"] == resources.EICQueueOnFailure.arn
658+
659+
# Delete k8s resource
660+
_, deleted = k8s.delete_custom_resource(ref)
661+
assert deleted is True
662+
663+
time.sleep(DELETE_WAIT_AFTER_SECONDS)
664+
665+
# Check Lambda function doesn't exist
666+
assert not lambda_validator.function_exists(resource_name)
667+
607668
def test_function_event_invoke_config(self, lambda_client):
608669
resource_name = random_suffix_name("lambda-function", 24)
609670

0 commit comments

Comments
 (0)