github.com/cilium/cilium@v1.16.2/pkg/node/store/store_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package store 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 "k8s.io/utils/ptr" 11 12 "github.com/cilium/cilium/pkg/node/types" 13 ) 14 15 func TestValidatingNode(t *testing.T) { 16 tests := []struct { 17 name string 18 key string 19 node types.Node 20 validator nodeValidator 21 errstr string 22 }{ 23 { 24 name: "valid cluster name", 25 node: types.Node{Cluster: "foo", Name: "qux"}, 26 validator: ClusterNameValidator("foo"), 27 }, 28 { 29 name: "invalid cluster name", 30 node: types.Node{Cluster: "foo", Name: "qux"}, 31 validator: ClusterNameValidator("fred"), 32 errstr: "unexpected cluster name: got foo, expected fred", 33 }, 34 { 35 name: "valid name name", 36 key: "qux", 37 node: types.Node{Cluster: "foo", Name: "qux"}, 38 validator: NameValidator(), 39 }, 40 { 41 name: "invalid namespaced name", 42 key: "fred", 43 node: types.Node{Cluster: "foo", Name: "qux"}, 44 validator: NameValidator(), 45 errstr: "name does not match key: got qux, expected fred", 46 }, 47 { 48 name: "valid cluster ID", 49 node: types.Node{Cluster: "foo", Name: "qux", ClusterID: 10}, 50 validator: ClusterIDValidator(ptr.To[uint32](10)), 51 }, 52 { 53 name: "invalid cluster ID", 54 node: types.Node{Cluster: "foo", Name: "qux", ClusterID: 10}, 55 validator: ClusterIDValidator(ptr.To[uint32](15)), 56 errstr: "unexpected cluster ID: got 10, expected 15", 57 }, 58 } 59 60 for _, tt := range tests { 61 t.Run(tt.name, func(t *testing.T) { 62 data, err := tt.node.Marshal() 63 require.NoError(t, err) 64 65 got := ValidatingKeyCreator(tt.validator)() 66 err = got.Unmarshal(tt.key, data) 67 if tt.errstr != "" { 68 require.EqualError(t, err, tt.errstr) 69 return 70 } 71 72 require.NoError(t, err) 73 require.EqualExportedValues(t, tt.node, got.(*ValidatingNode).Node) 74 }) 75 } 76 }