Przeglądaj źródła

Test telegram dc dialer

tags/v2.0.0-rc1
9seconds 5 lat temu
rodzic
commit
925a02dac3

+ 1
- 1
mtglib/internal/telegram/telegram.go Wyświetl plik

52
 	return nil, fmt.Errorf("cannot dial to %d dc: %w", dc, err)
52
 	return nil, fmt.Errorf("cannot dial to %d dc: %w", dc, err)
53
 }
53
 }
54
 
54
 
55
-func NewTelegramDialer(dialer Dialer, ipPreference string) (*Telegram, error) {
55
+func New(dialer Dialer, ipPreference string) (*Telegram, error) {
56
 	var pref preferIP
56
 	var pref preferIP
57
 
57
 
58
 	switch strings.ToLower(ipPreference) {
58
 	switch strings.ToLower(ipPreference) {

+ 140
- 0
mtglib/internal/telegram/telegram_internal_test.go Wyświetl plik

1
+package telegram
2
+
3
+import (
4
+	"context"
5
+	"errors"
6
+	"io"
7
+	"net"
8
+	"strconv"
9
+	"testing"
10
+
11
+	"github.com/9seconds/mtg/v2/testlib"
12
+	"github.com/stretchr/testify/assert"
13
+	"github.com/stretchr/testify/mock"
14
+	"github.com/stretchr/testify/suite"
15
+)
16
+
17
+type TelegramTestSuite struct {
18
+	suite.Suite
19
+
20
+	dialerMock *testlib.MtglibNetworkMock
21
+	t          *Telegram
22
+}
23
+
24
+func (suite *TelegramTestSuite) SetupTest() {
25
+	suite.dialerMock = &testlib.MtglibNetworkMock{}
26
+	suite.t, _ = New(suite.dialerMock, "prefer-ipv4")
27
+}
28
+
29
+func (suite *TelegramTestSuite) TearDownTest() {
30
+	suite.dialerMock.AssertExpectations(suite.T())
31
+}
32
+
33
+func (suite *TelegramTestSuite) TestUnknownDC() {
34
+	testData := []int{
35
+		-1,
36
+		5,
37
+		100,
38
+	}
39
+
40
+	for _, v := range testData {
41
+		value := v
42
+
43
+		suite.T().Run(strconv.Itoa(value), func(t *testing.T) {
44
+			_, err := suite.t.Dial(context.Background(), value)
45
+			assert.Error(t, err)
46
+		})
47
+	}
48
+}
49
+
50
+func (suite *TelegramTestSuite) TestDialToCorrectIPs() {
51
+	testData := map[int][]tgAddr{}
52
+
53
+	for i := 0; i < 5; i++ {
54
+		testData[i] = []tgAddr{}
55
+		testData[i] = append(testData[i], v4Addresses[i]...)
56
+		testData[i] = append(testData[i], v6Addresses[i])
57
+	}
58
+
59
+	for i, v := range testData {
60
+		idx := i
61
+		addresses := v
62
+
63
+		suite.T().Run(strconv.Itoa(idx), func(t *testing.T) {
64
+			for _, addr := range addresses {
65
+				suite.dialerMock.
66
+					On("DialContext", mock.Anything, addr.network, addr.address).
67
+					Once().
68
+					Return((*net.TCPConn)(nil), io.EOF)
69
+			}
70
+
71
+			_, err := suite.t.Dial(context.Background(), idx)
72
+			assert.True(t, errors.Is(err, io.EOF))
73
+		})
74
+	}
75
+}
76
+
77
+func (suite *TelegramTestSuite) TestDialPreferIPRange() {
78
+	testData := map[string][]tgAddr{
79
+		"prefer-ipv4": {v4Addresses[0][0], v6Addresses[0]},
80
+		"prefer-ipv6": {v6Addresses[0], v4Addresses[0][0]},
81
+		"only-ipv4":   {v4Addresses[0][0]},
82
+		"only-ipv6":   {v6Addresses[0]},
83
+	}
84
+
85
+	for k, v := range testData {
86
+		name := k
87
+		addresses := v
88
+
89
+		suite.T().Run(name, func(t *testing.T) {
90
+			for _, addr := range addresses {
91
+				suite.dialerMock.
92
+					On("DialContext", mock.Anything, addr.network, addr.address).
93
+					Once().
94
+					Return((*net.TCPConn)(nil), io.EOF)
95
+			}
96
+
97
+			tg, _ := New(suite.dialerMock, name)
98
+			_, err := tg.Dial(context.Background(), 0)
99
+
100
+			assert.True(t, errors.Is(err, io.EOF))
101
+		})
102
+	}
103
+}
104
+
105
+func (suite *TelegramTestSuite) TestDialPreferIPPriority() {
106
+	testData := map[string]tgAddr{
107
+		"prefer-ipv4": v4Addresses[0][0],
108
+		"prefer-ipv6": v6Addresses[0],
109
+	}
110
+
111
+	for k, v := range testData {
112
+		name := k
113
+		addr := v
114
+
115
+		suite.T().Run(name, func(t *testing.T) {
116
+			conn := &net.TCPConn{}
117
+
118
+			suite.dialerMock.
119
+				On("DialContext", mock.Anything, addr.network, addr.address).
120
+				Once().
121
+				Return(conn, nil)
122
+
123
+			tg, _ := New(suite.dialerMock, name)
124
+
125
+			res, err := tg.Dial(context.Background(), 0)
126
+			assert.NoError(t, err)
127
+			assert.Equal(t, conn, res)
128
+		})
129
+	}
130
+}
131
+
132
+func (suite *TelegramTestSuite) TestUnknownPreferIP() {
133
+	_, err := New(suite.dialerMock, "xxx")
134
+	suite.Error(err)
135
+}
136
+
137
+func TestTelegram(t *testing.T) {
138
+	t.Parallel()
139
+	suite.Run(t, &TelegramTestSuite{})
140
+}

Ładowanie…
Anuluj
Zapisz