mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
// Copyright 2020 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package utils_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"go.uber.org/goleak"
|
|
. "sigs.k8s.io/kustomize/api/internal/utils"
|
|
)
|
|
|
|
const (
|
|
timeToWait = 10 * time.Millisecond
|
|
tooSlow = 2 * timeToWait
|
|
)
|
|
|
|
func errMsg(msg string) string {
|
|
return fmt.Sprintf("hit %s timeout running '%s'", timeToWait, msg)
|
|
}
|
|
|
|
func TestTimedCallFastNoError(t *testing.T) {
|
|
err := TimedCall(
|
|
"fast no error", timeToWait,
|
|
func() error { return nil })
|
|
if !assert.NoError(t, err) {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestTimedCallFastWithError(t *testing.T) {
|
|
err := TimedCall(
|
|
"fast with error", timeToWait,
|
|
func() error { return assert.AnError })
|
|
if assert.Error(t, err) {
|
|
assert.EqualError(t, err, assert.AnError.Error())
|
|
} else {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestTimedCallSlowNoError(t *testing.T) {
|
|
err := TimedCall(
|
|
"slow no error", timeToWait,
|
|
func() error { time.Sleep(tooSlow); return nil })
|
|
if assert.Error(t, err) {
|
|
assert.EqualError(t, err, errMsg("slow no error"))
|
|
} else {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestTimedCallSlowWithError(t *testing.T) {
|
|
err := TimedCall(
|
|
"slow with error", timeToWait,
|
|
func() error { time.Sleep(tooSlow); return assert.AnError })
|
|
if assert.Error(t, err) {
|
|
assert.EqualError(t, err, errMsg("slow with error"))
|
|
} else {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestTimedCallGoroutineLeak(t *testing.T) {
|
|
defer goleak.VerifyNone(t)
|
|
err := TimedCall("function done, no goroutine leaks", timeToWait, func() error {
|
|
time.Sleep(tooSlow)
|
|
return fmt.Errorf("function done")
|
|
})
|
|
if assert.Error(t, err) {
|
|
assert.EqualError(t, err, errMsg("function done, no goroutine leaks"))
|
|
} else {
|
|
t.Fail()
|
|
}
|
|
|
|
// The code introduces a 2-second sleep to allow the goroutine to complete its execution.
|
|
// Subsequently, it verifies if the goroutine created by the function exits as expected.
|
|
time.Sleep(tooSlow)
|
|
}
|