1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
package keyring
import (
"runtime"
"strings"
"testing"
)
const (
service = "test-service"
user = "test-user"
password = "test-password"
)
// TestSet tests setting a user and password in the keyring.
func TestSet(t *testing.T) {
err := Set(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(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(service, user, multilinePassword)
if err != nil {
t.Errorf("Should not fail, got: %s", err)
}
pw, err := Get(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(service, user, umlautPassword)
if err != nil {
t.Errorf("Should not fail, got: %s", err)
}
pw, err := Get(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(service, user, hexPassword)
if err != nil {
t.Errorf("Should not fail, got: %s", err)
}
pw, err := Get(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(service, user, password)
if err != nil {
t.Errorf("Should not fail, got: %s", err)
}
pw, err := Get(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(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(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(service, user+"fake")
if err != ErrNotFound {
t.Errorf("Expected error ErrNotFound, got %s", err)
}
}
|