// Copyright 2013 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package scrape import ( "bytes" "context" "encoding/binary" "testing" "github.com/gogo/protobuf/proto" dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/require" "github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/storage" ) type nopAppendable struct{} func (nopAppendable) AppenderV2(context.Context) storage.AppenderV2 { return nopAppender{} } type nopAppender struct{} func (nopAppender) Append(ref storage.SeriesRef, ls labels.Labels, st, t int64, v float64, h *histogram.Histogram, fh *histogram.FloatHistogram, opts storage.AOptions) (storage.SeriesRef, error) { return 1, nil } func (nopAppender) Commit() error { return nil } func (nopAppender) Rollback() error { return nil } // protoMarshalDelimited marshals a MetricFamily into a delimited // Prometheus proto exposition format bytes (known as `encoding=delimited`) // // See also https://eli.thegreenplace.net/2011/08/02/length-prefix-framing-for-protocol-buffers func protoMarshalDelimited(t *testing.T, mf *dto.MetricFamily) []byte { t.Helper() protoBuf, err := proto.Marshal(mf) require.NoError(t, err) varintBuf := make([]byte, binary.MaxVarintLen32) varintLength := binary.PutUvarint(varintBuf, uint64(len(protoBuf))) buf := &bytes.Buffer{} buf.Write(varintBuf[:varintLength]) buf.Write(protoBuf) return buf.Bytes() }