瀏覽代碼

Fix tests

tags/v2.1.11^2^2
9seconds 2 月之前
父節點
當前提交
5b91edf5c4

+ 1
- 1
internal/cli/simple_run.go 查看文件

@@ -18,7 +18,7 @@ type SimpleRun struct {
18 18
 	TCPBuffer           string        `kong:"name='tcp-buffer',short='b',default='4KB',help='Deprecated and ignored'"`                                                 //nolint: lll
19 19
 	PreferIP            string        `kong:"name='prefer-ip',short='i',default='prefer-ipv6',help='IP preference. By default we prefer IPv6 with fallback to IPv4.'"` //nolint: lll
20 20
 	DomainFrontingPort  uint64        `kong:"name='domain-fronting-port',short='p',default='443',help='A port to access for domain fronting.'"`                        //nolint: lll
21
-	DomainFrontingIP    string        `kong:"name='domain-fronting-ip',help='An IP address to use for domain fronting instead of resolving the hostname via DNS.'"`       //nolint: lll
21
+	DomainFrontingIP    string        `kong:"name='domain-fronting-ip',help='An IP address to use for domain fronting instead of resolving the hostname via DNS.'"`    //nolint: lll
22 22
 	DOHIP               net.IP        `kong:"name='doh-ip',short='n',default='1.1.1.1',help='IP address of DNS-over-HTTP to use.'"`                                    //nolint: lll
23 23
 	Timeout             time.Duration `kong:"name='timeout',short='t',default='10s',help='Network timeout to use'"`                                                    //nolint: lll
24 24
 	Socks5Proxies       []string      `kong:"name='socks5-proxy',short='s',help='Socks5 proxies to use for network access.'"`                                          //nolint: lll

+ 36
- 38
mtglib/internal/dc/init.go 查看文件

@@ -38,43 +38,41 @@ type Updater interface {
38 38
 	Run(ctx context.Context)
39 39
 }
40 40
 
41
-var (
42
-	// https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp#L30
43
-	defaultDCAddrSet = dcAddrSet{
44
-		v4: map[int][]Addr{
45
-			1: {
46
-				{Network: "tcp4", Address: "149.154.175.50:443"},
47
-			},
48
-			2: {
49
-				{Network: "tcp4", Address: "149.154.167.51:443"},
50
-				{Network: "tcp4", Address: "95.161.76.100:443"},
51
-			},
52
-			3: {
53
-				{Network: "tcp4", Address: "149.154.175.100:443"},
54
-			},
55
-			4: {
56
-				{Network: "tcp4", Address: "149.154.167.91:443"},
57
-			},
58
-			5: {
59
-				{Network: "tcp4", Address: "149.154.171.5:443"},
60
-			},
41
+// https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp#L30
42
+var defaultDCAddrSet = dcAddrSet{
43
+	v4: map[int][]Addr{
44
+		1: {
45
+			{Network: "tcp4", Address: "149.154.175.50:443"},
61 46
 		},
62
-		v6: map[int][]Addr{
63
-			1: {
64
-				{Network: "tcp6", Address: "[2001:b28:f23d:f001::a]:443"},
65
-			},
66
-			2: {
67
-				{Network: "tcp6", Address: "[2001:67c:04e8:f002::a]:443"},
68
-			},
69
-			3: {
70
-				{Network: "tcp6", Address: "[2001:b28:f23d:f003::a]:443"},
71
-			},
72
-			4: {
73
-				{Network: "tcp6", Address: "[2001:67c:04e8:f004::a]:443"},
74
-			},
75
-			5: {
76
-				{Network: "tcp6", Address: "[2001:b28:f23f:f005::a]:443"},
77
-			},
47
+		2: {
48
+			{Network: "tcp4", Address: "149.154.167.51:443"},
49
+			{Network: "tcp4", Address: "95.161.76.100:443"},
78 50
 		},
79
-	}
80
-)
51
+		3: {
52
+			{Network: "tcp4", Address: "149.154.175.100:443"},
53
+		},
54
+		4: {
55
+			{Network: "tcp4", Address: "149.154.167.91:443"},
56
+		},
57
+		5: {
58
+			{Network: "tcp4", Address: "149.154.171.5:443"},
59
+		},
60
+	},
61
+	v6: map[int][]Addr{
62
+		1: {
63
+			{Network: "tcp6", Address: "[2001:b28:f23d:f001::a]:443"},
64
+		},
65
+		2: {
66
+			{Network: "tcp6", Address: "[2001:67c:04e8:f002::a]:443"},
67
+		},
68
+		3: {
69
+			{Network: "tcp6", Address: "[2001:b28:f23d:f003::a]:443"},
70
+		},
71
+		4: {
72
+			{Network: "tcp6", Address: "[2001:67c:04e8:f004::a]:443"},
73
+		},
74
+		5: {
75
+			{Network: "tcp6", Address: "[2001:b28:f23f:f005::a]:443"},
76
+		},
77
+	},
78
+}

+ 3
- 3
mtglib/internal/dc/public_config_updater.go 查看文件

@@ -19,7 +19,7 @@ type PublicConfigUpdater struct {
19 19
 	tg   *Telegram
20 20
 }
21 21
 
22
-func (p PublicConfigUpdater) Run(ctx context.Context, url, network string) {
22
+func (p *PublicConfigUpdater) Run(ctx context.Context, url, network string) {
23 23
 	p.run(ctx, func() error {
24 24
 		req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
25 25
 		if err != nil {
@@ -81,8 +81,8 @@ func (p PublicConfigUpdater) Run(ctx context.Context, url, network string) {
81 81
 	})
82 82
 }
83 83
 
84
-func NewPublicConfigUpdater(tg *Telegram, logger Logger, client *http.Client) PublicConfigUpdater {
85
-	return PublicConfigUpdater{
84
+func NewPublicConfigUpdater(tg *Telegram, logger Logger, client *http.Client) *PublicConfigUpdater {
85
+	return &PublicConfigUpdater{
86 86
 		updater: updater{
87 87
 			logger: logger,
88 88
 			period: PublicConfigUpdateEach,

+ 17
- 39
mtglib/internal/dc/public_config_updater_test.go 查看文件

@@ -14,7 +14,7 @@ import (
14 14
 type PublicConfigUpdaterTestSuite struct {
15 15
 	UpdaterTestSuiteBase
16 16
 
17
-	u               PublicConfigUpdater
17
+	u               *PublicConfigUpdater
18 18
 	lock            sync.Mutex
19 19
 	srv             *httptest.Server
20 20
 	responseHandler func(w http.ResponseWriter)
@@ -42,39 +42,27 @@ func (s *PublicConfigUpdaterTestSuite) SetupTest() {
42 42
 }
43 43
 
44 44
 func (s *PublicConfigUpdaterTestSuite) Test502StatusCode() {
45
-	done := false
46
-
47 45
 	s.responseHandler = func(w http.ResponseWriter) {
48 46
 		w.WriteHeader(http.StatusBadGateway)
49
-		done = true
50 47
 	}
51
-	go s.u.Run(s.ctx, s.srv.URL, "tcp4")
52
-
53
-	s.Eventually(func() bool {
54
-		s.lock.Lock()
55
-		defer s.lock.Unlock()
48
+	s.u.Run(s.ctx, s.srv.URL, "tcp4")
56 49
 
57
-		return done
58
-	}, time.Second, 10*time.Millisecond)
50
+	time.Sleep(100 * time.Millisecond)
51
+	s.ctxCancel()
52
+	s.u.Wait()
59 53
 
60 54
 	s.Len(s.u.tg.view.publicConfigs.v4, 0)
61 55
 }
62 56
 
63 57
 func (s *PublicConfigUpdaterTestSuite) TestEmptyFile() {
64
-	done := false
65
-
66 58
 	s.responseHandler = func(w http.ResponseWriter) {
67
-		done = true
68 59
 		w.WriteHeader(http.StatusOK)
69 60
 	}
70
-	go s.u.Run(s.ctx, s.srv.URL, "tcp4")
71
-
72
-	s.Eventually(func() bool {
73
-		s.lock.Lock()
74
-		defer s.lock.Unlock()
61
+	s.u.Run(s.ctx, s.srv.URL, "tcp4")
75 62
 
76
-		return done
77
-	}, time.Second, 10*time.Millisecond)
63
+	time.Sleep(100 * time.Millisecond)
64
+	s.ctxCancel()
65
+	s.u.Wait()
78 66
 
79 67
 	s.Len(s.u.tg.view.publicConfigs.v4, 0)
80 68
 }
@@ -85,21 +73,16 @@ proxy_for -1 -1;
85 73
 proxy_for 100 100.10.0.0:3333;
86 74
 lala 0 0
87 75
 `
88
-	done := false
89 76
 
90 77
 	s.responseHandler = func(w http.ResponseWriter) {
91
-		done = true
92 78
 		w.WriteHeader(http.StatusOK)
93 79
 		w.Write([]byte(result)) //nolint: errcheck
94 80
 	}
95
-	go s.u.Run(s.ctx, s.srv.URL, "tcp4")
96
-
97
-	s.Eventually(func() bool {
98
-		s.lock.Lock()
99
-		defer s.lock.Unlock()
81
+	s.u.Run(s.ctx, s.srv.URL, "tcp4")
100 82
 
101
-		return done
102
-	}, time.Second, 10*time.Millisecond)
83
+	time.Sleep(100 * time.Millisecond)
84
+	s.ctxCancel()
85
+	s.u.Wait()
103 86
 
104 87
 	s.Len(s.u.tg.view.publicConfigs.v4, 0)
105 88
 }
@@ -109,21 +92,16 @@ func (s *PublicConfigUpdaterTestSuite) TestOk() {
109 92
 proxy_for 203 100.10.0.0:3333;
110 93
 proxy_for -100 101.10.0.0:3333;
111 94
 `
112
-	done := false
113 95
 
114 96
 	s.responseHandler = func(w http.ResponseWriter) {
115
-		done = true
116 97
 		w.WriteHeader(http.StatusOK)
117 98
 		w.Write([]byte(result)) //nolint: errcheck
118 99
 	}
119
-	go s.u.Run(s.ctx, s.srv.URL, "tcp4")
120
-
121
-	s.Eventually(func() bool {
122
-		s.lock.Lock()
123
-		defer s.lock.Unlock()
100
+	s.u.Run(s.ctx, s.srv.URL, "tcp4")
124 101
 
125
-		return done
126
-	}, time.Second, 10*time.Millisecond)
102
+	time.Sleep(100 * time.Millisecond)
103
+	s.ctxCancel()
104
+	s.u.Wait()
127 105
 
128 106
 	s.Len(s.u.tg.view.publicConfigs.v4, 1)
129 107
 	s.Len(s.u.tg.view.publicConfigs.v4[203], 1)

+ 29
- 21
mtglib/internal/dc/updater.go 查看文件

@@ -2,38 +2,46 @@ package dc
2 2
 
3 3
 import (
4 4
 	"context"
5
+	"sync"
5 6
 	"time"
6 7
 )
7 8
 
8 9
 type updater struct {
10
+	wg     sync.WaitGroup
9 11
 	logger Logger
10 12
 	period time.Duration
11 13
 }
12 14
 
13
-func (u updater) run(ctx context.Context, callback func() error) {
14
-	ticker := time.NewTicker(u.period)
15
+func (u *updater) Wait() {
16
+	u.wg.Wait()
17
+}
15 18
 
16
-	defer func() {
17
-		ticker.Stop()
19
+func (u *updater) run(ctx context.Context, callback func() error) {
20
+	u.wg.Go(func() {
21
+		ticker := time.NewTicker(u.period)
18 22
 
19
-		select {
20
-		case <-ticker.C:
21
-		default:
22
-		}
23
-	}()
23
+		defer func() {
24
+			ticker.Stop()
24 25
 
25
-	for {
26
-		u.logger.Info("start update")
27
-		if err := callback(); err != nil {
28
-			u.logger.WarningError("cannot update: %w", err)
29
-		}
30
-		u.logger.Info("updated")
26
+			select {
27
+			case <-ticker.C:
28
+			default:
29
+			}
30
+		}()
31
+
32
+		for {
33
+			u.logger.Info("start update")
34
+			if err := callback(); err != nil {
35
+				u.logger.WarningError("cannot update: %w", err)
36
+			}
37
+			u.logger.Info("updated")
31 38
 
32
-		select {
33
-		case <-ctx.Done():
34
-			u.logger.Info("stop updating")
35
-			return
36
-		case <-ticker.C:
39
+			select {
40
+			case <-ctx.Done():
41
+				u.logger.Info("stop updating")
42
+				return
43
+			case <-ticker.C:
44
+			}
37 45
 		}
38
-	}
46
+	})
39 47
 }

+ 9
- 7
mtglib/proxy.go 查看文件

@@ -30,6 +30,7 @@ type Proxy struct {
30 30
 	domainFrontingIP         string
31 31
 	workerPool               *ants.PoolWithFunc
32 32
 	telegram                 *dc.Telegram
33
+	configUpdater            *dc.PublicConfigUpdater
33 34
 	clientObfuscatror        obfuscation.Obfuscator
34 35
 
35 36
 	secret          Secret
@@ -152,6 +153,7 @@ func (p *Proxy) Shutdown() {
152 153
 	p.ctxCancel()
153 154
 	p.streamWaitGroup.Wait()
154 155
 	p.workerPool.Release()
156
+	p.configUpdater.Wait()
155 157
 
156 158
 	p.allowlist.Shutdown()
157 159
 	p.blocklist.Shutdown()
@@ -328,18 +330,18 @@ func NewProxy(opts ProxyOpts) (*Proxy, error) {
328 330
 		tolerateTimeSkewness:     opts.getTolerateTimeSkewness(),
329 331
 		allowFallbackOnUnknownDC: opts.AllowFallbackOnUnknownDC,
330 332
 		telegram:                 tg,
333
+		configUpdater: dc.NewPublicConfigUpdater(
334
+			tg,
335
+			updatersLogger.Named("public-config"),
336
+			opts.Network.MakeHTTPClient(nil),
337
+		),
331 338
 		clientObfuscatror: obfuscation.Obfuscator{
332 339
 			Secret: opts.Secret.Key[:],
333 340
 		},
334 341
 	}
335 342
 
336
-	publicConfigUpdater := dc.NewPublicConfigUpdater(
337
-		tg,
338
-		updatersLogger.Named("public-config"),
339
-		opts.Network.MakeHTTPClient(nil),
340
-	)
341
-	go publicConfigUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
342
-	go publicConfigUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")
343
+	proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
344
+	proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")
343 345
 
344 346
 	pool, err := ants.NewPoolWithFunc(opts.getConcurrency(),
345 347
 		func(arg any) {

Loading…
取消
儲存