podlabelmetrics_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package metrics
  2. import (
  3. "testing"
  4. "github.com/opencost/opencost/pkg/clustercache"
  5. appsv1 "k8s.io/api/apps/v1"
  6. v1 "k8s.io/api/core/v1"
  7. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  8. )
  9. func TestWhitelist(t *testing.T) {
  10. sampleServices := []*v1.Service{&v1.Service{
  11. Spec: v1.ServiceSpec{
  12. Selector: map[string]string{"servicewhitelistlabel": "foo"},
  13. },
  14. }}
  15. replicaSetLabelSelector := metav1.LabelSelector{
  16. MatchLabels: map[string]string{"replicasetwhitelistlabel1": "bar"},
  17. }
  18. sampleReplicaSets := []*appsv1.ReplicaSet{{
  19. Spec: appsv1.ReplicaSetSpec{
  20. Selector: &replicaSetLabelSelector,
  21. },
  22. }}
  23. sampleStatefulSets := []*appsv1.StatefulSet{}
  24. kc := NewFakeCache(sampleReplicaSets, sampleStatefulSets, sampleServices)
  25. wl := map[string]bool{
  26. "whitelistedlabel": true,
  27. }
  28. mc := MetricsConfig{
  29. DisabledMetrics: []string{},
  30. UseLabelsWhitelist: true,
  31. LabelsWhitelist: wl,
  32. }
  33. kplc := KubePodLabelsCollector{
  34. KubeClusterCache: kc,
  35. metricsConfig: mc,
  36. }
  37. kplc.UpdateWhitelist()
  38. if !kplc.labelsWhitelist["servicewhitelistlabel"] {
  39. t.Errorf("Missing expected label %s", "servicewhitelistlabel")
  40. }
  41. if !kplc.labelsWhitelist["replicasetwhitelistlabel1"] {
  42. t.Errorf("Missing expected label %s", "servicewhitelistlabel1")
  43. }
  44. }
  45. type FakeCache struct {
  46. clustercache.ClusterCache
  47. replicasets []*appsv1.ReplicaSet
  48. statefulsets []*appsv1.StatefulSet
  49. services []*v1.Service
  50. }
  51. func (f FakeCache) GetAllReplicaSets() []*appsv1.ReplicaSet {
  52. return f.replicasets
  53. }
  54. func (f FakeCache) GetAllStatefulSets() []*appsv1.StatefulSet {
  55. return f.statefulsets
  56. }
  57. func (f FakeCache) GetAllServices() []*v1.Service {
  58. return f.services
  59. }
  60. func NewFakeCache(replicasets []*appsv1.ReplicaSet, statefulsets []*appsv1.StatefulSet, services []*v1.Service) FakeCache {
  61. return FakeCache{
  62. replicasets: replicasets,
  63. statefulsets: statefulsets,
  64. services: services,
  65. }
  66. }