@@ -50,6 +50,7 @@ func TestInterceptor(t *testing.T) {
50
50
testTimeout = 5 * time .Second
51
51
interceptor = NewInterceptor (
52
52
& lnd .LndServices , store , testTimeout ,
53
+ DefaultMaxCostSats , DefaultMaxRoutingFeeSats ,
53
54
)
54
55
testMac = makeMac (t )
55
56
testMacBytes = serializeMac (t , testMac )
@@ -84,18 +85,21 @@ func TestInterceptor(t *testing.T) {
84
85
testCases := []struct {
85
86
name string
86
87
initialToken * Token
88
+ interceptor * Interceptor
87
89
resetCb func ()
88
90
expectLndCall bool
89
91
sendPaymentCb func (msg test.PaymentChannelMessage )
90
92
trackPaymentCb func (msg test.TrackPaymentMessage )
91
93
expectToken bool
94
+ expectInterceptErr string
92
95
expectBackendCalls int
93
96
expectMacaroonCall1 bool
94
97
expectMacaroonCall2 bool
95
98
}{
96
99
{
97
100
name : "no auth required happy path" ,
98
101
initialToken : nil ,
102
+ interceptor : interceptor ,
99
103
resetCb : func () { resetBackend (nil , "" ) },
100
104
expectLndCall : false ,
101
105
expectToken : false ,
@@ -106,6 +110,7 @@ func TestInterceptor(t *testing.T) {
106
110
{
107
111
name : "auth required, no token yet" ,
108
112
initialToken : nil ,
113
+ interceptor : interceptor ,
109
114
resetCb : func () {
110
115
resetBackend (
111
116
status .New (
@@ -140,6 +145,7 @@ func TestInterceptor(t *testing.T) {
140
145
{
141
146
name : "auth required, has token" ,
142
147
initialToken : paidToken ,
148
+ interceptor : interceptor ,
143
149
resetCb : func () { resetBackend (nil , "" ) },
144
150
expectLndCall : false ,
145
151
expectToken : true ,
@@ -150,6 +156,7 @@ func TestInterceptor(t *testing.T) {
150
156
{
151
157
name : "auth required, has pending token" ,
152
158
initialToken : pendingToken ,
159
+ interceptor : interceptor ,
153
160
resetCb : func () {
154
161
resetBackend (
155
162
status .New (
@@ -177,6 +184,30 @@ func TestInterceptor(t *testing.T) {
177
184
expectMacaroonCall1 : false ,
178
185
expectMacaroonCall2 : true ,
179
186
},
187
+ {
188
+ name : "auth required, no token yet, cost limit" ,
189
+ initialToken : nil ,
190
+ interceptor : NewInterceptor (
191
+ & lnd .LndServices , store , testTimeout ,
192
+ 100 , DefaultMaxRoutingFeeSats ,
193
+ ),
194
+ resetCb : func () {
195
+ resetBackend (
196
+ status .New (
197
+ GRPCErrCode , GRPCErrMessage ,
198
+ ).Err (),
199
+ makeAuthHeader (testMacBytes ),
200
+ )
201
+ },
202
+ expectLndCall : false ,
203
+ expectToken : false ,
204
+ expectInterceptErr : "cannot pay for LSAT " +
205
+ "automatically, cost of 500000 msat exceeds " +
206
+ "configured max cost of 100000 msat" ,
207
+ expectBackendCalls : 1 ,
208
+ expectMacaroonCall1 : false ,
209
+ expectMacaroonCall2 : false ,
210
+ },
180
211
}
181
212
182
213
// The invoker is a simple function that simulates the actual call to
@@ -219,11 +250,14 @@ func TestInterceptor(t *testing.T) {
219
250
backendWg .Add (1 )
220
251
overallWg .Add (1 )
221
252
go func () {
222
- err := interceptor .UnaryInterceptor (
253
+ err := tc . interceptor .UnaryInterceptor (
223
254
ctx , "" , nil , nil , nil , invoker , nil ,
224
255
)
225
- if err != nil {
226
- panic (err )
256
+ if err != nil && tc .expectInterceptErr != "" &&
257
+ err .Error () != tc .expectInterceptErr {
258
+ panic (fmt .Errorf ("unexpected error '%s', " +
259
+ "expected '%s'" , err .Error (),
260
+ tc .expectInterceptErr ))
227
261
}
228
262
overallWg .Done ()
229
263
}()
@@ -318,12 +352,12 @@ func serializeMac(t *testing.T, mac *macaroon.Macaroon) []byte {
318
352
}
319
353
320
354
func makeAuthHeader (macBytes []byte ) string {
321
- // Testnet invoice, copied from lnd/zpay32/invoice_test.go
322
- invoice := "lntb20m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqc " +
323
- "yq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy04 " +
324
- "3l2ahrqsfpp3x9et2e20v6pu37c5d9vax37wxq72un98k6vcx9fz94w0qf23 " +
325
- "7cm2rqv9pmn5lnexfvf5579slr4zq3u8kmczecytdx0xg9rwzngp7e6guwqp " +
326
- "qlhssu04sucpnz4axcv2dstmknqq6jsk2l "
355
+ // Testnet invoice over 500 sats.
356
+ invoice := "lntb5u1p0pskpmpp5jzw9xvdast2g5lm5tswq6n64t2epe3f4xav43dyd " +
357
+ "239qr8h3yllqdqqcqzpgsp5m8sfjqgugthk66q3tr4gsqr5rh740jrq9x4l0 " +
358
+ "kvj5e77nmwqvpnq9qy9qsq72afzu7sfuppzqg3q2pn49hlh66rv7w60h2rua " +
359
+ "hx857g94s066yzxcjn4yccqc79779sd232v9ewluvu0tmusvht6r99rld8xs " +
360
+ "k287cpyac79r "
327
361
return fmt .Sprintf ("LSAT macaroon=\" %s\" , invoice=\" %s\" " ,
328
362
base64 .StdEncoding .EncodeToString (macBytes ), invoice )
329
363
}
0 commit comments