channeldb/test: make route comparison a pure function

Previously the route to compare was modified in order for DeepEqual to
function properly. This created problems when tests were ran in
parallel.
This commit is contained in:
Joost Jager
2019-09-10 15:34:02 +02:00
parent 7f4af8f9ae
commit 62a9c2c3ac
2 changed files with 42 additions and 78 deletions

View File

@@ -15,7 +15,6 @@ import (
"github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/lntypes"
"github.com/lightningnetwork/lnd/routing/route"
"github.com/lightningnetwork/lnd/tlv"
)
func initDB() (*DB, error) {
@@ -139,36 +138,10 @@ func TestPaymentControlSwitchFail(t *testing.T) {
t.Fatalf("error shouldn't have been received, got: %v", err)
}
err = assertRouteHopRecordsEqual(route, &attempt.Route)
err = assertRouteEqual(route, &attempt.Route)
if err != nil {
t.Fatalf("route tlv records not equal: %v", err)
}
for i := 0; i < len(route.Hops); i++ {
for j := 0; j < len(route.Hops[i].TLVRecords); j++ {
expectedRecord := route.Hops[i].TLVRecords[j]
newRecord := attempt.Route.Hops[i].TLVRecords[j]
err := assertHopRecordsEqual(expectedRecord, newRecord)
if err != nil {
t.Fatalf("route record mismatch: %v", err)
}
}
}
for i := 0; i < len(route.Hops); i++ {
// reflect.DeepEqual can't assert that two function closures
// are equal. The underlying tlv.Record uses function closures
// internally, so after we verify that the records match above
// manually, we unset these so we can use reflect.DeepEqual
// below.
route.Hops[i].TLVRecords = nil
attempt.Route.Hops[i].TLVRecords = nil
}
if !reflect.DeepEqual(*route, attempt.Route) {
t.Fatalf("unexpected route returned: %v vs %v",
spew.Sdump(attempt.Route), spew.Sdump(*route))
t.Fatalf("unexpected route returned: %v vs %v: %v",
spew.Sdump(attempt.Route), spew.Sdump(*route), err)
}
assertPaymentStatus(t, db, info.PaymentHash, StatusSucceeded)
@@ -484,34 +457,7 @@ func checkPaymentAttemptInfo(bucket *bbolt.Bucket, a *PaymentAttemptInfo) error
return err
}
err = assertRouteHopRecordsEqual(&a.Route, &a2.Route)
if err != nil {
return err
}
recordCache := make(map[int][]tlv.Record)
for i := 0; i < len(a.Route.Hops); i++ {
recordCache[i] = a.Route.Hops[i].TLVRecords
// reflect.DeepEqual can't assert that two function closures
// are equal. The underlying tlv.Record uses function closures
// internally, so after we verify that the records match above
// manually, we unset these so we can use reflect.DeepEqual
// below.
a.Route.Hops[i].TLVRecords = nil
a2.Route.Hops[i].TLVRecords = nil
}
if !reflect.DeepEqual(a, a2) {
return fmt.Errorf("PaymentAttemptInfos don't match: %v vs %v",
spew.Sdump(a), spew.Sdump(a2))
}
for index, records := range recordCache {
a.Route.Hops[index].TLVRecords = records
}
return nil
return assertRouteEqual(&a.Route, &a2.Route)
}
func checkSettleInfo(bucket *bbolt.Bucket, preimg lntypes.Preimage) error {