mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-18 12:59:31 +00:00
263 lines
5.3 KiB
Go
263 lines
5.3 KiB
Go
package metrics
|
|
|
|
import (
|
|
"reflect"
|
|
"runtime"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func mockMetric() (*MockSink, *Metrics) {
|
|
m := &MockSink{}
|
|
met := &Metrics{sink: m}
|
|
return m, met
|
|
}
|
|
|
|
func TestMetrics_SetGauge(t *testing.T) {
|
|
m, met := mockMetric()
|
|
met.SetGauge([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.HostName = "test"
|
|
met.EnableHostname = true
|
|
met.SetGauge([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "test" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.EnableTypePrefix = true
|
|
met.SetGauge([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "gauge" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.ServiceName = "service"
|
|
met.SetGauge([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "service" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
}
|
|
|
|
func TestMetrics_EmitKey(t *testing.T) {
|
|
m, met := mockMetric()
|
|
met.EmitKey([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.EnableTypePrefix = true
|
|
met.EmitKey([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "kv" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.ServiceName = "service"
|
|
met.EmitKey([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "service" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
}
|
|
|
|
func TestMetrics_IncrCounter(t *testing.T) {
|
|
m, met := mockMetric()
|
|
met.IncrCounter([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.EnableTypePrefix = true
|
|
met.IncrCounter([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "counter" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.ServiceName = "service"
|
|
met.IncrCounter([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "service" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
}
|
|
|
|
func TestMetrics_AddSample(t *testing.T) {
|
|
m, met := mockMetric()
|
|
met.AddSample([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.EnableTypePrefix = true
|
|
met.AddSample([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "sample" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.ServiceName = "service"
|
|
met.AddSample([]string{"key"}, float32(1))
|
|
if m.keys[0][0] != "service" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] != 1 {
|
|
t.Fatalf("")
|
|
}
|
|
}
|
|
|
|
func TestMetrics_MeasureSince(t *testing.T) {
|
|
m, met := mockMetric()
|
|
met.TimerGranularity = time.Millisecond
|
|
n := time.Now()
|
|
met.MeasureSince([]string{"key"}, n)
|
|
if m.keys[0][0] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] > 0.1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.TimerGranularity = time.Millisecond
|
|
met.EnableTypePrefix = true
|
|
met.MeasureSince([]string{"key"}, n)
|
|
if m.keys[0][0] != "timer" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] > 0.1 {
|
|
t.Fatalf("")
|
|
}
|
|
|
|
m, met = mockMetric()
|
|
met.TimerGranularity = time.Millisecond
|
|
met.ServiceName = "service"
|
|
met.MeasureSince([]string{"key"}, n)
|
|
if m.keys[0][0] != "service" || m.keys[0][1] != "key" {
|
|
t.Fatalf("")
|
|
}
|
|
if m.vals[0] > 0.1 {
|
|
t.Fatalf("")
|
|
}
|
|
}
|
|
|
|
func TestMetrics_EmitRuntimeStats(t *testing.T) {
|
|
runtime.GC()
|
|
m, met := mockMetric()
|
|
met.emitRuntimeStats()
|
|
|
|
if m.keys[0][0] != "runtime" || m.keys[0][1] != "num_goroutines" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[0] <= 1 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[1][0] != "runtime" || m.keys[1][1] != "alloc_bytes" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[1] <= 40000 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[2][0] != "runtime" || m.keys[2][1] != "sys_bytes" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[2] <= 100000 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[3][0] != "runtime" || m.keys[3][1] != "malloc_count" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[3] <= 100 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[4][0] != "runtime" || m.keys[4][1] != "free_count" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[4] <= 100 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[5][0] != "runtime" || m.keys[5][1] != "heap_objects" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[5] <= 100 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[6][0] != "runtime" || m.keys[6][1] != "total_gc_pause_ns" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[6] <= 100000 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[7][0] != "runtime" || m.keys[7][1] != "total_gc_runs" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[7] <= 1 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
|
|
if m.keys[8][0] != "runtime" || m.keys[8][1] != "gc_pause_ns" {
|
|
t.Fatalf("bad key %v", m.keys)
|
|
}
|
|
if m.vals[8] <= 1000 {
|
|
t.Fatalf("bad val: %v", m.vals)
|
|
}
|
|
}
|
|
|
|
func TestInsert(t *testing.T) {
|
|
k := []string{"hi", "bob"}
|
|
exp := []string{"hi", "there", "bob"}
|
|
out := insert(1, "there", k)
|
|
if !reflect.DeepEqual(exp, out) {
|
|
t.Fatalf("bad insert %v %v", exp, out)
|
|
}
|
|
}
|