github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/core/transaction/oracle_test.go (about)

     1  package transaction
     2  
     3  import (
     4  	"encoding/json"
     5  	"math/rand"
     6  	"testing"
     7  
     8  	"github.com/nspcc-dev/neo-go/internal/testserdes"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestOracleResponse_EncodeBinary(t *testing.T) {
    13  	t.Run("Success", func(t *testing.T) {
    14  		r := &OracleResponse{
    15  			ID:     rand.Uint64(),
    16  			Code:   Success,
    17  			Result: []byte{1, 2, 3, 4, 5},
    18  		}
    19  		testserdes.EncodeDecodeBinary(t, r, new(OracleResponse))
    20  	})
    21  	t.Run("ErrorCodes", func(t *testing.T) {
    22  		codes := []OracleResponseCode{NotFound, Timeout, Forbidden, Error}
    23  		for _, c := range codes {
    24  			r := &OracleResponse{
    25  				ID:     rand.Uint64(),
    26  				Code:   c,
    27  				Result: []byte{},
    28  			}
    29  			testserdes.EncodeDecodeBinary(t, r, new(OracleResponse))
    30  		}
    31  	})
    32  	t.Run("Error", func(t *testing.T) {
    33  		t.Run("InvalidCode", func(t *testing.T) {
    34  			r := &OracleResponse{
    35  				ID:     rand.Uint64(),
    36  				Code:   0x42,
    37  				Result: []byte{},
    38  			}
    39  			bs, err := testserdes.EncodeBinary(r)
    40  			require.NoError(t, err)
    41  
    42  			err = testserdes.DecodeBinary(bs, new(OracleResponse))
    43  			require.ErrorIs(t, err, ErrInvalidResponseCode)
    44  		})
    45  		t.Run("InvalidResult", func(t *testing.T) {
    46  			r := &OracleResponse{
    47  				ID:     rand.Uint64(),
    48  				Code:   Error,
    49  				Result: []byte{1},
    50  			}
    51  			bs, err := testserdes.EncodeBinary(r)
    52  			require.NoError(t, err)
    53  
    54  			err = testserdes.DecodeBinary(bs, new(OracleResponse))
    55  			require.ErrorIs(t, err, ErrInvalidResult)
    56  		})
    57  	})
    58  }
    59  
    60  func TestOracleResponse_toJSONMap(t *testing.T) {
    61  	r := &OracleResponse{
    62  		ID:     rand.Uint64(),
    63  		Code:   Success,
    64  		Result: []byte{1},
    65  	}
    66  
    67  	b1, err := json.Marshal(r)
    68  	require.NoError(t, err)
    69  
    70  	m := map[string]any{}
    71  	r.toJSONMap(m)
    72  	b2, err := json.Marshal(m)
    73  	require.NoError(t, err)
    74  	require.JSONEq(t, string(b1), string(b2))
    75  }