move gotd fork into repo. (#111)

- update to latest telegram layer
- remove some references to fields in tg.Entities that don't exist in
the schema
- originally added here:
https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e
  - referenced here
-
https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3
-
https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
Adam Van Ymeren
2025-06-27 20:03:37 -07:00
committed by GitHub
parent 0952df0244
commit 7a04f298d2
19264 changed files with 1539697 additions and 84 deletions
+120
View File
@@ -0,0 +1,120 @@
package telegram_test
import (
"context"
"os"
"strconv"
"strings"
"testing"
"time"
"github.com/go-faster/errors"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"go.uber.org/zap/zaptest"
"go.mau.fi/mautrix-telegram/pkg/gotd/session"
"go.mau.fi/mautrix-telegram/pkg/gotd/tdsync"
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram"
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/dcs"
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/internal/e2etest"
"go.mau.fi/mautrix-telegram/pkg/gotd/testutil"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
"go.mau.fi/mautrix-telegram/pkg/gotd/transport"
)
func tryConnect(ctx context.Context, opts telegram.Options) error {
client := telegram.NewClient(telegram.TestAppID, telegram.TestAppHash, opts)
return client.Run(ctx, func(ctx context.Context) error {
_, err := client.API().HelpGetNearestDC(ctx)
return err
})
}
func testTransportExternal(resolver dcs.Resolver, storage session.Storage) func(t *testing.T) {
return func(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
log := zaptest.NewLogger(t)
defer func() { _ = log.Sync() }()
require.NoError(t, tryConnect(ctx, telegram.Options{
Logger: log.Named("client"),
SessionStorage: storage,
Resolver: resolver,
}))
}
}
func TestExternalE2EConnect(t *testing.T) {
testutil.SkipExternal(t)
// To re-use session.
storage := &session.StorageMemory{}
tcp := func(p dcs.Protocol) func(t *testing.T) {
return testTransportExternal(dcs.Plain(dcs.PlainOptions{Protocol: p}), storage)
}
t.Run("Abridged", tcp(transport.Abridged))
t.Run("Intermediate", tcp(transport.Intermediate))
t.Run("PaddedIntermediate", tcp(transport.PaddedIntermediate))
t.Run("Full", tcp(transport.Full))
wsOpts := dcs.WebsocketOptions{}
t.Run("Websocket", testTransportExternal(dcs.Websocket(wsOpts), storage))
}
const dialog = `— Да?
— Алё!
— Да да?
— Ну как там с деньгами?
А?
— Как с деньгами-то там?
— Чё с деньгами?
— Чё?
— Куда ты звонишь?
— Тебе звоню.
— Кому?
— Ну тебе.`
func TestExternalE2EUsersDialog(t *testing.T) {
testutil.SkipExternal(t)
if v, _ := strconv.ParseBool(os.Getenv("GOTD_E2E_DIALOGS_BROKEN")); v {
// TODO(ernado): enable when fixed
t.Skip("Dialogs are broken.")
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()
log := zaptest.NewLogger(t).WithOptions(zap.IncreaseLevel(zapcore.InfoLevel))
cfg := e2etest.TestOptions{
Logger: log,
}
suite := e2etest.NewSuite(t, cfg)
auth := make(chan *tg.User, 1)
g := tdsync.NewLogGroup(ctx, log.Named("group"))
g.Go("echobot", func(ctx context.Context) error {
if err := e2etest.NewEchoBot(suite, auth).Run(ctx); err != nil {
return errors.Wrap(err, "echo bot")
}
return nil
})
user, ok := <-auth
if ok {
g.Go("terentyev", func(ctx context.Context) error {
defer g.Cancel()
if err := e2etest.NewUser(suite, strings.Split(dialog, "\n"), user.Username).Run(ctx); err != nil {
return errors.Wrap(err, "user")
}
return nil
})
}
require.NoError(t, g.Wait())
}