talos
79 строк · 1.7 Кб
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
5package conditions_test
6
7import (
8"context"
9"errors"
10"testing"
11"time"
12
13"github.com/stretchr/testify/assert"
14
15"github.com/siderolabs/talos/pkg/conditions"
16)
17
18func TestPollingCondition(t *testing.T) {
19t.Parallel()
20
21t.Run("OK", func(t *testing.T) {
22t.Parallel()
23
24var calls int
25
26cond := conditions.PollingCondition("Test condition", func(ctx context.Context) error {
27calls++
28
29if calls < 2 {
30return errors.New("failed")
31}
32
33return nil
34}, time.Second, time.Millisecond)
35
36err := cond.Wait(context.Background())
37assert.NoError(t, err)
38assert.Equal(t, "Test condition: OK", cond.String())
39assert.Equal(t, 2, calls)
40})
41
42t.Run("Skip", func(t *testing.T) {
43t.Parallel()
44
45var calls int
46
47cond := conditions.PollingCondition("Test condition", func(ctx context.Context) error {
48calls++
49
50if calls < 2 {
51return errors.New("failed")
52}
53
54return conditions.ErrSkipAssertion
55}, time.Second, time.Millisecond)
56
57err := cond.Wait(context.Background())
58assert.NoError(t, err)
59assert.Equal(t, "Test condition: SKIP", cond.String())
60assert.Equal(t, 2, calls)
61})
62
63t.Run("Fatal", func(t *testing.T) {
64t.Parallel()
65
66var calls int
67
68cond := conditions.PollingCondition("Test condition", func(ctx context.Context) error {
69calls++
70
71return errors.New("failed")
72}, time.Second, 750*time.Millisecond)
73
74err := cond.Wait(context.Background())
75assert.Equal(t, context.DeadlineExceeded, err)
76assert.Equal(t, "Test condition: failed", cond.String())
77assert.Equal(t, 2, calls)
78})
79}
80