Files

41 lines
996 B
Go

package processor
import (
"context"
"sync/atomic"
"testing"
"time"
"chess/internal/server/core"
)
func TestEngineQueueShutdownCancelsAndWaitsForCallback(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
queue := &EngineQueue{
tasks: make(chan EngineTask, 1),
workers: 1,
ctx: ctx,
cancel: cancel,
}
player := &core.Player{Type: core.PlayerComputer, SearchTime: 10_000}
var callbackCalled atomic.Bool
if err := queue.SubmitAsync("game-1", "fen", core.ColorWhite, player, func(EngineResult) {
callbackCalled.Store(true)
}); err != nil {
t.Fatal(err)
}
if err := queue.Shutdown(time.Second); err != nil {
t.Fatal(err)
}
if callbackCalled.Load() {
t.Fatal("shutdown callback mutated live state after cancellation")
}
if err := queue.Submit(EngineTask{}); err == nil {
t.Fatal("submit succeeded after shutdown")
}
if err := queue.Shutdown(time.Second); err != nil {
t.Fatalf("second shutdown was not idempotent: %v", err)
}
}