error_test.go raw
1 package waddrmgr_test
2
3 import (
4 "errors"
5 "fmt"
6 "testing"
7
8 "github.com/p9c/p9/pkg/waddrmgr"
9 )
10
11 // TestErrorCodeStringer tests the stringized output for the ErrorCode type.
12 func TestErrorCodeStringer(t *testing.T) {
13 tests := []struct {
14 in waddrmgr.ErrorCode
15 want string
16 }{
17 {waddrmgr.ErrDatabase, "ErrDatabase"},
18 {waddrmgr.ErrUpgrade, "ErrUpgrade"},
19 {waddrmgr.ErrKeyChain, "ErrKeyChain"},
20 {waddrmgr.ErrCrypto, "ErrCrypto"},
21 {waddrmgr.ErrInvalidKeyType, "ErrInvalidKeyType"},
22 {waddrmgr.ErrNoExist, "ErrNoExist"},
23 {waddrmgr.ErrAlreadyExists, "ErrAlreadyExists"},
24 {waddrmgr.ErrCoinTypeTooHigh, "ErrCoinTypeTooHigh"},
25 {waddrmgr.ErrAccountNumTooHigh, "ErrAccountNumTooHigh"},
26 {waddrmgr.ErrLocked, "ErrLocked"},
27 {waddrmgr.ErrWatchingOnly, "ErrWatchingOnly"},
28 {waddrmgr.ErrInvalidAccount, "ErrInvalidAccount"},
29 {waddrmgr.ErrAddressNotFound, "ErrAddressNotFound"},
30 {waddrmgr.ErrAccountNotFound, "ErrAccountNotFound"},
31 {waddrmgr.ErrDuplicateAddress, "ErrDuplicateAddress"},
32 {waddrmgr.ErrDuplicateAccount, "ErrDuplicateAccount"},
33 {waddrmgr.ErrTooManyAddresses, "ErrTooManyAddresses"},
34 {waddrmgr.ErrWrongPassphrase, "ErrWrongPassphrase"},
35 {waddrmgr.ErrWrongNet, "ErrWrongNet"},
36 {waddrmgr.ErrCallBackBreak, "ErrCallBackBreak"},
37 {waddrmgr.ErrEmptyPassphrase, "ErrEmptyPassphrase"},
38 {0xffff, "Unknown ErrorCode (65535)"},
39 }
40 t.Logf("Running %d tests", len(tests))
41 for i, test := range tests {
42 result := test.in.String()
43 if result != test.want {
44 t.Errorf("String #%d\ngot: %s\nwant: %s", i, result,
45 test.want,
46 )
47 continue
48 }
49 }
50 }
51
52 // TestManagerError tests the error output for the ManagerError type.
53 func TestManagerError(t *testing.T) {
54 tests := []struct {
55 in waddrmgr.ManagerError
56 want string
57 }{
58 // Manager level error.
59 {
60 waddrmgr.ManagerError{Description: "human-readable error"},
61 "human-readable error",
62 },
63 // Encapsulated database error.
64 {
65 waddrmgr.ManagerError{
66 Description: "failed to store master private " +
67 "key parameters",
68 ErrorCode: waddrmgr.ErrDatabase,
69 Err: fmt.Errorf("underlying db error"),
70 },
71 "failed to store master private key parameters: " +
72 "underlying db error",
73 },
74 // Encapsulated key chain error.
75 {
76 waddrmgr.ManagerError{
77 Description: "failed to derive extended key " +
78 "branch 0",
79 ErrorCode: waddrmgr.ErrKeyChain,
80 Err: fmt.Errorf("underlying error"),
81 },
82 "failed to derive extended key branch 0: underlying " +
83 "error",
84 },
85 // Encapsulated crypto error.
86 {
87 waddrmgr.ManagerError{
88 Description: "failed to decrypt account 0 " +
89 "private key",
90 ErrorCode: waddrmgr.ErrCrypto,
91 Err: fmt.Errorf("underlying error"),
92 },
93 "failed to decrypt account 0 private key: underlying " +
94 "error",
95 },
96 }
97 t.Logf("Running %d tests", len(tests))
98 for i, test := range tests {
99 result := test.in.Error()
100 if result != test.want {
101 t.Errorf("Error #%d\ngot: %s\nwant: %s", i, result,
102 test.want,
103 )
104 continue
105 }
106 }
107 }
108
109 // TestIsError tests the IsError func.
110 func TestIsError(t *testing.T) {
111 tests := []struct {
112 err error
113 code waddrmgr.ErrorCode
114 exp bool
115 }{
116 {
117 err: waddrmgr.ManagerError{
118 ErrorCode: waddrmgr.ErrDatabase,
119 },
120 code: waddrmgr.ErrDatabase,
121 exp: true,
122 },
123 {
124 // package should never return *ManagerError
125 err: &waddrmgr.ManagerError{
126 ErrorCode: waddrmgr.ErrDatabase,
127 },
128 code: waddrmgr.ErrDatabase,
129 exp: false,
130 },
131 {
132 err: waddrmgr.ManagerError{
133 ErrorCode: waddrmgr.ErrCrypto,
134 },
135 code: waddrmgr.ErrDatabase,
136 exp: false,
137 },
138 {
139 err: errors.New("not a ManagerError"),
140 code: waddrmgr.ErrDatabase,
141 exp: false,
142 },
143 }
144 for i, test := range tests {
145 got := waddrmgr.IsError(test.err, test.code)
146 if got != test.exp {
147 t.Errorf("Test %d: got %v expected %v", i, got, test.exp)
148 }
149 }
150 }
151