Skip to content

Commit 202edd0

Browse files
committed
lsat: test cost maximum in interceptor
1 parent ccdbc3b commit 202edd0

File tree

1 file changed

+43
-9
lines changed

1 file changed

+43
-9
lines changed

lsat/interceptor_test.go

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

320354
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"
327361
return fmt.Sprintf("LSAT macaroon=\"%s\", invoice=\"%s\"",
328362
base64.StdEncoding.EncodeToString(macBytes), invoice)
329363
}

0 commit comments

Comments
 (0)