File tree 3 files changed +30
-3
lines changed
3 files changed +30
-3
lines changed Original file line number Diff line number Diff line change @@ -75,22 +75,22 @@ func ResponseFormat(h http.Header) Format {
75
75
func NewDecoder (r io.Reader , format Format ) Decoder {
76
76
switch format .FormatType () {
77
77
case TypeProtoDelim :
78
- return & protoDecoder {r : r }
78
+ return & protoDecoder {r : bufio . NewReader ( r ) }
79
79
}
80
80
return & textDecoder {r : r }
81
81
}
82
82
83
83
// protoDecoder implements the Decoder interface for protocol buffers.
84
84
type protoDecoder struct {
85
- r io .Reader
85
+ r protodelim .Reader
86
86
}
87
87
88
88
// Decode implements the Decoder interface.
89
89
func (d * protoDecoder ) Decode (v * dto.MetricFamily ) error {
90
90
opts := protodelim.UnmarshalOptions {
91
91
MaxSize : - 1 ,
92
92
}
93
- if err := opts .UnmarshalFrom (bufio . NewReader ( d .r ) , v ); err != nil {
93
+ if err := opts .UnmarshalFrom (d .r , v ); err != nil {
94
94
return err
95
95
}
96
96
if ! model .IsValidMetricName (model .LabelValue (v .GetName ())) {
Original file line number Diff line number Diff line change @@ -15,10 +15,12 @@ package expfmt
15
15
16
16
import (
17
17
"bufio"
18
+ "bytes"
18
19
"errors"
19
20
"io"
20
21
"math"
21
22
"net/http"
23
+ "os"
22
24
"reflect"
23
25
"sort"
24
26
"strings"
@@ -414,6 +416,31 @@ func TestProtoDecoder(t *testing.T) {
414
416
}
415
417
}
416
418
419
+ func TestProtoMultiMessageDecoder (t * testing.T ) {
420
+ data , err := os .ReadFile ("testdata/protobuf-multimessage" )
421
+ if err != nil {
422
+ t .Fatalf ("Reading file failed: %v" , err )
423
+ }
424
+
425
+ buf := bytes .NewReader (data )
426
+ decoder := NewDecoder (buf , fmtProtoDelim )
427
+ var metrics []* dto.MetricFamily
428
+ for {
429
+ var mf dto.MetricFamily
430
+ if err := decoder .Decode (& mf ); err != nil {
431
+ if errors .Is (err , io .EOF ) {
432
+ break
433
+ }
434
+ t .Fatalf ("Unmarshalling failed: %v" , err )
435
+ }
436
+ metrics = append (metrics , & mf )
437
+ }
438
+
439
+ if len (metrics ) != 6 {
440
+ t .Fatalf ("Expected %d metrics but got %d!" , 6 , len (metrics ))
441
+ }
442
+ }
443
+
417
444
func testDiscriminatorHTTPHeader (t testing.TB ) {
418
445
scenarios := []struct {
419
446
input map [string ]string
You can’t perform that action at this time.
0 commit comments