Files
muun-recovery/libwallet/operation/fee_window_test.go
2025-05-13 17:49:44 -03:00

173 lines
3.8 KiB
Go

package operation
import "testing"
var singleFeeWindow = &FeeWindow{
TargetedFees: func() map[uint]float64 {
fees := make(map[uint]float64)
fees[1] = 5.6
return fees
}(),
}
var someFeeWindow = &FeeWindow{
TargetedFees: func() map[uint]float64 {
fees := make(map[uint]float64)
fees[2] = 2.3
fees[5] = 7.2
fees[20] = 18.7
return fees
}(),
}
func TestFastestFeeRate(t *testing.T) {
testCases := []struct {
desc string
feewindow *FeeWindow
expectedFeeRate float64
}{
{
desc: "returns the fastest fee rate",
feewindow: someFeeWindow,
expectedFeeRate: 2.3,
},
{
desc: "returns the only fee rate as fastest",
feewindow: singleFeeWindow,
expectedFeeRate: 5.6,
},
}
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
feeRate := tC.feewindow.FastestFeeRate()
if feeRate != tC.expectedFeeRate {
t.Fatalf("expected feeRate = %v, got %v", tC.expectedFeeRate, feeRate)
}
})
}
}
func TestMinimumFeeRate(t *testing.T) {
testCases := []struct {
desc string
feewindow *FeeWindow
confTarget uint
expectedFeeRate float64
}{
{
desc: "returns the exact target as closest, if present (1)",
feewindow: someFeeWindow,
confTarget: 2,
expectedFeeRate: 2.3,
},
{
desc: "returns the exact target as closest, if present (2)",
feewindow: someFeeWindow,
confTarget: 5,
expectedFeeRate: 7.2,
},
{
desc: "returns the exact target as closest, if present (3)",
feewindow: someFeeWindow,
confTarget: 20,
expectedFeeRate: 18.7,
},
{
desc: "returns the closest lower target (1)",
feewindow: someFeeWindow,
confTarget: 4,
expectedFeeRate: 2.3,
},
{
desc: "returns the closest lower target (2)",
feewindow: someFeeWindow,
confTarget: 15,
expectedFeeRate: 7.2,
},
{
desc: "returns the closest lower target (3)",
feewindow: someFeeWindow,
confTarget: 22,
expectedFeeRate: 18.7,
},
{
desc: "returns the lowest target by default",
feewindow: someFeeWindow,
confTarget: 1,
expectedFeeRate: 2.3,
},
{
desc: "returns the only fee rate as closest (1)",
feewindow: singleFeeWindow,
confTarget: 1,
expectedFeeRate: 5.6,
},
{
desc: "returns the only fee rate as closest (2)",
feewindow: singleFeeWindow,
confTarget: 6,
expectedFeeRate: 5.6,
}, {
desc: "returns the only fee rate as closest (3)",
feewindow: singleFeeWindow,
confTarget: 18,
expectedFeeRate: 5.6,
}, {
desc: "returns the only fee rate as closest (4)",
feewindow: singleFeeWindow,
confTarget: 24,
expectedFeeRate: 5.6,
},
}
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
feeRate, err := tC.feewindow.MinimumFeeRate(tC.confTarget)
if err != nil {
t.Fatal(err)
}
if feeRate != tC.expectedFeeRate {
t.Fatalf("expected feeRate = %v, got %v", tC.expectedFeeRate, feeRate)
}
})
}
}
func TestInvalidConfirmationTargets(t *testing.T) {
testCases := []struct {
desc string
feewindow *FeeWindow
confTarget uint
}{
{
desc: "fails check when confirmation target is 0",
feewindow: someFeeWindow,
confTarget: 0,
},
}
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
_, err := tC.feewindow.MinimumFeeRate(tC.confTarget)
if err == nil {
t.Fatalf("expected test to error")
}
})
}
}
func TestNextHighestBlock(t *testing.T) {
block := someFeeWindow.NextHighestBlock(10.0)
if block != 2 {
t.Fatalf("expected block to be 2, got %v", block)
}
}