github.com/argoproj/argo-cd/v3@v3.2.1/util/password/password_test.go (about)

     1  package password
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func testPasswordHasher(t *testing.T, h PasswordHasher) {
    11  	t.Helper()
    12  	// Use the default work factor
    13  	const (
    14  		defaultPassword = "Hello, world!"
    15  		pollution       = "extradata12345"
    16  	)
    17  	hashedPassword, _ := h.HashPassword(defaultPassword)
    18  	assert.True(t, h.VerifyPassword(defaultPassword, hashedPassword), "Password %q should have validated against hash %q", defaultPassword, hashedPassword)
    19  	assert.False(t, h.VerifyPassword(defaultPassword, pollution+hashedPassword), "Password %q should NOT have validated against hash %q", defaultPassword, pollution+hashedPassword)
    20  }
    21  
    22  func TestBcryptPasswordHasher(t *testing.T) {
    23  	// Use the default work factor
    24  	h := BcryptPasswordHasher{0}
    25  	testPasswordHasher(t, h)
    26  }
    27  
    28  func TestDummyPasswordHasher(t *testing.T) {
    29  	h := DummyPasswordHasher{}
    30  	testPasswordHasher(t, h)
    31  }
    32  
    33  func TestPasswordHashing(t *testing.T) {
    34  	const (
    35  		defaultPassword = "Hello, world!"
    36  		blankPassword   = ""
    37  	)
    38  	hashers := []PasswordHasher{
    39  		BcryptPasswordHasher{0},
    40  		DummyPasswordHasher{},
    41  	}
    42  
    43  	hashedPassword, _ := hashPasswordWithHashers(defaultPassword, hashers)
    44  	valid, stale := verifyPasswordWithHashers(defaultPassword, hashedPassword, hashers)
    45  	assert.True(t, valid, "Password %q should have validated against hash %q", defaultPassword, hashedPassword)
    46  	assert.False(t, stale, "Password %q should not have been marked stale against hash %q", defaultPassword, hashedPassword)
    47  	valid, stale = verifyPasswordWithHashers(defaultPassword, defaultPassword, hashers)
    48  	assert.True(t, valid, "Password %q should have validated against itself with dummy hasher", defaultPassword)
    49  	assert.True(t, stale, "Password %q should have been acknowledged stale against itself with dummy hasher", defaultPassword)
    50  
    51  	hashedPassword, err := hashPasswordWithHashers(blankPassword, hashers)
    52  	require.Error(t, err, "Blank password should have produced error, rather than hash %q", hashedPassword)
    53  
    54  	valid, _ = verifyPasswordWithHashers(blankPassword, "", hashers)
    55  	assert.False(t, valid, "Blank password should have failed verification")
    56  }