Skip to content

Commit 7d44c11

Browse files
committed
modified unit tests to patch the correct logger
1 parent 72c815d commit 7d44c11

2 files changed

Lines changed: 71 additions & 57 deletions

File tree

featuremanagement/azuremonitor/_send_telemetry.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,6 @@
3030
Span = object # type: ignore
3131
Context = object # type: ignore
3232

33-
34-
_EVENTS_LOGGER_INITIALIZED: bool = False
35-
36-
37-
def _initialize_event_logger() -> None:
38-
global _EVENTS_LOGGER_INITIALIZED # pylint: disable=global-statement
39-
if _EVENTS_LOGGER_INITIALIZED:
40-
return
41-
42-
_event_logger.addHandler(LoggingHandler())
43-
_event_logger.setLevel(INFO)
44-
_EVENTS_LOGGER_INITIALIZED = True
45-
46-
4733
FEATURE_NAME = "FeatureName"
4834
ENABLED = "Enabled"
4935
TARGETING_ID = "TargetingId"
@@ -54,12 +40,24 @@ def _initialize_event_logger() -> None:
5440
VERSION = "Version"
5541
VARIANT_ASSIGNMENT_PERCENTAGE = "VariantAssignmentPercentage"
5642
MICROSOFT_TARGETING_ID = "Microsoft.TargetingId"
57-
CUSTOM_EVENT_NAME = "microsoft.custom_event.name"
43+
AZURE_MONITOR_EVENT_NAME = "microsoft.custom_event.name"
5844

5945
EVENT_NAME = "FeatureEvaluation"
6046

6147
EVALUATION_EVENT_VERSION = "1.0.0"
6248

49+
_EVENTS_LOGGER_INITIALIZED: bool = False
50+
51+
52+
def _initialize_event_logger() -> None:
53+
global _EVENTS_LOGGER_INITIALIZED # pylint: disable=global-statement
54+
if _EVENTS_LOGGER_INITIALIZED:
55+
return
56+
57+
_event_logger.addHandler(LoggingHandler())
58+
_event_logger.setLevel(INFO)
59+
_EVENTS_LOGGER_INITIALIZED = True
60+
6361

