You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.7 KiB

  1. package tx
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "github.com/stretchr/testify/require"
  6. crypto "github.com/tendermint/go-crypto"
  7. "github.com/tendermint/go-crypto/keys"
  8. "github.com/tendermint/go-crypto/keys/cryptostore"
  9. "github.com/tendermint/go-crypto/keys/storage/memstorage"
  10. data "github.com/tendermint/go-wire/data"
  11. )
  12. func TestReader(t *testing.T) {
  13. assert, require := assert.New(t), require.New(t)
  14. algo := crypto.NameEd25519
  15. cstore := cryptostore.New(
  16. cryptostore.SecretBox,
  17. memstorage.New(),
  18. keys.MustLoadCodec("english"),
  19. )
  20. type sigs struct{ name, pass string }
  21. u := sigs{"alice", "1234"}
  22. u2 := sigs{"bob", "foobar"}
  23. _, _, err := cstore.Create(u.name, u.pass, algo)
  24. require.Nil(err, "%+v", err)
  25. _, _, err = cstore.Create(u2.name, u2.pass, algo)
  26. require.Nil(err, "%+v", err)
  27. cases := []struct {
  28. tx Sig
  29. sigs []sigs
  30. }{
  31. {New([]byte("first")), nil},
  32. {New([]byte("second")), []sigs{u}},
  33. {New([]byte("other")), []sigs{u2}},
  34. {NewMulti([]byte("m-first")), nil},
  35. {NewMulti([]byte("m-second")), []sigs{u}},
  36. {NewMulti([]byte("m-other")), []sigs{u, u2}},
  37. }
  38. for _, tc := range cases {
  39. tx := tc.tx
  40. // make sure json serialization and loading works w/o sigs
  41. var pre Sig
  42. pjs, err := data.ToJSON(tx)
  43. require.Nil(err, "%+v", err)
  44. err = data.FromJSON(pjs, &pre)
  45. require.Nil(err, "%+v", err)
  46. assert.Equal(tx, pre)
  47. for _, s := range tc.sigs {
  48. err = cstore.Sign(s.name, s.pass, tx)
  49. require.Nil(err, "%+v", err)
  50. }
  51. var post Sig
  52. sjs, err := data.ToJSON(tx)
  53. require.Nil(err, "%+v", err)
  54. err = data.FromJSON(sjs, &post)
  55. require.Nil(err, "%+v\n%s", err, string(sjs))
  56. assert.Equal(tx, post)
  57. if len(tc.sigs) > 0 {
  58. assert.NotEqual(pjs, sjs, "%s\n ------ %s", string(pjs), string(sjs))
  59. }
  60. }
  61. }