mirror of https://github.com/coder/coder.git
test(pty/ptytest): fix error message on deadline exceeded (#8337)
This commit is contained in:
parent
814534d6b7
commit
4a13c58077
|
@ -158,9 +158,9 @@ func (e *outExpecter) ExpectMatchContext(ctx context.Context, str string) string
|
||||||
e.t.Helper()
|
e.t.Helper()
|
||||||
|
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
err := e.doMatchWithDeadline(ctx, "ExpectMatchContext", func() error {
|
err := e.doMatchWithDeadline(ctx, "ExpectMatchContext", func(rd *bufio.Reader) error {
|
||||||
for {
|
for {
|
||||||
r, _, err := e.runeReader.ReadRune()
|
r, _, err := rd.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -186,9 +186,9 @@ func (e *outExpecter) ExpectNoMatchBefore(ctx context.Context, match, before str
|
||||||
e.t.Helper()
|
e.t.Helper()
|
||||||
|
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
err := e.doMatchWithDeadline(ctx, "ExpectNoMatchBefore", func() error {
|
err := e.doMatchWithDeadline(ctx, "ExpectNoMatchBefore", func(rd *bufio.Reader) error {
|
||||||
for {
|
for {
|
||||||
r, _, err := e.runeReader.ReadRune()
|
r, _, err := rd.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -218,9 +218,9 @@ func (e *outExpecter) Peek(ctx context.Context, n int) []byte {
|
||||||
e.t.Helper()
|
e.t.Helper()
|
||||||
|
|
||||||
var out []byte
|
var out []byte
|
||||||
err := e.doMatchWithDeadline(ctx, "Peek", func() error {
|
err := e.doMatchWithDeadline(ctx, "Peek", func(rd *bufio.Reader) error {
|
||||||
var err error
|
var err error
|
||||||
out, err = e.runeReader.Peek(n)
|
out, err = rd.Peek(n)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -235,9 +235,9 @@ func (e *outExpecter) ReadRune(ctx context.Context) rune {
|
||||||
e.t.Helper()
|
e.t.Helper()
|
||||||
|
|
||||||
var r rune
|
var r rune
|
||||||
err := e.doMatchWithDeadline(ctx, "ReadRune", func() error {
|
err := e.doMatchWithDeadline(ctx, "ReadRune", func(rd *bufio.Reader) error {
|
||||||
var err error
|
var err error
|
||||||
r, _, err = e.runeReader.ReadRune()
|
r, _, err = rd.ReadRune()
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -252,9 +252,9 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
|
||||||
e.t.Helper()
|
e.t.Helper()
|
||||||
|
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
err := e.doMatchWithDeadline(ctx, "ReadLine", func() error {
|
err := e.doMatchWithDeadline(ctx, "ReadLine", func(rd *bufio.Reader) error {
|
||||||
for {
|
for {
|
||||||
r, _, err := e.runeReader.ReadRune()
|
r, _, err := rd.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -267,14 +267,14 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
|
||||||
|
|
||||||
// Unicode code points can be up to 4 bytes, but the
|
// Unicode code points can be up to 4 bytes, but the
|
||||||
// ones we're looking for are only 1 byte.
|
// ones we're looking for are only 1 byte.
|
||||||
b, _ := e.runeReader.Peek(1)
|
b, _ := rd.Peek(1)
|
||||||
if len(b) == 0 {
|
if len(b) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
r, _ = utf8.DecodeRune(b)
|
r, _ = utf8.DecodeRune(b)
|
||||||
if r == '\n' {
|
if r == '\n' {
|
||||||
_, _, err = e.runeReader.ReadRune()
|
_, _, err = rd.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -297,7 +297,7 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
|
||||||
return buffer.String()
|
return buffer.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *outExpecter) doMatchWithDeadline(ctx context.Context, name string, fn func() error) error {
|
func (e *outExpecter) doMatchWithDeadline(ctx context.Context, name string, fn func(*bufio.Reader) error) error {
|
||||||
e.t.Helper()
|
e.t.Helper()
|
||||||
|
|
||||||
// A timeout is mandatory, caller can decide by passing a context
|
// 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
|
||||||
match := make(chan error, 1)
|
match := make(chan error, 1)
|
||||||
go func() {
|
go func() {
|
||||||
defer close(match)
|
defer close(match)
|
||||||
match <- fn()
|
match <- fn(e.runeReader)
|
||||||
}()
|
}()
|
||||||
select {
|
select {
|
||||||
case err := <-match:
|
case err := <-match:
|
||||||
return err
|
return err
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
// Ensure goroutine is cleaned up before test exit.
|
// Ensure goroutine is cleaned up before test exit, do not call
|
||||||
_ = e.close("match deadline exceeded")
|
// (*outExpecter).close here to let the caller decide.
|
||||||
|
_ = e.out.Close()
|
||||||
<-match
|
<-match
|
||||||
|
|
||||||
return xerrors.Errorf("match deadline exceeded: %w", ctx.Err())
|
return xerrors.Errorf("match deadline exceeded: %w", ctx.Err())
|
||||||
|
|
Loading…
Reference in New Issue