Pulse/internal/mock/integration_concurrency_test.go
rcourtman b707512e38 Clear all errcheck and gofmt violations so make lint gates on real findings
golangci-lint run ./... failed on ~190 pre-existing errcheck violations and
5 unformatted files, burying any new regression in noise. Fix all of them:

- Test files that hand-rolled mock-mode set/restore (vmware, truenas, and
  friends) now use the canonical setMockModeForTest/testutil.SetMockMode
  helper instead of drift copies that ignored SetEnabled errors.
- internal/mock and internal/monitoring tests get package-local
  mustSetEnabled/mustSetMockEnabled/mustSetMonitorMockMode helpers that
  fail the test on toggle errors.
- pkg/auth/sqlite_manager.go, pkg/metrics/store.go, pkg/server/server.go:
  rollbacks in defers use the explicit-discard idiom, migration renames and
  rollup commits log failures, the hosted reaper goroutine logs an error
  exit, shutdown mock-disable logs failures.
- Remaining test sites check errors with t.Fatalf/t.Errorf or explicitly
  discard best-effort calls (restore-chmods, handler-closure unmarshals)
  per existing repo style.
- gofmt: internal/api/maintenance_verification.go, internal/ai/demo.go and
  three findings test files.

Only dupl findings remain (44 pre-existing production-code duplication
pairs) — those need real refactors, not mechanical fixes.

Full test suites pass for every touched package.
2026-06-09 21:42:21 +01:00

42 lines
807 B
Go

package mock
import (
"testing"
"time"
)
func TestSetEnabledDisableDoesNotDeadlockWhenUpdateIsBlocked(t *testing.T) {
mustSetEnabled(t, false)
t.Cleanup(func() {
mustSetEnabled(t, false)
})
cfg := DefaultConfig
cfg.RandomMetrics = true
SetMockConfig(cfg)
mustSetEnabled(t, true)
dataMu.Lock()
time.Sleep(currentMockUpdateInterval() + 250*time.Millisecond)
done := make(chan struct{})
go func() {
if err := SetEnabled(false); err != nil {
t.Errorf("SetEnabled(false): %v", err)
}
close(done)
}()
time.Sleep(100 * time.Millisecond)
dataMu.Unlock()
select {
case <-done:
case <-time.After(5 * time.Second):
t.Fatal("SetEnabled(false) deadlocked while stopping update loop")
}
if IsMockEnabled() {
t.Fatal("mock mode should be disabled after SetEnabled(false)")
}
}