...
1 package grpc
2
3 import (
4 "context"
5 "errors"
6 "testing"
7 "time"
8
9 blog "github.com/letsencrypt/boulder/log"
10 "github.com/letsencrypt/boulder/test"
11 "google.golang.org/grpc/health"
12 )
13
14 func Test_serverBuilder_initLongRunningCheck(t *testing.T) {
15 t.Parallel()
16 hs := health.NewServer()
17 mockLogger := blog.NewMock()
18 sb := &serverBuilder{
19 healthSrv: hs,
20 logger: mockLogger,
21 checkInterval: time.Millisecond * 50,
22 }
23 ctx, cancel := context.WithCancel(context.Background())
24 defer cancel()
25
26 count := 0
27 failEveryThirdCheck := func(context.Context) error {
28 count++
29 if count%3 == 0 {
30 return errors.New("oops")
31 }
32 return nil
33 }
34 sb.initLongRunningCheck(ctx, "test", failEveryThirdCheck)
35 time.Sleep(time.Millisecond * 110)
36 cancel()
37
38
39
40
41
42 serving := mockLogger.GetAllMatching(".*\"NOT_SERVING\" to \"SERVING\"")
43 notServing := mockLogger.GetAllMatching((".*\"SERVING\" to \"NOT_SERVING\""))
44 test.Assert(t, len(serving) == 1, "expected one serving log line")
45 test.Assert(t, len(notServing) == 1, "expected one not serving log line")
46
47 mockLogger.Clear()
48
49 ctx, cancel = context.WithCancel(context.Background())
50 defer cancel()
51
52 count = 0
53 failEveryOtherCheck := func(context.Context) error {
54 count++
55 if count%2 == 0 {
56 return errors.New("oops")
57 }
58 return nil
59 }
60 sb.initLongRunningCheck(ctx, "test", failEveryOtherCheck)
61 time.Sleep(time.Millisecond * 110)
62 cancel()
63
64
65
66
67
68 serving = mockLogger.GetAllMatching(".*\"NOT_SERVING\" to \"SERVING\"")
69 notServing = mockLogger.GetAllMatching((".*\"SERVING\" to \"NOT_SERVING\""))
70 test.Assert(t, len(serving) == 2, "expected two serving log lines")
71 test.Assert(t, len(notServing) == 1, "expected one not serving log line")
72 }
73
View as plain text