@@ -50,6 +50,7 @@ func TestInterceptor(t *testing.T) {
5050 testTimeout = 5 * time .Second
5151 interceptor = NewInterceptor (
5252 & lnd .LndServices , store , testTimeout ,
53+ DefaultMaxCostSats , DefaultMaxRoutingFeeSats ,
5354 )
5455 testMac = makeMac (t )
5556 testMacBytes = serializeMac (t , testMac )
@@ -84,18 +85,21 @@ func TestInterceptor(t *testing.T) {
8485 testCases := []struct {
8586 name string
8687 initialToken * Token
88+ interceptor * Interceptor
8789 resetCb func ()
8890 expectLndCall bool
8991 sendPaymentCb func (msg test.PaymentChannelMessage )
9092 trackPaymentCb func (msg test.TrackPaymentMessage )
9193 expectToken bool
94+ expectInterceptErr string
9295 expectBackendCalls int
9396 expectMacaroonCall1 bool
9497 expectMacaroonCall2 bool
9598 }{
9699 {
97100 name : "no auth required happy path" ,
98101 initialToken : nil ,
102+ interceptor : interceptor ,
99103 resetCb : func () { resetBackend (nil , "" ) },
100104 expectLndCall : false ,
101105 expectToken : false ,
@@ -106,6 +110,7 @@ func TestInterceptor(t *testing.T) {
106110 {
107111 name : "auth required, no token yet" ,
108112 initialToken : nil ,
113+ interceptor : interceptor ,
109114 resetCb : func () {
110115 resetBackend (
111116 status .New (
@@ -140,6 +145,7 @@ func TestInterceptor(t *testing.T) {
140145 {
141146 name : "auth required, has token" ,
142147 initialToken : paidToken ,
148+ interceptor : interceptor ,
143149 resetCb : func () { resetBackend (nil , "" ) },
144150 expectLndCall : false ,
145151 expectToken : true ,
@@ -150,6 +156,7 @@ func TestInterceptor(t *testing.T) {
150156 {
151157 name : "auth required, has pending token" ,
152158 initialToken : pendingToken ,
159+ interceptor : interceptor ,
153160 resetCb : func () {
154161 resetBackend (
155162 status .New (
@@ -177,6 +184,30 @@ func TestInterceptor(t *testing.T) {
177184 expectMacaroonCall1 : false ,
178185 expectMacaroonCall2 : true ,
179186 },
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+ },
180211 }
181212
182213 // The invoker is a simple function that simulates the actual call to
@@ -219,11 +250,14 @@ func TestInterceptor(t *testing.T) {
219250 backendWg .Add (1 )
220251 overallWg .Add (1 )
221252 go func () {
222- err := interceptor .UnaryInterceptor (
253+ err := tc . interceptor .UnaryInterceptor (
223254 ctx , "" , nil , nil , nil , invoker , nil ,
224255 )
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 ))
227261 }
228262 overallWg .Done ()
229263 }()
@@ -318,12 +352,12 @@ func serializeMac(t *testing.T, mac *macaroon.Macaroon) []byte {
318352}
319353
320354func 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 "
327361 return fmt .Sprintf ("LSAT macaroon=\" %s\" , invoice=\" %s\" " ,
328362 base64 .StdEncoding .EncodeToString (macBytes ), invoice )
329363}
0 commit comments