diff options
author | Gustav Simonsson <gustav.simonsson@gmail.com> | 2015-02-26 00:29:23 +0800 |
---|---|---|
committer | Gustav Simonsson <gustav.simonsson@gmail.com> | 2015-02-26 00:37:12 +0800 |
commit | b296b36d2b2aaa2f81d26b3c133ace2714c58a7d (patch) | |
tree | ba6817a91c1598f2587f9972494c7b0338918172 /accounts/accounts_test.go | |
parent | fe730239400e73babf829857272c42af7563efce (diff) | |
download | dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.tar dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.tar.gz dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.tar.bz2 dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.tar.lz dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.tar.xz dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.tar.zst dexon-b296b36d2b2aaa2f81d26b3c133ace2714c58a7d.zip |
Add automatic locking / unlocking of accounts
* Change account signing API to two sign functions;
Sign without passphrase - works if account is unlocked
Sign with passphrase - always works and unlocks the account
* Account stays unlocked for X ms and is then automatically locked
Diffstat (limited to 'accounts/accounts_test.go')
-rw-r--r-- | accounts/accounts_test.go | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/accounts/accounts_test.go b/accounts/accounts_test.go index 4e97de545..8f036fd1f 100644 --- a/accounts/accounts_test.go +++ b/accounts/accounts_test.go @@ -6,20 +6,69 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto/randentropy" "github.com/ethereum/go-ethereum/ethutil" + "time" ) func TestAccountManager(t *testing.T) { ks := crypto.NewKeyStorePlain(ethutil.DefaultDataDir() + "/testaccounts") - am := NewAccountManager(ks) + am := NewAccountManager(ks, 100) pass := "" // not used but required by API a1, err := am.NewAccount(pass) toSign := randentropy.GetEntropyCSPRNG(32) - _, err = am.Sign(a1, pass, toSign) + _, err = am.SignLocked(a1, pass, toSign) if err != nil { t.Fatal(err) } // Cleanup + time.Sleep(time.Millisecond * time.Duration(150)) // wait for locking + + accounts, err := am.Accounts() + if err != nil { + t.Fatal(err) + } + for _, account := range accounts { + err := am.DeleteAccount(account.Address, pass) + if err != nil { + t.Fatal(err) + } + } +} + +func TestAccountManagerLocking(t *testing.T) { + ks := crypto.NewKeyStorePassphrase(ethutil.DefaultDataDir() + "/testaccounts") + am := NewAccountManager(ks, 200) + pass := "foo" + a1, err := am.NewAccount(pass) + toSign := randentropy.GetEntropyCSPRNG(32) + + // Signing without passphrase fails because account is locked + _, err = am.Sign(a1, toSign) + if err != ErrLocked { + t.Fatal(err) + } + + // Signing with passphrase works + _, err = am.SignLocked(a1, pass, toSign) + if err != nil { + t.Fatal(err) + } + + // Signing without passphrase works because account is temp unlocked + _, err = am.Sign(a1, toSign) + if err != nil { + t.Fatal(err) + } + + // Signing without passphrase fails after automatic locking + time.Sleep(time.Millisecond * time.Duration(250)) + + _, err = am.Sign(a1, toSign) + if err != ErrLocked { + t.Fatal(err) + } + + // Cleanup accounts, err := am.Accounts() if err != nil { t.Fatal(err) |