Skip to content

Commit 77a99a5

Browse files
authored
Merge pull request #2502 from bartlettc22/cr-duplication-fix
fix: de-duplication of custom resource metrics
2 parents 0013d73 + bd6beed commit 77a99a5

File tree

2 files changed

+66
-6
lines changed

2 files changed

+66
-6
lines changed

internal/store/builder.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"context"
2121
"fmt"
2222
"reflect"
23-
"sort"
23+
"slices"
2424
"strconv"
2525
"strings"
2626
"time"
@@ -113,12 +113,10 @@ func (b *Builder) WithEnabledResources(r []string) error {
113113
}
114114
}
115115

116-
var sortedResources []string
117-
sortedResources = append(sortedResources, r...)
116+
b.enabledResources = append(b.enabledResources, r...)
117+
slices.Sort(b.enabledResources)
118+
b.enabledResources = slices.Compact(b.enabledResources)
118119

119-
sort.Strings(sortedResources)
120-
121-
b.enabledResources = append(b.enabledResources, sortedResources...)
122120
return nil
123121
}
124122

internal/store/builder_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package store
1818

1919
import (
2020
"reflect"
21+
"slices"
2122
"testing"
2223

2324
"k8s.io/kube-state-metrics/v2/pkg/options"
@@ -196,3 +197,64 @@ func TestWithAllowAnnotations(t *testing.T) {
196197
}
197198
}
198199
}
200+
201+
func TestWithEnabledResources(t *testing.T) {
202+
203+
tests := []struct {
204+
Desc string
205+
EnabledResources []string
206+
Wanted []string
207+
err expectedError
208+
}{
209+
{
210+
Desc: "sorts enabled resources",
211+
EnabledResources: []string{"pods", "cronjobs", "deployments"},
212+
Wanted: []string{
213+
"cronjobs",
214+
"deployments",
215+
"pods",
216+
},
217+
},
218+
{
219+
Desc: "de-duplicates enabled resources",
220+
EnabledResources: []string{"pods", "cronjobs", "deployments", "pods"},
221+
Wanted: []string{
222+
"cronjobs",
223+
"deployments",
224+
"pods",
225+
},
226+
},
227+
{
228+
Desc: "error if not exist",
229+
EnabledResources: []string{"pods", "cronjobs", "deployments", "foo"},
230+
Wanted: []string{},
231+
err: expectedError{
232+
expectedResourceError: true,
233+
},
234+
},
235+
}
236+
for _, test := range tests {
237+
b := NewBuilder()
238+
239+
// Set the enabled resources.
240+
err := b.WithEnabledResources(test.EnabledResources)
241+
if test.err.expectedResourceError {
242+
if err == nil {
243+
t.Log("Did not expect error while setting resources (--resources).")
244+
t.Fatalf("Test error for Desc: %s. Got Error: %v", test.Desc, err)
245+
} else {
246+
return
247+
}
248+
}
249+
if err != nil {
250+
t.Log("...")
251+
t.Fatal("...", test.Desc, err)
252+
}
253+
254+
// Evaluate.
255+
if !slices.Equal(b.enabledResources, test.Wanted) {
256+
t.Log("Expected enabled resources to be equal.")
257+
t.Errorf("Test error for Desc: %s\n Want: \n%+v\n Got: \n%#+v", test.Desc, test.Wanted, b.enabledResources)
258+
}
259+
}
260+
}

0 commit comments

Comments
 (0)