fix(testutil): ensure GetRandomName never returns strings greater tha… (#14153)

This commit is contained in:
Cian Johnston
2024-08-05 15:03:07 +01:00
committed by GitHub
parent 8acc7f2070
commit 49a2880abc
2 changed files with 70 additions and 1 deletions

View File

@ -10,6 +10,8 @@ import (
var n atomic.Int64
const maxNameLen = 32
// GetRandomName returns a random name using moby/pkg/namesgenerator.
// namesgenerator.GetRandomName exposes a retry parameter that appends
// a pseudo-random number between 1 and 10 to its return value.
@ -19,5 +21,20 @@ var n atomic.Int64
// to the return value.
func GetRandomName(t testing.TB) string {
t.Helper()
return namesgenerator.GetRandomName(0) + strconv.FormatInt(n.Add(1), 10)
name := namesgenerator.GetRandomName(0)
return incSuffix(name, n.Add(1), maxNameLen)
}
func incSuffix(s string, num int64, maxLen int) string {
suffix := strconv.FormatInt(num, 10)
if len(s)+len(suffix) <= maxLen {
return s + suffix
}
stripLen := (len(s) + len(suffix)) - maxLen
stripIdx := len(s) - stripLen
if stripIdx < 0 {
return ""
}
s = s[:stripIdx]
return s + suffix
}

View File

@ -0,0 +1,52 @@
package testutil
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestIncSuffix(t *testing.T) {
t.Parallel()
for _, tt := range []struct {
s string
num int64
maxLen int
want string
}{
{
s: "foo",
num: 1,
maxLen: 4,
want: "foo1",
},
{
s: "foo",
num: 42,
maxLen: 3,
want: "f42",
},
{
s: "foo",
num: 3,
maxLen: 2,
want: "f3",
},
{
s: "foo",
num: 4,
maxLen: 1,
want: "4",
},
{
s: "foo",
num: 0,
maxLen: 0,
want: "",
},
} {
actual := incSuffix(tt.s, tt.num, tt.maxLen)
assert.Equal(t, tt.want, actual)
}
}