package callflow import ( "context" "errors" "testing" "time" ) func TestCaptureTurnPropagatesParentDeadline(t *testing.T) { ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(-time.Millisecond)) defer cancel() _, err := captureTurn(ctx, NewMemorySession(nil), CaptureConfig{ FirstSpeechTimeout: 20 * time.Millisecond, MaxDuration: 20 * time.Millisecond, }) if !errors.Is(err, context.DeadlineExceeded) { t.Fatalf("a signed call deadline must take precedence over capture timeout: %v", err) } } func TestMemorySessionWaitsUntilContextEnds(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() done := make(chan error, 1) go func() { _, err := NewMemorySession(nil).ReadPayload(ctx) done <- err }() select { case err := <-done: t.Fatalf("no inbound media is not a context deadline: %v", err) case <-time.After(5 * time.Millisecond): } cancel() select { case err := <-done: if !errors.Is(err, context.Canceled) { t.Fatalf("canceled media read returned %v", err) } case <-time.After(time.Second): t.Fatal("canceled media read did not return") } }