From a72266ff9d65dd1c455a73a9475933717a7857f7 Mon Sep 17 00:00:00 2001 From: Mangirdas Judeikis Date: Tue, 2 Jul 2024 16:56:52 +0300 Subject: [PATCH] Add test for WithTokenGetter --- pkg/kubeapiserver/options/authentication.go | 2 +- .../options/authentication_test.go | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/pkg/kubeapiserver/options/authentication.go b/pkg/kubeapiserver/options/authentication.go index a0e64fa3e45..c2d66d61e8e 100644 --- a/pkg/kubeapiserver/options/authentication.go +++ b/pkg/kubeapiserver/options/authentication.go @@ -691,7 +691,7 @@ func (o *BuiltInAuthenticationOptions) ApplyTo( } // If the optional token getter function is set, use it. Otherwise, use the default token getter. - if o.ServiceAccounts.OptionalTokenGetter != nil { + if o.ServiceAccounts != nil && o.ServiceAccounts.OptionalTokenGetter != nil { authenticatorConfig.ServiceAccountTokenGetter = o.ServiceAccounts.OptionalTokenGetter(versionedInformer) } else { authenticatorConfig.ServiceAccountTokenGetter = serviceaccountcontroller.NewGetterFromClient( diff --git a/pkg/kubeapiserver/options/authentication_test.go b/pkg/kubeapiserver/options/authentication_test.go index b1c599d12ec..be372006b5e 100644 --- a/pkg/kubeapiserver/options/authentication_test.go +++ b/pkg/kubeapiserver/options/authentication_test.go @@ -17,6 +17,7 @@ limitations under the License. package options import ( + "context" "os" "reflect" "strings" @@ -34,12 +35,17 @@ import ( "k8s.io/apiserver/pkg/authentication/authenticatorfactory" "k8s.io/apiserver/pkg/authentication/request/headerrequest" "k8s.io/apiserver/pkg/features" + genericapiserver "k8s.io/apiserver/pkg/server" apiserveroptions "k8s.io/apiserver/pkg/server/options" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes/fake" "k8s.io/component-base/featuregate" featuregatetesting "k8s.io/component-base/featuregate/testing" + openapicommon "k8s.io/kube-openapi/pkg/common" kubefeatures "k8s.io/kubernetes/pkg/features" kubeauthenticator "k8s.io/kubernetes/pkg/kubeapiserver/authenticator" + "k8s.io/kubernetes/pkg/serviceaccount" "k8s.io/utils/pointer" ) @@ -478,6 +484,39 @@ func TestBuiltInAuthenticationOptionsAddFlags(t *testing.T) { } } +func TestWithTokenGetterFunction(t *testing.T) { + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, kubefeatures.ServiceAccountTokenNodeBindingValidation, false) + fakeClientset := fake.NewSimpleClientset() + versionedInformer := informers.NewSharedInformerFactory(fakeClientset, 0) + { + var called bool + f := func(factory informers.SharedInformerFactory) serviceaccount.ServiceAccountTokenGetter { + called = true + return nil + } + opts := NewBuiltInAuthenticationOptions().WithTokenGetterFunction(f) + err := opts.ApplyTo(context.Background(), &genericapiserver.AuthenticationInfo{}, nil, nil, &openapicommon.Config{}, nil, fakeClientset, versionedInformer, "") + if err != nil { + t.Fatal(err) + } + + if opts.ServiceAccounts.OptionalTokenGetter == nil { + t.Fatal("expected token getter function to be set") + } + + if !called { + t.Fatal("expected token getter function to be called") + } + } + { + opts := NewBuiltInAuthenticationOptions().WithServiceAccounts() + err := opts.ApplyTo(context.Background(), &genericapiserver.AuthenticationInfo{}, nil, nil, &openapicommon.Config{}, nil, fakeClientset, versionedInformer, "") + if err != nil { + t.Fatal(err) + } + } +} + func TestToAuthenticationConfig_Anonymous(t *testing.T) { featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StructuredAuthenticationConfiguration, true) testCases := []struct {