state_setter_test.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package privacyExtension
  2. import (
  3. "errors"
  4. "testing"
  5. "github.com/ethereum/go-ethereum/common"
  6. "github.com/ethereum/go-ethereum/core/mps"
  7. "github.com/ethereum/go-ethereum/core/state"
  8. "github.com/ethereum/go-ethereum/core/types"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestExtensionHandler_CheckExtensionAndSetPrivateState_NoLogs(t *testing.T) {
  12. ptm := &mockPrivateTransactionManager{}
  13. handler := NewExtensionHandler(ptm)
  14. statedb := createStateDb(t, &state.PrivacyMetadata{})
  15. dbBefore := statedb.Copy()
  16. rootBeforeExtension, _ := statedb.Commit(true)
  17. handler.CheckExtensionAndSetPrivateState(nil, statedb, types.DefaultPrivateStateIdentifier)
  18. rootAfterExtension, _ := statedb.Commit(true)
  19. assert.Equal(t, rootBeforeExtension, rootAfterExtension)
  20. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  21. beforeManagedParties, _ := dbBefore.GetManagedParties(address)
  22. afterManagedParties, _ := statedb.GetManagedParties(address)
  23. assert.Equal(t, beforeManagedParties, afterManagedParties)
  24. beforePrivacyMetadata, _ := dbBefore.GetPrivacyMetadata(address)
  25. afterPrivacyMetadata, _ := statedb.GetPrivacyMetadata(address)
  26. assert.Equal(t, beforePrivacyMetadata, afterPrivacyMetadata)
  27. }
  28. func TestExtensionHandler_CheckExtensionAndSetPrivateState_LogsAreNotExtensionLogs(t *testing.T) {
  29. ptm := &mockPrivateTransactionManager{}
  30. handler := NewExtensionHandler(ptm)
  31. statedb := createStateDb(t, &state.PrivacyMetadata{})
  32. dbBefore := statedb.Copy()
  33. rootBeforeExtension, _ := statedb.Commit(true)
  34. notExtensionLogs := []*types.Log{
  35. {
  36. Address: common.HexToAddress("0x9ccd1e1089c79fe1cca81601fc9ccfa24f77eb58"),
  37. Topics: []common.Hash{common.HexToHash("0x24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b")},
  38. Data: []byte{},
  39. BlockNumber: 6,
  40. TxHash: common.HexToHash("0x5faf9ffe6fedc1139bdc1af20b26a2e113d16d736be872571458f8d4bcc048c7"),
  41. TxIndex: 0,
  42. BlockHash: common.HexToHash("0x7e7fb6985ff7e1c7293b8e3202a2b101458acd0b93b5fbed18aab40e8cbeb587"),
  43. Index: 0,
  44. Removed: false,
  45. PSI: types.DefaultPrivateStateIdentifier,
  46. },
  47. }
  48. handler.CheckExtensionAndSetPrivateState(notExtensionLogs, statedb, types.DefaultPrivateStateIdentifier)
  49. rootAfterExtension, _ := statedb.Commit(true)
  50. assert.Equal(t, rootBeforeExtension, rootAfterExtension)
  51. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  52. beforeManagedParties, _ := dbBefore.GetManagedParties(address)
  53. afterManagedParties, _ := statedb.GetManagedParties(address)
  54. assert.Equal(t, beforeManagedParties, afterManagedParties)
  55. beforePrivacyMetadata, _ := dbBefore.GetPrivacyMetadata(address)
  56. afterPrivacyMetadata, _ := statedb.GetPrivacyMetadata(address)
  57. assert.Equal(t, beforePrivacyMetadata, afterPrivacyMetadata)
  58. }
  59. func TestExtensionHandler_UuidIsOwn_EmptyUUID(t *testing.T) {
  60. ptm := &mockPrivateTransactionManager{}
  61. handler := NewExtensionHandler(ptm)
  62. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  63. isOwn := handler.UuidIsOwn(address, "", types.DefaultPrivateStateIdentifier)
  64. assert.False(t, isOwn)
  65. }
  66. func TestExtensionHandler_UuidIsOwn_IsSenderIsFalse(t *testing.T) {
  67. ptm := &mockPrivateTransactionManager{
  68. returns: map[string][]interface{}{"IsSender": {false, nil}},
  69. }
  70. handler := NewExtensionHandler(ptm)
  71. const uuid = "0xabcd"
  72. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  73. isOwn := handler.UuidIsOwn(address, uuid, types.DefaultPrivateStateIdentifier)
  74. assert.False(t, isOwn)
  75. }
  76. func TestExtensionHandler_UuidIsOwn_WrongPSIFails(t *testing.T) {
  77. ptm := &mockPrivateTransactionManager{
  78. returns: map[string][]interface{}{
  79. "IsSender": {true, nil},
  80. "Receive": {"psi1", nil, []byte{}, nil, nil},
  81. },
  82. }
  83. handler := NewExtensionHandler(ptm)
  84. psmr := &mockPSMR{
  85. returns: map[string][]interface{}{
  86. "ResolveForManagedParty": {&mps.PrivateStateMetadata{ID: "psi1", Type: mps.Resident}, nil},
  87. },
  88. }
  89. handler.SetPSMR(psmr)
  90. uuid := "0xabcd"
  91. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  92. isOwn := handler.UuidIsOwn(address, uuid, "other")
  93. assert.False(t, isOwn)
  94. }
  95. func TestExtensionHandler_UuidIsOwn_DecryptPayloadFails(t *testing.T) {
  96. ptm := &mockPrivateTransactionManager{
  97. returns: map[string][]interface{}{
  98. "IsSender": {true, nil},
  99. "Receive": {"psi1", nil, []byte(`{"somedata": "val"}`), nil, nil},
  100. "DecryptPayload": {nil, nil, errors.New("test error")},
  101. },
  102. }
  103. handler := NewExtensionHandler(ptm)
  104. psmr := &mockPSMR{
  105. returns: map[string][]interface{}{
  106. "ResolveForManagedParty": {&mps.PrivateStateMetadata{ID: "psi1", Type: mps.Resident}, nil},
  107. },
  108. }
  109. handler.SetPSMR(psmr)
  110. uuid := "0xabcd"
  111. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  112. isOwn := handler.UuidIsOwn(address, uuid, "psi1")
  113. assert.False(t, isOwn)
  114. }
  115. func TestExtensionHandler_UuidIsOwn_AddressDoesntMatch(t *testing.T) {
  116. ptm := &mockPrivateTransactionManager{
  117. returns: map[string][]interface{}{
  118. "IsSender": {true, nil},
  119. "Receive": {"psi1", nil, []byte(`{"somedata": "val"}`), nil, nil},
  120. "DecryptPayload": {[]byte(`unknown`), nil, nil},
  121. },
  122. }
  123. handler := NewExtensionHandler(ptm)
  124. psmr := &mockPSMR{
  125. returns: map[string][]interface{}{
  126. "ResolveForManagedParty": {&mps.PrivateStateMetadata{ID: "psi1", Type: mps.Resident}, nil},
  127. },
  128. }
  129. handler.SetPSMR(psmr)
  130. uuid := "0xabcd"
  131. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  132. isOwn := handler.UuidIsOwn(address, uuid, "psi1")
  133. assert.False(t, isOwn)
  134. }
  135. func TestExtensionHandler_UuidIsOwn_AddressMatches(t *testing.T) {
  136. uuid := "0xabcd"
  137. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  138. ptm := &mockPrivateTransactionManager{
  139. returns: map[string][]interface{}{
  140. "IsSender": {true, nil},
  141. "Receive": {"psi1", nil, []byte(`{"somedata": "val"}`), nil, nil},
  142. "DecryptPayload": {address.Bytes(), nil, nil},
  143. },
  144. }
  145. handler := NewExtensionHandler(ptm)
  146. psmr := &mockPSMR{
  147. returns: map[string][]interface{}{
  148. "ResolveForManagedParty": {&mps.PrivateStateMetadata{ID: "psi1", Type: mps.Resident}, nil},
  149. },
  150. }
  151. handler.SetPSMR(psmr)
  152. isOwn := handler.UuidIsOwn(address, uuid, "psi1")
  153. assert.True(t, isOwn)
  154. }
  155. func TestExtensionHandler_UuidIsOwn_PrivatePSMRSucceeds(t *testing.T) {
  156. uuid := "0xabcd"
  157. address := common.HexToAddress("0x2222222222222222222222222222222222222222")
  158. ptm := &mockPrivateTransactionManager{
  159. returns: map[string][]interface{}{
  160. "IsSender": {true, nil},
  161. "Receive": {"psi1, private", nil, []byte(`{"somedata": "val"}`), nil, nil},
  162. "DecryptPayload": {address.Bytes(), nil, nil},
  163. },
  164. }
  165. handler := NewExtensionHandler(ptm)
  166. psmr := &mockPSMR{
  167. returns: map[string][]interface{}{
  168. "ResolveForManagedParty": {&mps.PrivateStateMetadata{ID: "private", Type: mps.Resident}, nil},
  169. },
  170. }
  171. handler.SetPSMR(psmr)
  172. isOwn := handler.UuidIsOwn(address, uuid, types.DefaultPrivateStateIdentifier)
  173. assert.True(t, isOwn)
  174. }