htlcswitch: move retransmissionTests var into scope of test
This commit is contained in:
parent
fceec1306d
commit
5e2b2a5cc8
@ -1718,120 +1718,141 @@ func TestChannelLinkBandwidthConsistencyOverflow(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var retransmissionTests = []struct {
|
|
||||||
name string
|
|
||||||
messages []expectedMessage
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
// Tests the ability of the channel links states to be synchronized
|
|
||||||
// after remote node haven't receive revoke and ack message.
|
|
||||||
name: "intercept last alice revoke_and_ack",
|
|
||||||
messages: []expectedMessage{
|
|
||||||
// First initialization of the channel.
|
|
||||||
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
|
||||||
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
|
||||||
|
|
||||||
// Send payment from Alice to Bob and intercept the last revocation
|
|
||||||
// message, in this case Bob should not proceed the payment farther.
|
|
||||||
{"alice", "bob", &lnwire.UpdateAddHTLC{}, false},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, false},
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, false},
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, true},
|
|
||||||
|
|
||||||
// Reestablish messages exchange on nodes restart.
|
|
||||||
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
|
||||||
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
|
||||||
|
|
||||||
// Alice should resend the revoke_and_ack message to Bob because Bob
|
|
||||||
// claimed it in the reestbalish message.
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
|
||||||
|
|
||||||
// Proceed the payment farther by sending the fulfilment message and
|
|
||||||
// trigger the state update.
|
|
||||||
{"bob", "alice", &lnwire.UpdateFufillHTLC{}, false},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, false},
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, false},
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Tests the ability of the channel links states to be synchronized
|
|
||||||
// after remote node haven't receive revoke and ack message.
|
|
||||||
name: "intercept bob revoke_and_ack commit_sig messages",
|
|
||||||
messages: []expectedMessage{
|
|
||||||
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
|
||||||
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
|
||||||
|
|
||||||
// Send payment from Alice to Bob and intercept the last revocation
|
|
||||||
// message, in this case Bob should not proceed the payment farther.
|
|
||||||
{"alice", "bob", &lnwire.UpdateAddHTLC{}, false},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, false},
|
|
||||||
|
|
||||||
// Intercept bob commit sig and revoke and ack messages.
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, true},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, true},
|
|
||||||
|
|
||||||
// Reestablish messages exchange on nodes restart.
|
|
||||||
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
|
||||||
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
|
||||||
|
|
||||||
// Bob should resend previously intercepted messages.
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, false},
|
|
||||||
|
|
||||||
// Proceed the payment farther by sending the fulfilment message and
|
|
||||||
// trigger the state update.
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"bob", "alice", &lnwire.UpdateFufillHTLC{}, false},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, false},
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, false},
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Tests the ability of the channel links states to be synchronized
|
|
||||||
// after remote node haven't receive update and commit sig messages.
|
|
||||||
name: "intercept update add htlc and commit sig messages",
|
|
||||||
messages: []expectedMessage{
|
|
||||||
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
|
||||||
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
|
||||||
|
|
||||||
// Attempt make a payment from Alice to Bob, which is intercepted,
|
|
||||||
// emulating the Bob server abrupt stop.
|
|
||||||
{"alice", "bob", &lnwire.UpdateAddHTLC{}, true},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, true},
|
|
||||||
|
|
||||||
// Restart of the nodes, and after that nodes should exchange the
|
|
||||||
// reestablish messages.
|
|
||||||
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
|
||||||
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
|
||||||
|
|
||||||
// After Bob has notified Alice that he didn't receive updates Alice
|
|
||||||
// should re-send them.
|
|
||||||
{"alice", "bob", &lnwire.UpdateAddHTLC{}, false},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, false},
|
|
||||||
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, false},
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
|
||||||
|
|
||||||
{"bob", "alice", &lnwire.UpdateFufillHTLC{}, false},
|
|
||||||
{"bob", "alice", &lnwire.CommitSig{}, false},
|
|
||||||
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
|
||||||
{"alice", "bob", &lnwire.CommitSig{}, false},
|
|
||||||
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestChannelRetransmission tests the ability of the channel links to
|
// TestChannelRetransmission tests the ability of the channel links to
|
||||||
// synchronize theirs states after abrupt disconnect.
|
// synchronize theirs states after abrupt disconnect.
|
||||||
func TestChannelRetransmission(t *testing.T) {
|
func TestChannelRetransmission(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
retransmissionTests := []struct {
|
||||||
|
name string
|
||||||
|
messages []expectedMessage
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
// Tests the ability of the channel links states to be
|
||||||
|
// synchronized after remote node haven't receive
|
||||||
|
// revoke and ack message.
|
||||||
|
name: "intercept last alice revoke_and_ack",
|
||||||
|
messages: []expectedMessage{
|
||||||
|
// First initialization of the channel.
|
||||||
|
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
||||||
|
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
||||||
|
|
||||||
|
{"alice", "bob", &lnwire.FundingLocked{}, false},
|
||||||
|
{"bob", "alice", &lnwire.FundingLocked{}, false},
|
||||||
|
|
||||||
|
// Send payment from Alice to Bob and intercept
|
||||||
|
// the last revocation message, in this case
|
||||||
|
// Bob should not proceed the payment farther.
|
||||||
|
{"alice", "bob", &lnwire.UpdateAddHTLC{}, false},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, false},
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, false},
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, true},
|
||||||
|
|
||||||
|
// Reestablish messages exchange on nodes restart.
|
||||||
|
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
||||||
|
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
||||||
|
|
||||||
|
// Alice should resend the revoke_and_ack
|
||||||
|
// message to Bob because Bob claimed it in the
|
||||||
|
// reestbalish message.
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
||||||
|
|
||||||
|
// Proceed the payment farther by sending the
|
||||||
|
// fulfilment message and trigger the state
|
||||||
|
// update.
|
||||||
|
{"bob", "alice", &lnwire.UpdateFufillHTLC{}, false},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, false},
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, false},
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Tests the ability of the channel links states to be
|
||||||
|
// synchronized after remote node haven't receive
|
||||||
|
// revoke and ack message.
|
||||||
|
name: "intercept bob revoke_and_ack commit_sig messages",
|
||||||
|
messages: []expectedMessage{
|
||||||
|
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
||||||
|
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
||||||
|
|
||||||
|
{"alice", "bob", &lnwire.FundingLocked{}, false},
|
||||||
|
{"bob", "alice", &lnwire.FundingLocked{}, false},
|
||||||
|
|
||||||
|
// Send payment from Alice to Bob and intercept
|
||||||
|
// the last revocation message, in this case
|
||||||
|
// Bob should not proceed the payment farther.
|
||||||
|
{"alice", "bob", &lnwire.UpdateAddHTLC{}, false},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, false},
|
||||||
|
|
||||||
|
// Intercept bob commit sig and revoke and ack
|
||||||
|
// messages.
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, true},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, true},
|
||||||
|
|
||||||
|
// Reestablish messages exchange on nodes restart.
|
||||||
|
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
||||||
|
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
||||||
|
|
||||||
|
// Bob should resend previously intercepted messages.
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, false},
|
||||||
|
|
||||||
|
// Proceed the payment farther by sending the
|
||||||
|
// fulfilment message and trigger the state
|
||||||
|
// update.
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"bob", "alice", &lnwire.UpdateFufillHTLC{}, false},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, false},
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, false},
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Tests the ability of the channel links states to be
|
||||||
|
// synchronized after remote node haven't receive
|
||||||
|
// update and commit sig messages.
|
||||||
|
name: "intercept update add htlc and commit sig messages",
|
||||||
|
messages: []expectedMessage{
|
||||||
|
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
||||||
|
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
||||||
|
|
||||||
|
{"alice", "bob", &lnwire.FundingLocked{}, false},
|
||||||
|
{"bob", "alice", &lnwire.FundingLocked{}, false},
|
||||||
|
|
||||||
|
// Attempt make a payment from Alice to Bob,
|
||||||
|
// which is intercepted, emulating the Bob
|
||||||
|
// server abrupt stop.
|
||||||
|
{"alice", "bob", &lnwire.UpdateAddHTLC{}, true},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, true},
|
||||||
|
|
||||||
|
// Restart of the nodes, and after that nodes
|
||||||
|
// should exchange the reestablish messages.
|
||||||
|
{"alice", "bob", &lnwire.ChannelReestablish{}, false},
|
||||||
|
{"bob", "alice", &lnwire.ChannelReestablish{}, false},
|
||||||
|
|
||||||
|
{"alice", "bob", &lnwire.FundingLocked{}, false},
|
||||||
|
{"bob", "alice", &lnwire.FundingLocked{}, false},
|
||||||
|
|
||||||
|
// After Bob has notified Alice that he didn't
|
||||||
|
// receive updates Alice should re-send them.
|
||||||
|
{"alice", "bob", &lnwire.UpdateAddHTLC{}, false},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, false},
|
||||||
|
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, false},
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
||||||
|
|
||||||
|
{"bob", "alice", &lnwire.UpdateFufillHTLC{}, false},
|
||||||
|
{"bob", "alice", &lnwire.CommitSig{}, false},
|
||||||
|
{"alice", "bob", &lnwire.RevokeAndAck{}, false},
|
||||||
|
{"alice", "bob", &lnwire.CommitSig{}, false},
|
||||||
|
{"bob", "alice", &lnwire.RevokeAndAck{}, false},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
paymentWithRestart := func(t *testing.T, messages []expectedMessage) {
|
paymentWithRestart := func(t *testing.T, messages []expectedMessage) {
|
||||||
channels, cleanUp, restoreChannelsFromDb, err := createClusterChannels(
|
channels, cleanUp, restoreChannelsFromDb, err := createClusterChannels(
|
||||||
btcutil.SatoshiPerBitcoin*5,
|
btcutil.SatoshiPerBitcoin*5,
|
||||||
|
Loading…
Reference in New Issue
Block a user