os: do not close syscall.Stdin in TestReadStdin

By calling NewConsoleFile on syscall.Stdin, we wind up closing it when
the function returns, which causes errors when all the tests are run in
a loop. To fix this, we instead create a duplicate handle of stdin.

Fixes #43720.

Change-Id: Ie6426e6306c7e1e39601794f4ff48bbf2fe67502
Reviewed-on: https://go-review.googlesource.com/c/go/+/284140
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2021-01-18 13:31:28 +01:00
Родитель 682a1d2176
Коммит 5a8fbb0d2d
1 изменённых файлов: 10 добавлений и 1 удалений

Просмотреть файл

@ -692,7 +692,16 @@ func TestReadStdin(t *testing.T) {
poll.ReadConsole = old
}()
testConsole := os.NewConsoleFile(syscall.Stdin, "test")
p, err := syscall.GetCurrentProcess()
if err != nil {
t.Fatalf("Unable to get handle to current process: %v", err)
}
var stdinDuplicate syscall.Handle
err = syscall.DuplicateHandle(p, syscall.Handle(syscall.Stdin), p, &stdinDuplicate, 0, false, syscall.DUPLICATE_SAME_ACCESS)
if err != nil {
t.Fatalf("Unable to duplicate stdin: %v", err)
}
testConsole := os.NewConsoleFile(stdinDuplicate, "test")
var tests = []string{
"abc",