accounts_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package accounts
  2. import (
  3. "testing"
  4. "github.com/ethereum/go-ethereum/crypto"
  5. "github.com/ethereum/go-ethereum/crypto/randentropy"
  6. "github.com/ethereum/go-ethereum/ethutil"
  7. "time"
  8. )
  9. func TestAccountManager(t *testing.T) {
  10. ks := crypto.NewKeyStorePlain(ethutil.DefaultDataDir() + "/testaccounts")
  11. am := NewAccountManager(ks, 100)
  12. pass := "" // not used but required by API
  13. a1, err := am.NewAccount(pass)
  14. toSign := randentropy.GetEntropyCSPRNG(32)
  15. _, err = am.SignLocked(a1, pass, toSign)
  16. if err != nil {
  17. t.Fatal(err)
  18. }
  19. // Cleanup
  20. time.Sleep(time.Millisecond * 150) // wait for locking
  21. accounts, err := am.Accounts()
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. for _, account := range accounts {
  26. err := am.DeleteAccount(account.Address, pass)
  27. if err != nil {
  28. t.Fatal(err)
  29. }
  30. }
  31. }
  32. func TestAccountManagerLocking(t *testing.T) {
  33. ks := crypto.NewKeyStorePassphrase(ethutil.DefaultDataDir() + "/testaccounts")
  34. am := NewAccountManager(ks, 200)
  35. pass := "foo"
  36. a1, err := am.NewAccount(pass)
  37. toSign := randentropy.GetEntropyCSPRNG(32)
  38. // Signing without passphrase fails because account is locked
  39. _, err = am.Sign(a1, toSign)
  40. if err != ErrLocked {
  41. t.Fatal(err)
  42. }
  43. // Signing with passphrase works
  44. _, err = am.SignLocked(a1, pass, toSign)
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. // Signing without passphrase works because account is temp unlocked
  49. _, err = am.Sign(a1, toSign)
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. // Signing without passphrase fails after automatic locking
  54. time.Sleep(time.Millisecond * time.Duration(250))
  55. _, err = am.Sign(a1, toSign)
  56. if err != ErrLocked {
  57. t.Fatal(err)
  58. }
  59. // Cleanup
  60. accounts, err := am.Accounts()
  61. if err != nil {
  62. t.Fatal(err)
  63. }
  64. for _, account := range accounts {
  65. err := am.DeleteAccount(account.Address, pass)
  66. if err != nil {
  67. t.Fatal(err)
  68. }
  69. }
  70. }