talos

Форк
0
/
apid_factory_test.go 
80 строк · 1.6 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package backend_test
6

7
import (
8
	"crypto/tls"
9
	"sync"
10
	"testing"
11

12
	"github.com/siderolabs/grpc-proxy/proxy"
13
	"github.com/stretchr/testify/suite"
14

15
	"github.com/siderolabs/talos/internal/app/apid/pkg/backend"
16
)
17

18
type APIDFactorySuite struct {
19
	suite.Suite
20

21
	f *backend.APIDFactory
22
}
23

24
type fakeTLSConfigProvider struct{}
25

26
func (fakeTLSConfigProvider) ClientConfig() (*tls.Config, error) {
27
	return &tls.Config{}, nil
28
}
29

30
func (suite *APIDFactorySuite) SetupSuite() {
31
	suite.f = backend.NewAPIDFactory(fakeTLSConfigProvider{})
32
}
33

34
func (suite *APIDFactorySuite) TestGet() {
35
	b1, err := suite.f.Get("127.0.0.1")
36
	suite.Require().NoError(err)
37
	suite.Require().NotNil(b1)
38

39
	b2, err := suite.f.Get("127.0.0.1")
40
	suite.Require().NoError(err)
41
	suite.Require().Equal(b1, b2)
42

43
	b3, err := suite.f.Get("127.0.0.2")
44
	suite.Require().NoError(err)
45
	suite.Require().NotEqual(b1, b3)
46

47
	_, err = suite.f.Get("127.0.0.2:50000")
48
	suite.Require().Error(err)
49
}
50

51
func (suite *APIDFactorySuite) TestGetConcurrent() {
52
	// for race detector
53
	var wg sync.WaitGroup
54

55
	backendCh := make(chan proxy.Backend, 10)
56

57
	for range 10 {
58
		wg.Add(1)
59

60
		go func() {
61
			defer wg.Done()
62

63
			b, _ := suite.f.Get("10.0.0.1") //nolint:errcheck
64
			backendCh <- b
65
		}()
66
	}
67

68
	wg.Wait()
69
	close(backendCh)
70

71
	b := <-backendCh
72

73
	for anotherB := range backendCh {
74
		suite.Assert().Equal(b, anotherB)
75
	}
76
}
77

78
func TestAPIDFactorySuite(t *testing.T) {
79
	suite.Run(t, new(APIDFactorySuite))
80
}
81

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.