forked from juju/juju
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaggregate_test.go
147 lines (130 loc) · 3.16 KB
/
aggregate_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Copyright 2022 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
package probe_test
import (
"errors"
"testing"
"github.com/juju/juju/observability/probe"
)
func TestAggregateProbeSuccess(t *testing.T) {
agg := probe.Aggregate{
Probes: map[string]probe.Prober{
"1": probe.Success,
"2": probe.Success,
"3": probe.Success,
"4": probe.Success,
},
}
val, err := agg.Probe()
if !val {
t.Errorf("expected aggregate probe of all success to provide a true value")
}
if err != nil {
t.Errorf("unexpected error %v from all success probes to aggregate", err)
}
}
func TestEmptyAggregateSuccess(t *testing.T) {
agg := probe.Aggregate{}
val, err := agg.Probe()
if !val {
t.Errorf("expected empty aggregate probe to provide a true value")
}
if err != nil {
t.Errorf("unexpected error %v from empty aggregate probe", err)
}
}
func TestSingleFalseAggregateProbe(t *testing.T) {
agg := probe.Aggregate{
Probes: map[string]probe.Prober{
"1": probe.Success,
"2": probe.ProberFn(func() (bool, error) {
return false, nil
}),
"3": probe.Success,
},
}
val, err := agg.Probe()
if val {
t.Errorf("expected aggregate with false probe to to provide a false value")
}
if err != nil {
t.Errorf("unexpected error %v from aggregate prober", err)
}
}
func TestMultipleFalseAggregateProbe(t *testing.T) {
agg := probe.Aggregate{
Probes: map[string]probe.Prober{
"1": probe.Success,
"2": probe.ProberFn(func() (bool, error) {
return false, nil
}),
"3": probe.Success,
"4": probe.ProberFn(func() (bool, error) {
return false, nil
}),
"5": probe.Success,
},
}
val, err := agg.Probe()
if val {
t.Errorf("expected aggregate with false probes to to provide a false value")
}
if err != nil {
t.Errorf("unexpected error %v from aggregate prober", err)
}
}
func TestAggregateProbeWithError(t *testing.T) {
agg := probe.Aggregate{
Probes: map[string]probe.Prober{
"1": probe.Success,
"2": probe.ProberFn(func() (bool, error) {
return false, errors.New("test error")
}),
"3": probe.Success,
},
}
val, err := agg.Probe()
if val {
t.Errorf("expected aggregate with false probe to to provide a false value")
}
if err == nil {
t.Errorf("expected error from aggregate prober")
}
}
func TestAggregateProbeCallback(t *testing.T) {
agg := probe.Aggregate{
Probes: map[string]probe.Prober{
"1": probe.Success,
"2": probe.ProberFn(func() (bool, error) {
return false, errors.New("test error")
}),
"3": probe.Success,
},
}
val, err := agg.ProbeWithResultCallback(func(k string, val bool, err error) {
expectedVal := true
shouldError := false
switch k {
case "1":
case "3":
break
case "2":
expectedVal = false
shouldError = true
default:
t.Errorf("unknown key %q supplied to aggregate callback", k)
}
if expectedVal != val {
t.Errorf("expected %v for key %q and got %v", expectedVal, k, val)
}
if err != nil && !shouldError {
t.Errorf("unexpected error %v", err)
}
})
if val {
t.Errorf("expected aggregate with false probe to to provide a false value")
}
if err == nil {
t.Errorf("expected error from aggregate prober")
}
}