consul/agent/grpc-middleware/testutil/fake_sink.go

54 lines
1.2 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package testutil
import (
"sync"
"testing"
"time"
"github.com/armon/go-metrics"
"github.com/stretchr/testify/require"
)
func NewFakeSink(t *testing.T) (*FakeMetricsSink, *metrics.Metrics) {
t.Helper()
sink := &FakeMetricsSink{}
cfg := &metrics.Config{
ServiceName: "testing",
TimerGranularity: time.Millisecond, // Timers are in milliseconds
ProfileInterval: time.Second, // Poll runtime every second
FilterDefault: true,
}
m, err := metrics.New(cfg, sink)
require.NoError(t, err)
return sink, m
}
type FakeMetricsSink struct {
lock sync.Mutex
metrics.BlackholeSink
GaugeCalls []MetricCall
IncrCounterCalls []MetricCall
}
func (f *FakeMetricsSink) SetGaugeWithLabels(key []string, val float32, labels []metrics.Label) {
f.lock.Lock()
f.GaugeCalls = append(f.GaugeCalls, MetricCall{Key: key, Val: val, Labels: labels})
f.lock.Unlock()
}
func (f *FakeMetricsSink) IncrCounterWithLabels(key []string, val float32, labels []metrics.Label) {
f.lock.Lock()
f.IncrCounterCalls = append(f.IncrCounterCalls, MetricCall{Key: key, Val: val, Labels: labels})
f.lock.Unlock()
}
type MetricCall struct {
Key []string
Val float32
Labels []metrics.Label
}