github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/neorpc/result/version_test.go (about) 1 package result 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/pkg/config" 8 "github.com/nspcc-dev/neo-go/pkg/encoding/fixedn" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestVersion_MarshalUnmarshalJSON(t *testing.T) { 13 responseFromGoOld := `{ 14 "network": 860833102, 15 "nonce": 1677922561, 16 "protocol": { 17 "addressversion": 53, 18 "initialgasdistribution": "52000000", 19 "maxtraceableblocks": 2102400, 20 "maxtransactionsperblock": 512, 21 "maxvaliduntilblockincrement": 5760, 22 "memorypoolmaxtransactions": 50000, 23 "msperblock": 15000, 24 "network": 860833102, 25 "validatorscount": 7 26 }, 27 "tcpport": 10333, 28 "useragent": "/NEO-GO:0.98.2/", 29 "wsport": 10334 30 }` 31 responseFromGoNew := `{ 32 "nonce": 1677922561, 33 "protocol": { 34 "addressversion": 53, 35 "initialgasdistribution": 5200000000000000, 36 "maxtraceableblocks": 2102400, 37 "maxtransactionsperblock": 512, 38 "maxvaliduntilblockincrement": 5760, 39 "memorypoolmaxtransactions": 50000, 40 "msperblock": 15000, 41 "network": 860833102, 42 "validatorscount": 7, 43 "hardforks": [{"name": "Aspidochelone", "blockheight": 123}, {"name": "Basilisk", "blockheight": 1234}] 44 }, 45 "rpc": { 46 "maxiteratorresultitems": 100, 47 "sessionenabled": true 48 }, 49 "tcpport": 10333, 50 "useragent": "/NEO-GO:0.98.6/", 51 "wsport": 10334 52 }` 53 responseFromSharp := `{ 54 "nonce": 1677922561, 55 "protocol": { 56 "addressversion": 53, 57 "initialgasdistribution": 5200000000000000, 58 "maxtraceableblocks": 2102400, 59 "maxtransactionsperblock": 512, 60 "maxvaliduntilblockincrement": 5760, 61 "memorypoolmaxtransactions": 50000, 62 "msperblock": 15000, 63 "network": 860833102, 64 "validatorscount": 7, 65 "hardforks": [{"name": "HF_Aspidochelone", "blockheight": 123}, {"name": "HF_Basilisk", "blockheight": 1234}] 66 }, 67 "rpc": { 68 "maxiteratorresultitems": 100, 69 "sessionenabled": true 70 }, 71 "tcpport": 10333, 72 "useragent": "/Neo:3.1.0/", 73 "wsport": 10334 74 }` 75 v := &Version{ 76 TCPPort: 10333, 77 WSPort: 10334, 78 Nonce: 1677922561, 79 UserAgent: "/NEO-GO:0.98.6/", 80 RPC: RPC{ 81 MaxIteratorResultItems: 100, 82 SessionEnabled: true, 83 }, 84 Protocol: Protocol{ 85 AddressVersion: 53, 86 Network: 860833102, 87 MillisecondsPerBlock: 15000, 88 MaxTraceableBlocks: 2102400, 89 MaxValidUntilBlockIncrement: 5760, 90 MaxTransactionsPerBlock: 512, 91 MemoryPoolMaxTransactions: 50000, 92 ValidatorsCount: 7, 93 // Unmarshalled InitialGasDistribution should always be a valid Fixed8 for both old and new clients. 94 InitialGasDistribution: fixedn.Fixed8FromInt64(52000000), 95 StateRootInHeader: false, 96 Hardforks: map[config.Hardfork]uint32{config.HFAspidochelone: 123, config.HFBasilisk: 1234}, 97 }, 98 } 99 t.Run("MarshalJSON", func(t *testing.T) { 100 actual, err := json.Marshal(v) 101 require.NoError(t, err) 102 require.JSONEq(t, responseFromGoNew, string(actual)) 103 }) 104 t.Run("UnmarshalJSON", func(t *testing.T) { 105 t.Run("Go node response", func(t *testing.T) { 106 t.Run("old RPC server", func(t *testing.T) { 107 actual := &Version{} 108 require.Error(t, json.Unmarshal([]byte(responseFromGoOld), actual)) 109 }) 110 t.Run("new RPC server", func(t *testing.T) { 111 actual := &Version{} 112 require.NoError(t, json.Unmarshal([]byte(responseFromGoNew), actual)) 113 require.Equal(t, v, actual) 114 }) 115 }) 116 t.Run("Sharp node response", func(t *testing.T) { 117 actual := &Version{} 118 require.NoError(t, json.Unmarshal([]byte(responseFromSharp), actual)) 119 expected := new(Version) 120 *expected = *v 121 expected.UserAgent = "/Neo:3.1.0/" 122 require.Equal(t, expected, actual) 123 }) 124 }) 125 }