|
1 | 1 | import importlib.util |
| 2 | +import os |
2 | 3 | import unittest |
3 | 4 | from unittest.mock import Mock, patch |
4 | 5 |
|
5 | 6 | from datadog_lambda import feature_flags |
6 | 7 | from datadog_lambda import wrapper |
| 8 | +from datadog_lambda.config import Config |
7 | 9 |
|
8 | 10 |
|
9 | 11 | class FeatureFlagFlushTest(unittest.TestCase): |
@@ -48,8 +50,37 @@ def test_no_budget(self): |
48 | 50 |
|
49 | 51 | def test_old_tracer(self): |
50 | 52 | for telemetry in [None, Mock(FLUSH_API_VERSION=2)]: |
51 | | - with patch.object(feature_flags, "_telemetry", telemetry): |
52 | | - feature_flags.flush_feature_flag_telemetry(None) |
| 53 | + with self.subTest(telemetry=telemetry), patch.object( |
| 54 | + feature_flags, "_telemetry", telemetry |
| 55 | + ): |
| 56 | + context = Mock() |
| 57 | + context.get_remaining_time_in_millis.return_value = 1000 |
| 58 | + feature_flags.flush_feature_flag_telemetry(context) |
| 59 | + context.get_remaining_time_in_millis.assert_not_called() |
| 60 | + if telemetry is not None: |
| 61 | + telemetry.flush.assert_not_called() |
| 62 | + |
| 63 | + def test_timeout_environment_parsing_preserves_flush(self): |
| 64 | + for value, expected in [ |
| 65 | + (None, 0.5), |
| 66 | + ("250.5", 0.2505), |
| 67 | + ("", 0.5), |
| 68 | + ("garbage", 0.5), |
| 69 | + ("500ms", 0.5), |
| 70 | + ]: |
| 71 | + with self.subTest(value=value), patch.dict(os.environ), patch.object( |
| 72 | + feature_flags, "config", Config() |
| 73 | + ), patch.object(feature_flags, "_telemetry") as telemetry: |
| 74 | + if value is None: |
| 75 | + os.environ.pop("DD_FEATURE_FLAG_FLUSH_TIMEOUT_MS", None) |
| 76 | + else: |
| 77 | + os.environ["DD_FEATURE_FLAG_FLUSH_TIMEOUT_MS"] = value |
| 78 | + telemetry.FLUSH_API_VERSION = 1 |
| 79 | + telemetry.flush.return_value = "completed" |
| 80 | + feature_flags.flush_feature_flag_telemetry( |
| 81 | + Mock(get_remaining_time_in_millis=lambda: 1000) |
| 82 | + ) |
| 83 | + telemetry.flush.assert_called_once_with(expected) |
53 | 84 |
|
54 | 85 | def test_missing_context_and_telemetry_errors_are_safe(self): |
55 | 86 | with patch.object(feature_flags, "_telemetry") as telemetry: |
|
0 commit comments