github.com/google/cloudprober@v0.11.3/rds/server/filter/utils_test.go (about) 1 package filter 2 3 import ( 4 "reflect" 5 "sort" 6 "testing" 7 8 "github.com/golang/protobuf/proto" 9 pb "github.com/google/cloudprober/rds/proto" 10 ) 11 12 func TestParseFilters(t *testing.T) { 13 tests := []struct { 14 desc string 15 reqFilters map[string]string 16 regexFilterKeys []string 17 freshnessFilterKey string 18 wantReFilters []string 19 wantLabelsFilter bool 20 wantFreshnessFilter bool 21 wantErr bool 22 }{ 23 { 24 desc: "Error invalid filter key", 25 reqFilters: map[string]string{"random_key": "random_value"}, 26 regexFilterKeys: []string{"name"}, 27 wantErr: true, 28 }, 29 { 30 desc: "Pass with 2 regex filters, labels filter and a freshness filter", 31 reqFilters: map[string]string{ 32 "name": "x.*", 33 "namespace": "y", 34 "labels.app": "cloudprober", 35 "updated_within": "5m", 36 }, 37 regexFilterKeys: []string{"name", "namespace"}, 38 freshnessFilterKey: "updated_within", 39 wantReFilters: []string{"name", "namespace"}, 40 wantLabelsFilter: true, 41 wantFreshnessFilter: true, 42 }, 43 } 44 45 for _, test := range tests { 46 t.Run(test.desc, func(t *testing.T) { 47 var reqFiltersPB []*pb.Filter 48 for k, v := range test.reqFilters { 49 reqFiltersPB = append(reqFiltersPB, &pb.Filter{Key: proto.String(k), Value: proto.String(v)}) 50 } 51 52 allFilters, err := ParseFilters(reqFiltersPB, test.regexFilterKeys, test.freshnessFilterKey) 53 54 if err != nil { 55 if !test.wantErr { 56 t.Errorf("Got unexpected error while parsing filters: %v", err) 57 } 58 return 59 } 60 61 var reFilterKeys []string 62 for k := range allFilters.RegexFilters { 63 reFilterKeys = append(reFilterKeys, k) 64 } 65 66 sort.Strings(reFilterKeys) 67 sort.Strings(test.wantReFilters) 68 if !reflect.DeepEqual(reFilterKeys, test.wantReFilters) { 69 t.Errorf("regex filters, got=%v, want=%v", reFilterKeys, test.wantReFilters) 70 } 71 72 if (allFilters.LabelsFilter != nil) != test.wantLabelsFilter { 73 t.Errorf("labels filters, got=%v, wantLabelsFilter=%v", allFilters.LabelsFilter, test.wantLabelsFilter) 74 } 75 76 if (allFilters.FreshnessFilter != nil) != test.wantFreshnessFilter { 77 t.Errorf("freshness filter filters, got=%v, wantFreshnessFilter=%v", allFilters.FreshnessFilter, test.wantFreshnessFilter) 78 } 79 }) 80 } 81 82 }