fix fd leaks and failed file removing for main pkg and cmd

This commit is contained in:
HirazawaUi 2023-05-03 01:37:53 +08:00
parent 5289a7b029
commit 82e3fa0930
6 changed files with 39 additions and 29 deletions

View File

@ -26,6 +26,8 @@ import (
"strings" "strings"
"testing" "testing"
utiltesting "k8s.io/client-go/util/testing"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"github.com/lithammer/dedent" "github.com/lithammer/dedent"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -195,7 +197,7 @@ func TestFileExistingCheck(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("Failed to create file: %v", err) t.Fatalf("Failed to create file: %v", err)
} }
defer os.Remove(f.Name()) defer utiltesting.CloseAndRemove(t, f)
var tests = []struct { var tests = []struct {
name string name string
check FileExistingCheck check FileExistingCheck
@ -234,7 +236,7 @@ func TestFileAvailableCheck(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("Failed to create file: %v", err) t.Fatalf("Failed to create file: %v", err)
} }
defer os.Remove(f.Name()) defer utiltesting.CloseAndRemove(t, f)
var tests = []struct { var tests = []struct {
name string name string
check FileAvailableCheck check FileAvailableCheck
@ -461,8 +463,8 @@ func TestConfigRootCAs(t *testing.T) {
if err != nil { if err != nil {
t.Errorf("failed configRootCAs:\n\texpected: succeed creating temp CA file\n\tactual:%v", err) t.Errorf("failed configRootCAs:\n\texpected: succeed creating temp CA file\n\tactual:%v", err)
} }
defer os.Remove(f.Name()) defer utiltesting.CloseAndRemove(t, f)
if err := os.WriteFile(f.Name(), []byte(externalEtcdRootCAFileContent), 0644); err != nil { if _, err := f.Write([]byte(externalEtcdRootCAFileContent)); err != nil {
t.Errorf("failed configRootCAs:\n\texpected: succeed writing contents to temp CA file %s\n\tactual:%v", f.Name(), err) t.Errorf("failed configRootCAs:\n\texpected: succeed writing contents to temp CA file %s\n\tactual:%v", f.Name(), err)
} }
@ -490,8 +492,8 @@ func TestConfigCertAndKey(t *testing.T) {
err, err,
) )
} }
defer os.Remove(certFile.Name()) defer utiltesting.CloseAndRemove(t, certFile)
if err := os.WriteFile(certFile.Name(), []byte(externalEtcdCertFileContent), 0644); err != nil { if _, err := certFile.Write([]byte(externalEtcdCertFileContent)); err != nil {
t.Errorf( t.Errorf(
"failed configCertAndKey:\n\texpected: succeed writing contents to temp CertFile file %s\n\tactual:%v", "failed configCertAndKey:\n\texpected: succeed writing contents to temp CertFile file %s\n\tactual:%v",
certFile.Name(), certFile.Name(),
@ -506,8 +508,8 @@ func TestConfigCertAndKey(t *testing.T) {
err, err,
) )
} }
defer os.Remove(keyFile.Name()) defer utiltesting.CloseAndRemove(t, keyFile)
if err := os.WriteFile(keyFile.Name(), []byte(externalEtcdKeyFileContent), 0644); err != nil { if _, err := keyFile.Write([]byte(externalEtcdKeyFileContent)); err != nil {
t.Errorf( t.Errorf(
"failed configCertAndKey:\n\texpected: succeed writing contents to temp KeyFile file %s\n\tactual:%v", "failed configCertAndKey:\n\texpected: succeed writing contents to temp KeyFile file %s\n\tactual:%v",
keyFile.Name(), keyFile.Name(),

View File

@ -24,6 +24,8 @@ import (
"reflect" "reflect"
"testing" "testing"
utiltesting "k8s.io/client-go/util/testing"
"github.com/pkg/errors" "github.com/pkg/errors"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
@ -172,7 +174,7 @@ func TestGetPatchSetsForPathMustBeDirectory(t *testing.T) {
if err != nil { if err != nil {
t.Errorf("error creating temporary file: %v", err) t.Errorf("error creating temporary file: %v", err)
} }
defer os.Remove(tempFile.Name()) defer utiltesting.CloseAndRemove(t, tempFile)
_, _, _, err = getPatchSetsFromPath(tempFile.Name(), testKnownTargets, io.Discard) _, _, _, err = getPatchSetsFromPath(tempFile.Name(), testKnownTargets, io.Discard)
var pathErr *os.PathError var pathErr *os.PathError

View File

@ -22,6 +22,8 @@ import (
"testing" "testing"
"time" "time"
utiltesting "k8s.io/client-go/util/testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
) )
@ -320,7 +322,7 @@ providers:
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer os.Remove(file.Name()) defer utiltesting.CloseAndRemove(t, file)
_, err = file.WriteString(testcase.configData) _, err = file.WriteString(testcase.configData)
if err != nil { if err != nil {

View File

@ -25,6 +25,8 @@ import (
"reflect" "reflect"
"testing" "testing"
utiltesting "k8s.io/client-go/util/testing"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
certificatesv1 "k8s.io/api/certificates/v1" certificatesv1 "k8s.io/api/certificates/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
@ -324,8 +326,8 @@ users:
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer os.Remove(f.Name()) defer utiltesting.CloseAndRemove(t, f)
os.WriteFile(f.Name(), testData, os.FileMode(0755)) f.Write(testData)
config, err := loadRESTClientConfig(f.Name()) config, err := loadRESTClientConfig(f.Name())
if err != nil { if err != nil {

View File

@ -26,6 +26,8 @@ import (
"testing" "testing"
"time" "time"
utiltesting "k8s.io/client-go/util/testing"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
apitesting "k8s.io/cri-api/pkg/apis/testing" apitesting "k8s.io/cri-api/pkg/apis/testing"
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
@ -79,7 +81,7 @@ func TestReadLogs(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("unable to create temp file") t.Fatalf("unable to create temp file")
} }
defer os.Remove(file.Name()) defer utiltesting.CloseAndRemove(t, file)
file.WriteString(`{"log":"line1\n","stream":"stdout","time":"2020-09-27T11:18:01.00000000Z"}` + "\n") file.WriteString(`{"log":"line1\n","stream":"stdout","time":"2020-09-27T11:18:01.00000000Z"}` + "\n")
file.WriteString(`{"log":"line2\n","stream":"stdout","time":"2020-09-27T11:18:02.00000000Z"}` + "\n") file.WriteString(`{"log":"line2\n","stream":"stdout","time":"2020-09-27T11:18:02.00000000Z"}` + "\n")
file.WriteString(`{"log":"line3\n","stream":"stdout","time":"2020-09-27T11:18:03.00000000Z"}` + "\n") file.WriteString(`{"log":"line3\n","stream":"stdout","time":"2020-09-27T11:18:03.00000000Z"}` + "\n")

View File

@ -29,6 +29,8 @@ import (
"testing" "testing"
"time" "time"
utiltesting "k8s.io/client-go/util/testing"
"k8s.io/api/imagepolicy/v1alpha1" "k8s.io/api/imagepolicy/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
@ -67,7 +69,7 @@ imagePolicy:
` `
func TestNewFromConfig(t *testing.T) { func TestNewFromConfig(t *testing.T) {
dir, err := ioutil.TempDir("", "") dir, err := os.MkdirTemp("", "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -200,8 +202,7 @@ current-context: default
if err != nil { if err != nil {
return err return err
} }
p := tempfile.Name() defer utiltesting.CloseAndRemove(t, tempfile)
defer os.Remove(p)
tmpl, err := template.New("test").Parse(tt.kubeConfigTmpl) tmpl, err := template.New("test").Parse(tt.kubeConfigTmpl)
if err != nil { if err != nil {
@ -215,8 +216,7 @@ current-context: default
if err != nil { if err != nil {
return err return err
} }
pc := tempconfigfile.Name() defer os.Remove(tempconfigfile.Name())
defer os.Remove(pc)
configTmpl, err := template.New("testconfig").Parse(defaultConfigTmplJSON) configTmpl, err := template.New("testconfig").Parse(defaultConfigTmplJSON)
if err != nil { if err != nil {
@ -229,7 +229,7 @@ current-context: default
RetryBackoff int RetryBackoff int
DefaultAllow bool DefaultAllow bool
}{ }{
KubeConfig: p, KubeConfig: tempfile.Name(),
AllowTTL: 500, AllowTTL: 500,
DenyTTL: 500, DenyTTL: 500,
RetryBackoff: 500, RetryBackoff: 500,
@ -240,7 +240,7 @@ current-context: default
} }
// Create a new admission controller // Create a new admission controller
configFile, err := os.Open(pc) configFile, err := os.Open(tempconfigfile.Name())
if err != nil { if err != nil {
return fmt.Errorf("failed to read test config: %v", err) return fmt.Errorf("failed to read test config: %v", err)
} }
@ -358,13 +358,13 @@ func (m *mockService) HTTPStatusCode() int { return m.statusCode }
// newImagePolicyWebhook creates a temporary kubeconfig file from the provided arguments and attempts to load // newImagePolicyWebhook creates a temporary kubeconfig file from the provided arguments and attempts to load
// a new newImagePolicyWebhook from it. // a new newImagePolicyWebhook from it.
func newImagePolicyWebhook(callbackURL string, clientCert, clientKey, ca []byte, cacheTime time.Duration, defaultAllow bool) (*Plugin, error) { func newImagePolicyWebhook(t *testing.T, callbackURL string, clientCert, clientKey, ca []byte, cacheTime time.Duration, defaultAllow bool) (*Plugin, error) {
tempfile, err := ioutil.TempFile("", "") tempfile, err := ioutil.TempFile("", "")
if err != nil { if err != nil {
return nil, err return nil, err
} }
p := tempfile.Name() p := tempfile.Name()
defer os.Remove(p) defer utiltesting.CloseAndRemove(t, tempfile)
config := v1.Config{ config := v1.Config{
Clusters: []v1.NamedCluster{ Clusters: []v1.NamedCluster{
{ {
@ -386,7 +386,7 @@ func newImagePolicyWebhook(callbackURL string, clientCert, clientKey, ca []byte,
return nil, err return nil, err
} }
pc := tempconfigfile.Name() pc := tempconfigfile.Name()
defer os.Remove(pc) defer utiltesting.CloseAndRemove(t, tempconfigfile)
configTmpl, err := template.New("testconfig").Parse(defaultConfigTmplYAML) configTmpl, err := template.New("testconfig").Parse(defaultConfigTmplYAML)
if err != nil { if err != nil {
@ -478,7 +478,7 @@ func TestTLSConfig(t *testing.T) {
} }
defer server.Close() defer server.Close()
wh, err := newImagePolicyWebhook(server.URL, tt.clientCert, tt.clientKey, tt.clientCA, -1, false) wh, err := newImagePolicyWebhook(t, server.URL, tt.clientCert, tt.clientKey, tt.clientCA, -1, false)
if err != nil { if err != nil {
t.Errorf("%s: failed to create client: %v", tt.test, err) t.Errorf("%s: failed to create client: %v", tt.test, err)
return return
@ -559,7 +559,7 @@ func TestWebhookCache(t *testing.T) {
defer s.Close() defer s.Close()
// Create an admission controller that caches successful responses. // Create an admission controller that caches successful responses.
wh, err := newImagePolicyWebhook(s.URL, clientCert, clientKey, caCert, 200, false) wh, err := newImagePolicyWebhook(t, s.URL, clientCert, clientKey, caCert, 200, false)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -753,7 +753,7 @@ func TestContainerCombinations(t *testing.T) {
} }
defer server.Close() defer server.Close()
wh, err := newImagePolicyWebhook(server.URL, clientCert, clientKey, caCert, 0, false) wh, err := newImagePolicyWebhook(t, server.URL, clientCert, clientKey, caCert, 0, false)
if err != nil { if err != nil {
t.Errorf("%s: failed to create client: %v", tt.test, err) t.Errorf("%s: failed to create client: %v", tt.test, err)
return return
@ -847,7 +847,7 @@ func TestDefaultAllow(t *testing.T) {
} }
defer server.Close() defer server.Close()
wh, err := newImagePolicyWebhook(server.URL, clientCert, clientKey, caCert, 0, tt.defaultAllow) wh, err := newImagePolicyWebhook(t, server.URL, clientCert, clientKey, caCert, 0, tt.defaultAllow)
if err != nil { if err != nil {
t.Errorf("%s: failed to create client: %v", tt.test, err) t.Errorf("%s: failed to create client: %v", tt.test, err)
return return
@ -954,7 +954,7 @@ func TestAnnotationFiltering(t *testing.T) {
} }
defer server.Close() defer server.Close()
wh, err := newImagePolicyWebhook(server.URL, clientCert, clientKey, caCert, 0, true) wh, err := newImagePolicyWebhook(t, server.URL, clientCert, clientKey, caCert, 0, true)
if err != nil { if err != nil {
t.Errorf("%s: failed to create client: %v", tt.test, err) t.Errorf("%s: failed to create client: %v", tt.test, err)
return return
@ -1047,7 +1047,7 @@ func TestReturnedAnnotationAdd(t *testing.T) {
} }
defer server.Close() defer server.Close()
wh, err := newImagePolicyWebhook(server.URL, clientCert, clientKey, caCert, 0, true) wh, err := newImagePolicyWebhook(t, server.URL, clientCert, clientKey, caCert, 0, true)
if err != nil { if err != nil {
t.Errorf("%s: failed to create client: %v", tt.test, err) t.Errorf("%s: failed to create client: %v", tt.test, err)
return return