| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- 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,
- 0,
- 6,
- 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 := 1; i <= 5; i++ {
- testData[i] = []tgAddr{}
- testData[i] = append(testData[i], v4Addresses[i-1]...)
- testData[i] = append(testData[i], v6Addresses[i-1])
- }
-
- 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(), 1)
-
- 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(), 1)
- 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{})
- }
|