diff --git a/osxkeychain/osxkeychain_darwin.go b/osxkeychain/osxkeychain_darwin.go index 8d8925d..272b763 100644 --- a/osxkeychain/osxkeychain_darwin.go +++ b/osxkeychain/osxkeychain_darwin.go @@ -66,10 +66,16 @@ func (h Osxkeychain) Delete(serverURL string) error { } defer freeServer(s) - errMsg := C.keychain_delete(s) - if errMsg != nil { + if errMsg := C.keychain_delete(s); errMsg != nil { defer C.free(unsafe.Pointer(errMsg)) - return errors.New(C.GoString(errMsg)) + switch goMsg := C.GoString(errMsg); goMsg { + case errCredentialsNotFound: + return credentials.NewErrCredentialsNotFound() + case errInteractionNotAllowed: + return ErrInteractionNotAllowed + default: + return errors.New(goMsg) + } } return nil diff --git a/osxkeychain/osxkeychain_darwin_test.go b/osxkeychain/osxkeychain_darwin_test.go index 27518e5..b5098ef 100644 --- a/osxkeychain/osxkeychain_darwin_test.go +++ b/osxkeychain/osxkeychain_darwin_test.go @@ -205,9 +205,14 @@ func TestOSXKeychainHelperStoreRetrieve(t *testing.T) { } func TestMissingCredentials(t *testing.T) { + const nonExistingCred = "https://adsfasdf.invalid/asdfsdddd" helper := Osxkeychain{} - _, _, err := helper.Get("https://adsfasdf.wrewerwer.com/asdfsdddd") + _, _, err := helper.Get(nonExistingCred) if !credentials.IsErrCredentialsNotFound(err) { - t.Fatalf("expected ErrCredentialsNotFound, got %v", err) + t.Errorf("expected ErrCredentialsNotFound, got %v", err) + } + err = helper.Delete(nonExistingCred) + if !credentials.IsErrCredentialsNotFound(err) { + t.Errorf("expected ErrCredentialsNotFound, got %v", err) } }