github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/rpcclient/policy/policy_test.go (about) 1 package policy 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/pkg/core/transaction" 8 "github.com/nspcc-dev/neo-go/pkg/neorpc/result" 9 "github.com/nspcc-dev/neo-go/pkg/util" 10 "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" 11 "github.com/stretchr/testify/require" 12 ) 13 14 type testAct struct { 15 err error 16 res *result.Invoke 17 tx *transaction.Transaction 18 txh util.Uint256 19 vub uint32 20 } 21 22 func (t *testAct) Call(contract util.Uint160, operation string, params ...any) (*result.Invoke, error) { 23 return t.res, t.err 24 } 25 func (t *testAct) MakeCall(contract util.Uint160, method string, params ...any) (*transaction.Transaction, error) { 26 return t.tx, t.err 27 } 28 func (t *testAct) MakeUnsignedCall(contract util.Uint160, method string, attrs []transaction.Attribute, params ...any) (*transaction.Transaction, error) { 29 return t.tx, t.err 30 } 31 func (t *testAct) SendCall(contract util.Uint160, method string, params ...any) (util.Uint256, uint32, error) { 32 return t.txh, t.vub, t.err 33 } 34 func (t *testAct) MakeRun(script []byte) (*transaction.Transaction, error) { 35 return t.tx, t.err 36 } 37 func (t *testAct) MakeUnsignedRun(script []byte, attrs []transaction.Attribute) (*transaction.Transaction, error) { 38 return t.tx, t.err 39 } 40 func (t *testAct) SendRun(script []byte) (util.Uint256, uint32, error) { 41 return t.txh, t.vub, t.err 42 } 43 44 func TestReader(t *testing.T) { 45 ta := new(testAct) 46 pc := NewReader(ta) 47 48 meth := []func() (int64, error){ 49 pc.GetExecFeeFactor, 50 pc.GetFeePerByte, 51 pc.GetStoragePrice, 52 } 53 54 ta.err = errors.New("") 55 for _, m := range meth { 56 _, err := m() 57 require.Error(t, err) 58 } 59 _, err := pc.IsBlocked(util.Uint160{1, 2, 3}) 60 require.Error(t, err) 61 _, err = pc.GetAttributeFee(transaction.ConflictsT) 62 require.Error(t, err) 63 64 ta.err = nil 65 ta.res = &result.Invoke{ 66 State: "HALT", 67 Stack: []stackitem.Item{ 68 stackitem.Make(42), 69 }, 70 } 71 for _, m := range meth { 72 val, err := m() 73 require.NoError(t, err) 74 require.Equal(t, int64(42), val) 75 } 76 v, err := pc.GetAttributeFee(transaction.ConflictsT) 77 require.NoError(t, err) 78 require.Equal(t, int64(42), v) 79 ta.res = &result.Invoke{ 80 State: "HALT", 81 Stack: []stackitem.Item{ 82 stackitem.Make(true), 83 }, 84 } 85 val, err := pc.IsBlocked(util.Uint160{1, 2, 3}) 86 require.NoError(t, err) 87 require.True(t, val) 88 } 89 90 func TestIntSetters(t *testing.T) { 91 ta := new(testAct) 92 pc := New(ta) 93 94 meth := []func(int64) (util.Uint256, uint32, error){ 95 pc.SetExecFeeFactor, 96 pc.SetFeePerByte, 97 pc.SetStoragePrice, 98 } 99 100 ta.err = errors.New("") 101 for _, m := range meth { 102 _, _, err := m(42) 103 require.Error(t, err) 104 } 105 _, _, err := pc.SetAttributeFee(transaction.OracleResponseT, 123) 106 require.Error(t, err) 107 108 ta.err = nil 109 ta.txh = util.Uint256{1, 2, 3} 110 ta.vub = 42 111 for _, m := range meth { 112 h, vub, err := m(100) 113 require.NoError(t, err) 114 require.Equal(t, ta.txh, h) 115 require.Equal(t, ta.vub, vub) 116 } 117 h, vub, err := pc.SetAttributeFee(transaction.OracleResponseT, 123) 118 require.NoError(t, err) 119 require.Equal(t, ta.txh, h) 120 require.Equal(t, ta.vub, vub) 121 } 122 123 func TestUint160Setters(t *testing.T) { 124 ta := new(testAct) 125 pc := New(ta) 126 127 meth := []func(util.Uint160) (util.Uint256, uint32, error){ 128 pc.BlockAccount, 129 pc.UnblockAccount, 130 } 131 132 ta.err = errors.New("") 133 for _, m := range meth { 134 _, _, err := m(util.Uint160{}) 135 require.Error(t, err) 136 } 137 138 ta.err = nil 139 ta.txh = util.Uint256{1, 2, 3} 140 ta.vub = 42 141 for _, m := range meth { 142 h, vub, err := m(util.Uint160{}) 143 require.NoError(t, err) 144 require.Equal(t, ta.txh, h) 145 require.Equal(t, ta.vub, vub) 146 } 147 } 148 149 func TestIntTransactions(t *testing.T) { 150 ta := new(testAct) 151 pc := New(ta) 152 153 for _, fun := range []func(int64) (*transaction.Transaction, error){ 154 pc.SetExecFeeFactorTransaction, 155 pc.SetExecFeeFactorUnsigned, 156 pc.SetFeePerByteTransaction, 157 pc.SetFeePerByteUnsigned, 158 pc.SetStoragePriceTransaction, 159 pc.SetStoragePriceUnsigned, 160 } { 161 ta.err = errors.New("") 162 _, err := fun(1) 163 require.Error(t, err) 164 165 ta.err = nil 166 ta.tx = &transaction.Transaction{Nonce: 100500, ValidUntilBlock: 42} 167 tx, err := fun(1) 168 require.NoError(t, err) 169 require.Equal(t, ta.tx, tx) 170 } 171 } 172 173 func TestUint160Transactions(t *testing.T) { 174 ta := new(testAct) 175 pc := New(ta) 176 177 for _, fun := range []func(util.Uint160) (*transaction.Transaction, error){ 178 pc.BlockAccountTransaction, 179 pc.BlockAccountUnsigned, 180 pc.UnblockAccountTransaction, 181 pc.UnblockAccountUnsigned, 182 } { 183 ta.err = errors.New("") 184 _, err := fun(util.Uint160{1}) 185 require.Error(t, err) 186 187 ta.err = nil 188 ta.tx = &transaction.Transaction{Nonce: 100500, ValidUntilBlock: 42} 189 tx, err := fun(util.Uint160{1}) 190 require.NoError(t, err) 191 require.Equal(t, ta.tx, tx) 192 } 193 }