diff --git a/pkg/commands/serve/options.go b/pkg/commands/serve/options.go index a205a4de..dc0ed985 100644 --- a/pkg/commands/serve/options.go +++ b/pkg/commands/serve/options.go @@ -47,7 +47,7 @@ func (c *options) Run(_ *cobra.Command, _ []string) error { if err != nil { return err } - restConfig, err := restutils.RestConfig(c.clusterFlags.kubeConfigOverrides) + restConfig, err := restutils.Config(c.clusterFlags.kubeConfigOverrides) if err != nil { return err } diff --git a/pkg/utils/rest/rest.go b/pkg/utils/rest/rest.go index e4d28f68..547805a6 100644 --- a/pkg/utils/rest/rest.go +++ b/pkg/utils/rest/rest.go @@ -5,7 +5,7 @@ import ( "k8s.io/client-go/tools/clientcmd" ) -func RestConfig(overrides clientcmd.ConfigOverrides) (*rest.Config, error) { +func Config(overrides clientcmd.ConfigOverrides) (*rest.Config, error) { loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, &overrides) config, err := kubeConfig.ClientConfig() diff --git a/pkg/utils/rest/rest_test.go b/pkg/utils/rest/rest_test.go index ad4c0128..40659119 100644 --- a/pkg/utils/rest/rest_test.go +++ b/pkg/utils/rest/rest_test.go @@ -1,28 +1,80 @@ package rest import ( + "path" "testing" + "time" + "github.com/stretchr/testify/assert" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) func TestRestConfig(t *testing.T) { + basePath := "../../../test" tests := []struct { name string kubeConfig string overrides clientcmd.ConfigOverrides wantErr bool + want *rest.Config }{{ + name: "no cluster", + kubeConfig: ".", + wantErr: true, + }, { name: "empty", - kubeConfig: "../../../test/.kube/config", + kubeConfig: path.Join(basePath, ".kube/config"), + want: &rest.Config{ + Host: "https://127.0.0.1:53742", + QPS: 300, + Burst: 300, + }, + }, { + name: "context override", + kubeConfig: path.Join(basePath, ".kube/config"), + overrides: clientcmd.ConfigOverrides{ + CurrentContext: "foo", + }, + want: &rest.Config{ + Host: "https://127.0.0.1:1234", + QPS: 300, + Burst: 300, + }, + }, { + name: "timeout override", + kubeConfig: path.Join(basePath, ".kube/config"), + overrides: clientcmd.ConfigOverrides{ + Timeout: "30s", + }, + want: &rest.Config{ + Host: "https://127.0.0.1:53742", + QPS: 300, + Burst: 300, + Timeout: 30 * time.Second, + }, }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { t.Setenv("KUBECONFIG", tt.kubeConfig) - _, err := RestConfig(tt.overrides) - if (err != nil) != tt.wantErr { - t.Errorf("RestConfig() error = %v, wantErr %v", err, tt.wantErr) - return + got, err := Config(tt.overrides) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + if assert.NotNil(t, got) { + assert.Equal(t, tt.want.Host, got.Host) + assert.Equal(t, tt.want.APIPath, got.APIPath) + assert.Equal(t, tt.want.Username, got.Username) + assert.Equal(t, tt.want.Password, got.Password) + assert.Equal(t, tt.want.BearerToken, got.BearerToken) + assert.Equal(t, tt.want.BearerTokenFile, got.BearerTokenFile) + assert.Equal(t, tt.want.UserAgent, got.UserAgent) + assert.Equal(t, tt.want.DisableCompression, got.DisableCompression) + assert.Equal(t, tt.want.QPS, got.QPS) + assert.Equal(t, tt.want.Burst, got.Burst) + assert.Equal(t, tt.want.Timeout, got.Timeout) + } } }) } diff --git a/test/.kube/config b/test/.kube/config index 2e73bace..552a99f4 100644 --- a/test/.kube/config +++ b/test/.kube/config @@ -4,11 +4,19 @@ clusters: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EVXlNekV4TkRRd01sb1hEVE16TURVeU1ERXhORFF3TWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTmpRCmRva0ovTVUzLzNRSjlpWXR0cENCK3p1OENkSWxncHd1aVF1b0RHSEg0S0hXZW0rNVJYK04rb1c2dW5EWWFaaDIKYWZJR2JNSDM0VjV4U1kydWpkSFpidzJYenlsTnVwSEJXK3NOR2hvSDNJcjBnWVBPVW1yNTU2WXJhZ0hPT1kzTwpBbk00WlN2WWRDNFhJTmxMcmtrNmNMWjhLbzB6dnNSdS93T3FHLzNHNXd3Sjd0T0FneTFJakUwN2VoMXNEbmhICklMcVJGVDcrdEVsMytmWHBscUozdU50Qmd6K2dOOUVReXJjNzFCMENUWk5NVHhzZHhGMkJLS3lsckx1REpFTXUKclZSbG5iWHpMdmVyOUMvL1V1QTJ5ZC9PMXBvcEJ0R3dCQ0NkTkVHRTdsNDMxSDlnZFZWbW0xaWNVTzhIVTRFRApPUGg3RnIvcitlQzBReFAzUlNjQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDR3ZaSVo2amFMdXpEOWNZcUVNZFNlR1VHaitNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQnBaVEtnRGlqZHRiU0p4MmgzcQpxUm9mc1N0Um9LL0U4YzJucWlPMVl2YUI4QlJzQUNYeVZYVU1xVVJFZkw5NmxpUm90dVVYSWlOUkx0b2JZNmZNCko2NHpwclRWaFp4b3FiZ0s3elRETGd0STNEWUJxWFNaaFRYTWczRXJ0Z1Qxajl2dzdLRmRqT1dtaWpHeWFrRDQKSk96V2ZLdFMxb2RIVk5NZjlzTFUyYkdLTkdFMjlmMWZYdEF3ZldUWDB3eHJEc2pwUHpEY3ZVdGVaOG9TTzV2cgptNWl4RldlL0JsVGhFV2t3czBIbFRsZmtyY3d0N0I1c0pFUmhkaHZaa0hFdWJZYVAxdDhUUEcySW1mRDJubWM4CkZFbnVQMnRneFMrcmprMXJublBic01KZ2VkSDEwS0l3VHFCZDZIVWNJRTVnSlZSTmthLzlSWHVNR01WbXBiZ2cKc0FRPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://127.0.0.1:53742 name: kind-kind +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EVXlNekV4TkRRd01sb1hEVE16TURVeU1ERXhORFF3TWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTmpRCmRva0ovTVUzLzNRSjlpWXR0cENCK3p1OENkSWxncHd1aVF1b0RHSEg0S0hXZW0rNVJYK04rb1c2dW5EWWFaaDIKYWZJR2JNSDM0VjV4U1kydWpkSFpidzJYenlsTnVwSEJXK3NOR2hvSDNJcjBnWVBPVW1yNTU2WXJhZ0hPT1kzTwpBbk00WlN2WWRDNFhJTmxMcmtrNmNMWjhLbzB6dnNSdS93T3FHLzNHNXd3Sjd0T0FneTFJakUwN2VoMXNEbmhICklMcVJGVDcrdEVsMytmWHBscUozdU50Qmd6K2dOOUVReXJjNzFCMENUWk5NVHhzZHhGMkJLS3lsckx1REpFTXUKclZSbG5iWHpMdmVyOUMvL1V1QTJ5ZC9PMXBvcEJ0R3dCQ0NkTkVHRTdsNDMxSDlnZFZWbW0xaWNVTzhIVTRFRApPUGg3RnIvcitlQzBReFAzUlNjQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDR3ZaSVo2amFMdXpEOWNZcUVNZFNlR1VHaitNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQnBaVEtnRGlqZHRiU0p4MmgzcQpxUm9mc1N0Um9LL0U4YzJucWlPMVl2YUI4QlJzQUNYeVZYVU1xVVJFZkw5NmxpUm90dVVYSWlOUkx0b2JZNmZNCko2NHpwclRWaFp4b3FiZ0s3elRETGd0STNEWUJxWFNaaFRYTWczRXJ0Z1Qxajl2dzdLRmRqT1dtaWpHeWFrRDQKSk96V2ZLdFMxb2RIVk5NZjlzTFUyYkdLTkdFMjlmMWZYdEF3ZldUWDB3eHJEc2pwUHpEY3ZVdGVaOG9TTzV2cgptNWl4RldlL0JsVGhFV2t3czBIbFRsZmtyY3d0N0I1c0pFUmhkaHZaa0hFdWJZYVAxdDhUUEcySW1mRDJubWM4CkZFbnVQMnRneFMrcmprMXJublBic01KZ2VkSDEwS0l3VHFCZDZIVWNJRTVnSlZSTmthLzlSWHVNR01WbXBiZ2cKc0FRPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://127.0.0.1:1234 + name: foo contexts: - context: cluster: kind-kind user: kind-kind name: kind-kind +- context: + cluster: foo + user: kind-kind + name: foo current-context: kind-kind kind: Config preferences: {}