github.com/cilium/cilium@v1.16.2/pkg/hubble/filters/labelparser_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Hubble 3 4 package filters 5 6 import ( 7 "reflect" 8 "testing" 9 ) 10 11 func Test_translateSelector(t *testing.T) { 12 tests := []struct { 13 name string 14 in string 15 want string 16 wantErr bool 17 }{ 18 { 19 name: "simple", 20 in: "foo", 21 want: "any.foo", 22 }, 23 { 24 name: "multiple", 25 in: "foo, bar", 26 want: "any.foo, any.bar", 27 }, 28 { 29 name: "with prefix", 30 in: "k8s:foo, bar", 31 want: "k8s.foo, any.bar", 32 }, 33 { 34 name: "with negation", 35 in: "k8s:foo, !bar", 36 want: "k8s.foo, !any.bar", 37 }, 38 { 39 name: "with negation", 40 in: "k8s:foo, !bar", 41 want: "k8s.foo, !any.bar", 42 }, 43 { 44 name: "match value", 45 in: "foo, bar=buzz", 46 want: "any.foo, any.bar=buzz", 47 }, 48 { 49 name: "don't match value", 50 in: "foo, bar!= buzz", 51 want: "any.foo, any.bar!= buzz", 52 }, 53 { 54 name: "in values", 55 in: "foo in (a,b,c)", 56 want: "any.foo in (a,b,c)", 57 }, 58 { 59 name: "notin values", 60 in: "foo notin (a,b,c)", 61 want: "any.foo notin (a,b,c)", 62 }, 63 { 64 name: "with dots", 65 in: "foo.example.com, bar.example.com=buzz", 66 want: "any.foo.example.com, any.bar.example.com=buzz", 67 }, 68 { 69 name: "dots and colons in value", 70 in: "foo.example.com=some:other.thing, bar.example.com=buzz:any:thing.example.org", 71 want: "any.foo.example.com=some:other.thing, any.bar.example.com=buzz:any:thing.example.org", 72 }, 73 { 74 name: "edgecase missing values", 75 in: "x in (foo,,baz),y,z notin ()", 76 want: "any.x in (foo,,baz),any.y,any.z notin ()", 77 }, 78 { 79 name: "multi value edgecase", 80 in: "foo.example.com in (foo, any.bar, k8s:buzz, some.other,, end), k8s:bar in (a,b,c, ,d, e,),!any:test", 81 want: "any.foo.example.com in (foo, any.bar, k8s:buzz, some.other,, end), k8s.bar in (a,b,c, ,d, e,),!any.test", 82 }, 83 { 84 name: "complex edgecase", 85 in: "a=b, foo:bar, !k8s:b, foo in (a, , c, d), !any:buzz, c!= d.e, foo:bar.example.com=any.value, !any.other, k8s.example.com in (foo.bar, bar.buzz, a)", 86 want: "any.a=b, foo.bar, !k8s.b, any.foo in (a, , c, d), !any.buzz, any.c!= d.e, foo.bar.example.com=any.value, !any.any.other, any.k8s.example.com in (foo.bar, bar.buzz, a)", 87 }, 88 } 89 for _, tt := range tests { 90 t.Run(tt.name, func(t *testing.T) { 91 got, err := translateSelector(tt.in) 92 if (err != nil) != tt.wantErr { 93 t.Errorf("parseSelector() error = %v, wantErr %v", err, tt.wantErr) 94 return 95 } 96 if !tt.wantErr && !reflect.DeepEqual(got, tt.want) { 97 t.Errorf("parseSelector() = %q, want %q", got, tt.want) 98 } 99 }) 100 } 101 }