Files
mautrix-telegram/pkg/gotd/telegram/dcs/dns_test.go
T
2025-06-27 20:03:37 -07:00

93 lines
1.9 KiB
Go

package dcs
import (
"testing"
"github.com/stretchr/testify/require"
)
func testTXTResponse() []string {
return []string{
"LcmEoukF2bVjKwz3E+J9BsDdL+rv9lGqLQWIGXrWACT2ESk5xuOpA6Cz6klKRbhbwSiHOd2zC5PiR57j/OJHPpj4i+tw==",
"umjjLFLpOKtPeW9zHLq2ypbMzg/zkqvPhvhr0bxrLZlgPQ04l2GpO/4qZgAx3tk3BDHbY6/gmG1e8eaFBq3YSqR5SZ5hQ1Cm5f4/" +
"o67GYcPJClaf1TiHq3wVfsQ5OLnyJRw9A2ZfUfzIXxoSklPJrVdF/4hM1ZdUE0eWDAbmYf7JCeao8ecVVwKndd4CZHZS9wyf1T7DIUh95VpQ" +
"sn2klLPA6gA/2YNXOh9gITvjZrKuXLwwh9hBHhPvxv",
}
}
func Test_ParseDNSConfig(t *testing.T) {
t.Run("Good", func(t *testing.T) {
a := require.New(t)
cfg, err := ParseDNSConfig(testTXTResponse())
a.NoError(err)
a.Equal(1565541126, cfg.Expires)
a.Equal(1562949126, cfg.Date)
a.Len(cfg.Rules, 1)
rule := cfg.Rules[0]
a.Equal(2, rule.DCID)
})
t.Run("Bad", func(t *testing.T) {
tests := []struct {
name string
input []string
}{
{"Empty", nil},
{"InvalidHash", func() []string {
r := testTXTResponse()
first := r[0]
r[0] = string(first[0]+1) + first[1:]
return r
}()},
{"InvalidBase64", func() []string {
r := testTXTResponse()
first := r[0]
r[0] = string('#') + first[1:]
return r
}()},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := ParseDNSConfig(tt.input)
require.Error(t, err)
})
}
})
}
func BenchmarkDNSConfig(b *testing.B) {
message := testTXTResponse()
b.ResetTimer()
b.ReportAllocs()
var (
err error
cfgSink DNSConfig
)
for i := 0; i < b.N; i++ {
cfgSink, err = ParseDNSConfig(message)
if cfgSink.Date == 0 || err != nil {
b.Fatal(err)
}
}
}
func TestDNSConfig_Options(t *testing.T) {
a := require.New(t)
cfg, err := ParseDNSConfig(testTXTResponse())
a.NoError(err)
options := cfg.Options()
a.Len(options, 1)
option := options[0]
a.Equal(2, option.ID)
a.Equal(14544, option.Port)
a.Equal("98.210.59.139", option.IPAddress)
a.True(option.TCPObfuscatedOnly)
}