Files
moonD4rk-HackBrowserData/crypto/keyretriever/keyretriever_darwin_test.go
T
Roger a0b4412bf2 fix: share key retriever across all browsers to avoid repeated prompts (#560)
* fix: share key retriever across all browsers to avoid repeated password prompts
2026-04-06 21:57:52 +08:00

52 lines
1.4 KiB
Go

//go:build darwin
package keyretriever
import (
"testing"
"github.com/moond4rk/keychainbreaker"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFindStorageKey_Found(t *testing.T) {
records := []keychainbreaker.GenericPassword{
{Account: "Chrome", Password: []byte("mock-secret")},
{Account: "Brave", Password: []byte("brave-secret")},
}
key, err := findStorageKey(records, "Chrome")
require.NoError(t, err)
assert.Equal(t, darwinParams.deriveKey([]byte("mock-secret")), key)
}
func TestFindStorageKey_NotFound(t *testing.T) {
records := []keychainbreaker.GenericPassword{
{Account: "Chrome", Password: []byte("mock-secret")},
}
key, err := findStorageKey(records, "Firefox")
require.Error(t, err)
assert.Nil(t, key)
assert.ErrorIs(t, err, errStorageNotFound)
}
func TestKeychainPasswordRetriever_EmptyPassword(t *testing.T) {
r := &KeychainPasswordRetriever{Password: ""}
key, err := r.RetrieveKey("Chrome", "")
require.Error(t, err)
assert.Nil(t, key)
assert.Contains(t, err.Error(), "keychain password not provided")
}
func TestTerminalPasswordRetriever_NonTTY(t *testing.T) {
// In CI/test environments, stdin is not a TTY.
// The retriever should return an error so the chain can log it and continue.
r := &TerminalPasswordRetriever{}
key, err := r.RetrieveKey("Chrome", "")
require.Error(t, err)
assert.Contains(t, err.Error(), "stdin is not a TTY")
assert.Nil(t, key)
}