package mtproto import ( "fmt" "testing" "time" "go.uber.org/zap" "github.com/gotd/neo" "go.mau.fi/mautrix-telegram/pkg/gotd/bin" "go.mau.fi/mautrix-telegram/pkg/gotd/crypto" "go.mau.fi/mautrix-telegram/pkg/gotd/testutil" ) func benchEncryption(b *testing.B, c *Conn, n int) { b.Helper() buf := &bin.Buffer{Buf: make([]byte, 0, n)} p := testPayload{Data: make([]byte, n-4)} b.ReportAllocs() b.SetBytes(int64(n)) b.ResetTimer() for i := 0; i < b.N; i++ { buf.Reset() if err := c.newEncryptedMessage(12345, 0, p, buf); err != nil { b.Fatal(err) } } } func BenchmarkEncryption(b *testing.B) { c := &Conn{ rand: Zero{}, log: zap.NewNop(), cipher: crypto.NewClientCipher(Zero{}), clock: neo.NewTime(time.Now()), compressThreshold: -1, } for i := 0; i < 256; i++ { c.authKey.Value[i] = byte(i) } for _, payload := range testutil.Payloads() { b.Run(fmt.Sprintf("%db", payload), func(b *testing.B) { benchEncryption(b, c, payload) }) } }