Skip to content

Commit 8c543ae

Browse files
committed
Add more test cases
Signed-off-by: Xiaochao Dong (@damnever) <[email protected]>
1 parent e4973a1 commit 8c543ae

File tree

11 files changed

+229
-37
lines changed

11 files changed

+229
-37
lines changed

docs/configuration/config-file-reference.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3507,6 +3507,9 @@ query_rejection:
35073507
# CLI flag: -ruler.query-offset
35083508
[ruler_query_offset: <duration> | default = 0s]
35093509

3510+
# external labels for alerting rules
3511+
[ruler_external_labels: <map of string (labelName) to string (labelValue)> | default = []]
3512+
35103513
# The default tenant's shard size when the shuffle-sharding strategy is used.
35113514
# Must be set when the store-gateway sharding is enabled with the
35123515
# shuffle-sharding strategy. When this setting is specified in the per-tenant
@@ -3608,9 +3611,6 @@ query_rejection:
36083611

36093612
# list of rule groups to disable
36103613
[disabled_rule_groups: <list of DisabledRuleGroup> | default = []]
3611-
3612-
# external labels for alerting rules
3613-
[external_labels: <map of string (labelName) to string (labelValue)> | default = []]
36143614
```
36153615
36163616
### `memberlist_config`

pkg/ruler/api_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ func TestRuler_LimitsPerGroup(t *testing.T) {
454454
r := newTestRuler(t, cfg, store, nil)
455455
defer services.StopAndAwaitTerminated(context.Background(), r) //nolint:errcheck
456456

457-
r.limits = ruleLimits{maxRuleGroups: 1, maxRulesPerRuleGroup: 1}
457+
r.limits = &ruleLimits{maxRuleGroups: 1, maxRulesPerRuleGroup: 1}
458458

459459
a := NewAPI(r, r.store, log.NewNopLogger())
460460

@@ -508,7 +508,7 @@ func TestRuler_RulerGroupLimits(t *testing.T) {
508508
r := newTestRuler(t, cfg, store, nil)
509509
defer services.StopAndAwaitTerminated(context.Background(), r) //nolint:errcheck
510510

511-
r.limits = ruleLimits{maxRuleGroups: 1, maxRulesPerRuleGroup: 1}
511+
r.limits = &ruleLimits{maxRuleGroups: 1, maxRulesPerRuleGroup: 1}
512512

513513
a := NewAPI(r, r.store, log.NewNopLogger())
514514

pkg/ruler/compat.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ type RulesLimits interface {
153153
RulerMaxRulesPerRuleGroup(userID string) int
154154
RulerQueryOffset(userID string) time.Duration
155155
DisabledRuleGroups(userID string) validation.DisabledRuleGroups
156-
ExternalLabels(userID string) labels.Labels
156+
RulerExternalLabels(userID string) labels.Labels
157157
}
158158

159159
// EngineQueryFunc returns a new engine query function validating max queryLength.

pkg/ruler/compat_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ func TestPusherErrors(t *testing.T) {
287287
writes := prometheus.NewCounter(prometheus.CounterOpts{})
288288
failures := prometheus.NewCounter(prometheus.CounterOpts{})
289289

290-
pa := NewPusherAppendable(pusher, "user-1", ruleLimits{}, writes, failures)
290+
pa := NewPusherAppendable(pusher, "user-1", &ruleLimits{}, writes, failures)
291291

292292
lbls, err := parser.ParseMetric("foo_bar")
293293
require.NoError(t, err)

pkg/ruler/external_labels.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func (e *userExternalLabels) get(userID string) (labels.Labels, bool) {
3535
}
3636

3737
func (e *userExternalLabels) update(userID string) (labels.Labels, bool) {
38-
lset := e.limits.ExternalLabels(userID)
38+
lset := e.limits.RulerExternalLabels(userID)
3939

4040
e.mtx.Lock()
4141
defer e.mtx.Unlock()

pkg/ruler/external_labels_test.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package ruler
2+
3+
import (
4+
"testing"
5+
6+
"github.com/prometheus/prometheus/model/labels"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestUserExternalLabels(t *testing.T) {
11+
limits := ruleLimits{}
12+
e := newUserExternalLabels(labels.FromStrings("from", "cortex"), &limits)
13+
14+
tests := []struct {
15+
name string
16+
removeBeforeTest bool
17+
exists bool
18+
userExternalLabels labels.Labels
19+
expectedExternalLabels labels.Labels
20+
}{
21+
{
22+
name: "global labels only",
23+
removeBeforeTest: false,
24+
exists: false,
25+
userExternalLabels: nil,
26+
expectedExternalLabels: labels.FromStrings("from", "cortex"),
27+
},
28+
{
29+
name: "local labels without overriding",
30+
removeBeforeTest: true,
31+
exists: false,
32+
userExternalLabels: labels.FromStrings("tag", "local"),
33+
expectedExternalLabels: labels.FromStrings("from", "cortex", "tag", "local"),
34+
},
35+
{
36+
name: "local labels that override globals",
37+
removeBeforeTest: false,
38+
exists: true,
39+
userExternalLabels: labels.FromStrings("from", "cloud", "tag", "local"),
40+
expectedExternalLabels: labels.FromStrings("from", "cloud", "tag", "local"),
41+
},
42+
}
43+
44+
const userID = "test-user"
45+
for _, data := range tests {
46+
data := data
47+
t.Run(data.name, func(t *testing.T) {
48+
if data.removeBeforeTest {
49+
e.remove(userID)
50+
}
51+
_, exists := e.get(userID)
52+
require.Equal(t, data.exists, exists)
53+
54+
limits.externalLabels = data.userExternalLabels
55+
lset, ok := e.update(userID)
56+
require.True(t, ok)
57+
require.Equal(t, data.expectedExternalLabels, lset)
58+
lset1, ok := e.update(userID)
59+
require.False(t, ok) // Not updated.
60+
require.Equal(t, data.expectedExternalLabels, lset1)
61+
})
62+
}
63+
64+
_, ok := e.get(userID)
65+
require.True(t, ok)
66+
e.cleanup()
67+
_, ok = e.get(userID)
68+
require.False(t, ok)
69+
}

pkg/ruler/manager_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestSyncRuleGroups(t *testing.T) {
2929
}
3030

3131
ruleManagerFactory := RuleManagerFactory(nil, waitDurations)
32-
limits := ruleLimits{externalLabels: labels.FromStrings("from", "cortex")}
32+
limits := &ruleLimits{externalLabels: labels.FromStrings("from", "cortex")}
3333

3434
m, err := NewDefaultMultiTenantManager(Config{RulePath: dir}, limits, ruleManagerFactory, nil, nil, log.NewNopLogger())
3535
require.NoError(t, err)
@@ -64,7 +64,7 @@ func TestSyncRuleGroups(t *testing.T) {
6464
require.True(t, ok)
6565
lset, ok := m.userExternalLabels.get(user)
6666
require.True(t, ok)
67-
require.Equal(t, limits.externalLabels, lset)
67+
require.Equal(t, limits.RulerExternalLabels(user), lset)
6868
}
6969

7070
// Passing empty map / nil stops all managers.
@@ -160,7 +160,7 @@ func TestSlowRuleGroupSyncDoesNotSlowdownListRules(t *testing.T) {
160160
}
161161

162162
ruleManagerFactory := RuleManagerFactory(groupsToReturn, waitDurations)
163-
m, err := NewDefaultMultiTenantManager(Config{RulePath: dir}, ruleLimits{}, ruleManagerFactory, nil, prometheus.NewRegistry(), log.NewNopLogger())
163+
m, err := NewDefaultMultiTenantManager(Config{RulePath: dir}, &ruleLimits{}, ruleManagerFactory, nil, prometheus.NewRegistry(), log.NewNopLogger())
164164
require.NoError(t, err)
165165

166166
m.SyncRuleGroups(context.Background(), userRules)
@@ -223,7 +223,7 @@ func TestSyncRuleGroupsCleanUpPerUserMetrics(t *testing.T) {
223223

224224
ruleManagerFactory := RuleManagerFactory(nil, waitDurations)
225225

226-
m, err := NewDefaultMultiTenantManager(Config{RulePath: dir}, ruleLimits{}, ruleManagerFactory, evalMetrics, reg, log.NewNopLogger())
226+
m, err := NewDefaultMultiTenantManager(Config{RulePath: dir}, &ruleLimits{}, ruleManagerFactory, evalMetrics, reg, log.NewNopLogger())
227227
require.NoError(t, err)
228228

229229
const user = "testUser"
@@ -271,7 +271,7 @@ func TestBackupRules(t *testing.T) {
271271
ruleManagerFactory := RuleManagerFactory(nil, waitDurations)
272272
config := Config{RulePath: dir}
273273
config.Ring.ReplicationFactor = 3
274-
m, err := NewDefaultMultiTenantManager(config, ruleLimits{}, ruleManagerFactory, evalMetrics, reg, log.NewNopLogger())
274+
m, err := NewDefaultMultiTenantManager(config, &ruleLimits{}, ruleManagerFactory, evalMetrics, reg, log.NewNopLogger())
275275
require.NoError(t, err)
276276

277277
const user1 = "testUser"

pkg/ruler/ruler_ring_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func TestGetReplicationSetForListRule(t *testing.T) {
255255
}
256256

257257
r, _ := buildRuler(t, cfg, nil, store, nil)
258-
r.limits = ruleLimits{}
258+
r.limits = &ruleLimits{}
259259

260260
rulerRing := r.ring
261261
// We start ruler's ring, but nothing else (not even lifecycler).

0 commit comments

Comments
 (0)