Files
wehub-resource-sync 26f897c1ec
release / release-please (push) Failing after 1m49s
docs / build (push) Failing after 6m34s
release / build-and-upload (arm64, linux) (push) Has been cancelled
release / build-and-upload (arm64, windows) (push) Has been cancelled
release / build-darwin (amd64, darwin) (push) Has been cancelled
release / checksums (push) Has been cancelled
release / finalize (push) Has been cancelled
release / build-darwin (arm64, darwin) (push) Has been cancelled
release / build-and-upload (amd64, linux) (push) Has been cancelled
release / build-and-upload (amd64, windows) (push) Has been cancelled
docs / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:34:16 +08:00

69 lines
1.4 KiB
Go

package daemon
import (
"context"
"fmt"
"sync"
"testing"
"time"
"github.com/kunchenguid/no-mistakes/internal/telemetry"
)
type recordedTelemetryEvent struct {
name string
fields telemetry.Fields
}
type telemetryRecorder struct {
mu sync.Mutex
events []recordedTelemetryEvent
}
func (r *telemetryRecorder) Track(name string, fields telemetry.Fields) {
r.mu.Lock()
defer r.mu.Unlock()
clone := make(telemetry.Fields, len(fields))
for k, v := range fields {
clone[k] = v
}
r.events = append(r.events, recordedTelemetryEvent{name: name, fields: clone})
}
func (r *telemetryRecorder) Pageview(path string, fields telemetry.Fields) {
r.Track("pageview", fields)
}
func (r *telemetryRecorder) Close(context.Context) error { return nil }
func (r *telemetryRecorder) find(name, field string, want any) *recordedTelemetryEvent {
r.mu.Lock()
defer r.mu.Unlock()
for i := len(r.events) - 1; i >= 0; i-- {
e := r.events[i]
if e.name != name {
continue
}
if field == "" || fmt.Sprint(e.fields[field]) == fmt.Sprint(want) {
cp := e
return &cp
}
}
return nil
}
func waitForTelemetryEvent(t *testing.T, recorder *telemetryRecorder, name, field string, want any) *recordedTelemetryEvent {
t.Helper()
deadline := time.Now().Add(5 * time.Second)
for time.Now().Before(deadline) {
if event := recorder.find(name, field, want); event != nil {
return event
}
time.Sleep(10 * time.Millisecond)
}
return nil
}