@@ -14,120 +14,125 @@ def reset_tracing_config():
14
14
yield
15
15
16
16
17
+ @pytest .fixture
18
+ def service_name ():
19
+ return "booking"
20
+
21
+
17
22
def test_capture_lambda_handler (dummy_response ):
18
- # GIVEN tracer is disabled, and decorator is used
19
- # WHEN a lambda handler is run
20
- # THEN tracer should not raise an Exception
23
+ # GIVEN tracer lambda handler decorator is used
21
24
tracer = Tracer (disabled = True )
22
25
26
+ # WHEN a lambda handler is run
23
27
@tracer .capture_lambda_handler
24
28
def handler (event , context ):
25
29
return dummy_response
26
30
31
+ # THEN tracer should not raise an Exception
27
32
handler ({}, {})
28
33
29
34
30
35
def test_capture_method (dummy_response ):
31
- # GIVEN tracer is disabled, and method decorator is used
32
- # WHEN a function is run
33
- # THEN tracer should not raise an Exception
34
-
36
+ # GIVEN tracer method decorator is used
35
37
tracer = Tracer (disabled = True )
36
38
39
+ # WHEN a function is run
37
40
@tracer .capture_method
38
41
def greeting (name , message ):
39
42
return dummy_response
40
43
44
+ # THEN tracer should not raise an Exception
41
45
greeting (name = "Foo" , message = "Bar" )
42
46
43
47
44
48
def test_tracer_lambda_emulator (monkeypatch , dummy_response ):
45
- # GIVEN tracer is run locally
46
- # WHEN a lambda function is run through SAM CLI
47
- # THEN tracer should not raise an Exception
49
+ # GIVEN tracer runs locally
48
50
monkeypatch .setenv ("AWS_SAM_LOCAL" , "true" )
49
51
tracer = Tracer ()
50
52
53
+ # WHEN a lambda function is run through SAM CLI
51
54
@tracer .capture_lambda_handler
52
55
def handler (event , context ):
53
56
return dummy_response
54
57
58
+ # THEN tracer should run in disabled mode, and not raise an Exception
55
59
handler ({}, {})
56
- monkeypatch .delenv ("AWS_SAM_LOCAL" )
57
60
58
61
59
62
def test_tracer_metadata_disabled (dummy_response ):
60
63
# GIVEN tracer is disabled, and annotations/metadata are used
61
- # WHEN a lambda handler is run
62
- # THEN tracer should not raise an Exception and simply ignore
63
64
tracer = Tracer (disabled = True )
64
65
66
+ # WHEN a lambda handler is run
65
67
@tracer .capture_lambda_handler
66
68
def handler (event , context ):
67
69
tracer .put_annotation ("PaymentStatus" , "SUCCESS" )
68
70
tracer .put_metadata ("PaymentMetadata" , "Metadata" )
69
71
return dummy_response
70
72
73
+ # THEN tracer should not raise any Exception
71
74
handler ({}, {})
72
75
73
76
74
- def test_tracer_env_vars (monkeypatch ):
75
- # GIVEN tracer disabled, is run without parameters
76
- # WHEN service is explicitly defined
77
- # THEN tracer should have use that service name
78
- service_name = "booking"
77
+ def test_tracer_service_env_var (monkeypatch , service_name ):
78
+ # GIVEN tracer is run without parameters
79
+ # WHEN service is implicitly defined via env var
79
80
monkeypatch .setenv ("POWERTOOLS_SERVICE_NAME" , service_name )
80
- tracer_env_var = Tracer (disabled = True )
81
+ tracer = Tracer (disabled = True )
82
+
83
+ # THEN tracer should have use that service name
84
+ assert tracer .service == service_name
81
85
82
- assert tracer_env_var .service == service_name
83
86
87
+ def test_tracer_explicit_service (monkeypatch , service_name ):
88
+ # GIVEN tracer is disabled
89
+ # WHEN service is explicitly defined
84
90
tracer_explicit = Tracer (disabled = True , service = service_name )
85
91
assert tracer_explicit .service == service_name
86
92
87
93
monkeypatch .setenv ("POWERTOOLS_TRACE_DISABLED" , "true" )
88
94
tracer = Tracer ()
89
95
90
- assert bool (tracer .disabled ) is True
96
+ # THEN tracer should have use that service name
97
+ assert tracer .service == service_name
91
98
92
99
93
- def test_tracer_with_exception (mocker ):
94
- # GIVEN tracer is disabled, decorator is used
95
- # WHEN a lambda handler or method returns an Exception
96
- # THEN tracer should reraise the same Exception
100
+ def test_tracer_propagate_exception (mocker ):
101
+ # GIVEN tracer decorator is used
97
102
class CustomException (Exception ):
98
103
pass
99
104
100
105
tracer = Tracer (disabled = True )
101
106
107
+ # WHEN a lambda handler or method returns an Exception
102
108
@tracer .capture_lambda_handler
103
109
def handler (event , context ):
104
110
raise CustomException ("test" )
105
111
106
112
@tracer .capture_method
107
- def greeting (name , message ):
113
+ def greeting ():
108
114
raise CustomException ("test" )
109
115
116
+ # THEN tracer should reraise the same Exception
110
117
with pytest .raises (CustomException ):
111
118
handler ({}, {})
112
119
113
120
with pytest .raises (CustomException ):
114
- greeting (name = "Foo" , message = "Bar" )
121
+ greeting ()
115
122
116
123
117
- def test_tracer_reuse ():
118
- # GIVEN tracer A, B were initialized
119
- # WHEN tracer B explicitly reuses A config
120
- # THEN tracer B attributes should be equal to tracer A
121
- service_name = "booking"
124
+ def test_tracer_reuse_configuration (service_name ):
125
+ # GIVEN tracer A is initialized
122
126
tracer_a = Tracer (disabled = True , service = service_name )
127
+ # WHEN tracer B is initialized afterwards
123
128
tracer_b = Tracer ()
124
129
125
- assert id ( tracer_a ) != id ( tracer_b )
130
+ # THEN tracer B attributes should be equal to tracer A
126
131
assert tracer_a .__dict__ .items () == tracer_b .__dict__ .items ()
127
132
128
133
129
134
def test_tracer_method_nested_sync (mocker ):
130
- # GIVEN tracer is disabled, decorator is used
135
+ # GIVEN tracer decorator is used
131
136
# WHEN multiple sync functions are nested
132
137
# THEN tracer should not raise a Runtime Error
133
138
tracer = Tracer (disabled = True )
0 commit comments