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  }