mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 15:14:03 +03:00
Test telegram dc dialer
This commit is contained in:
@@ -52,7 +52,7 @@ func (t Telegram) Dial(ctx context.Context, dc int) (net.Conn, error) {
|
||||
return nil, fmt.Errorf("cannot dial to %d dc: %w", dc, err)
|
||||
}
|
||||
|
||||
func NewTelegramDialer(dialer Dialer, ipPreference string) (*Telegram, error) {
|
||||
func New(dialer Dialer, ipPreference string) (*Telegram, error) {
|
||||
var pref preferIP
|
||||
|
||||
switch strings.ToLower(ipPreference) {
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
package telegram
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/9seconds/mtg/v2/testlib"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
type TelegramTestSuite struct {
|
||||
suite.Suite
|
||||
|
||||
dialerMock *testlib.MtglibNetworkMock
|
||||
t *Telegram
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) SetupTest() {
|
||||
suite.dialerMock = &testlib.MtglibNetworkMock{}
|
||||
suite.t, _ = New(suite.dialerMock, "prefer-ipv4")
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) TearDownTest() {
|
||||
suite.dialerMock.AssertExpectations(suite.T())
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) TestUnknownDC() {
|
||||
testData := []int{
|
||||
-1,
|
||||
5,
|
||||
100,
|
||||
}
|
||||
|
||||
for _, v := range testData {
|
||||
value := v
|
||||
|
||||
suite.T().Run(strconv.Itoa(value), func(t *testing.T) {
|
||||
_, err := suite.t.Dial(context.Background(), value)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) TestDialToCorrectIPs() {
|
||||
testData := map[int][]tgAddr{}
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
testData[i] = []tgAddr{}
|
||||
testData[i] = append(testData[i], v4Addresses[i]...)
|
||||
testData[i] = append(testData[i], v6Addresses[i])
|
||||
}
|
||||
|
||||
for i, v := range testData {
|
||||
idx := i
|
||||
addresses := v
|
||||
|
||||
suite.T().Run(strconv.Itoa(idx), func(t *testing.T) {
|
||||
for _, addr := range addresses {
|
||||
suite.dialerMock.
|
||||
On("DialContext", mock.Anything, addr.network, addr.address).
|
||||
Once().
|
||||
Return((*net.TCPConn)(nil), io.EOF)
|
||||
}
|
||||
|
||||
_, err := suite.t.Dial(context.Background(), idx)
|
||||
assert.True(t, errors.Is(err, io.EOF))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) TestDialPreferIPRange() {
|
||||
testData := map[string][]tgAddr{
|
||||
"prefer-ipv4": {v4Addresses[0][0], v6Addresses[0]},
|
||||
"prefer-ipv6": {v6Addresses[0], v4Addresses[0][0]},
|
||||
"only-ipv4": {v4Addresses[0][0]},
|
||||
"only-ipv6": {v6Addresses[0]},
|
||||
}
|
||||
|
||||
for k, v := range testData {
|
||||
name := k
|
||||
addresses := v
|
||||
|
||||
suite.T().Run(name, func(t *testing.T) {
|
||||
for _, addr := range addresses {
|
||||
suite.dialerMock.
|
||||
On("DialContext", mock.Anything, addr.network, addr.address).
|
||||
Once().
|
||||
Return((*net.TCPConn)(nil), io.EOF)
|
||||
}
|
||||
|
||||
tg, _ := New(suite.dialerMock, name)
|
||||
_, err := tg.Dial(context.Background(), 0)
|
||||
|
||||
assert.True(t, errors.Is(err, io.EOF))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) TestDialPreferIPPriority() {
|
||||
testData := map[string]tgAddr{
|
||||
"prefer-ipv4": v4Addresses[0][0],
|
||||
"prefer-ipv6": v6Addresses[0],
|
||||
}
|
||||
|
||||
for k, v := range testData {
|
||||
name := k
|
||||
addr := v
|
||||
|
||||
suite.T().Run(name, func(t *testing.T) {
|
||||
conn := &net.TCPConn{}
|
||||
|
||||
suite.dialerMock.
|
||||
On("DialContext", mock.Anything, addr.network, addr.address).
|
||||
Once().
|
||||
Return(conn, nil)
|
||||
|
||||
tg, _ := New(suite.dialerMock, name)
|
||||
|
||||
res, err := tg.Dial(context.Background(), 0)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, conn, res)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *TelegramTestSuite) TestUnknownPreferIP() {
|
||||
_, err := New(suite.dialerMock, "xxx")
|
||||
suite.Error(err)
|
||||
}
|
||||
|
||||
func TestTelegram(t *testing.T) {
|
||||
t.Parallel()
|
||||
suite.Run(t, &TelegramTestSuite{})
|
||||
}
|
||||
Reference in New Issue
Block a user