package output import ( "context" "sync" ) // DummyBackend keeps track of the latest frame without writing anywhere. Useful for unit testing. type DummyBackend struct { mu sync.Mutex info BackendInfo cfg BackendConfig closed bool total uint64 lastFrame CompositeFrame } // NewDummyBackend constructs a lean backend that records the last frame seen. func NewDummyBackend(name string) *DummyBackend { return &DummyBackend{ info: BackendInfo{ Name: name, Description: "in-memory dummy backend", Capabilities: BackendCapabilities{ SupportsComposite: true, FixedRate: false, MaxSamplesPerWrite: 0, }, }, } } // Configure stores the config values. func (db *DummyBackend) Configure(_ context.Context, cfg BackendConfig) error { db.mu.Lock() defer db.mu.Unlock() db.cfg = cfg return nil } // Write captures the most recent frame and updates the sample count. func (db *DummyBackend) Write(_ context.Context, frame *CompositeFrame) (int, error) { db.mu.Lock() defer db.mu.Unlock() if frame == nil { return 0, nil } db.lastFrame = *frame db.total += uint64(len(frame.Samples)) return len(frame.Samples), nil } // Flush is a no-op for the dummy backend. func (db *DummyBackend) Flush(_ context.Context) error { return nil } // Close marks the backend unusable. func (db *DummyBackend) Close(_ context.Context) error { db.mu.Lock() defer db.mu.Unlock() db.closed = true return nil } // Info returns the backend descriptors. func (db *DummyBackend) Info() BackendInfo { db.mu.Lock() defer db.mu.Unlock() return db.info } // TotalSamples reports how many samples have been written. func (db *DummyBackend) TotalSamples() uint64 { db.mu.Lock() defer db.mu.Unlock() return db.total } // LastFrame exposes a snapshot of the last frame written. func (db *DummyBackend) LastFrame() CompositeFrame { db.mu.Lock() defer db.mu.Unlock() return db.lastFrame }