package tgtest import ( "context" "testing" "time" "github.com/go-faster/errors" "github.com/stretchr/testify/assert" "go.mau.fi/mautrix-telegram/pkg/gotd/bin" "go.mau.fi/mautrix-telegram/pkg/gotd/proto/codec" "go.mau.fi/mautrix-telegram/pkg/gotd/tdsync" "go.mau.fi/mautrix-telegram/pkg/gotd/transport" ) func Test_exchangeConn_Recv(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() defer func() { a.NoError(c1.Close()) a.NoError(c2.Close()) }() e := exchangeConn{Conn: c1} s := "abcdabcd" a.Len(s, 8) grp := tdsync.NewCancellableGroup(ctx) grp.Go(func(ctx context.Context) error { b := bin.Buffer{Buf: []byte(s)} if err := c2.Send(ctx, &b); err != nil { return err } b.Reset() var protocolErr *codec.ProtocolErr if err := c2.Recv(ctx, &b); err != nil && !errors.As(err, &protocolErr) { return err } b.ResetN(8) b.Put([]byte(s)) if err := c2.Send(ctx, &b); err != nil { return err } return nil }) var b bin.Buffer a.NoError(e.Recv(ctx, &b)) b.Skip(8) a.Equal(s, string(b.Buf)) a.NoError(grp.Wait()) }