@@ -167,14 +167,32 @@ def test_commas(self):
167
167
families = text_string_to_metric_families ("""# TYPE a counter
168
168
# HELP a help
169
169
a{foo="bar",} 1
170
+ a{foo="baz", } 1
170
171
# TYPE b counter
171
172
# HELP b help
172
173
b{,} 2
174
+ # TYPE c counter
175
+ # HELP c help
176
+ c{ ,} 3
177
+ # TYPE d counter
178
+ # HELP d help
179
+ d{, } 4
173
180
""" )
174
181
a = CounterMetricFamily ("a" , "help" , labels = ["foo" ])
175
182
a .add_metric (["bar" ], 1 )
183
+ a .add_metric (["baz" ], 1 )
176
184
b = CounterMetricFamily ("b" , "help" , value = 2 )
177
- self .assertEqual ([a , b ], list (families ))
185
+ c = CounterMetricFamily ("c" , "help" , value = 3 )
186
+ d = CounterMetricFamily ("d" , "help" , value = 4 )
187
+ self .assertEqual ([a , b , c , d ], list (families ))
188
+
189
+ def test_multiple_trailing_commas (self ):
190
+ text = """# TYPE a counter
191
+ # HELP a help
192
+ a{foo="bar",, } 1
193
+ """
194
+ self .assertRaises (ValueError ,
195
+ lambda : list (text_string_to_metric_families (text )))
178
196
179
197
def test_empty_brackets (self ):
180
198
families = text_string_to_metric_families ("""# TYPE a counter
@@ -200,6 +218,50 @@ def test_empty_label(self):
200
218
metric_family .add_metric (["" ], 2 )
201
219
self .assertEqual ([metric_family ], list (families ))
202
220
221
+ def test_label_escaping (self ):
222
+ for escaped_val , unescaped_val in [
223
+ ('foo' , 'foo' ),
224
+ ('\\ foo' , '\\ foo' ),
225
+ ('\\ \\ foo' , '\\ foo' ),
226
+ ('foo\\ \\ ' , 'foo\\ ' ),
227
+ ('\\ \\ ' , '\\ ' ),
228
+ ('\\ n' , '\n ' ),
229
+ ('\\ \\ n' , '\\ n' ),
230
+ ('\\ \\ \\ n' , '\\ \n ' ),
231
+ ('\\ "' , '"' ),
232
+ ('\\ \\ \\ "' , '\\ "' )]:
233
+ families = list (text_string_to_metric_families ("""
234
+ # TYPE a counter
235
+ # HELP a help
236
+ a{foo="%s",bar="baz"} 1
237
+ """ % escaped_val ))
238
+ metric_family = CounterMetricFamily (
239
+ "a" , "help" , labels = ["foo" , "bar" ])
240
+ metric_family .add_metric ([unescaped_val , "baz" ], 1 )
241
+ self .assertEqual ([metric_family ], list (families ))
242
+
243
+ def test_help_escaping (self ):
244
+ for escaped_val , unescaped_val in [
245
+ ('foo' , 'foo' ),
246
+ ('\\ foo' , '\\ foo' ),
247
+ ('\\ \\ foo' , '\\ foo' ),
248
+ ('foo\\ ' , 'foo\\ ' ),
249
+ ('foo\\ \\ ' , 'foo\\ ' ),
250
+ ('\\ n' , '\n ' ),
251
+ ('\\ \\ n' , '\\ n' ),
252
+ ('\\ \\ \\ n' , '\\ \n ' ),
253
+ ('\\ "' , '\\ "' ),
254
+ ('\\ \\ "' , '\\ "' ),
255
+ ('\\ \\ \\ "' , '\\ \\ "' )]:
256
+ families = list (text_string_to_metric_families ("""
257
+ # TYPE a counter
258
+ # HELP a %s
259
+ a{foo="bar"} 1
260
+ """ % escaped_val ))
261
+ metric_family = CounterMetricFamily ("a" , unescaped_val , labels = ["foo" ])
262
+ metric_family .add_metric (["bar" ], 1 )
263
+ self .assertEqual ([metric_family ], list (families ))
264
+
203
265
def test_escaping (self ):
204
266
families = text_string_to_metric_families ("""# TYPE a counter
205
267
# HELP a he\\ n\\ \\ l\\ tp
0 commit comments