internal/testhelper/promtest/histogram.go (52 lines of code) (raw):

package promtest import ( "sync" "github.com/prometheus/client_golang/prometheus" ) // MockHistogram is a mock histogram that adheres to prometheus.Histogram for use in unit tests type MockHistogram struct { m sync.RWMutex Values []float64 } // Observe observes a value for the mock histogram func (m *MockHistogram) Observe(v float64) { m.m.Lock() defer m.m.Unlock() m.Values = append(m.Values, v) } // MockHistogramVec implements a subset of the prometheus.HistogramVec interface. type MockHistogramVec struct { m sync.RWMutex labelsCalled [][]string observer MockObserver } // NewMockHistogramVec returns a new MockHistogramVec. func NewMockHistogramVec() *MockHistogramVec { return &MockHistogramVec{} } // LabelsCalled returns the set of labels which have been observed. func (m *MockHistogramVec) LabelsCalled() [][]string { m.m.RLock() defer m.m.RUnlock() return m.labelsCalled } // Observer returns the mocked observer. func (m *MockHistogramVec) Observer() *MockObserver { return &m.observer } // Collect does nothing. func (m *MockHistogramVec) Collect(chan<- prometheus.Metric) {} // Describe does nothing. func (m *MockHistogramVec) Describe(chan<- *prometheus.Desc) {} // WithLabelValues records the given labels such that `LabelsCalled()` will return the set of // observed labels. func (m *MockHistogramVec) WithLabelValues(lvs ...string) prometheus.Observer { m.m.Lock() defer m.m.Unlock() m.labelsCalled = append(m.labelsCalled, lvs) return &m.observer } // MockObserver implements a subset of the prometheus.Observer interface. type MockObserver struct { m sync.RWMutex observed []float64 } // Observe records the given value in its observed values. func (m *MockObserver) Observe(v float64) { m.m.Lock() defer m.m.Unlock() m.observed = append(m.observed, v) } // Observed returns all observed values. func (m *MockObserver) Observed() []float64 { m.m.RLock() defer m.m.RUnlock() return m.observed }