Skip to content

Commit afec2dd

Browse files
jomcgixrmx
andauthored
fix: error raised for env checks in LogLimits and SpanLimits (open-telemetry#4458)
Current implementation raises a value error trying to create the error message. Updated error message format to use positional instead of named params. Added test cases to validate the correct errors are raised. Co-authored-by: Riccardo Magliocchetti <[email protected]>
1 parent b61622d commit afec2dd

File tree

5 files changed

+67
-2
lines changed

5 files changed

+67
-2
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3030
([#4448](https://github.com/open-telemetry/opentelemetry-python/pull/4448))
3131
- Make `trace_api.use_span()` record `BaseException` as well as `Exception`
3232
([#4406](https://github.com/open-telemetry/opentelemetry-python/pull/4406))
33+
- Fix env var error message for TraceLimits/SpanLimits
34+
([#4458](https://github.com/open-telemetry/opentelemetry-python/pull/4458))
3335

3436
## Version 1.30.0/0.51b0 (2025-02-03)
3537

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def _from_env_if_absent(
134134
if value == cls.UNSET:
135135
return None
136136

137-
err_msg = "{0} must be a non-negative integer but got {}"
137+
err_msg = "{} must be a non-negative integer but got {}"
138138

139139
# if no value is provided for the limit, try to load it from env
140140
if value is None:

opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ def _from_env_if_absent(
692692
if value == cls.UNSET:
693693
return None
694694

695-
err_msg = "{0} must be a non-negative integer but got {}"
695+
err_msg = "{} must be a non-negative integer but got {}"
696696

697697
# if no value is provided for the limit, try to load it from env
698698
if value is None:

opentelemetry-sdk/tests/logs/test_log_limits.py

+32
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,16 @@
1313
# limitations under the License.
1414

1515
import unittest
16+
from unittest.mock import patch
1617

1718
from opentelemetry.sdk._logs import LogLimits
1819
from opentelemetry.sdk._logs._internal import (
1920
_DEFAULT_OTEL_ATTRIBUTE_COUNT_LIMIT,
2021
)
22+
from opentelemetry.sdk.environment_variables import (
23+
OTEL_ATTRIBUTE_COUNT_LIMIT,
24+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
25+
)
2126

2227

2328
class TestLogLimits(unittest.TestCase):
@@ -38,3 +43,30 @@ def test_log_limits_max_attribute_length(self):
3843
limits = LogLimits(max_attribute_length=1)
3944

4045
self.assertEqual(expected, limits.max_attribute_length)
46+
47+
def test_invalid_env_vars_raise(self):
48+
env_vars = [
49+
OTEL_ATTRIBUTE_COUNT_LIMIT,
50+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
51+
]
52+
53+
bad_values = ["bad", "-1"]
54+
test_cases = {
55+
env_var: bad_value
56+
for env_var in env_vars
57+
for bad_value in bad_values
58+
}
59+
60+
for env_var, bad_value in test_cases.items():
61+
with self.subTest(f"Testing {env_var}={bad_value}"):
62+
with self.assertRaises(ValueError) as error, patch.dict(
63+
"os.environ", {env_var: bad_value}, clear=True
64+
):
65+
LogLimits()
66+
67+
expected_msg = f"{env_var} must be a non-negative integer but got {bad_value}"
68+
self.assertEqual(
69+
expected_msg,
70+
str(error.exception),
71+
f"Unexpected error message for {env_var}={bad_value}",
72+
)

opentelemetry-sdk/tests/trace/test_trace.py

+31
Original file line numberDiff line numberDiff line change
@@ -2007,6 +2007,37 @@ def _test_span_no_limits(self, tracer):
20072007
for attr_val in root.attributes.values():
20082008
self.assertEqual(attr_val, self.long_val)
20092009

2010+
def test_invalid_env_vars_raise(self):
2011+
env_vars = [
2012+
OTEL_SPAN_EVENT_COUNT_LIMIT,
2013+
OTEL_SPAN_LINK_COUNT_LIMIT,
2014+
OTEL_ATTRIBUTE_COUNT_LIMIT,
2015+
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
2016+
OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT,
2017+
OTEL_LINK_ATTRIBUTE_COUNT_LIMIT,
2018+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
2019+
]
2020+
bad_values = ["bad", "-1"]
2021+
test_cases = {
2022+
env_var: bad_value
2023+
for env_var in env_vars
2024+
for bad_value in bad_values
2025+
}
2026+
2027+
for env_var, bad_value in test_cases.items():
2028+
with self.subTest(f"Testing {env_var}={bad_value}"):
2029+
with self.assertRaises(ValueError) as error, patch.dict(
2030+
"os.environ", {env_var: bad_value}, clear=True
2031+
):
2032+
trace.SpanLimits()
2033+
2034+
expected_msg = f"{env_var} must be a non-negative integer but got {bad_value}"
2035+
self.assertEqual(
2036+
expected_msg,
2037+
str(error.exception),
2038+
f"Unexpected error message for {env_var}={bad_value}",
2039+
)
2040+
20102041

20112042
class TestTraceFlags(unittest.TestCase):
20122043
def test_constant_default(self):

0 commit comments

Comments
 (0)