package mtproto import ( "testing" "time" "github.com/stretchr/testify/require" "go.uber.org/zap" "go.uber.org/zap/zapcore" "go.uber.org/zap/zaptest/observer" "github.com/gotd/neo" "go.mau.fi/mautrix-telegram/pkg/gotd/bin" "go.mau.fi/mautrix-telegram/pkg/gotd/mt" "go.mau.fi/mautrix-telegram/pkg/gotd/proto" "go.mau.fi/mautrix-telegram/pkg/gotd/tdsync" ) func TestConn_handleSessionCreated(t *testing.T) { t.Run("NeedSynchronization", func(t *testing.T) { a := require.New(t) logger, logs := observer.New(zapcore.WarnLevel) now := time.Unix(100, 0) clock := neo.NewTime(now) gotSession := tdsync.NewReady() conn := Conn{ clock: clock, log: zap.New(logger), gotSession: gotSession, handler: newTestHandler(), } buf := bin.Buffer{} msgID := proto.NewMessageID(now.Add(maxFuture+time.Second), proto.MessageFromClient) a.NoError(buf.Encode(&mt.NewSessionCreated{ FirstMsgID: int64(msgID), UniqueID: 10, ServerSalt: 10, })) a.NoError(conn.handleSessionCreated(&buf)) select { case <-gotSession.Ready(): default: t.Fatal("expected gotSession signal") } a.Equal(int64(10), conn.salt) msgs := logs.All() a.Len(msgs, 1) a.Equal("Local clock needs synchronization", msgs[0].Message) }) t.Run("Invalid", func(t *testing.T) { conn := Conn{} buf := bin.Buffer{} buf.PutID(mt.NewSessionCreatedTypeID) require.Error(t, conn.handleSessionCreated(&buf)) }) }