package tgtest import ( "context" "testing" "time" "github.com/stretchr/testify/assert" "go.mau.fi/mautrix-telegram/pkg/gotd/bin" "go.mau.fi/mautrix-telegram/pkg/gotd/transport" ) func TestBufferedConn(t *testing.T) { a := assert.New(t) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() i := transport.Intermediate c1, c2 := i.Pipe() b := newBufferedConn(c1) defer func() { a.NoError(b.Close()) a.NoError(c2.Close()) }() payload := []byte("abcdabcd") go func() { b1 := &bin.Buffer{Buf: payload} a.NoError(c2.Send(ctx, b1)) }() // Test Recv before Push. recvBuf := &bin.Buffer{} a.NoError(b.Recv(ctx, recvBuf)) a.Equal(payload, recvBuf.Buf) pushed := []byte("12345678") b.Push(&bin.Buffer{Buf: pushed}) go func() { b1 := &bin.Buffer{Buf: payload} a.NoError(c2.Send(ctx, b1)) }() // Test Push. recvBuf.Reset() a.NoError(b.Recv(ctx, recvBuf)) a.Equal(pushed, recvBuf.Buf) // Test Recv after Push. recvBuf.Reset() a.NoError(b.Recv(ctx, recvBuf)) a.Equal(payload, recvBuf.Buf) // Test send. go func() { b1 := &bin.Buffer{Buf: payload} a.NoError(b.Send(ctx, b1)) }() recvBuf.Reset() a.NoError(c2.Recv(ctx, recvBuf)) a.Equal(payload, recvBuf.Buf) }