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  }