mirror of
https://github.com/gravitational/teleport.git
synced 2026-10-29 17:58:15 +08:00
In TestKube/Join, we previously used os.Pipe[1] to create stdin for the test. However, os.File instances are implicitly closed when garbage collected via a runtime finalizer inserted in newFile[2]. Under CPU-constrained conditions, the garbage collector can run mid-test and detect that participantStdinW is no longer referenced. This triggers the finalizer, which closes the writer file descriptor, causing the reader to receive io.EOF. Since Kubernetes terminates exec sessions when stdin closes, the EOF can arrive before the client receives the server payload, causing the test to fail intermittently. Replacing os.Pipe with io.Pipe resolves this issue, as io.Pipe does not use file descriptors and is not subject to finalizer-based cleanup. [1] https://github.com/golang/go/blob/1b291b70dff51732415da5b68debe323704d8e8d/src/os/pipe_unix.go#L27 [2] https://github.com/golang/go/blob/1b291b70dff51732415da5b68debe323704d8e8d/src/os/file_unix.go#L224 Signed-off-by: Tiago Silva <tiago.silva@goteleport.com>