@@ -86,28 +86,13 @@ def test_immutability(self):
86
86
labels ["cost" ] = 999.91
87
87
self .assertEqual (resource .labels , labels_copy )
88
88
89
- def test_otel_resource_detector (self ):
90
- detector = resources .OTELResourceDetector ()
91
- self .assertEqual (detector .detect (), resources .Resource .create_empty ())
92
- os .environ ["OTEL_RESOURCE" ] = "k=v"
93
- self .assertEqual (detector .detect (), resources .Resource ({"k" : "v" }))
94
- os .environ ["OTEL_RESOURCE" ] = " k = v "
95
- self .assertEqual (detector .detect (), resources .Resource ({"k" : "v" }))
96
- os .environ ["OTEL_RESOURCE" ] = "k=v,k2=v2"
97
- self .assertEqual (
98
- detector .detect (), resources .Resource ({"k" : "v" , "k2" : "v2" })
99
- )
100
- os .environ ["OTEL_RESOURCE" ] = " k = v , k2 = v2 "
101
- self .assertEqual (
102
- detector .detect (), resources .Resource ({"k" : "v" , "k2" : "v2" })
103
- )
104
-
105
- def test_aggregated_resources (self ):
89
+ def test_aggregated_resources_no_detectors (self ):
106
90
aggregated_resources = resources .get_aggregated_resources ([])
107
91
self .assertEqual (
108
92
aggregated_resources , resources .Resource .create_empty ()
109
93
)
110
94
95
+ def test_aggregated_resources_with_static_resource (self ):
111
96
static_resource = resources .Resource ({"static_key" : "static_value" })
112
97
113
98
self .assertEqual (
@@ -117,9 +102,10 @@ def test_aggregated_resources(self):
117
102
static_resource ,
118
103
)
119
104
105
+ # Static resource values should never be overwritten
120
106
resource_detector = mock .Mock (spec = resources .ResourceDetector )
121
107
resource_detector .detect .return_value = resources .Resource (
122
- {"static_key" : "overwrite_existing_value " , "key" : "value" }
108
+ {"static_key" : "try_to_overwrite_existing_value " , "key" : "value" }
123
109
)
124
110
self .assertEqual (
125
111
resources .get_aggregated_resources (
@@ -128,6 +114,7 @@ def test_aggregated_resources(self):
128
114
resources .Resource ({"static_key" : "static_value" , "key" : "value" }),
129
115
)
130
116
117
+ def test_aggregated_resources_multiple_detectors (self ):
131
118
resource_detector1 = mock .Mock (spec = resources .ResourceDetector )
132
119
resource_detector1 .detect .return_value = resources .Resource (
133
120
{"key1" : "value1" }
@@ -139,11 +126,13 @@ def test_aggregated_resources(self):
139
126
resource_detector3 = mock .Mock (spec = resources .ResourceDetector )
140
127
resource_detector3 .detect .return_value = resources .Resource (
141
128
{
142
- "key2" : "overwrite_existing_value " ,
143
- "key3" : "overwrite_existing_value " ,
129
+ "key2" : "try_to_overwrite_existing_value " ,
130
+ "key3" : "try_to_overwrite_existing_value " ,
144
131
"key4" : "value4" ,
145
132
}
146
133
)
134
+
135
+ # New values should not overwrite existing values
147
136
self .assertEqual (
148
137
resources .get_aggregated_resources (
149
138
[resource_detector1 , resource_detector2 , resource_detector3 ]
@@ -158,21 +147,56 @@ def test_aggregated_resources(self):
158
147
),
159
148
)
160
149
150
+ def test_resource_detector_ignore_error (self ):
161
151
resource_detector = mock .Mock (spec = resources .ResourceDetector )
162
152
resource_detector .detect .side_effect = Exception ()
163
153
resource_detector .raise_on_error = False
164
154
self .assertEqual (
165
- resources .get_aggregated_resources (
166
- [resource_detector , resource_detector1 ]
167
- ),
168
- resources .Resource ({"key1" : "value1" }),
155
+ resources .get_aggregated_resources ([resource_detector ]),
156
+ resources .Resource .create_empty (),
169
157
)
170
158
159
+ def test_resource_detector_raise_error (self ):
171
160
resource_detector = mock .Mock (spec = resources .ResourceDetector )
172
161
resource_detector .detect .side_effect = Exception ()
173
162
resource_detector .raise_on_error = True
174
163
self .assertRaises (
175
- Exception ,
176
- resources .get_aggregated_resources ,
177
- [resource_detector , resource_detector1 ],
164
+ Exception , resources .get_aggregated_resources , [resource_detector ],
165
+ )
166
+
167
+
168
+ class TestOTELResourceDetector (unittest .TestCase ):
169
+ def setUp (self ) -> None :
170
+ os .environ ["OTEL_RESOURCE" ] = ""
171
+
172
+ def tearDown (self ) -> None :
173
+ os .environ .pop ("OTEL_RESOURCE" )
174
+
175
+ def test_empty (self ):
176
+ detector = resources .OTELResourceDetector ()
177
+ os .environ ["OTEL_RESOURCE" ] = ""
178
+ self .assertEqual (detector .detect (), resources .Resource .create_empty ())
179
+
180
+ def test_one (self ):
181
+ detector = resources .OTELResourceDetector ()
182
+ os .environ ["OTEL_RESOURCE" ] = "k=v"
183
+ self .assertEqual (detector .detect (), resources .Resource ({"k" : "v" }))
184
+
185
+ def test_one_with_whitespace (self ):
186
+ detector = resources .OTELResourceDetector ()
187
+ os .environ ["OTEL_RESOURCE" ] = " k = v "
188
+ self .assertEqual (detector .detect (), resources .Resource ({"k" : "v" }))
189
+
190
+ def test_multiple (self ):
191
+ detector = resources .OTELResourceDetector ()
192
+ os .environ ["OTEL_RESOURCE" ] = "k=v,k2=v2"
193
+ self .assertEqual (
194
+ detector .detect (), resources .Resource ({"k" : "v" , "k2" : "v2" })
195
+ )
196
+
197
+ def test_multiple_with_whitespace (self ):
198
+ detector = resources .OTELResourceDetector ()
199
+ os .environ ["OTEL_RESOURCE" ] = " k = v , k2 = v2 "
200
+ self .assertEqual (
201
+ detector .detect (), resources .Resource ({"k" : "v" , "k2" : "v2" })
178
202
)
0 commit comments