feat: add functions.
This commit is contained in:
112
stringutil/cryptorandomstringutils_test.go
Normal file
112
stringutil/cryptorandomstringutils_test.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package stringutil
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"testing"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
func TestCryptoRandomNonAlphaNumeric(t *testing.T) {
|
||||
// If asked for a string 0 characters long, CryptoRandomNonAlphaNumeric should provide an empty string.
|
||||
if x, _ := CryptoRandomNonAlphaNumeric(0); utf8.RuneCountInString(x) != 0 {
|
||||
t.Errorf("String should be 0 characters; string was %v characters", utf8.RuneCountInString(x))
|
||||
}
|
||||
|
||||
// Test CryptoRandomNonAlphaNumeric's ability to generate strings 1 through 100 characters in length.
|
||||
for i := 1; i < 101; i++ {
|
||||
if x, _ := CryptoRandomNonAlphaNumeric(i); utf8.RuneCountInString(x) != i {
|
||||
t.Errorf("String should be %v characters; string was %v characters", i, utf8.RuneCountInString(x))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCryptoRandomAscii(t *testing.T) {
|
||||
// If asked for a string 0 characters long, CryptoRandomAscii should provide an empty string.
|
||||
if x, _ := CryptoRandomAscii(0); len(x) != 0 {
|
||||
t.Errorf("String should be 0 characters; string was %v characters", len(x))
|
||||
}
|
||||
|
||||
// Test CryptoRandomAscii's ability to generate strings 1 through 100 characters in length.
|
||||
for i := 1; i < 101; i++ {
|
||||
if x, _ := CryptoRandomAscii(i); len(x) != i {
|
||||
t.Errorf("String should be %v characters; string was %v characters", i, len(x))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCryptoRandomNumeric(t *testing.T) {
|
||||
// If asked for a string 0 characters long, CryptoRandomNumeric should provide an empty string.
|
||||
if x, _ := CryptoRandomNumeric(0); len(x) != 0 {
|
||||
t.Errorf("String should be 0 characters; string was %v characters", len(x))
|
||||
}
|
||||
|
||||
// Test CryptoRandomNumeric's ability to generate strings 1 through 100 characters in length.
|
||||
for i := 1; i < 101; i++ {
|
||||
if x, _ := CryptoRandomNumeric(i); len(x) != i {
|
||||
t.Errorf("String should be %v characters; string was %v characters", i, len(x))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCryptoRandomAlphabetic(t *testing.T) {
|
||||
// If asked for a string 0 characters long, CryptoRandomAlphabetic should provide an empty string.
|
||||
if x, _ := CryptoRandomAlphabetic(0); len(x) != 0 {
|
||||
t.Errorf("String should be 0 characters; string was %v characters", len(x))
|
||||
}
|
||||
|
||||
// Test CryptoRandomAlphabetic's ability to generate strings 1 through 100 characters in length.
|
||||
for i := 1; i < 101; i++ {
|
||||
if x, _ := CryptoRandomAlphabetic(i); len(x) != i {
|
||||
t.Errorf("String should be %v characters; string was %v characters", i, len(x))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCryptoRandomAlphaNumeric(t *testing.T) {
|
||||
// If asked for a string 0 characters long, CryptoRandomAlphaNumeric should provide an empty string.
|
||||
if x, _ := CryptoRandomAlphaNumeric(0); len(x) != 0 {
|
||||
t.Errorf("String should be 0 characters; string was %v characters", len(x))
|
||||
}
|
||||
|
||||
// Test CryptoRandomAlphaNumeric's ability to generate strings 1 through 100 characters in length.
|
||||
for i := 1; i < 101; i++ {
|
||||
if x, _ := CryptoRandomAlphaNumeric(i); len(x) != i {
|
||||
t.Errorf("String should be %v characters; string was %v characters", i, len(x))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCryptoRandAlphaNumeric_FuzzOnlyNumeric(t *testing.T) {
|
||||
|
||||
// Testing for a reported regression in which some versions produced
|
||||
// a predictably small set of chars.
|
||||
iters := 1000
|
||||
charlen := 0
|
||||
for i := 0; i < 16; i++ {
|
||||
numOnly := 0
|
||||
charlen++
|
||||
for i := 0; i < iters; i++ {
|
||||
out, err := CryptoRandomAlphaNumeric(charlen)
|
||||
if err != nil {
|
||||
t.Fatal("func failed to produce a random thinger")
|
||||
}
|
||||
if _, err := strconv.Atoi(out); err == nil {
|
||||
numOnly++
|
||||
}
|
||||
|
||||
m, err := regexp.MatchString("^[0-9a-zA-Z]+$", out)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !m {
|
||||
t.Fatal("Character is not alphanum")
|
||||
}
|
||||
}
|
||||
|
||||
if numOnly == iters {
|
||||
t.Fatalf("Got %d numeric-only random sequences", numOnly)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user