From b94c6daa0b7602e2d30e35cf2b94f9d1e8fde56e Mon Sep 17 00:00:00 2001 From: HirazawaUi <695097494plus@gmail.com> Date: Wed, 3 May 2023 01:36:46 +0800 Subject: [PATCH] fix fd leaks and failed file removing for pkg kubectl and pod-security-admission --- .../k8s.io/kubectl/pkg/cmd/config/config_test.go | 15 ++++++++------- .../pkg/cmd/config/current_context_test.go | 3 ++- .../kubectl/pkg/cmd/config/delete_cluster_test.go | 3 ++- .../kubectl/pkg/cmd/config/delete_context_test.go | 3 ++- .../kubectl/pkg/cmd/config/get_clusters_test.go | 4 +++- .../kubectl/pkg/cmd/config/get_contexts_test.go | 4 +++- .../kubectl/pkg/cmd/config/rename_context_test.go | 4 +++- .../kubectl/pkg/cmd/config/set_cluster_test.go | 4 +++- .../kubectl/pkg/cmd/config/set_context_test.go | 4 +++- .../pkg/cmd/config/set_credentials_test.go | 3 ++- .../src/k8s.io/kubectl/pkg/cmd/config/set_test.go | 4 +++- .../k8s.io/kubectl/pkg/cmd/config/unset_test.go | 4 +++- .../kubectl/pkg/cmd/config/use_context_test.go | 4 +++- .../k8s.io/kubectl/pkg/cmd/config/view_test.go | 4 +++- .../src/k8s.io/kubectl/pkg/cmd/testing/fake.go | 1 + .../admission/api/load/load_test.go | 5 +++-- 16 files changed, 47 insertions(+), 22 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go index 9f5cc01c774..611b85e4dad 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go @@ -29,6 +29,7 @@ import ( "k8s.io/cli-runtime/pkg/genericiooptions" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + utiltesting "k8s.io/client-go/util/testing" cmdutil "k8s.io/kubectl/pkg/cmd/util" ) @@ -52,7 +53,7 @@ func Example_view() { expectedConfig: expectedConfig, } - output := test.run(nil) + output := test.run(&testing.T{}) fmt.Printf("%v", output) // Output: // apiVersion: v1 @@ -261,7 +262,7 @@ func TestAdditionalAuth(t *testing.T) { func TestEmbedClientCert(t *testing.T) { fakeCertFile, _ := os.CreateTemp(os.TempDir(), "") - defer os.Remove(fakeCertFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeCertFile) fakeData := []byte("fake-data") os.WriteFile(fakeCertFile.Name(), fakeData, 0600) expectedConfig := newRedFederalCowHammerConfig() @@ -280,7 +281,7 @@ func TestEmbedClientCert(t *testing.T) { func TestEmbedClientKey(t *testing.T) { fakeKeyFile, _ := os.CreateTemp(os.TempDir(), "") - defer os.Remove(fakeKeyFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKeyFile) fakeData := []byte("fake-data") os.WriteFile(fakeKeyFile.Name(), fakeData, 0600) expectedConfig := newRedFederalCowHammerConfig() @@ -326,7 +327,7 @@ func TestEmbedNoKeyOrCertDisallowed(t *testing.T) { func TestEmptyTokenAndCertAllowed(t *testing.T) { fakeCertFile, _ := os.CreateTemp(os.TempDir(), "cert-file") - defer os.Remove(fakeCertFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeCertFile) expectedConfig := newRedFederalCowHammerConfig() authInfo := clientcmdapi.NewAuthInfo() authInfo.ClientCertificate = path.Base(fakeCertFile.Name()) @@ -569,7 +570,7 @@ func TestUnsetBytes(t *testing.T) { func TestCAClearsInsecure(t *testing.T) { fakeCAFile, _ := os.CreateTemp(os.TempDir(), "ca-file") - defer os.Remove(fakeCAFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeCAFile) clusterInfoWithInsecure := clientcmdapi.NewCluster() clusterInfoWithInsecure.InsecureSkipTLSVerify = true @@ -638,7 +639,7 @@ func TestInsecureClearsCA(t *testing.T) { func TestCADataClearsCA(t *testing.T) { fakeCAFile, _ := os.CreateTemp(os.TempDir(), "") - defer os.Remove(fakeCAFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeCAFile) fakeData := []byte("cadata") os.WriteFile(fakeCAFile.Name(), fakeData, 0600) @@ -852,7 +853,7 @@ func TestToBool(t *testing.T) { func testConfigCommand(args []string, startingConfig clientcmdapi.Config, t *testing.T) (string, clientcmdapi.Config) { fakeKubeFile, _ := os.CreateTemp(os.TempDir(), "") - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err := clientcmd.WriteToFile(startingConfig, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/current_context_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/current_context_test.go index e545d36495e..617a3668a80 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/current_context_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/current_context_test.go @@ -18,6 +18,7 @@ package config import ( "bytes" + utiltesting "k8s.io/client-go/util/testing" "os" "strings" "testing" @@ -60,7 +61,7 @@ func (test currentContextTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.startingConfig, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster_test.go index 69d4a21d1ff..d98bd3a22f2 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster_test.go @@ -19,6 +19,7 @@ package config import ( "bytes" "fmt" + utiltesting "k8s.io/client-go/util/testing" "os" "reflect" "testing" @@ -56,7 +57,7 @@ func (test deleteClusterTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context_test.go index 26fd1a48f13..9492cf72cc3 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context_test.go @@ -19,6 +19,7 @@ package config import ( "bytes" "fmt" + utiltesting "k8s.io/client-go/util/testing" "os" "reflect" "testing" @@ -56,7 +57,7 @@ func (test deleteContextTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/get_clusters_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/get_clusters_test.go index 52ff8e67d1f..7aeb94ce5d0 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/get_clusters_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/get_clusters_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -60,7 +62,7 @@ func (test getClustersTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/get_contexts_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/get_contexts_test.go index 5bff7a5bd1a..96b31033680 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/get_contexts_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/get_contexts_test.go @@ -20,6 +20,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/cli-runtime/pkg/genericiooptions" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -147,7 +149,7 @@ func (test getContextsTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.startingConfig, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/rename_context_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/rename_context_test.go index 6c40408f671..b084f742f67 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/rename_context_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/rename_context_test.go @@ -23,6 +23,8 @@ import ( "strings" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -103,7 +105,7 @@ func TestRenameToAlreadyExistingContext(t *testing.T) { func (test renameContextTest) run(t *testing.T) { fakeKubeFile, _ := os.CreateTemp(os.TempDir(), "") - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err := clientcmd.WriteToFile(test.initialConfig, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_cluster_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_cluster_test.go index d19818419ce..d33feca0a0b 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_cluster_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_cluster_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -186,7 +188,7 @@ func (test setClusterTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_context_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_context_test.go index 3f08a7b3c43..1aaeffe1223 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_context_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_context_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -110,7 +112,7 @@ func (test setContextTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_credentials_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_credentials_test.go index 60c52611677..58c95a4a26e 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_credentials_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_credentials_test.go @@ -18,6 +18,7 @@ package config import ( "bytes" + utiltesting "k8s.io/client-go/util/testing" "os" "reflect" "testing" @@ -457,7 +458,7 @@ func (test setCredentialsTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_test.go index a22561a49ef..2ab35252eec 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/set_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/set_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "reflect" "k8s.io/client-go/tools/clientcmd" @@ -58,7 +60,7 @@ func (test setConfigTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/unset_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/unset_test.go index 0a6a2f79f94..de26ac2b8a2 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/unset_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/unset_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -109,7 +111,7 @@ func (test unsetConfigTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/use_context_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/use_context_test.go index f36e9058215..d8fd7cc1010 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/use_context_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/use_context_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -74,7 +76,7 @@ func (test useContextTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/view_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/view_test.go index 1421f72fc16..ddc12945a2d 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/view_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/view_test.go @@ -20,6 +20,8 @@ import ( "os" "testing" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/cli-runtime/pkg/genericiooptions" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -297,7 +299,7 @@ func (test viewClusterTest) run(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - defer os.Remove(fakeKubeFile.Name()) + defer utiltesting.CloseAndRemove(t, fakeKubeFile) err = clientcmd.WriteToFile(test.config, fakeKubeFile.Name()) if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/testing/fake.go b/staging/src/k8s.io/kubectl/pkg/cmd/testing/fake.go index cde7f19ef1e..b10d1739371 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/testing/fake.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/testing/fake.go @@ -483,6 +483,7 @@ func (f *TestFactory) Cleanup() { return } + f.tempConfigFile.Close() os.Remove(f.tempConfigFile.Name()) } diff --git a/staging/src/k8s.io/pod-security-admission/admission/api/load/load_test.go b/staging/src/k8s.io/pod-security-admission/admission/api/load/load_test.go index bf0d9da6382..e5a5356493e 100644 --- a/staging/src/k8s.io/pod-security-admission/admission/api/load/load_test.go +++ b/staging/src/k8s.io/pod-security-admission/admission/api/load/load_test.go @@ -19,11 +19,12 @@ package load import ( "bytes" "io/ioutil" - "os" "reflect" "strings" "testing" + utiltesting "k8s.io/client-go/util/testing" + "github.com/google/go-cmp/cmp" "k8s.io/pod-security-admission/admission/api" @@ -44,7 +45,7 @@ func writeTempFile(t *testing.T, content string) string { t.Fatal(err) } t.Cleanup(func() { - os.Remove(file.Name()) + utiltesting.CloseAndRemove(t, file) }) if err := ioutil.WriteFile(file.Name(), []byte(content), 0600); err != nil { t.Fatal(err)