lnd/routing/missioncontrol_state_test.go
Andras Banki-Horvath 23c157a07b
routing: add option to force import MC pair history
This commit adds the `force` flag to the `XImportMissionControl` RPC
which allows skipping rules around the pair import except for what is
mandatory to make values meaningful. This can be useful for when clients
would like to forcibly override MC state in order to manipulate routing
results.
2022-01-19 17:18:05 +01:00

94 lines
2.8 KiB
Go

package routing
import (
"testing"
"time"
"github.com/lightningnetwork/lnd/routing/route"
"github.com/stretchr/testify/require"
)
// TestMissionControlStateSetLastPairResult tests setting mission control state
// pair results.
func TestMissionControlStateSetLastPairResult(t *testing.T) {
const minFailureRelaxInterval = time.Minute
state := newMissionControlState(minFailureRelaxInterval)
var (
from = route.Vertex{1}
to = route.Vertex{2}
timestamp = testTime
)
// Report a 1000 sat failure.
state.setLastPairResult(
from, to, timestamp, &pairResult{amt: 1000}, false,
)
result, _ := state.getLastPairResult(from)
if result[to].FailAmt != 1000 {
t.Fatalf("unexpected fail amount %v", result[to].FailAmt)
}
// Report an 1100 sat failure one hour later. It is expected to
// overwrite the previous failure.
timestamp = timestamp.Add(time.Hour)
state.setLastPairResult(
from, to, timestamp, &pairResult{amt: 1100}, false,
)
result, _ = state.getLastPairResult(from)
if result[to].FailAmt != 1100 {
t.Fatalf("unexpected fail amount %v", result[to].FailAmt)
}
// Report a 1200 sat failure one second later. Because this increase of
// the failure amount is too soon after the previous failure, the result
// is not applied.
timestamp = timestamp.Add(time.Second)
state.setLastPairResult(
from, to, timestamp, &pairResult{amt: 1200}, false,
)
result, _ = state.getLastPairResult(from)
if result[to].FailAmt != 1100 {
t.Fatalf("unexpected fail amount %v", result[to].FailAmt)
}
// Roll back time 1 second to test forced import.
timestamp = testTime
state.setLastPairResult(
from, to, timestamp, &pairResult{amt: 999}, true,
)
result, _ = state.getLastPairResult(from)
require.Equal(t, 999, int(result[to].FailAmt))
// Report an 1500 sat success.
timestamp = timestamp.Add(time.Second)
state.setLastPairResult(
from, to, timestamp, &pairResult{amt: 1500, success: true}, false,
)
result, _ = state.getLastPairResult(from)
// We don't expect the failtime to change, only the fail amount, we
// expect however change of both the success time and the success amount.
expected := TimedPairResult{
FailTime: timestamp.Add(-time.Second),
FailAmt: 1501,
SuccessTime: timestamp,
SuccessAmt: 1500,
}
require.Equal(t, expected, result[to])
// Again roll back time to test forced import.
state.setLastPairResult(
from, to, testTime, &pairResult{amt: 50, success: true}, true,
)
result, _ = state.getLastPairResult(from)
// We don't expect the failtime to change, only the fail amount, we
// expect however change of both the success time and the success amount.
expected = TimedPairResult{
FailTime: timestamp.Add(-time.Second),
FailAmt: 51,
SuccessTime: testTime,
SuccessAmt: 50,
}
require.Equal(t, expected, result[to])
}