mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
feat(namesgenerator): expand auto-generated name digit suffix to 00-99 (#22665)
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
package namesgenerator
|
package namesgenerator
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"math/rand/v2"
|
"math/rand/v2"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -34,17 +35,14 @@ func NameWith(delim string) string {
|
|||||||
return adjective + delim + last
|
return adjective + delim + last
|
||||||
}
|
}
|
||||||
|
|
||||||
// NameDigitWith returns a random name with a single random digit suffix (1-9),
|
// NameDigitWith returns a random name with a two-digit suffix (00-99),
|
||||||
// in the format "[adjective][delim][surname][digit]" e.g. "happy_smith9".
|
// in the format "[adjective][delim][surname][digit]" e.g. "happy_smith42".
|
||||||
// Provides some collision resistance while keeping names short and clean.
|
// Provides some collision resistance while keeping names short and clean.
|
||||||
// Not guaranteed to be unique.
|
// Not guaranteed to be unique.
|
||||||
func NameDigitWith(delim string) string {
|
func NameDigitWith(delim string) string {
|
||||||
const (
|
|
||||||
minDigit = 1
|
|
||||||
maxDigit = 9
|
|
||||||
)
|
|
||||||
//nolint:gosec // The random digit doesn't need to be cryptographically secure.
|
//nolint:gosec // The random digit doesn't need to be cryptographically secure.
|
||||||
return NameWith(delim) + strconv.Itoa(rand.IntN(maxDigit-minDigit+1))
|
name := NameWith(delim) + fmt.Sprintf("%02d", rand.IntN(100))
|
||||||
|
return truncate(name, maxNameLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UniqueName returns a random name with a monotonically increasing suffix,
|
// UniqueName returns a random name with a monotonically increasing suffix,
|
||||||
|
|||||||
@@ -93,6 +93,21 @@ func TestUniqueNameWithLength(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNameDigitWithLength(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
const iter = 10000
|
||||||
|
for range iter {
|
||||||
|
name := NameDigitWith("_")
|
||||||
|
assert.LessOrEqual(t, len(name), maxNameLen)
|
||||||
|
assert.Contains(t, name, "_")
|
||||||
|
assert.Equal(t, name, strings.ToLower(name))
|
||||||
|
verifyNoWhitespace(t, name)
|
||||||
|
// Must end with exactly 2 digits.
|
||||||
|
assert.Regexp(t, `[a-z]\d{2}$`, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func verifyNoWhitespace(t *testing.T, s string) {
|
func verifyNoWhitespace(t *testing.T, s string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
|
|||||||
Reference in New Issue
Block a user