mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-06-28 09:45:25 +02:00
contractcourt: update TestChannelArbitratorLocalForceClosePendingHtlc to assert resolution msg delivery
This commit is contained in:
parent
ea7bae8492
commit
b4a116fd07
@ -108,16 +108,6 @@ func (b *mockArbitratorLog) FetchContractResolutions() (*ContractResolutions, er
|
|||||||
return b.resolutions, nil
|
return b.resolutions, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *mockArbitratorLog) LogChainActions(actions ChainActionMap) error {
|
|
||||||
b.chainActions = actions
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *mockArbitratorLog) FetchChainActions() (ChainActionMap, error) {
|
|
||||||
actionsMap := b.chainActions
|
|
||||||
return actionsMap, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *mockArbitratorLog) WipeHistory() error {
|
func (b *mockArbitratorLog) WipeHistory() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -144,8 +134,11 @@ func (*mockChainIO) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func createTestChannelArbitrator(log ArbitratorLog) (*ChannelArbitrator,
|
func createTestChannelArbitrator(log ArbitratorLog) (*ChannelArbitrator,
|
||||||
chan struct{}, error) {
|
chan struct{}, chan []ResolutionMsg, chan *chainntnfs.BlockEpoch, error) {
|
||||||
|
|
||||||
|
blockEpochs := make(chan *chainntnfs.BlockEpoch)
|
||||||
blockEpoch := &chainntnfs.BlockEpochEvent{
|
blockEpoch := &chainntnfs.BlockEpochEvent{
|
||||||
|
Epochs: blockEpochs,
|
||||||
Cancel: func() {},
|
Cancel: func() {},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,13 +151,16 @@ func createTestChannelArbitrator(log ArbitratorLog) (*ChannelArbitrator,
|
|||||||
ContractBreach: make(chan *lnwallet.BreachRetribution, 1),
|
ContractBreach: make(chan *lnwallet.BreachRetribution, 1),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolutionChan := make(chan []ResolutionMsg, 1)
|
||||||
|
|
||||||
chainIO := &mockChainIO{}
|
chainIO := &mockChainIO{}
|
||||||
chainArbCfg := ChainArbitratorConfig{
|
chainArbCfg := ChainArbitratorConfig{
|
||||||
ChainIO: chainIO,
|
ChainIO: chainIO,
|
||||||
PublishTx: func(*wire.MsgTx) error {
|
PublishTx: func(*wire.MsgTx) error {
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
DeliverResolutionMsg: func(...ResolutionMsg) error {
|
DeliverResolutionMsg: func(msgs ...ResolutionMsg) error {
|
||||||
|
resolutionChan <- msgs
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
OutgoingBroadcastDelta: 5,
|
OutgoingBroadcastDelta: 5,
|
||||||
@ -213,7 +209,9 @@ func createTestChannelArbitrator(log ArbitratorLog) (*ChannelArbitrator,
|
|||||||
ChainEvents: chanEvents,
|
ChainEvents: chanEvents,
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewChannelArbitrator(arbCfg, nil, log), resolvedChan, nil
|
htlcSets := make(map[HtlcSetKey]htlcSet)
|
||||||
|
return NewChannelArbitrator(arbCfg, htlcSets, log), resolvedChan,
|
||||||
|
resolutionChan, blockEpochs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// assertState checks that the ChannelArbitrator is in the state we expect it
|
// assertState checks that the ChannelArbitrator is in the state we expect it
|
||||||
@ -233,7 +231,7 @@ func TestChannelArbitratorCooperativeClose(t *testing.T) {
|
|||||||
newStates: make(chan ArbitratorState, 5),
|
newStates: make(chan ArbitratorState, 5),
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -306,7 +304,7 @@ func TestChannelArbitratorRemoteForceClose(t *testing.T) {
|
|||||||
newStates: make(chan ArbitratorState, 5),
|
newStates: make(chan ArbitratorState, 5),
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -360,7 +358,7 @@ func TestChannelArbitratorLocalForceClose(t *testing.T) {
|
|||||||
newStates: make(chan ArbitratorState, 5),
|
newStates: make(chan ArbitratorState, 5),
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -467,7 +465,9 @@ func TestChannelArbitratorLocalForceClosePendingHtlc(t *testing.T) {
|
|||||||
resolvers: make(map[ContractResolver]struct{}),
|
resolvers: make(map[ContractResolver]struct{}),
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(arbLog)
|
chanArb, resolved, resolutions, _, err := createTestChannelArbitrator(
|
||||||
|
arbLog,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -627,6 +627,22 @@ func TestChannelArbitratorLocalForceClosePendingHtlc(t *testing.T) {
|
|||||||
// spent.
|
// spent.
|
||||||
notifier.spendChan <- &chainntnfs.SpendDetail{SpendingTx: closeTx}
|
notifier.spendChan <- &chainntnfs.SpendDetail{SpendingTx: closeTx}
|
||||||
|
|
||||||
|
// Finally, we should also receive a resolution message instructing the
|
||||||
|
// switch to cancel back the HTLC.
|
||||||
|
select {
|
||||||
|
case msgs := <-resolutions:
|
||||||
|
if len(msgs) != 1 {
|
||||||
|
t.Fatalf("expected 1 message, instead got %v", len(msgs))
|
||||||
|
}
|
||||||
|
|
||||||
|
if msgs[0].HtlcIndex != htlcIndex {
|
||||||
|
t.Fatalf("wrong htlc index: expected %v, got %v",
|
||||||
|
htlcIndex, msgs[0].HtlcIndex)
|
||||||
|
}
|
||||||
|
case <-time.After(5 * time.Second):
|
||||||
|
t.Fatalf("resolution msgs not sent")
|
||||||
|
}
|
||||||
|
|
||||||
// As this is our own commitment transaction, the HTLC will go through
|
// As this is our own commitment transaction, the HTLC will go through
|
||||||
// to the second level. Channel arbitrator should still not be marked
|
// to the second level. Channel arbitrator should still not be marked
|
||||||
// as resolved.
|
// as resolved.
|
||||||
@ -657,7 +673,7 @@ func TestChannelArbitratorLocalForceCloseRemoteConfirmed(t *testing.T) {
|
|||||||
newStates: make(chan ArbitratorState, 5),
|
newStates: make(chan ArbitratorState, 5),
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -766,7 +782,7 @@ func TestChannelArbitratorLocalForceDoubleSpend(t *testing.T) {
|
|||||||
newStates: make(chan ArbitratorState, 5),
|
newStates: make(chan ArbitratorState, 5),
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -874,7 +890,7 @@ func TestChannelArbitratorPersistence(t *testing.T) {
|
|||||||
failLog: true,
|
failLog: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -908,7 +924,7 @@ func TestChannelArbitratorPersistence(t *testing.T) {
|
|||||||
chanArb.Stop()
|
chanArb.Stop()
|
||||||
|
|
||||||
// Create a new arbitrator with the same log.
|
// Create a new arbitrator with the same log.
|
||||||
chanArb, resolved, err = createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err = createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -941,7 +957,7 @@ func TestChannelArbitratorPersistence(t *testing.T) {
|
|||||||
chanArb.Stop()
|
chanArb.Stop()
|
||||||
|
|
||||||
// Create yet another arbitrator with the same log.
|
// Create yet another arbitrator with the same log.
|
||||||
chanArb, resolved, err = createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err = createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -975,7 +991,7 @@ func TestChannelArbitratorPersistence(t *testing.T) {
|
|||||||
|
|
||||||
// Create a new arbitrator, and now make fetching resolutions succeed.
|
// Create a new arbitrator, and now make fetching resolutions succeed.
|
||||||
log.failFetch = nil
|
log.failFetch = nil
|
||||||
chanArb, resolved, err = createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err = createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -1071,7 +1087,7 @@ func TestChannelArbitratorCommitFailure(t *testing.T) {
|
|||||||
failCommitState: test.expectedStates[0],
|
failCommitState: test.expectedStates[0],
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, resolved, err := createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -1111,7 +1127,7 @@ func TestChannelArbitratorCommitFailure(t *testing.T) {
|
|||||||
|
|
||||||
// Start the arbitrator again, with IsPendingClose reporting
|
// Start the arbitrator again, with IsPendingClose reporting
|
||||||
// the channel closed in the database.
|
// the channel closed in the database.
|
||||||
chanArb, resolved, err = createTestChannelArbitrator(log)
|
chanArb, resolved, _, _, err = createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -1157,7 +1173,7 @@ func TestChannelArbitratorEmptyResolutions(t *testing.T) {
|
|||||||
failFetch: errNoResolutions,
|
failFetch: errNoResolutions,
|
||||||
}
|
}
|
||||||
|
|
||||||
chanArb, _, err := createTestChannelArbitrator(log)
|
chanArb, _, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
@ -1195,7 +1211,7 @@ func TestChannelArbitratorAlreadyForceClosed(t *testing.T) {
|
|||||||
log := &mockArbitratorLog{
|
log := &mockArbitratorLog{
|
||||||
state: StateCommitmentBroadcasted,
|
state: StateCommitmentBroadcasted,
|
||||||
}
|
}
|
||||||
chanArb, _, err := createTestChannelArbitrator(log)
|
chanArb, _, _, _, err := createTestChannelArbitrator(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user