6462
def track_event(event_name: str, user: str, event_properties: Optional[Dict[str, Optional[str]]] = None) -> None:
6563
"""
@@ -82,7 +80,7 @@ def track_event(event_name: str, user: str, event_properties: Optional[Dict[str,
8280
# Azure Monitor exporter maps this attribute to customEvent telemetry name.
8381
custom_event_attributes = {
8482
**event_properties,
85-
CUSTOM_EVENT_NAME: event_name,
83+
AZURE_MONITOR_EVENT_NAME: event_name,
8684
}
8785
_event_logger.info(event_name, extra=custom_event_attributes)
8886

tests/test_send_telemetry_appinsights.py

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
from featuremanagement.azuremonitor import TargetingSpanProcessor
1414

1515

16-
def _event_properties(mock_track_event):
17-
return mock_track_event.call_args.kwargs["event_properties"]
16+
def _event_properties(mock_logger_info):
17+
return mock_logger_info.call_args.kwargs["extra"]
1818

1919

2020
@pytest.mark.usefixtures("caplog")
@@ -44,15 +44,18 @@ def test_send_telemetry_appinsights(self):
4444
evaluation_event.variant = variant
4545
evaluation_event.reason = VariantAssignmentReason.DEFAULT_WHEN_DISABLED
4646

47-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
48-
# This is called like this so we can override the track_event function
47+
with (
48+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
49+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
50+
):
51+
# This is called like this so we can override the _event_logger.info function
4952
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
5053
evaluation_event
5154
)
52-
mock_track_event.assert_called_once()
53-
assert mock_track_event.call_args[0][0] == "FeatureEvaluation"
54-
assert mock_track_event.call_args[0][1] == "test_user"
55-
event_properties = _event_properties(mock_track_event)
55+
mock_logger_info.assert_called_once()
56+
assert mock_logger_info.call_args[0][0] == "FeatureEvaluation"
57+
event_properties = _event_properties(mock_logger_info)
58+
assert event_properties["TargetingId"] == "test_user"
5659
assert event_properties["FeatureName"] == "TestFeature"
5760
assert event_properties["Enabled"] == "True"
5861
assert event_properties["Variant"] == "TestVariant"
@@ -91,15 +94,17 @@ def test_send_telemetry_appinsights_no_user(self):
9194
evaluation_event.variant = variant
9295
evaluation_event.reason = VariantAssignmentReason.DEFAULT_WHEN_DISABLED
9396

94-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
95-
# This is called like this so we can override the track_event function
97+
with (
98+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
99+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
100+
):
101+
# This is called like this so we can override the _event_logger.info function
96102
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
97103
evaluation_event
98104
)
99-
mock_track_event.assert_called_once()
100-
assert mock_track_event.call_args[0][0] == "FeatureEvaluation"
101-
assert mock_track_event.call_args[0][1] == ""
102-
event_properties = _event_properties(mock_track_event)
105+
mock_logger_info.assert_called_once()
106+
assert mock_logger_info.call_args[0][0] == "FeatureEvaluation"
107+
event_properties = _event_properties(mock_logger_info)
103108
assert event_properties["FeatureName"] == "TestFeature"
104109
assert event_properties["Enabled"] == "False"
105110
assert "TargetingId" not in event_properties
@@ -113,15 +118,17 @@ def test_send_telemetry_appinsights_no_variant(self):
113118
evaluation_event.enabled = True
114119
evaluation_event.user = "test_user"
115120

116-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
117-
# This is called like this so we can override the track_event function
121+
with (
122+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
123+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
124+
):
125+
# This is called like this so we can override the _event_logger.info function
118126
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
119127
evaluation_event
120128
)
121-
mock_track_event.assert_called_once()
122-
assert mock_track_event.call_args[0][0] == "FeatureEvaluation"
123-
assert mock_track_event.call_args[0][1] == "test_user"
124-
event_properties = _event_properties(mock_track_event)
129+
mock_logger_info.assert_called_once()
130+
assert mock_logger_info.call_args[0][0] == "FeatureEvaluation"
131+
event_properties = _event_properties(mock_logger_info)
125132
assert event_properties["FeatureName"] == "TestFeature"
126133
assert event_properties["Enabled"] == "True"
127134
assert "Variant" not in event_properties
@@ -132,12 +139,15 @@ def test_send_telemetry_appinsights_no_feature_flag(self):
132139
evaluation_event.enabled = True
133140
evaluation_event.user = "test_user"
134141

135-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
136-
# This is called like this so we can override the track_event function
142+
with (
143+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
144+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
145+
):
146+
# This is called like this so we can override the _event_logger.info function
137147
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
138148
evaluation_event
139149
)
140-
mock_track_event.assert_not_called()
150+
mock_logger_info.assert_not_called()
141151

142152
def test_send_telemetry_appinsights_default_when_enabled(self):
143153
feature_flag = FeatureFlag.convert_from_json(
@@ -157,15 +167,17 @@ def test_send_telemetry_appinsights_default_when_enabled(self):
157167
evaluation_event.variant = variant
158168
evaluation_event.reason = VariantAssignmentReason.DEFAULT_WHEN_ENABLED
159169

160-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
161-
# This is called like this so we can override the track_event function
170+
with (
171+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
172+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
173+
):
174+
# This is called like this so we can override the _event_logger.info function
162175
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
163176
evaluation_event
164177
)
165-
mock_track_event.assert_called_once()
166-
assert mock_track_event.call_args[0][0] == "FeatureEvaluation"
167-
assert mock_track_event.call_args[0][1] == "test_user"
168-
event_properties = _event_properties(mock_track_event)
178+
mock_logger_info.assert_called_once()
179+
assert mock_logger_info.call_args[0][0] == "FeatureEvaluation"
180+
event_properties = _event_properties(mock_logger_info)
169181
assert event_properties["FeatureName"] == "TestFeature"
170182
assert event_properties["Enabled"] == "True"
171183
assert event_properties["Variant"] == "big"
@@ -188,15 +200,17 @@ def test_send_telemetry_appinsights_default_when_enabled_no_percentile(self):
188200
evaluation_event.variant = variant
189201
evaluation_event.reason = VariantAssignmentReason.DEFAULT_WHEN_ENABLED
190202

191-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
192-
# This is called like this so we can override the track_event function
203+
with (
204+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
205+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
206+
):
207+
# This is called like this so we can override the _event_logger.info function
193208
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
194209
evaluation_event
195210
)
196-
mock_track_event.assert_called_once()
197-
assert mock_track_event.call_args[0][0] == "FeatureEvaluation"
198-
assert mock_track_event.call_args[0][1] == "test_user"
199-
event_properties = _event_properties(mock_track_event)
211+
mock_logger_info.assert_called_once()
212+
assert mock_logger_info.call_args[0][0] == "FeatureEvaluation"
213+
event_properties = _event_properties(mock_logger_info)
200214
assert event_properties["FeatureName"] == "TestFeature"
201215
assert event_properties["Enabled"] == "True"
202216
assert event_properties["Variant"] == "big"
@@ -219,15 +233,17 @@ def test_send_telemetry_appinsights_allocation(self):
219233
evaluation_event.variant = variant
220234
evaluation_event.reason = VariantAssignmentReason.PERCENTILE
221235

222-
with patch("featuremanagement.azuremonitor._send_telemetry.track_event") as mock_track_event:
223-
# This is called like this so we can override the track_event function
236+
with (
237+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
238+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_logger_info,
239+
):
240+
# This is called like this so we can override the _event_logger.info function
224241
featuremanagement.azuremonitor._send_telemetry.publish_telemetry( # pylint: disable=protected-access
225242
evaluation_event
226243
)
227-
mock_track_event.assert_called_once()
228-
assert mock_track_event.call_args[0][0] == "FeatureEvaluation"
229-
assert mock_track_event.call_args[0][1] == "test_user"
230-
event_properties = _event_properties(mock_track_event)
244+
mock_logger_info.assert_called_once()
245+
assert mock_logger_info.call_args[0][0] == "FeatureEvaluation"
246+
event_properties = _event_properties(mock_logger_info)
231247
assert event_properties["FeatureName"] == "TestFeature"
232248
assert event_properties["Enabled"] == "True"
233249
assert event_properties["Variant"] == "big"

0 commit comments

Comments
 (0)