htlcswitch: Unit tests for CircuitMap.
This commit is contained in:
parent
e66f3a37a3
commit
66e654bb42
155
htlcswitch/circuit_test.go
Normal file
155
htlcswitch/circuit_test.go
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
package htlcswitch_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/lightningnetwork/lnd/htlcswitch"
|
||||||
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCircuitMap(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
var hash1, hash2, hash3 [32]byte
|
||||||
|
hash1[0] = 1
|
||||||
|
hash2[0] = 2
|
||||||
|
hash3[0] = 3
|
||||||
|
|
||||||
|
var (
|
||||||
|
chan1 = lnwire.NewShortChanIDFromInt(1)
|
||||||
|
chan2 = lnwire.NewShortChanIDFromInt(2)
|
||||||
|
)
|
||||||
|
|
||||||
|
circuitMap := htlcswitch.NewCircuitMap()
|
||||||
|
|
||||||
|
circuit := circuitMap.LookupByHTLC(chan1, 0)
|
||||||
|
if circuit != nil {
|
||||||
|
t.Fatalf("LookupByHTLC returned a circuit before any were added: %v",
|
||||||
|
circuit)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add multiple circuits with same destination channel but different HTLC
|
||||||
|
// IDs and payment hashes.
|
||||||
|
circuitMap.Add(&htlcswitch.PaymentCircuit{
|
||||||
|
PaymentHash: hash1,
|
||||||
|
SrcChanID: chan2,
|
||||||
|
SrcHTLCID: 1,
|
||||||
|
DestChanID: chan1,
|
||||||
|
DestHTLCID: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
circuitMap.Add(&htlcswitch.PaymentCircuit{
|
||||||
|
PaymentHash: hash2,
|
||||||
|
SrcChanID: chan2,
|
||||||
|
SrcHTLCID: 2,
|
||||||
|
DestChanID: chan1,
|
||||||
|
DestHTLCID: 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
// Add another circuit with an already-used HTLC ID but different
|
||||||
|
// destination channel.
|
||||||
|
circuitMap.Add(&htlcswitch.PaymentCircuit{
|
||||||
|
PaymentHash: hash3,
|
||||||
|
SrcChanID: chan1,
|
||||||
|
SrcHTLCID: 2,
|
||||||
|
DestChanID: chan2,
|
||||||
|
DestHTLCID: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
circuit = circuitMap.LookupByHTLC(chan1, 0)
|
||||||
|
if circuit == nil {
|
||||||
|
t.Fatal("LookupByHTLC failed to find circuit")
|
||||||
|
}
|
||||||
|
if circuit.PaymentHash != hash1 || circuit.SrcHTLCID != 1 {
|
||||||
|
t.Fatalf("LookupByHTLC found unexpected circuit: %v", circuit)
|
||||||
|
}
|
||||||
|
|
||||||
|
circuit = circuitMap.LookupByHTLC(chan1, 1)
|
||||||
|
if circuit == nil {
|
||||||
|
t.Fatal("LookupByHTLC failed to find circuit")
|
||||||
|
}
|
||||||
|
if circuit.PaymentHash != hash2 || circuit.SrcHTLCID != 2 {
|
||||||
|
t.Fatalf("LookupByHTLC found unexpected circuit: %v", circuit)
|
||||||
|
}
|
||||||
|
|
||||||
|
circuit = circuitMap.LookupByHTLC(chan2, 0)
|
||||||
|
if circuit == nil {
|
||||||
|
t.Fatal("LookupByHTLC failed to find circuit")
|
||||||
|
}
|
||||||
|
if circuit.PaymentHash != hash3 || circuit.SrcHTLCID != 2 {
|
||||||
|
t.Fatalf("LookupByHTLC found unexpected circuit: %v", circuit)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Even though a circuit was added with chan1, HTLC ID 2 as the source, the
|
||||||
|
// lookup should go by destination channel, HTLC ID.
|
||||||
|
circuit = circuitMap.LookupByHTLC(chan1, 2)
|
||||||
|
if circuit != nil {
|
||||||
|
t.Fatalf("LookupByHTLC returned a circuit without being added: %v",
|
||||||
|
circuit)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a circuit with a destination channel and payment hash that are
|
||||||
|
// already added but a different HTLC ID.
|
||||||
|
circuitMap.Add(&htlcswitch.PaymentCircuit{
|
||||||
|
PaymentHash: hash1,
|
||||||
|
SrcChanID: chan2,
|
||||||
|
SrcHTLCID: 3,
|
||||||
|
DestChanID: chan1,
|
||||||
|
DestHTLCID: 3,
|
||||||
|
})
|
||||||
|
|
||||||
|
circuit = circuitMap.LookupByHTLC(chan1, 3)
|
||||||
|
if circuit == nil {
|
||||||
|
t.Fatal("LookupByHTLC failed to find circuit")
|
||||||
|
}
|
||||||
|
if circuit.PaymentHash != hash1 || circuit.SrcHTLCID != 3 {
|
||||||
|
t.Fatalf("LookupByHTLC found unexpected circuit: %v", circuit)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check lookups by payment hash.
|
||||||
|
circuits := circuitMap.LookupByPaymentHash(hash1)
|
||||||
|
if len(circuits) != 2 {
|
||||||
|
t.Fatalf("LookupByPaymentHash returned wrong number of circuits for "+
|
||||||
|
"hash1: expected %d, got %d", 2, len(circuits))
|
||||||
|
}
|
||||||
|
|
||||||
|
circuits = circuitMap.LookupByPaymentHash(hash2)
|
||||||
|
if len(circuits) != 1 {
|
||||||
|
t.Fatalf("LookupByPaymentHash returned wrong number of circuits for "+
|
||||||
|
"hash2: expected %d, got %d", 1, len(circuits))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test removing circuits and the subsequent lookups.
|
||||||
|
err := circuitMap.Remove(chan1, 0)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Remove returned unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
circuits = circuitMap.LookupByPaymentHash(hash1)
|
||||||
|
if len(circuits) != 1 {
|
||||||
|
t.Fatalf("LookupByPaymentHash returned wrong number of circuits for "+
|
||||||
|
"hash1: expecected %d, got %d", 1, len(circuits))
|
||||||
|
}
|
||||||
|
if circuits[0].DestHTLCID != 3 {
|
||||||
|
t.Fatalf("LookupByPaymentHash returned wrong circuit for hash1: %v",
|
||||||
|
circuits[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removing already-removed circuit should return an error.
|
||||||
|
err = circuitMap.Remove(chan1, 0)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("Remove did not return expected not found error")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove last remaining circuit with payment hash hash1.
|
||||||
|
err = circuitMap.Remove(chan1, 3)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Remove returned unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
circuits = circuitMap.LookupByPaymentHash(hash1)
|
||||||
|
if len(circuits) != 0 {
|
||||||
|
t.Fatalf("LookupByPaymentHash returned wrong number of circuits for "+
|
||||||
|
"hash1: expecected %d, got %d", 0, len(circuits))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user