htlcswitch/switch_test: test send pending channel
This commit is contained in:
parent
c290398b4b
commit
418983cadc
@ -3,6 +3,7 @@ package htlcswitch
|
|||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"testing"
|
"testing"
|
||||||
@ -24,6 +25,101 @@ func genPreimage() ([32]byte, error) {
|
|||||||
return preimage, nil
|
return preimage, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestSwitchSendPending checks the inability of htlc switch to forward adds
|
||||||
|
// over pending links, and the UpdateShortChanID makes a pending link live.
|
||||||
|
func TestSwitchSendPending(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
alicePeer, err := newMockServer(t, "alice", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to create alice server: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := initSwitchWithDB(nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to init switch: %v", err)
|
||||||
|
}
|
||||||
|
if err := s.Start(); err != nil {
|
||||||
|
t.Fatalf("unable to start switch: %v", err)
|
||||||
|
}
|
||||||
|
defer s.Stop()
|
||||||
|
|
||||||
|
chanID1, _, aliceChanID, bobChanID := genIDs()
|
||||||
|
|
||||||
|
pendingChanID := lnwire.ShortChannelID{}
|
||||||
|
|
||||||
|
aliceChannelLink := newMockChannelLink(
|
||||||
|
s, chanID1, pendingChanID, alicePeer, false,
|
||||||
|
)
|
||||||
|
if err := s.AddLink(aliceChannelLink); err != nil {
|
||||||
|
t.Fatalf("unable to add alice link: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create request which should is being forwarded from Bob channel
|
||||||
|
// link to Alice channel link.
|
||||||
|
preimage, err := genPreimage()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to generate preimage: %v", err)
|
||||||
|
}
|
||||||
|
rhash := fastsha256.Sum256(preimage[:])
|
||||||
|
packet := &htlcPacket{
|
||||||
|
incomingChanID: bobChanID,
|
||||||
|
incomingHTLCID: 0,
|
||||||
|
outgoingChanID: aliceChanID,
|
||||||
|
obfuscator: NewMockObfuscator(),
|
||||||
|
htlc: &lnwire.UpdateAddHTLC{
|
||||||
|
PaymentHash: rhash,
|
||||||
|
Amount: 1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send the ADD packet, this should not be forwarded out to the link
|
||||||
|
// since there are no eligible links.
|
||||||
|
err = s.forward(packet)
|
||||||
|
expErr := fmt.Sprintf("unable to find link with destination %v",
|
||||||
|
aliceChanID)
|
||||||
|
if err != nil && err.Error() != expErr {
|
||||||
|
t.Fatalf("expected forward failure: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// No message should be sent, since the packet was failed.
|
||||||
|
select {
|
||||||
|
case <-aliceChannelLink.packets:
|
||||||
|
t.Fatal("expected not to receive message")
|
||||||
|
case <-time.After(time.Second):
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since the packet should have been failed, there should be no active
|
||||||
|
// circuits.
|
||||||
|
if s.circuits.NumOpen() != 0 {
|
||||||
|
t.Fatal("wrong amount of circuits")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now, update Alice's link with her final short channel id. This should
|
||||||
|
// move the link to the live state.
|
||||||
|
aliceChannelLink.setLiveShortChanID(aliceChanID)
|
||||||
|
err = s.UpdateShortChanID(chanID1)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to update alice short_chan_id: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Increment the packet's HTLC index, so that it does not collide with
|
||||||
|
// the prior attempt.
|
||||||
|
packet.incomingHTLCID++
|
||||||
|
|
||||||
|
// Handle the request and checks that bob channel link received it.
|
||||||
|
if err := s.forward(packet); err != nil {
|
||||||
|
t.Fatalf("unexpected forward failure: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since Alice's link is now active, this packet should succeed.
|
||||||
|
select {
|
||||||
|
case <-aliceChannelLink.packets:
|
||||||
|
case <-time.After(time.Second):
|
||||||
|
t.Fatal("request was not propagated to alice")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestSwitchForward checks the ability of htlc switch to forward add/settle
|
// TestSwitchForward checks the ability of htlc switch to forward add/settle
|
||||||
// requests.
|
// requests.
|
||||||
func TestSwitchForward(t *testing.T) {
|
func TestSwitchForward(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user