7a04f298d2
- 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
102 lines
2.5 KiB
Go
102 lines
2.5 KiB
Go
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")
|
|
})
|
|
}
|