Skip to content

Commit a7856b7

Browse files
committed
test: Add stack trace env config tests to options
Signed-off-by: Varsha GS <varsha.gs@ibm.com>
1 parent 46d6ba7 commit a7856b7

File tree

2 files changed

+157
-6
lines changed

2 files changed

+157
-6
lines changed

src/instana/options.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,7 @@ def set_trace_configurations(self) -> None:
140140
try:
141141
length = int(os.environ["INSTANA_STACK_TRACE_LENGTH"])
142142
if length >= 1:
143-
self.stack_trace_length = min(length, 40) # Enforce max of 40
144-
if length > 40:
145-
logger.warning(
146-
f"INSTANA_STACK_TRACE_LENGTH of {length} exceeds maximum of 40. Using 40."
147-
)
143+
self.stack_trace_length = length
148144
else:
149145
logger.warning(
150146
"INSTANA_STACK_TRACE_LENGTH must be positive. Using default 30"

tests/test_options.py

Lines changed: 156 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,4 +637,159 @@ def test_gcr_options_with_env_vars(self) -> None:
637637
assert self.gcr_options.log_level == logging.INFO
638638

639639

640-
# Made with Bob
640+
class TestStackTraceConfiguration:
641+
"""Test stack trace configuration options."""
642+
643+
@pytest.fixture(autouse=True)
644+
def _resource(self) -> Generator[None, None, None]:
645+
self.options = None
646+
yield
647+
if "tracing" in config.keys():
648+
del config["tracing"]
649+
650+
def test_stack_trace_defaults(self) -> None:
651+
"""Test default stack trace configuration."""
652+
self.options = BaseOptions()
653+
654+
assert self.options.stack_trace_level == "all"
655+
assert self.options.stack_trace_length == 30
656+
657+
@patch.dict(
658+
os.environ,
659+
{"INSTANA_STACK_TRACE": "error"},
660+
)
661+
def test_stack_trace_level_env_var_error(self) -> None:
662+
"""Test INSTANA_STACK_TRACE environment variable with 'error'."""
663+
self.options = BaseOptions()
664+
665+
assert self.options.stack_trace_level == "error"
666+
assert self.options.stack_trace_length == 30 # Default
667+
668+
@patch.dict(
669+
os.environ,
670+
{"INSTANA_STACK_TRACE": "none"},
671+
)
672+
def test_stack_trace_level_env_var_none(self) -> None:
673+
"""Test INSTANA_STACK_TRACE environment variable with 'none'."""
674+
self.options = BaseOptions()
675+
676+
assert self.options.stack_trace_level == "none"
677+
assert self.options.stack_trace_length == 30 # Default
678+
679+
@patch.dict(
680+
os.environ,
681+
{"INSTANA_STACK_TRACE": "all"},
682+
)
683+
def test_stack_trace_level_env_var_all(self) -> None:
684+
"""Test INSTANA_STACK_TRACE environment variable with 'all'."""
685+
self.options = BaseOptions()
686+
687+
assert self.options.stack_trace_level == "all"
688+
assert self.options.stack_trace_length == 30 # Default
689+
690+
@patch.dict(
691+
os.environ,
692+
{"INSTANA_STACK_TRACE": "INVALID"},
693+
)
694+
def test_stack_trace_level_env_var_invalid(
695+
self,
696+
caplog: pytest.LogCaptureFixture,
697+
) -> None:
698+
"""Test INSTANA_STACK_TRACE with invalid value falls back to default."""
699+
caplog.set_level(logging.WARNING, logger="instana")
700+
self.options = BaseOptions()
701+
702+
assert self.options.stack_trace_level == "all" # Falls back to default
703+
assert any(
704+
"Invalid INSTANA_STACK_TRACE value" in message
705+
for message in caplog.messages
706+
)
707+
708+
@patch.dict(
709+
os.environ,
710+
{"INSTANA_STACK_TRACE_LENGTH": "25"},
711+
)
712+
def test_stack_trace_length_env_var(self) -> None:
713+
"""Test INSTANA_STACK_TRACE_LENGTH environment variable."""
714+
self.options = BaseOptions()
715+
716+
assert self.options.stack_trace_level == "all" # Default
717+
assert self.options.stack_trace_length == 25
718+
719+
@patch.dict(
720+
os.environ,
721+
{"INSTANA_STACK_TRACE_LENGTH": "0"},
722+
)
723+
def test_stack_trace_length_env_var_zero(
724+
self,
725+
caplog: pytest.LogCaptureFixture,
726+
) -> None:
727+
"""Test INSTANA_STACK_TRACE_LENGTH with zero value."""
728+
caplog.set_level(logging.WARNING, logger="instana")
729+
self.options = BaseOptions()
730+
731+
assert self.options.stack_trace_length == 30 # Falls back to default
732+
assert any(
733+
"must be positive" in message for message in caplog.messages
734+
)
735+
736+
@patch.dict(
737+
os.environ,
738+
{"INSTANA_STACK_TRACE_LENGTH": "-5"},
739+
)
740+
def test_stack_trace_length_env_var_negative(
741+
self,
742+
caplog: pytest.LogCaptureFixture,
743+
) -> None:
744+
"""Test INSTANA_STACK_TRACE_LENGTH with negative value."""
745+
caplog.set_level(logging.WARNING, logger="instana")
746+
self.options = BaseOptions()
747+
748+
assert self.options.stack_trace_length == 30 # Falls back to default
749+
assert any(
750+
"must be positive" in message for message in caplog.messages
751+
)
752+
753+
@patch.dict(
754+
os.environ,
755+
{"INSTANA_STACK_TRACE_LENGTH": "invalid"},
756+
)
757+
def test_stack_trace_length_env_var_invalid(
758+
self,
759+
caplog: pytest.LogCaptureFixture,
760+
) -> None:
761+
"""Test INSTANA_STACK_TRACE_LENGTH with invalid value."""
762+
caplog.set_level(logging.WARNING, logger="instana")
763+
self.options = BaseOptions()
764+
765+
assert self.options.stack_trace_length == 30 # Falls back to default
766+
assert any(
767+
"Invalid INSTANA_STACK_TRACE_LENGTH" in message
768+
for message in caplog.messages
769+
)
770+
771+
@patch.dict(
772+
os.environ,
773+
{
774+
"INSTANA_STACK_TRACE": "error",
775+
"INSTANA_STACK_TRACE_LENGTH": "15",
776+
},
777+
)
778+
def test_stack_trace_both_env_vars(self) -> None:
779+
"""Test both INSTANA_STACK_TRACE and INSTANA_STACK_TRACE_LENGTH."""
780+
self.options = BaseOptions()
781+
782+
assert self.options.stack_trace_level == "error"
783+
assert self.options.stack_trace_length == 15
784+
785+
@patch.dict(
786+
os.environ,
787+
{
788+
"INSTANA_STACK_TRACE": "ERROR", # Test case insensitivity
789+
},
790+
)
791+
def test_stack_trace_level_case_insensitive(self) -> None:
792+
"""Test INSTANA_STACK_TRACE is case insensitive."""
793+
self.options = BaseOptions()
794+
795+
assert self.options.stack_trace_level == "error"

0 commit comments

Comments
 (0)