accounts: use time.Duration correctly

There is no point to using time.Duration if the value is interpreted as
milliseconds. Callers should use the standard multiplication idiom to
choose the unit. In fact, the only caller outside of the tests already
does so.
pull/447/head
Felix Lange 10 years ago
parent fda7b4c79d
commit afc530ea41
  1. 9
      accounts/account_manager.go
  2. 8
      accounts/accounts_test.go

@ -33,6 +33,7 @@ and accounts persistence is derived from stored keys' addresses
package accounts
import (
"crypto/ecdsa"
crand "crypto/rand"
"errors"
@ -54,15 +55,15 @@ type Account struct {
type AccountManager struct {
keyStore crypto.KeyStore2
unlockedKeys map[string]crypto.Key
unlockMilliseconds time.Duration
unlockTime time.Duration
mutex sync.RWMutex
}
func NewAccountManager(keyStore crypto.KeyStore2, unlockMilliseconds time.Duration) *AccountManager {
func NewAccountManager(keyStore crypto.KeyStore2, unlockTime time.Duration) *AccountManager {
return &AccountManager{
keyStore: keyStore,
unlockedKeys: make(map[string]crypto.Key),
unlockMilliseconds: unlockMilliseconds,
unlockTime: unlockTime,
}
}
@ -144,7 +145,7 @@ func (am *AccountManager) Accounts() ([]Account, error) {
func unlockLater(am *AccountManager, addr []byte) {
select {
case <-time.After(time.Millisecond * am.unlockMilliseconds):
case <-time.After(am.unlockTime):
}
am.mutex.RLock()
// TODO: how do we know the key is actually gone from memory?

@ -12,7 +12,7 @@ import (
func TestAccountManager(t *testing.T) {
ks := crypto.NewKeyStorePlain(ethutil.DefaultDataDir() + "/testaccounts")
am := NewAccountManager(ks, 100)
am := NewAccountManager(ks, 100*time.Millisecond)
pass := "" // not used but required by API
a1, err := am.NewAccount(pass)
toSign := randentropy.GetEntropyCSPRNG(32)
@ -22,7 +22,7 @@ func TestAccountManager(t *testing.T) {
}
// Cleanup
time.Sleep(time.Millisecond * 150) // wait for locking
time.Sleep(150 * time.Millisecond) // wait for locking
accounts, err := am.Accounts()
if err != nil {
@ -38,7 +38,7 @@ func TestAccountManager(t *testing.T) {
func TestAccountManagerLocking(t *testing.T) {
ks := crypto.NewKeyStorePassphrase(ethutil.DefaultDataDir() + "/testaccounts")
am := NewAccountManager(ks, 200)
am := NewAccountManager(ks, 200*time.Millisecond)
pass := "foo"
a1, err := am.NewAccount(pass)
toSign := randentropy.GetEntropyCSPRNG(32)
@ -62,7 +62,7 @@ func TestAccountManagerLocking(t *testing.T) {
}
// Signing without passphrase fails after automatic locking
time.Sleep(time.Millisecond * time.Duration(250))
time.Sleep(250 * time.Millisecond)
_, err = am.Sign(a1, toSign)
if err != ErrLocked {

Loading…
Cancel
Save