-
Notifications
You must be signed in to change notification settings - Fork 495
/
debug_test.go
71 lines (62 loc) · 1.35 KB
/
debug_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package metrics
import (
"runtime"
"runtime/debug"
"testing"
"time"
)
func BenchmarkDebugGCStats(b *testing.B) {
r := NewRegistry()
RegisterDebugGCStats(r)
b.ResetTimer()
for i := 0; i < b.N; i++ {
CaptureDebugGCStatsOnce(r)
}
}
func TestDebugGCStatsBlocking(t *testing.T) {
if g := runtime.GOMAXPROCS(0); g < 2 {
t.Skipf("skipping TestDebugGCMemStatsBlocking with GOMAXPROCS=%d\n", g)
return
}
ch := make(chan int)
go testDebugGCStatsBlocking(ch)
var gcStats debug.GCStats
t0 := time.Now()
debug.ReadGCStats(&gcStats)
t1 := time.Now()
t.Log("i++ during debug.ReadGCStats:", <-ch)
go testDebugGCStatsBlocking(ch)
d := t1.Sub(t0)
t.Log(d)
time.Sleep(d)
t.Log("i++ during time.Sleep:", <-ch)
}
func testDebugGCStatsBlocking(ch chan int) {
i := 0
for {
select {
case ch <- i:
return
default:
i++
}
}
}
func TestDebugGCStatsDoubleRegister(t *testing.T) {
r := NewRegistry()
RegisterDebugGCStats(r)
var storedGauge = (r.Get("debug.GCStats.LastGC")).(Gauge)
runtime.GC()
CaptureDebugGCStatsOnce(r)
firstGC := storedGauge.Value()
if 0 == firstGC {
t.Errorf("firstGC got %d, expected > 0", firstGC)
}
time.Sleep(time.Millisecond)
RegisterDebugGCStats(r)
runtime.GC()
CaptureDebugGCStatsOnce(r)
if lastGC := storedGauge.Value(); firstGC == lastGC {
t.Errorf("lastGC got %d, expected a higher timestamp value", lastGC)
}
}