Files
mautrix-telegram/pkg/gotd/tgtest/buffered_test.go
T
2025-06-27 20:03:37 -07:00

65 lines
1.2 KiB
Go

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)
}