diff --git a/testutil/names.go b/testutil/names.go index a3d2acd3c1..ee182ed50b 100644 --- a/testutil/names.go +++ b/testutil/names.go @@ -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 } diff --git a/testutil/names_internal_test.go b/testutil/names_internal_test.go new file mode 100644 index 0000000000..7fabc0a8c3 --- /dev/null +++ b/testutil/names_internal_test.go @@ -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) + } +}