mirror of
https://github.com/hanzokms/go-keyring.git
synced 2026-10-30 20:55:02 +00:00
221 lines
5.5 KiB
Go
221 lines
5.5 KiB
Go
package keyring
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
service = "test-service"
|
|
user = "test-user"
|
|
password = "test-password"
|
|
fileKeyringPassphrase = "some-pass-phrase"
|
|
)
|
|
|
|
// TestSet tests setting a user and password in the keyring.
|
|
func TestSet(t *testing.T) {
|
|
err := Set(VAULT_SELECTION_AUTO, service, user, password)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestSetTooLong(t *testing.T) {
|
|
extraLongPassword := "ba" + strings.Repeat("na", 5000)
|
|
err := Set(VAULT_SELECTION_AUTO, service, user, extraLongPassword)
|
|
|
|
if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
|
|
// should fail on those platforms
|
|
if err != ErrSetDataTooBig {
|
|
t.Errorf("Should have failed, got: %s", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestGetMultiline tests getting a multi-line password from the keyring
|
|
func TestGetMultiLine(t *testing.T) {
|
|
multilinePassword := `this password
|
|
has multiple
|
|
lines and will be
|
|
encoded by some keyring implementiations
|
|
like osx`
|
|
err := Set(VAULT_SELECTION_AUTO, service, user, multilinePassword)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
pw, err := Get(VAULT_SELECTION_AUTO, service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
if multilinePassword != pw {
|
|
t.Errorf("Expected password %s, got %s", multilinePassword, pw)
|
|
}
|
|
}
|
|
|
|
// TestGetMultiline tests getting a multi-line password from the keyring
|
|
func TestGetUmlaut(t *testing.T) {
|
|
umlautPassword := "at least on OSX üöäÜÖÄß will be encoded"
|
|
err := Set(VAULT_SELECTION_AUTO, service, user, umlautPassword)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
pw, err := Get(VAULT_SELECTION_AUTO, service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
if umlautPassword != pw {
|
|
t.Errorf("Expected password %s, got %s", umlautPassword, pw)
|
|
}
|
|
}
|
|
|
|
// TestGetSingleLineHex tests getting a single line hex string password from the keyring.
|
|
func TestGetSingleLineHex(t *testing.T) {
|
|
hexPassword := "abcdef123abcdef123"
|
|
err := Set(VAULT_SELECTION_AUTO, service, user, hexPassword)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
pw, err := Get(VAULT_SELECTION_AUTO, service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
if hexPassword != pw {
|
|
t.Errorf("Expected password %s, got %s", hexPassword, pw)
|
|
}
|
|
}
|
|
|
|
// TestGet tests getting a password from the keyring.
|
|
func TestGet(t *testing.T) {
|
|
err := Set(VAULT_SELECTION_AUTO, service, user, password)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
pw, err := Get(VAULT_SELECTION_AUTO, service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
if password != pw {
|
|
t.Errorf("Expected password %s, got %s", password, pw)
|
|
}
|
|
}
|
|
|
|
// TestGetNonExisting tests getting a secret not in the keyring.
|
|
func TestGetNonExisting(t *testing.T) {
|
|
_, err := Get(VAULT_SELECTION_AUTO, service, user+"fake")
|
|
if err != ErrNotFound {
|
|
t.Errorf("Expected error ErrNotFound, got %s", err)
|
|
}
|
|
}
|
|
|
|
// TestDelete tests deleting a secret from the keyring.
|
|
func TestDelete(t *testing.T) {
|
|
err := Delete(VAULT_SELECTION_AUTO, service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
}
|
|
|
|
// TestDeleteNonExisting tests deleting a secret not in the keyring.
|
|
func TestDeleteNonExisting(t *testing.T) {
|
|
err := Delete(VAULT_SELECTION_AUTO, service, user+"fake")
|
|
if err != ErrNotFound {
|
|
t.Errorf("Expected error ErrNotFound, got %s", err)
|
|
}
|
|
}
|
|
|
|
// TestSet tests setting a user and password in the [file] keyring.
|
|
func TestSetForFileKeyring(t *testing.T) {
|
|
// set pass phrase via shell
|
|
os.Setenv(shellPassPhraseEnvName, fileKeyringPassphrase)
|
|
|
|
err := Set("file", service, user, password)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestGetForFileKeyring(t *testing.T) {
|
|
// set pass phrase via shell
|
|
os.Setenv(shellPassPhraseEnvName, fileKeyringPassphrase)
|
|
|
|
const valueToStore = `this password
|
|
has multiple
|
|
lines and will be
|
|
encoded by some keyring implementiations
|
|
like osx`
|
|
|
|
err := Set("file", service, user, valueToStore)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
// read the value after saved
|
|
value, err := Get("file", service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
if value != valueToStore {
|
|
t.Errorf("Value set was %s but got: %s", valueToStore, value)
|
|
}
|
|
}
|
|
|
|
func TestGetMultiLineForFileKeyring(t *testing.T) {
|
|
// set pass phrase via shell
|
|
os.Setenv(shellPassPhraseEnvName, fileKeyringPassphrase)
|
|
|
|
const valueToStore = `this password
|
|
has multiple
|
|
lines and will be
|
|
encoded by some keyring implementiations
|
|
like osx`
|
|
|
|
err := Set("file", service, user, valueToStore)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
// read the value after saved
|
|
value, err := Get("file", service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
if value != valueToStore {
|
|
t.Errorf("Value set was %s but got: %s", valueToStore, value)
|
|
}
|
|
}
|
|
|
|
func TestDeleteFileKeyring(t *testing.T) {
|
|
// set pass phrase via shell
|
|
os.Setenv(shellPassPhraseEnvName, fileKeyringPassphrase)
|
|
|
|
// save a key value first
|
|
err := Set("file", service, user, password)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
// read the value after saved
|
|
_, err = Get("file", service, user)
|
|
if err != nil {
|
|
t.Errorf("Should not fail, got: %s", err)
|
|
}
|
|
|
|
err = Delete("file", service, user)
|
|
|
|
if err != nil {
|
|
t.Error("Something went wrong when deleting from file keyring")
|
|
}
|
|
}
|