rpc_test.go 1.66 KB
Newer Older
1 2 3 4 5
package proxyd

import (
	"encoding/json"
	"testing"
6 7

	"github.com/stretchr/testify/require"
8 9 10
)

func TestRPCResJSON(t *testing.T) {
11
	tests := []struct {
12
		name string
13 14
		in   *RPCRes
		out  string
15 16 17 18 19 20 21 22 23 24 25 26 27 28
	}{
		{
			"string result",
			&RPCRes{
				JSONRPC: JSONRPCVersion,
				Result:  "foobar",
				ID:      []byte("123"),
			},
			`{"jsonrpc":"2.0","result":"foobar","id":123}`,
		},
		{
			"object result",
			&RPCRes{
				JSONRPC: JSONRPCVersion,
29
				Result: struct {
30 31 32 33
					Str string `json:"str"`
				}{
					"test",
				},
34
				ID: []byte("123"),
35 36 37 38 39 40 41 42 43 44 45 46 47
			},
			`{"jsonrpc":"2.0","result":{"str":"test"},"id":123}`,
		},
		{
			"nil result",
			&RPCRes{
				JSONRPC: JSONRPCVersion,
				Result:  nil,
				ID:      []byte("123"),
			},
			`{"jsonrpc":"2.0","result":null,"id":123}`,
		},
		{
48
			"error result without data",
49 50 51
			&RPCRes{
				JSONRPC: JSONRPCVersion,
				Error: &RPCErr{
52 53
					Code:    1234,
					Message: "test err",
54
				},
55
				ID: []byte("123"),
56 57 58
			},
			`{"jsonrpc":"2.0","error":{"code":1234,"message":"test err"},"id":123}`,
		},
59 60 61 62 63 64 65 66 67 68 69 70 71
		{
			"error result with data",
			&RPCRes{
				JSONRPC: JSONRPCVersion,
				Error: &RPCErr{
					Code:    1234,
					Message: "test err",
					Data:    "revert",
				},
				ID: []byte("123"),
			},
			`{"jsonrpc":"2.0","error":{"code":1234,"message":"test err","data":"revert"},"id":123}`,
		},
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
		{
			"string ID",
			&RPCRes{
				JSONRPC: JSONRPCVersion,
				Result:  "foobar",
				ID:      []byte("\"123\""),
			},
			`{"jsonrpc":"2.0","result":"foobar","id":"123"}`,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			out, err := json.Marshal(tt.in)
			require.NoError(t, err)
			require.Equal(t, tt.out, string(out))
		})
	}
89
}