github.com/giantswarm/apiextensions/v6@v6.6.0/pkg/id/id_test.go (about)

     1  package id
     2  
     3  import (
     4  	"regexp"
     5  	"strconv"
     6  	"testing"
     7  	"unicode"
     8  )
     9  
    10  func TestGenerate(t *testing.T) {
    11  	attempts := 1000
    12  
    13  	validCharsRegexp := regexp.MustCompile("^[02-9a-km-z]")
    14  	lettersOnlyRegexp := regexp.MustCompile("^[a-z]+$")
    15  	digitsOnlyRegexp := regexp.MustCompile("^[0-9]+$")
    16  
    17  	for i := 0; i < attempts; i++ {
    18  		t.Run(strconv.Itoa(i), func(t *testing.T) {
    19  			id := Generate()
    20  			idChars := []rune(id)
    21  
    22  			if !validCharsRegexp.MatchString(id) {
    23  				t.Fatalf("generated id contains invalid characters: %q", id)
    24  			}
    25  
    26  			if !unicode.IsLetter(idChars[0]) {
    27  				t.Fatalf("generated id does not start with a letter: %q", id)
    28  			}
    29  
    30  			if lettersOnlyRegexp.MatchString(id) {
    31  				t.Fatalf("generated id only contains letters: %q", id)
    32  			}
    33  
    34  			if digitsOnlyRegexp.MatchString(id) {
    35  				t.Fatalf("generated id only contains digits: %q", id)
    36  			}
    37  
    38  			if len(idChars) > IDLength {
    39  				t.Fatalf("generated id is too long: %d > %d", len(idChars), IDLength)
    40  			}
    41  		})
    42  	}
    43  }