Move account handling to the vaultService

Also implement the unsupported Derive and SelfDerive methods
This commit is contained in:
chris-j-h 2019-07-08 16:43:04 +01:00
parent befd39c74c
commit 871e722820
2 changed files with 22 additions and 15 deletions

View File

@ -16,7 +16,6 @@ type vaultWallet struct {
url accounts.URL url accounts.URL
vault vaultService vault vaultService
updateFeed *event.Feed updateFeed *event.Feed
accounts []accounts.Account
} }
// vault related behaviour that will be specific to each vault type // vault related behaviour that will be specific to each vault type
@ -24,6 +23,7 @@ type vaultService interface {
status() (string, error) status() (string, error)
open() error open() error
close() error close() error
accounts() []accounts.Account
} }
func newHashicorpWallet(config hashicorpWalletConfig, updateFeed *event.Feed) (vaultWallet, error) { func newHashicorpWallet(config hashicorpWalletConfig, updateFeed *event.Feed) (vaultWallet, error) {
@ -63,10 +63,7 @@ func (w vaultWallet) Close() error {
} }
func (w vaultWallet) Accounts() []accounts.Account { func (w vaultWallet) Accounts() []accounts.Account {
cpy := make([]accounts.Account, len(w.accounts)) return w.vault.accounts()
copy(cpy, w.accounts)
return cpy
} }
func (w vaultWallet) Contains(account accounts.Account) bool { func (w vaultWallet) Contains(account accounts.Account) bool {
@ -74,7 +71,7 @@ func (w vaultWallet) Contains(account accounts.Account) bool {
return x.Address == y.Address && (x.URL == y.URL || x.URL == accounts.URL{} || y.URL == accounts.URL{}) return x.Address == y.Address && (x.URL == y.URL || x.URL == accounts.URL{} || y.URL == accounts.URL{})
} }
accts := w.accounts accts := w.Accounts()
for _, a := range accts { for _, a := range accts {
if equal(a, account) { if equal(a, account) {
@ -85,12 +82,10 @@ func (w vaultWallet) Contains(account accounts.Account) bool {
} }
func (w vaultWallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Account, error) { func (w vaultWallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Account, error) {
panic("implement me") return accounts.Account{}, accounts.ErrNotSupported
} }
func (w vaultWallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) { func (w vaultWallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) {}
panic("implement me")
}
func (w vaultWallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) { func (w vaultWallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) {
panic("implement me") panic("implement me")
@ -111,6 +106,7 @@ func (w vaultWallet) SignTxWithPassphrase(account accounts.Account, passphrase s
type hashicorpService struct { type hashicorpService struct {
client *api.Client client *api.Client
config hashicorpClientConfig config hashicorpClientConfig
accts []accounts.Account
} }
const ( const (
@ -237,3 +233,10 @@ func (h *hashicorpService) close() error {
return nil return nil
} }
func (h *hashicorpService) accounts() []accounts.Account {
cpy := make([]accounts.Account, len(h.accts))
copy(cpy, h.accts)
return cpy
}

View File

@ -554,18 +554,20 @@ func TestVaultWallet_Close_Hashicorp_ReturnsStateToBeforeOpen(t *testing.T) {
func TestVaultWallet_Accounts_ReturnsCopyOfAccountsInWallet(t *testing.T) { func TestVaultWallet_Accounts_ReturnsCopyOfAccountsInWallet(t *testing.T) {
w := vaultWallet{ w := vaultWallet{
accounts: []accounts.Account{{URL: accounts.URL{Scheme: "http", Path: "url:1"}}}, vault: &hashicorpService{accts: []accounts.Account{{URL: accounts.URL{Scheme: "http", Path: "url:1"}}}},
} }
got := w.Accounts() got := w.Accounts()
if !cmp.Equal(w.accounts, got) { v := w.vault.(*hashicorpService)
t.Fatalf("want: %v, got: %v", w.accounts, got)
if !cmp.Equal(v.accts, got) {
t.Fatalf("want: %v, got: %v", v.accts, got)
} }
got[0].URL = accounts.URL{Scheme: "http", Path: "changed:1"} got[0].URL = accounts.URL{Scheme: "http", Path: "changed:1"}
if cmp.Equal(w.accounts, got) { if cmp.Equal(v.accts, got) {
t.Fatalf("changes to the returned accounts should not change the wallet's record of accounts") t.Fatalf("changes to the returned accounts should not change the wallet's record of accounts")
} }
} }
@ -603,7 +605,9 @@ func TestVaultWallet_Contains(t *testing.T) {
for name, tt := range tests { for name, tt := range tests {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
w := vaultWallet{accounts: tt.accts} w := vaultWallet{
vault: &hashicorpService{accts: tt.accts},
}
got := w.Contains(tt.toFind) got := w.Contains(tt.toFind)