@@ -16,7 +16,9 @@ import (
16
16
"github.com/cortexproject/cortex/integration/e2e"
17
17
"github.com/pkg/errors"
18
18
19
+ http_util "github.com/thanos-io/thanos/pkg/http"
19
20
"github.com/thanos-io/thanos/pkg/promclient"
21
+ "github.com/thanos-io/thanos/pkg/query"
20
22
"github.com/thanos-io/thanos/pkg/rules/rulespb"
21
23
"github.com/thanos-io/thanos/pkg/runutil"
22
24
"github.com/thanos-io/thanos/pkg/store/labelpb"
@@ -33,42 +35,47 @@ func TestRulesAPI_Fanout(t *testing.T) {
33
35
testutil .Ok (t , err )
34
36
t .Cleanup (e2ethanos .CleanScenario (t , s ))
35
37
36
- rulesSubDir := filepath .Join ("rules" )
37
- testutil .Ok (t , os .MkdirAll (filepath .Join (s .SharedDir (), rulesSubDir ), os .ModePerm ))
38
- createRuleFiles (t , filepath .Join (s .SharedDir (), rulesSubDir ))
38
+ promRulesSubDir := filepath .Join ("rules" )
39
+ testutil .Ok (t , os .MkdirAll (filepath .Join (s .SharedDir (), promRulesSubDir ), os .ModePerm ))
40
+ // Create the abort_on_partial_response alert for Prometheus.
41
+ // We don't create the warn_on_partial_response alert as Prometheus has strict yaml unmarshalling.
42
+ createRuleFile (t , filepath .Join (s .SharedDir (), promRulesSubDir , "rules.yaml" ), testAlertRuleAbortOnPartialResponse )
43
+
44
+ thanosRulesSubDir := filepath .Join ("thanos-rules" )
45
+ testutil .Ok (t , os .MkdirAll (filepath .Join (s .SharedDir (), thanosRulesSubDir ), os .ModePerm ))
46
+ createRuleFiles (t , filepath .Join (s .SharedDir (), thanosRulesSubDir ))
39
47
40
48
// 2x Prometheus.
41
49
prom1 , sidecar1 , err := e2ethanos .NewPrometheusWithSidecar (
42
50
s .SharedDir (),
43
51
netName ,
44
52
"prom1" ,
45
- defaultPromConfig ("ha" , 0 , "" , filepath .Join (e2e .ContainerSharedDir , rulesSubDir , "*.yaml" )),
53
+ defaultPromConfig ("ha" , 0 , "" , filepath .Join (e2e .ContainerSharedDir , promRulesSubDir , "*.yaml" )),
46
54
e2ethanos .DefaultPrometheusImage (),
47
55
)
48
56
testutil .Ok (t , err )
49
57
prom2 , sidecar2 , err := e2ethanos .NewPrometheusWithSidecar (
50
58
s .SharedDir (),
51
59
netName ,
52
60
"prom2" ,
53
- defaultPromConfig ("ha" , 1 , "" , filepath .Join (e2e .ContainerSharedDir , rulesSubDir , "*.yaml" )),
61
+ defaultPromConfig ("ha" , 1 , "" , filepath .Join (e2e .ContainerSharedDir , promRulesSubDir , "*.yaml" )),
54
62
e2ethanos .DefaultPrometheusImage (),
55
63
)
56
64
testutil .Ok (t , err )
57
65
testutil .Ok (t , s .StartAndWaitReady (prom1 , sidecar1 , prom2 , sidecar2 ))
58
66
59
67
// 2x Rulers.
60
- r1 , err := e2ethanos .NewRuler (s .SharedDir (), "rule1" , rulesSubDir , nil , nil )
68
+ r1 , err := e2ethanos .NewRuler (s .SharedDir (), "rule1" , thanosRulesSubDir , nil , nil )
61
69
testutil .Ok (t , err )
62
- r2 , err := e2ethanos .NewRuler (s .SharedDir (), "rule2" , rulesSubDir , nil , nil )
70
+ r2 , err := e2ethanos .NewRuler (s .SharedDir (), "rule2" , thanosRulesSubDir , nil , nil )
63
71
testutil .Ok (t , err )
64
- testutil .Ok (t , s .StartAndWaitReady (r1 , r2 ))
65
72
66
73
q , err := e2ethanos .NewQuerier (
67
74
s .SharedDir (),
68
75
"query" ,
69
- []string {sidecar1 .GRPCNetworkEndpoint (), sidecar2 .GRPCNetworkEndpoint (), r1 .GRPCNetworkEndpoint ( ), r2 .GRPCNetworkEndpoint ( )},
76
+ []string {sidecar1 .GRPCNetworkEndpoint (), sidecar2 .GRPCNetworkEndpoint (), r1 .NetworkEndpointFor ( s . NetworkName ( ), 9091 ), r2 .NetworkEndpointFor ( s . NetworkName (), 9091 )},
70
77
nil ,
71
- []string {sidecar1 .GRPCNetworkEndpoint (), sidecar2 .GRPCNetworkEndpoint (), r1 .GRPCNetworkEndpoint ( ), r2 .GRPCNetworkEndpoint ( )},
78
+ []string {sidecar1 .GRPCNetworkEndpoint (), sidecar2 .GRPCNetworkEndpoint (), r1 .NetworkEndpointFor ( s . NetworkName ( ), 9091 ), r2 .NetworkEndpointFor ( s . NetworkName (), 9091 )},
72
79
nil ,
73
80
nil ,
74
81
nil ,
@@ -79,6 +86,22 @@ func TestRulesAPI_Fanout(t *testing.T) {
79
86
testutil .Ok (t , err )
80
87
testutil .Ok (t , s .StartAndWaitReady (q ))
81
88
89
+ queryCfg := []query.Config {
90
+ {
91
+ EndpointsConfig : http_util.EndpointsConfig {
92
+ StaticAddresses : []string {q .NetworkHTTPEndpoint ()},
93
+ Scheme : "http" ,
94
+ },
95
+ },
96
+ }
97
+
98
+ // Recreate rulers with the corresponding query config.
99
+ r1 , err = e2ethanos .NewRuler (s .SharedDir (), "rule1" , thanosRulesSubDir , nil , queryCfg )
100
+ testutil .Ok (t , err )
101
+ r2 , err = e2ethanos .NewRuler (s .SharedDir (), "rule2" , thanosRulesSubDir , nil , queryCfg )
102
+ testutil .Ok (t , err )
103
+ testutil .Ok (t , s .StartAndWaitReady (r1 , r2 ))
104
+
82
105
ctx , cancel := context .WithTimeout (context .Background (), 1 * time .Minute )
83
106
t .Cleanup (cancel )
84
107
@@ -87,7 +110,7 @@ func TestRulesAPI_Fanout(t *testing.T) {
87
110
ruleAndAssert (t , ctx , q .HTTPEndpoint (), "" , []* rulespb.RuleGroup {
88
111
{
89
112
Name : "example_abort" ,
90
- File : "/shared/rules/rules-0 .yaml" ,
113
+ File : "/shared/rules/rules.yaml" ,
91
114
Rules : []* rulespb.Rule {
92
115
rulespb .NewAlertingRule (& rulespb.Alert {
93
116
Name : "TestAlert_AbortOnPartialResponse" ,
@@ -98,8 +121,15 @@ func TestRulesAPI_Fanout(t *testing.T) {
98
121
{Name : "severity" , Value : "page" },
99
122
}},
100
123
}),
124
+ },
125
+ },
126
+ {
127
+ Name : "example_abort" ,
128
+ File : "/shared/thanos-rules/rules-0.yaml" ,
129
+ Rules : []* rulespb.Rule {
101
130
rulespb .NewAlertingRule (& rulespb.Alert {
102
131
Name : "TestAlert_AbortOnPartialResponse" ,
132
+ State : rulespb .AlertState_FIRING ,
103
133
Query : "absent(some_metric)" ,
104
134
Labels : labelpb.ZLabelSet {Labels : []labelpb.ZLabel {
105
135
{Name : "severity" , Value : "page" },
@@ -109,20 +139,12 @@ func TestRulesAPI_Fanout(t *testing.T) {
109
139
},
110
140
{
111
141
Name : "example_warn" ,
112
- File : "/shared/rules/rules-1.yaml" ,
142
+ File : "/shared/thanos- rules/rules-1.yaml" ,
113
143
Rules : []* rulespb.Rule {
114
144
rulespb .NewAlertingRule (& rulespb.Alert {
115
145
Name : "TestAlert_WarnOnPartialResponse" ,
116
146
State : rulespb .AlertState_FIRING ,
117
147
Query : "absent(some_metric)" ,
118
- Labels : labelpb.ZLabelSet {Labels : []labelpb.ZLabel {
119
- {Name : "prometheus" , Value : "ha" },
120
- {Name : "severity" , Value : "page" },
121
- }},
122
- }),
123
- rulespb .NewAlertingRule (& rulespb.Alert {
124
- Name : "TestAlert_WarnOnPartialResponse" ,
125
- Query : "absent(some_metric)" ,
126
148
Labels : labelpb.ZLabelSet {Labels : []labelpb.ZLabel {
127
149
{Name : "severity" , Value : "page" },
128
150
}},
0 commit comments