second first commit
This commit is contained in:
@@ -0,0 +1,222 @@
|
||||
"""Lambda function integration tests."""
|
||||
|
||||
import pytest
|
||||
from botocore.exceptions import ClientError
|
||||
|
||||
|
||||
class TestLambdaFunction:
|
||||
"""Test Lambda function operations."""
|
||||
|
||||
def test_create_function(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test CreateFunction creates a function."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
try:
|
||||
response = lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Timeout=30,
|
||||
MemorySize=256,
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
assert response["FunctionName"] == fn_name
|
||||
assert response["FunctionArn"]
|
||||
assert fn_name in response["FunctionArn"]
|
||||
assert response["State"] == "Active"
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_get_function(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test GetFunction returns function details."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
response = lambda_client.get_function(FunctionName=fn_name)
|
||||
assert response["Configuration"]["FunctionName"] == fn_name
|
||||
assert response["Configuration"]["Role"] == role
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_get_function_configuration(
|
||||
self, lambda_client, minimal_lambda_zip, unique_name
|
||||
):
|
||||
"""Test GetFunctionConfiguration returns configuration."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Timeout=30,
|
||||
MemorySize=256,
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
response = lambda_client.get_function_configuration(FunctionName=fn_name)
|
||||
assert response["Timeout"] == 30
|
||||
assert response["MemorySize"] == 256
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_list_functions(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test ListFunctions includes created function."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
response = lambda_client.list_functions()
|
||||
assert any(f["FunctionName"] == fn_name for f in response["Functions"])
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_update_function_code(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test UpdateFunctionCode updates code."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
response = lambda_client.update_function_code(
|
||||
FunctionName=fn_name, ZipFile=minimal_lambda_zip
|
||||
)
|
||||
assert response["FunctionName"] == fn_name
|
||||
assert response.get("RevisionId")
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_delete_function(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test DeleteFunction removes function."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
with pytest.raises(ClientError) as exc_info:
|
||||
lambda_client.get_function(FunctionName=fn_name)
|
||||
assert exc_info.value.response["ResponseMetadata"]["HTTPStatusCode"] == 404
|
||||
|
||||
|
||||
class TestLambdaInvoke:
|
||||
"""Test Lambda invocation."""
|
||||
|
||||
def test_invoke_dry_run(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test Invoke with DryRun returns 204."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
response = lambda_client.invoke(
|
||||
FunctionName=fn_name,
|
||||
InvocationType="DryRun",
|
||||
Payload=b'{"key":"value"}',
|
||||
)
|
||||
assert response["StatusCode"] == 204
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_invoke_event_async(self, lambda_client, minimal_lambda_zip, unique_name):
|
||||
"""Test Invoke with Event type returns 202."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
response = lambda_client.invoke(
|
||||
FunctionName=fn_name,
|
||||
InvocationType="Event",
|
||||
Payload=b'{"key":"async"}',
|
||||
)
|
||||
assert response["StatusCode"] == 202
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
|
||||
class TestLambdaErrors:
|
||||
"""Test Lambda error handling."""
|
||||
|
||||
def test_create_function_duplicate(
|
||||
self, lambda_client, minimal_lambda_zip, unique_name
|
||||
):
|
||||
"""Test CreateFunction returns 409 for duplicate."""
|
||||
fn_name = f"pytest-lambda-{unique_name}"
|
||||
role = "arn:aws:iam::000000000000:role/lambda-role"
|
||||
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
|
||||
try:
|
||||
with pytest.raises(ClientError) as exc_info:
|
||||
lambda_client.create_function(
|
||||
FunctionName=fn_name,
|
||||
Runtime="nodejs20.x",
|
||||
Role=role,
|
||||
Handler="index.handler",
|
||||
Code={"ZipFile": minimal_lambda_zip},
|
||||
)
|
||||
assert exc_info.value.response["ResponseMetadata"]["HTTPStatusCode"] == 409
|
||||
finally:
|
||||
lambda_client.delete_function(FunctionName=fn_name)
|
||||
|
||||
def test_get_function_not_found(self, lambda_client):
|
||||
"""Test GetFunction returns 404 for non-existent function."""
|
||||
with pytest.raises(ClientError) as exc_info:
|
||||
lambda_client.get_function(FunctionName="does-not-exist-pytest")
|
||||
assert exc_info.value.response["ResponseMetadata"]["HTTPStatusCode"] == 404
|
||||
Reference in New Issue
Block a user