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
+101
View File
@@ -0,0 +1,101 @@
package tgtest_test
import (
"context"
"crypto/rand"
"io"
"testing"
"time"
"github.com/go-faster/errors"
"github.com/stretchr/testify/require"
"go.uber.org/zap/zaptest"
"go.mau.fi/mautrix-telegram/pkg/gotd/crypto"
"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/tg"
"go.mau.fi/mautrix-telegram/pkg/gotd/tgtest/cluster"
"go.mau.fi/mautrix-telegram/pkg/gotd/tgtest/services"
"go.mau.fi/mautrix-telegram/pkg/gotd/tgtest/services/config"
)
func TestSessionHandle(t *testing.T) {
test := func(storage session.Storage, t *testing.T) error {
log := zaptest.NewLogger(t)
defer func() { _ = log.Sync() }()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
g := tdsync.NewCancellableGroup(ctx)
c := cluster.NewCluster(cluster.Options{
Logger: log.Named("cluster"),
})
d := c.Dispatch(2, "server").Fallback(services.NotImplemented)
config.NewService(&tg.Config{}, &tg.CDNConfig{}).Register(d)
g.Go(c.Up)
g.Go(func(ctx context.Context) error {
select {
case <-c.Ready():
case <-ctx.Done():
return ctx.Err()
}
defer g.Cancel()
client := telegram.NewClient(telegram.TestAppID, telegram.TestAppHash, telegram.Options{
PublicKeys: c.Keys(),
DC: 2,
DCList: c.List(),
Resolver: c.Resolver(),
NoUpdates: true,
Logger: log.Named("client"),
SessionStorage: storage,
RetryInterval: 100 * time.Millisecond,
})
return client.Run(ctx, func(ctx context.Context) error {
return nil
})
})
if err := g.Wait(); err != nil && !errors.Is(err, context.Canceled) {
return errors.Wrap(err, "wait")
}
return nil
}
t.Run("Empty", func(t *testing.T) {
a := require.New(t)
storage := session.StorageMemory{}
a.NoError(test(&storage, t))
_, err := storage.Bytes(nil)
a.NoError(err, "Must create new session")
})
t.Run("Unknown", func(t *testing.T) {
a := require.New(t)
loader := session.Loader{Storage: &session.StorageMemory{}}
ctx := context.Background()
key := crypto.Key{}
_, err := io.ReadFull(rand.Reader, key[:])
a.NoError(err)
authKey := key.WithID()
was := &session.Data{
DC: 2,
AuthKey: authKey.Value[:],
AuthKeyID: authKey.ID[:],
}
a.NoError(loader.Save(context.Background(), was))
a.NoError(test(loader.Storage, t))
data, err := loader.Load(ctx)
a.NoError(err)
a.NotEqual(was, data, "Must regenerate session")
})
}