mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-04 09:48:19 +01:00
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.
94 lines
2.8 KiB
Go
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])
|
|
|
|
}
|