@@ -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