summaryrefslogtreecommitdiff
path: root/internal/cli/pprof_test.go
blob: aa1cd050485e0e05b84564303286a7fd697dc6cf (plain)
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
package cli

import (
	"runtime"
	"testing"
)

// TestEnableProfilingRatesSetsMutexFraction verifies that EnableProfilingRates
// actually turns on mutex profiling. Without this the /debug/pprof/mutex
// endpoint reports an empty profile. runtime.SetMutexProfileFraction(-1) reads
// the current fraction without changing it, so it lets us assert the state.
func TestEnableProfilingRatesSetsMutexFraction(t *testing.T) {
	// Save and restore global runtime state so this test does not leak into
	// other tests in the package. The block profile rate has no getter, so we
	// simply disable it again on cleanup.
	prevMutex := runtime.SetMutexProfileFraction(-1)
	t.Cleanup(func() {
		runtime.SetMutexProfileFraction(prevMutex)
		runtime.SetBlockProfileRate(0)
	})

	// Start from a known-disabled state.
	runtime.SetMutexProfileFraction(0)

	EnableProfilingRates()

	if got := runtime.SetMutexProfileFraction(-1); got != mutexProfileFraction {
		t.Errorf("mutex profile fraction = %d, want %d", got, mutexProfileFraction)
	}
}

// TestProfilingRateConstants pins the ss0-validated values so a change is a
// conscious decision rather than an accident.
func TestProfilingRateConstants(t *testing.T) {
	if mutexProfileFraction != 5 {
		t.Errorf("mutexProfileFraction = %d, want 5", mutexProfileFraction)
	}
	if blockProfileRateNanos != 100000 {
		t.Errorf("blockProfileRateNanos = %d, want 100000", blockProfileRateNanos)
	}
}