Skip to content

Commit 4a13c58

Browse files
authored
test(pty/ptytest): fix error message on deadline exceeded (#8337)
1 parent 814534d commit 4a13c58

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

pty/ptytest/ptytest.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ func (e *outExpecter) ExpectMatchContext(ctx context.Context, str string) string
158158
e.t.Helper()
159159

160160
var buffer bytes.Buffer
161-
err := e.doMatchWithDeadline(ctx, "ExpectMatchContext", func() error {
161+
err := e.doMatchWithDeadline(ctx, "ExpectMatchContext", func(rd *bufio.Reader) error {
162162
for {
163-
r, _, err := e.runeReader.ReadRune()
163+
r, _, err := rd.ReadRune()
164164
if err != nil {
165165
return err
166166
}
@@ -186,9 +186,9 @@ func (e *outExpecter) ExpectNoMatchBefore(ctx context.Context, match, before str
186186
e.t.Helper()
187187

188188
var buffer bytes.Buffer
189-
err := e.doMatchWithDeadline(ctx, "ExpectNoMatchBefore", func() error {
189+
err := e.doMatchWithDeadline(ctx, "ExpectNoMatchBefore", func(rd *bufio.Reader) error {
190190
for {
191-
r, _, err := e.runeReader.ReadRune()
191+
r, _, err := rd.ReadRune()
192192
if err != nil {
193193
return err
194194
}
@@ -218,9 +218,9 @@ func (e *outExpecter) Peek(ctx context.Context, n int) []byte {
218218
e.t.Helper()
219219

220220
var out []byte
221-
err := e.doMatchWithDeadline(ctx, "Peek", func() error {
221+
err := e.doMatchWithDeadline(ctx, "Peek", func(rd *bufio.Reader) error {
222222
var err error
223-
out, err = e.runeReader.Peek(n)
223+
out, err = rd.Peek(n)
224224
return err
225225
})
226226
if err != nil {
@@ -235,9 +235,9 @@ func (e *outExpecter) ReadRune(ctx context.Context) rune {
235235
e.t.Helper()
236236

237237
var r rune
238-
err := e.doMatchWithDeadline(ctx, "ReadRune", func() error {
238+
err := e.doMatchWithDeadline(ctx, "ReadRune", func(rd *bufio.Reader) error {
239239
var err error
240-
r, _, err = e.runeReader.ReadRune()
240+
r, _, err = rd.ReadRune()
241241
return err
242242
})
243243
if err != nil {
@@ -252,9 +252,9 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
252252
e.t.Helper()
253253

254254
var buffer bytes.Buffer
255-
err := e.doMatchWithDeadline(ctx, "ReadLine", func() error {
255+
err := e.doMatchWithDeadline(ctx, "ReadLine", func(rd *bufio.Reader) error {
256256
for {
257-
r, _, err := e.runeReader.ReadRune()
257+
r, _, err := rd.ReadRune()
258258
if err != nil {
259259
return err
260260
}
@@ -267,14 +267,14 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
267267

268268
// Unicode code points can be up to 4 bytes, but the
269269
// ones we're looking for are only 1 byte.
270-
b, _ := e.runeReader.Peek(1)
270+
b, _ := rd.Peek(1)
271271
if len(b) == 0 {
272272
return nil
273273
}
274274

275275
r, _ = utf8.DecodeRune(b)
276276
if r == '\n' {
277-
_, _, err = e.runeReader.ReadRune()
277+
_, _, err = rd.ReadRune()
278278
if err != nil {
279279
return err
280280
}
@@ -297,7 +297,7 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
297297
return buffer.String()
298298
}
299299

300-
func (e *outExpecter) doMatchWithDeadline(ctx context.Context, name string, fn func() error) error {
300+
func (e *outExpecter) doMatchWithDeadline(ctx context.Context, name string, fn func(*bufio.Reader) error) error {
301301
e.t.Helper()
302302

303303
// A timeout is mandatory, caller can decide by passing a context
@@ -314,14 +314,15 @@ func (e *outExpecter) doMatchWithDeadline(ctx context.Context, name string, fn f
314314
match := make(chan error, 1)
315315
go func() {
316316
defer close(match)
317-
match <- fn()
317+
match <- fn(e.runeReader)
318318
}()
319319
select {
320320
case err := <-match:
321321
return err
322322
case <-ctx.Done():
323-
// Ensure goroutine is cleaned up before test exit.
324-
_ = e.close("match deadline exceeded")
323+
// Ensure goroutine is cleaned up before test exit, do not call
324+
// (*outExpecter).close here to let the caller decide.
325+
_ = e.out.Close()
325326
<-match
326327

327328
return xerrors.Errorf("match deadline exceeded: %w", ctx.Err())

0 commit comments

Comments
 (0)