mirror of
https://github.com/wneessen/apg-go.git
synced 2024-11-09 15:52:54 +01:00
Winni Neessen
83e910bdda
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.
185 lines
4.7 KiB
Go
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)
|
|
}
|
|
}
|