@@ -1036,6 +1036,56 @@ def tearDown(self) -> None:
10361036 def test_is_process_dependent (self ):
10371037 self .assertTrue (ServiceInstanceIdResourceDetector ().is_process_dependent ())
10381038
1039+ def test_aggregation_preserves_instance_id_from_previous_detector (self ):
1040+ resource_detector = Mock (spec = ResourceDetector )
1041+ resource_detector .detect .return_value = Resource ({SERVICE_INSTANCE_ID : "service-instance-id" })
1042+ subsequent_detector = Mock (spec = ResourceDetector )
1043+ subsequent_detector .detect .return_value = Resource ({"key" : "value" })
1044+
1045+ resource = get_aggregated_resources (
1046+ [
1047+ resource_detector ,
1048+ ServiceInstanceIdResourceDetector (),
1049+ subsequent_detector ,
1050+ ],
1051+ initial_resource = Resource .get_empty (),
1052+ )
1053+
1054+ self .assertEqual (
1055+ resource .attributes ,
1056+ {SERVICE_INSTANCE_ID : "service-instance-id" , "key" : "value" },
1057+ )
1058+
1059+ def test_aggregation_preserves_instance_id_from_initial_resource (self ):
1060+ resource = get_aggregated_resources (
1061+ [ServiceInstanceIdResourceDetector ()],
1062+ initial_resource = Resource ({SERVICE_INSTANCE_ID : "user-provided-instance-id" }),
1063+ )
1064+
1065+ self .assertEqual (resource .attributes [SERVICE_INSTANCE_ID ], "user-provided-instance-id" )
1066+
1067+ @patch .dict (
1068+ environ ,
1069+ {OTEL_RESOURCE_ATTRIBUTES : "service.instance.id=environment-instance-id" },
1070+ clear = True ,
1071+ )
1072+ def test_aggregation_preserves_instance_id_from_environment (self ):
1073+ resource = get_aggregated_resources (
1074+ [OTELResourceDetector (), ServiceInstanceIdResourceDetector ()],
1075+ initial_resource = Resource .get_empty (),
1076+ )
1077+
1078+ self .assertEqual (resource .attributes [SERVICE_INSTANCE_ID ], "environment-instance-id" )
1079+
1080+ def test_aggregation_generates_instance_id_when_missing (self ):
1081+ resource = get_aggregated_resources (
1082+ [ServiceInstanceIdResourceDetector ()],
1083+ initial_resource = Resource ({"key" : "value" }),
1084+ )
1085+
1086+ self .assertEqual (uuid .UUID (resource .attributes [SERVICE_INSTANCE_ID ]).version , 4 )
1087+ self .assertEqual (resource .attributes ["key" ], "value" )
1088+
10391089 def test_detect_value_is_valid_uuid4 (self ):
10401090 _resources_module ._service_instance_id = None
10411091 _resources_module ._service_instance_id_pid = None
0 commit comments