Skip to content

Commit 3501f59

Browse files
committed
lnd: wait for route before reconnect payment test
1 parent 98bcee8 commit 3501f59

1 file changed

Lines changed: 39 additions & 2 deletions

File tree

lnd/paymentwatcher_test.go

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,14 @@ func TestPaymentWatcher_WatchPayment_Reconnect(t *testing.T) {
125125
assert.False(t, gotCallback)
126126

127127
// We have to reconnect in order to pay the invoice.
128-
payer.Connect(payee, true)
128+
err = payer.Connect(payee, true)
129+
if err != nil {
130+
t.Fatalf("Failed Connect(): %v", err)
131+
}
132+
err = waitForLndPaymentRoute(payer, payee)
133+
if err != nil {
134+
t.Fatalf("Failed waiting for route: %v", err)
135+
}
129136

130137
// Now we pay the invoice and check if the watcher is still active. If the
131138
// watcher is still active, the callback should be called.
@@ -197,7 +204,14 @@ func TestPaymentWatcher_WatchPayment_Reconnect_OnGracefulStop(t *testing.T) {
197204
assert.False(t, gotCallback)
198205

199206
// We have to reconnect in order to pay the invoice.
200-
payer.Connect(payee, true)
207+
err = payer.Connect(payee, true)
208+
if err != nil {
209+
t.Fatalf("Failed Connect(): %v", err)
210+
}
211+
err = waitForLndPaymentRoute(payer, payee)
212+
if err != nil {
213+
t.Fatalf("Failed waiting for route: %v", err)
214+
}
201215

202216
// Now we pay the invoice and check if the watcher is still active. If the
203217
// watcher is still active, the callback should be called.
@@ -213,6 +227,29 @@ func TestPaymentWatcher_WatchPayment_Reconnect_OnGracefulStop(t *testing.T) {
213227
}
214228
}
215229

230+
func waitForLndPaymentRoute(payer, payee *testframework.LndNode) error {
231+
scid, err := payer.GetScid(payee)
232+
if err != nil {
233+
return fmt.Errorf("GetScid() %w", err)
234+
}
235+
236+
return testframework.WaitForWithErr(func() (bool, error) {
237+
payerActive, err := payer.IsChannelActive(scid)
238+
if err != nil {
239+
return false, fmt.Errorf("payer.IsChannelActive() %w", err)
240+
}
241+
payeeActive, err := payee.IsChannelActive(scid)
242+
if err != nil {
243+
return false, fmt.Errorf("payee.IsChannelActive() %w", err)
244+
}
245+
hasRoute, err := payer.HasRoute(payee.Id(), scid)
246+
if err != nil {
247+
return false, nil
248+
}
249+
return payerActive && payeeActive && hasRoute, nil
250+
}, testframework.TIMEOUT)
251+
}
252+
216253
func paymentwatcherNodeSetup(t *testing.T, dir string) (
217254
bitcoind *testframework.BitcoinNode,
218255
payer *testframework.LndNode,

0 commit comments

Comments
 (0)