@@ -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,49 @@ 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 , etalon_val in [
223
+ ('foo' , 'foo' ),
224
+ ('\\ foo' , '\\ foo' ),
225
+ ('\\ \\ foo' , '\\ foo' ),
226
+ ('foo\\ \\ ' , 'foo\\ ' ),
227
+ ('\\ n' , '\n ' ),
228
+ ('\\ \\ n' , '\\ n' ),
229
+ ('\\ \\ \\ n' , '\\ \n ' ),
230
+ ('\\ "' , '"' ),
231
+ ('\\ \\ \\ "' , '\\ "' )]:
232
+ families = list (text_string_to_metric_families ("""
233
+ # TYPE a counter
234
+ # HELP a help
235
+ a{foo="%s",bar="baz"} 1
236
+ """ % escaped_val ))
237
+ metric_family = CounterMetricFamily (
238
+ "a" , "help" , labels = ["foo" , "bar" ])
239
+ metric_family .add_metric ([etalon_val , "baz" ], 1 )
240
+ self .assertEqual ([metric_family ], list (families ))
241
+
242
+ def test_help_escaping (self ):
243
+ for escaped_val , etalon_val in [
244
+ ('foo' , 'foo' ),
245
+ ('\\ foo' , '\\ foo' ),
246
+ ('\\ \\ foo' , '\\ foo' ),
247
+ ('foo\\ ' , 'foo\\ ' ),
248
+ ('foo\\ \\ ' , 'foo\\ ' ),
249
+ ('\\ n' , '\n ' ),
250
+ ('\\ \\ n' , '\\ n' ),
251
+ ('\\ \\ \\ n' , '\\ \n ' ),
252
+ ('\\ "' , '\\ "' ),
253
+ ('\\ \\ "' , '\\ "' ),
254
+ ('\\ \\ \\ "' , '\\ \\ "' )]:
255
+ families = list (text_string_to_metric_families ("""
256
+ # TYPE a counter
257
+ # HELP a %s
258
+ a{foo="bar"} 1
259
+ """ % escaped_val ))
260
+ metric_family = CounterMetricFamily ("a" , etalon_val , labels = ["foo" ])
261
+ metric_family .add_metric (["bar" ], 1 )
262
+ self .assertEqual ([metric_family ], list (families ))
263
+
203
264
def test_escaping (self ):
204
265
families = text_string_to_metric_families ("""# TYPE a counter
205
266
# HELP a he\\ n\\ \\ l\\ tp
0 commit comments