56 lines
1017 B
Go
56 lines
1017 B
Go
|
package metrics
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"sync"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestGaugeSerial(t *testing.T) {
|
||
|
name := "GaugeSerial"
|
||
|
n := 1.23
|
||
|
var nLock sync.Mutex
|
||
|
g := NewGauge(name, func() float64 {
|
||
|
nLock.Lock()
|
||
|
defer nLock.Unlock()
|
||
|
n++
|
||
|
return n
|
||
|
})
|
||
|
for i := 0; i < 10; i++ {
|
||
|
if nn := g.Get(); nn != n {
|
||
|
t.Fatalf("unexpected gauge value; got %v; want %v", nn, n)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Verify marshalTo
|
||
|
testMarshalTo(t, g, "foobar", "foobar 12.23\n")
|
||
|
|
||
|
// Verify big numbers marshaling
|
||
|
n = 1234567899
|
||
|
testMarshalTo(t, g, "prefix", "prefix 1234567900\n")
|
||
|
}
|
||
|
|
||
|
func TestGaugeConcurrent(t *testing.T) {
|
||
|
name := "GaugeConcurrent"
|
||
|
var n int
|
||
|
var nLock sync.Mutex
|
||
|
g := NewGauge(name, func() float64 {
|
||
|
nLock.Lock()
|
||
|
defer nLock.Unlock()
|
||
|
n++
|
||
|
return float64(n)
|
||
|
})
|
||
|
err := testConcurrent(func() error {
|
||
|
nPrev := g.Get()
|
||
|
for i := 0; i < 10; i++ {
|
||
|
if n := g.Get(); n <= nPrev {
|
||
|
return fmt.Errorf("gauge value must be greater than %v; got %v", nPrev, n)
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
})
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
}
|