healing

Форк
0
/
group_test.go 
76 строк · 1.7 Кб
1
package healing
2

3
import (
4
	"context"
5
	"errors"
6
	"fmt"
7
	"testing"
8
	"time"
9

10
	"github.com/stretchr/testify/assert"
11
)
12

13
func TestCheckGroup_Check(t *testing.T) {
14
	testcases := []struct {
15
		name          string
16
		checkers      []checkFunc
17
		checkTimeout  time.Duration
18
		checkDuration time.Duration
19
		expected      bool
20
	}{
21
		{
22
			name: "basic case",
23
			checkers: []checkFunc{
24
				func(ctx context.Context) CheckResult {
25
					return CheckResult{}
26
				},
27
			},
28
			checkTimeout:  100 * time.Millisecond,
29
			checkDuration: 200 * time.Millisecond,
30
			expected:      true,
31
		},
32
		{
33
			name: "long check",
34
			checkers: []checkFunc{
35
				func(ctx context.Context) CheckResult {
36
					<-time.After(300 * time.Millisecond)
37
					return CheckResult{}
38
				},
39
			},
40
			checkTimeout:  100 * time.Millisecond,
41
			checkDuration: 100 * time.Millisecond,
42
			expected:      false,
43
		},
44
		{
45
			name: "failed check",
46
			checkers: []checkFunc{
47
				func(ctx context.Context) CheckResult {
48
					return CheckResult{Error: errors.New("failed check")}
49
				},
50
			},
51
			checkTimeout:  100 * time.Millisecond,
52
			checkDuration: 100 * time.Millisecond,
53
			expected:      false,
54
		},
55
		{
56
			name:          "no checks",
57
			checkers:      nil,
58
			checkTimeout:  100 * time.Millisecond,
59
			checkDuration: 200 * time.Millisecond,
60
			expected:      true,
61
		},
62
	}
63
	for _, testcase := range testcases {
64
		tc := testcase
65
		t.Run(tc.name, func(t *testing.T) {
66
			g := NewCheckGroup(tc.checkTimeout)
67
			for i, check := range tc.checkers {
68
				g.AddChecker(fmt.Sprintf("subsystem%d", i), check)
69
			}
70
			ctx, cancel := context.WithTimeout(context.Background(), tc.checkDuration)
71
			defer cancel()
72
			g.Check(ctx)
73
			assert.Equal(t, tc.expected, g.IsOK())
74
		})
75
	}
76
}
77

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

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

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

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