summaryrefslogtreecommitdiff
path: root/internal/cli/pprof_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli/pprof_test.go')
-rw-r--r--internal/cli/pprof_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/internal/cli/pprof_test.go b/internal/cli/pprof_test.go
new file mode 100644
index 0000000..aa1cd05
--- /dev/null
+++ b/internal/cli/pprof_test.go
@@ -0,0 +1,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)
+ }
+}