-
Notifications
You must be signed in to change notification settings - Fork 0
/
error_test.go
102 lines (84 loc) · 2.77 KB
/
error_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package jsonrpc_test
import (
"encoding/json"
"fmt"
"testing"
jsonrpc "github.com/fredipevcin/gokit-jsonrpc"
)
func TestPredefinedErrors(t *testing.T) {
cases := []struct {
errCode int
expMessage string
}{
{jsonrpc.ParseError, "An error occurred on the server while parsing the JSON text"},
{jsonrpc.InvalidRequestError, "The JSON sent is not a valid Request object"},
{jsonrpc.MethodNotFoundError, "The method does not exist / is not available"},
{jsonrpc.InvalidParamsError, "Invalid method parameter(s)"},
{jsonrpc.InternalError, "Internal JSON-RPC error"},
}
for _, c := range cases {
var err error
err = jsonrpc.NewError(c.errCode)
jerr, ok := err.(jsonrpc.Errorer)
if !ok {
t.Fatalf("Expected err implements jsonrpc.Erroer for type %T", err)
}
if got, expected := jerr.ErrorCode(), c.errCode; got != expected {
t.Errorf("ErrorCode(): expected %d, actual %d", expected, got)
}
if got, expected := jerr.Error(), c.expMessage; got != expected {
t.Errorf("Error(): expected %s, actual %s", expected, got)
}
data, merr := json.Marshal(err)
if merr != nil {
t.Fatalf("Unexpected error marshaling JSON: %s", err)
}
if got, expected := string(data), fmt.Sprintf(`{"code":%d,"message":"%s"}`, c.errCode, c.expMessage); got != expected {
t.Errorf("JSON: expected %s, actual %s", expected, got)
}
}
}
func TestCustomErrors(t *testing.T) {
cases := []struct {
errCode int
errMessage string
}{
{123, "msg 1"},
{456, "msg 2"},
}
for _, c := range cases {
var err error
err = jsonrpc.NewError(c.errCode, c.errMessage)
jerr, ok := err.(jsonrpc.Errorer)
if !ok {
t.Fatalf("Expected it implements jsonrpc.Erroer for type %T", err)
}
if got, expected := jerr.ErrorCode(), c.errCode; got != expected {
t.Errorf("ErrorCode(): expected %d, actual %d", expected, got)
}
if got, expected := jerr.Error(), c.errMessage; got != expected {
t.Errorf("Error(): expected %s, actual %s", expected, got)
}
data, merr := json.Marshal(err)
if merr != nil {
t.Fatalf("Unexpected error marshaling JSON: %s", err)
}
if got, expected := string(data), fmt.Sprintf(`{"code":%d,"message":"%s"}`, c.errCode, c.errMessage); got != expected {
t.Errorf("JSON: expected %s, actual %s", expected, got)
}
}
}
func TestErrorHelperInvalidParams(t *testing.T) {
var err error
err = jsonrpc.NewInvalidParamsError("field missing")
jerr, ok := err.(jsonrpc.Errorer)
if !ok {
t.Fatalf("Expected it implements jsonrpc.Erroer for type %T", err)
}
if got, expected := jerr.ErrorCode(), jsonrpc.InvalidParamsError; got != expected {
t.Errorf("ErrorCode(): expected %d, actual %d", expected, got)
}
if got, expected := jerr.Error(), "field missing"; got != expected {
t.Errorf("Error(): expected %s, actual %s", expected, got)
}
}