@@ -703,6 +703,115 @@ def customize_exporter_test(
703
703
for key in config .keys ():
704
704
os .environ .pop (key , None )
705
705
706
+ def test_validate_logs_headers_infers_from_resource_attributes (self ):
707
+ """Test that _setup_inferred_headers can infer headers from OTEL_RESOURCE_ATTRIBUTES"""
708
+ from amazon .opentelemetry .distro .aws_opentelemetry_configurator import (
709
+ _validate_logs_headers ,
710
+ _parse_resource_attributes ,
711
+ _setup_inferred_headers ,
712
+ )
713
+
714
+ # Test _parse_resource_attributes function
715
+ os .environ ["OTEL_RESOURCE_ATTRIBUTES" ] = (
716
+ "service.name=TestService,aws.log.group.names=/aws/genesis/TestAgent,aws.log.stream.names=test-stream"
717
+ )
718
+ attrs = _parse_resource_attributes ()
719
+ self .assertEqual (attrs ["service.name" ], "TestService" )
720
+ self .assertEqual (attrs ["aws.log.group.names" ], "/aws/genesis/TestAgent" )
721
+ self .assertEqual (attrs ["aws.log.stream.names" ], "test-stream" )
722
+
723
+ # Test inference when AGENT_OBSERVABILITY_ENABLED is true and OTEL_EXPORTER_OTLP_LOGS_HEADERS is not set
724
+ os .environ ["AGENT_OBSERVABILITY_ENABLED" ] = "true"
725
+ os .environ ["OTEL_RESOURCE_ATTRIBUTES" ] = (
726
+ "service.name=TestService,aws.log.group.names=/aws/genesis/TestAgent,aws.log.stream.names=test-stream"
727
+ )
728
+ os .environ .pop ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" , None )
729
+
730
+ # Call _setup_inferred_headers to set the environment variable
731
+ _setup_inferred_headers ()
732
+
733
+ # Verify the environment variable was set correctly
734
+ self .assertEqual (
735
+ os .environ .get ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" ),
736
+ "x-aws-log-group=/aws/genesis/TestAgent,x-aws-log-stream=test-stream" ,
737
+ )
738
+
739
+ # Now validate headers should find the inferred values
740
+ result = _validate_logs_headers ()
741
+ self .assertTrue (result .is_valid )
742
+ self .assertEqual (result .log_group , "/aws/genesis/TestAgent" )
743
+ self .assertEqual (result .log_stream , "test-stream" )
744
+
745
+ # Clean up
746
+ os .environ .pop ("AGENT_OBSERVABILITY_ENABLED" , None )
747
+ os .environ .pop ("OTEL_RESOURCE_ATTRIBUTES" , None )
748
+ os .environ .pop ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" , None )
749
+
750
+ def test_validate_logs_headers_explicit_takes_priority (self ):
751
+ """Test that explicit OTEL_EXPORTER_OTLP_LOGS_HEADERS takes priority over inference"""
752
+ from amazon .opentelemetry .distro .aws_opentelemetry_configurator import (
753
+ _validate_logs_headers ,
754
+ _setup_inferred_headers ,
755
+ )
756
+
757
+ # Set both explicit headers and resource attributes
758
+ os .environ ["AGENT_OBSERVABILITY_ENABLED" ] = "true"
759
+ os .environ ["OTEL_RESOURCE_ATTRIBUTES" ] = (
760
+ "aws.log.group.names=/aws/genesis/InferredAgent,aws.log.stream.names=inferred-stream"
761
+ )
762
+ os .environ ["OTEL_EXPORTER_OTLP_LOGS_HEADERS" ] = (
763
+ "x-aws-log-group=/aws/genesis/ExplicitAgent,x-aws-log-stream=explicit-stream"
764
+ )
765
+
766
+ # Call _setup_inferred_headers - it should not override explicit headers
767
+ _setup_inferred_headers ()
768
+
769
+ # Verify explicit headers were not overridden
770
+ self .assertEqual (
771
+ os .environ .get ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" ),
772
+ "x-aws-log-group=/aws/genesis/ExplicitAgent,x-aws-log-stream=explicit-stream" ,
773
+ )
774
+
775
+ result = _validate_logs_headers ()
776
+ self .assertTrue (result .is_valid )
777
+ # Should use explicit headers, not inferred ones
778
+ self .assertEqual (result .log_group , "/aws/genesis/ExplicitAgent" )
779
+ self .assertEqual (result .log_stream , "explicit-stream" )
780
+
781
+ # Clean up
782
+ os .environ .pop ("AGENT_OBSERVABILITY_ENABLED" , None )
783
+ os .environ .pop ("OTEL_RESOURCE_ATTRIBUTES" , None )
784
+ os .environ .pop ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" , None )
785
+
786
+ def test_validate_logs_headers_no_inference_when_agent_observability_disabled (self ):
787
+ """Test that no inference happens when AGENT_OBSERVABILITY_ENABLED is false"""
788
+ from amazon .opentelemetry .distro .aws_opentelemetry_configurator import (
789
+ _validate_logs_headers ,
790
+ _setup_inferred_headers ,
791
+ )
792
+
793
+ # Set resource attributes but keep agent observability disabled
794
+ os .environ ["AGENT_OBSERVABILITY_ENABLED" ] = "false"
795
+ os .environ ["OTEL_RESOURCE_ATTRIBUTES" ] = (
796
+ "aws.log.group.names=/aws/genesis/TestAgent,aws.log.stream.names=test-stream"
797
+ )
798
+ os .environ .pop ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" , None )
799
+
800
+ # Call _setup_inferred_headers - it should not set headers when agent observability is disabled
801
+ _setup_inferred_headers ()
802
+
803
+ # Verify no headers were set
804
+ self .assertIsNone (os .environ .get ("OTEL_EXPORTER_OTLP_LOGS_HEADERS" ))
805
+
806
+ result = _validate_logs_headers ()
807
+ self .assertFalse (result .is_valid )
808
+ self .assertIsNone (result .log_group )
809
+ self .assertIsNone (result .log_stream )
810
+
811
+ # Clean up
812
+ os .environ .pop ("AGENT_OBSERVABILITY_ENABLED" , None )
813
+ os .environ .pop ("OTEL_RESOURCE_ATTRIBUTES" , None )
814
+
706
815
707
816
def validate_distro_environ ():
708
817
tc : TestCase = TestCase ()
0 commit comments