package starssh import ( "bufio" "io" "testing" "time" ) func TestPrepareTerminalInputReaderAdapterCancelUnblocksRead(t *testing.T) { reader, writer := io.Pipe() defer reader.Close() defer writer.Close() adapter := TerminalInputAdapter{ Reader: bufio.NewReader(reader), Source: reader, Cancel: func() error { return reader.CloseWithError(io.ErrClosedPipe) }, } prepared, cancel, cancelable, err := prepareTerminalInputReader(adapter) if err != nil { t.Fatalf("prepare adapter input: %v", err) } if !cancelable { t.Fatal("expected adapter-backed input to be cancelable") } done := make(chan error, 1) go func() { buf := make([]byte, 1) _, readErr := prepared.Read(buf) done <- readErr }() time.Sleep(50 * time.Millisecond) cancel() select { case readErr := <-done: if readErr == nil { t.Fatal("expected adapter cancel to interrupt blocking read") } case <-time.After(time.Second): t.Fatal("blocking adapter input did not unblock after cancel") } }