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  }