forked from quic-go/quic-go
53 lines
1018 B
Go
53 lines
1018 B
Go
package qlog
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/quic-go/quic-go/internal/protocol"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type limitedWriter struct {
|
|
io.WriteCloser
|
|
N int
|
|
written int
|
|
}
|
|
|
|
func (w *limitedWriter) Write(p []byte) (int, error) {
|
|
if w.written+len(p) > w.N {
|
|
return 0, errors.New("writer full")
|
|
}
|
|
n, err := w.WriteCloser.Write(p)
|
|
w.written += n
|
|
return n, err
|
|
}
|
|
|
|
func TestWritingStopping(t *testing.T) {
|
|
buf := &bytes.Buffer{}
|
|
t.Run("stops writing when encountering an error", func(t *testing.T) {
|
|
tracer := NewConnectionTracer(
|
|
&limitedWriter{WriteCloser: nopWriteCloser(buf), N: 250},
|
|
protocol.PerspectiveServer,
|
|
protocol.ParseConnectionID([]byte{0xde, 0xad, 0xbe, 0xef}),
|
|
)
|
|
|
|
for i := uint32(0); i < 1000; i++ {
|
|
tracer.UpdatedPTOCount(i)
|
|
}
|
|
|
|
// Capture log output
|
|
var logBuf bytes.Buffer
|
|
log.SetOutput(&logBuf)
|
|
defer log.SetOutput(os.Stdout)
|
|
|
|
tracer.Close()
|
|
|
|
require.Contains(t, logBuf.String(), "writer full")
|
|
})
|
|
}
|