apg-go/config_test.go
Winni Neessen 83e910bdda
Update min character options and remove HIBP check
We've added new configuration options for setting minimum counts of lowercase, numeric, special, and uppercase characters in passwords. The HIBP check feature has also been removed due to redundancy. Note: High values for these character minimums may lead to long calculation times.
2024-03-13 21:23:56 +01:00

185 lines
4.7 KiB
Go

// SPDX-FileCopyrightText: 2021-2024 Winni Neessen <wn@neessen.dev>
//
// SPDX-License-Identifier: MIT
package apg
import (
"testing"
)
func TestNewConfig(t *testing.T) {
c := NewConfig()
if c == nil {
t.Errorf("NewConfig() failed, expected config pointer but got nil")
return
}
c = NewConfig(nil)
if c == nil {
t.Errorf("NewConfig() failed, expected config pointer but got nil")
return
}
if c.MinLength != DefaultMinLength {
t.Errorf("NewConfig() failed, expected min length: %d, got: %d", DefaultMinLength,
c.MinLength)
}
if c.MaxLength != DefaultMaxLength {
t.Errorf("NewConfig() failed, expected max length: %d, got: %d", DefaultMaxLength,
c.MaxLength)
}
if c.NumberPass != DefaultNumberPass {
t.Errorf("NewConfig() failed, expected number of passwords: %d, got: %d",
DefaultNumberPass, c.NumberPass)
}
if c.Mode != DefaultMode {
t.Errorf("NewConfig() failed, expected mode mask: %d, got: %d",
DefaultMode, c.Mode)
}
}
func TestWithAlgorithm(t *testing.T) {
tests := []struct {
name string
algo Algorithm
want int
}{
{"Pronounceable passwords", AlgoPronounceable, 0},
{"Random passwords", AlgoRandom, 1},
{"Coinflip", AlgoCoinFlip, 2},
{"Unsupported", AlgoUnsupported, 3},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := NewConfig(WithAlgorithm(tt.algo))
if c == nil {
t.Errorf("NewConfig(WithAlgorithm()) failed, expected config pointer but got nil")
return
}
if c.Algorithm != tt.algo {
t.Errorf("NewConfig(WithAlgorithm()) failed, expected algo: %d, got: %d",
tt.algo, c.Algorithm)
}
if IntToAlgo(tt.want) != c.Algorithm {
t.Errorf("IntToAlgo() failed, expected algo: %d, got: %d",
tt.want, c.Algorithm)
}
})
}
}
func TestWithExcludeChars(t *testing.T) {
e := "abcdefg"
c := NewConfig(WithExcludeChars(e))
if c == nil {
t.Errorf("NewConfig(WithExcludeChars()) failed, expected config pointer but got nil")
return
}
if c.ExcludeChars != e {
t.Errorf("NewConfig(WithExcludeChars()) failed, expected chars: %s, got: %s",
e, c.ExcludeChars)
}
}
func TestWithFixedLength(t *testing.T) {
var e int64 = 10
c := NewConfig(WithFixedLength(e))
if c == nil {
t.Errorf("NewConfig(WithFixedLength()) failed, expected config pointer but got nil")
return
}
if c.FixedLength != e {
t.Errorf("NewConfig(WithFixedLength()) failed, expected fixed length: %d, got: %d",
e, c.FixedLength)
}
}
func TestWithMaxLength(t *testing.T) {
var e int64 = 123
c := NewConfig(WithMaxLength(e))
if c == nil {
t.Errorf("NewConfig(WithMaxLength()) failed, expected config pointer but got nil")
return
}
if c.MaxLength != e {
t.Errorf("NewConfig(WithMaxLength()) failed, expected max length: %d, got: %d",
e, c.MaxLength)
}
}
func TestWithMinLength(t *testing.T) {
var e int64 = 1
c := NewConfig(WithMinLength(e))
if c == nil {
t.Errorf("NewConfig(WithMinLength()) failed, expected config pointer but got nil")
return
}
if c.MinLength != e {
t.Errorf("NewConfig(WithMinLength()) failed, expected min length: %d, got: %d",
e, c.MinLength)
}
}
func TestWithMinLowercase(t *testing.T) {
var e int64 = 2
c := NewConfig(WithMinLowercase(e))
if c == nil {
t.Errorf("NewConfig(WithMinLowercase()) failed, expected config pointer but got nil")
return
}
if c.MinLowerCase != e {
t.Errorf("NewConfig(WithMinLowercase()) failed, expected min amount: %d, got: %d",
e, c.MinLowerCase)
}
}
func TestWithMinNumeric(t *testing.T) {
var e int64 = 3
c := NewConfig(WithMinNumeric(e))
if c == nil {
t.Errorf("NewConfig(WithMinNumeric()) failed, expected config pointer but got nil")
return
}
if c.MinNumeric != e {
t.Errorf("NewConfig(WithMinNumeric()) failed, expected min amount: %d, got: %d",
e, c.MinNumeric)
}
}
func TestWithMinSpecial(t *testing.T) {
var e int64 = 4
c := NewConfig(WithMinSpecial(e))
if c == nil {
t.Errorf("NewConfig(WithMinSpecial()) failed, expected config pointer but got nil")
return
}
if c.MinSpecial != e {
t.Errorf("NewConfig(WithMinSpecial()) failed, expected min amount: %d, got: %d",
e, c.MinSpecial)
}
}
func TestWithMinUppercase(t *testing.T) {
var e int64 = 5
c := NewConfig(WithMinUppercase(e))
if c == nil {
t.Errorf("NewConfig(WithMinUppercase()) failed, expected config pointer but got nil")
return
}
if c.MinUpperCase != e {
t.Errorf("NewConfig(WithMinUppercase()) failed, expected min amount: %d, got: %d",
e, c.MinUpperCase)
}
}
func TestWithModeMask(t *testing.T) {
e := DefaultMode
c := NewConfig(WithModeMask(e))
if c == nil {
t.Errorf("NewConfig(WithModeMask()) failed, expected config pointer but got nil")
return
}
if c.Mode != e {
t.Errorf("NewConfig(WithModeMask()) failed, expected mask: %d, got: %d",
e, c.Mode)
}
}