21
21
from ...helpers import get_first_span_by_filter
22
22
23
23
class TestLambda (unittest .TestCase ):
24
- def _get_role (self ):
25
- iam = boto3 .client ("iam" , region_name = self .lambda_region )
26
- return iam .create_role (
27
- RoleName = "my-role" ,
28
- AssumeRolePolicyDocument = "some policy"
29
- )["Role" ]["Arn" ]
30
-
31
- def _process_lambda (self , func_str ):
32
- zip_output = BytesIO ()
33
- with ZipFile (zip_output , "w" ) as zip_file :
34
- zip_file .writestr ("lambda_function.py" , func_str )
35
- return zip_output .getvalue ()
36
-
37
- def _get_test_zip_file (self ):
38
- pfunc = """
39
- def lambda_handler(event, context):
40
- print("custom log event")
41
- return {"message": "success"}
42
- """
43
- return self ._process_lambda (pfunc )
44
-
45
24
def setUp (self ):
46
25
""" Clear all spans before a test run """
47
26
self .recorder = tracer .recorder
48
27
self .recorder .clear_spans ()
49
- self .mock = mock_aws ()
28
+ self .mock = mock_aws (config = { "lambda" : { "use_docker" : False }} )
50
29
self .mock .start ()
51
30
self .lambda_region = "us-east-1"
52
31
self .aws_lambda = boto3 .client ('lambda' , region_name = self .lambda_region )
53
32
self .function_name = "myfunc"
54
- self .aws_lambda .create_function (
55
- FunctionName = self .function_name ,
56
- Runtime = "python3.9" ,
57
- Role = self ._get_role (),
58
- Handler = "lambda_function.lambda_handler" ,
59
- Code = {"ZipFile" : self ._get_test_zip_file ()}
60
- )
61
33
62
34
def tearDown (self ):
63
35
# Stop Moto after each test
64
36
self .mock .stop ()
65
37
66
38
67
- @pytest .mark .skip ("Lambda mocking requires docker" )
68
39
def test_lambda_invoke (self ):
69
40
with tracer .start_active_span ('test' ):
70
- result = self .aws_lambda .invoke (FunctionName = self .function_name )
41
+ result = self .aws_lambda .invoke (FunctionName = self .function_name , Payload = json . dumps ({ "message" : "success" }) )
71
42
72
43
self .assertEqual (result ["StatusCode" ], 200 )
73
- payload = json .loads (result ["Payload" ].read ().decode ("utf-8" ))
74
- self .assertIn ("message" , payload )
75
- self .assertEqual ("success" , payload ["message" ])
44
+ result_payload = json .loads (result ["Payload" ].read ().decode ("utf-8" ))
45
+ self .assertIn ("message" , result_payload )
46
+ self .assertEqual ("success" , result_payload ["message" ])
76
47
77
48
spans = tracer .recorder .queued_spans ()
78
49
self .assertEqual (2 , len (spans ))
@@ -94,7 +65,7 @@ def test_lambda_invoke(self):
94
65
self .assertEqual (boto_span .data ['boto3' ]['op' ], 'Invoke' )
95
66
endpoint = f'https://lambda.{ self .lambda_region } .amazonaws.com'
96
67
self .assertEqual (boto_span .data ['boto3' ]['ep' ], endpoint )
97
- self .assertEqual (boto_span .data ['boto3' ]['reg' ], 'us-east-1' )
68
+ self .assertEqual (boto_span .data ['boto3' ]['reg' ], self . lambda_region )
98
69
self .assertIn ('FunctionName' , boto_span .data ['boto3' ]['payload' ])
99
70
self .assertEqual (boto_span .data ['boto3' ]['payload' ]['FunctionName' ], self .function_name )
100
71
self .assertEqual (boto_span .data ['http' ]['status' ], 200 )
0 commit comments