1
0
Fork 0
mirror of https://github.com/Luzifer/password.git synced 2024-11-08 17:30:10 +00:00
password/lib/xkcd_test.go
Knut Ahlers cb3fd042e1
Add XKCD style password generator
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2017-10-31 12:10:24 +01:00

50 lines
1.1 KiB
Go

package securepassword
import (
"fmt"
"regexp"
"testing"
)
func TestXKCDWordList(t *testing.T) {
if w := len(xkcdWordList); w < 1000 {
t.Fatalf("Word list is expected to contain at least 1000 words, has %d", w)
}
}
func TestXKCDGeneratePassword(t *testing.T) {
for i := 4; i < 20; i++ {
pwd, err := DefaultXKCD.GeneratePassword(i, false)
if err != nil {
t.Fatalf("Generated had an error: %s", err)
}
if !regexp.MustCompile(fmt.Sprintf("^([A-Z][a-z]+){%d}$", i)).MatchString(pwd) {
t.Errorf("Password %q is expected to contain %d words, did not match expected RegEx", pwd, i)
}
}
}
func TestXKCDDatePrepend(t *testing.T) {
pwd, err := DefaultXKCD.GeneratePassword(4, true)
if err != nil {
t.Fatalf("Generated had an error: %s", err)
}
if !regexp.MustCompile(`^[0-9]{8}\.([A-Z][a-z]+){4}$`).MatchString(pwd) {
t.Errorf("Password %q did not match expected RegEx", pwd)
}
}
func BenchmarkGeneratePasswords4Words(b *testing.B) {
for i := 0; i < b.N; i++ {
DefaultXKCD.GeneratePassword(4, false)
}
}
func BenchmarkGeneratePasswords20Words(b *testing.B) {
for i := 0; i < b.N; i++ {
DefaultXKCD.GeneratePassword(20, false)
}
}