56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package argonpasswords_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.maronato.dev/maronato/goshort/internal/util/passwords"
|
|
argon "git.maronato.dev/maronato/goshort/internal/util/passwords/argon"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestNewArgonHasher(t *testing.T) {
|
|
ah := argon.NewArgonHasher()
|
|
assert.Implements(t, (*passwords.PasswordHasher)(nil), ah, "NewArgonHasher should return a PasswordHasher")
|
|
}
|
|
|
|
func TestArgonHash(t *testing.T) {
|
|
ah := argon.NewArgonHasher()
|
|
|
|
hash, err := ah.Hash("mypassword")
|
|
|
|
assert.Nil(t, err, "ArgonHash should not return an error for a valid password")
|
|
assert.NotEmpty(t, hash, "ArgonHash should return a non-empty hash for a valid password")
|
|
|
|
hash2, _ := ah.Hash("mypassword")
|
|
|
|
assert.NotEqual(t, hash, hash2, "ArgonHash should return different hashes for the same password via salting")
|
|
}
|
|
|
|
func TestArgonVerify(t *testing.T) {
|
|
ah := argon.NewArgonHasher()
|
|
|
|
hash, _ := ah.Hash("mypassword")
|
|
|
|
pass, err := ah.Verify("mypassword", hash)
|
|
|
|
assert.Nil(t, err, "ArgonVerify should not return an error for a valid password")
|
|
assert.True(t, pass, "ArgonVerify should return true for a valid password")
|
|
|
|
pass2, err := ah.Verify("mypassword2", hash)
|
|
|
|
assert.Nil(t, err, "ArgonVerify should not return an error for an invalid password")
|
|
assert.False(t, pass2, "ArgonVerify should return false for an invalid password")
|
|
|
|
_, err = ah.Verify("mypassword", "invalidhash")
|
|
|
|
assert.ErrorIs(t, err, passwords.ErrInvalidHash, "ArgonVerify should return an error for an invalid hash")
|
|
}
|
|
|
|
func TestArgonWasteTime(t *testing.T) {
|
|
ah := argon.NewArgonHasher()
|
|
|
|
err := ah.WasteTime()
|
|
|
|
assert.Nil(t, err, "WasteTime should not return an error")
|
|
}
|