mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 09:53:54 +01:00
2449e66d29
The minimum relay fee is always ensured to be above our fee floor except in the very first min relay fee query to bitcoind. This commit ensures that the fee floor is respected in this first query.
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package chainfee
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type mockChainBackend struct {
|
|
minFee SatPerKWeight
|
|
callCount int
|
|
}
|
|
|
|
func (m *mockChainBackend) fetchFee() (SatPerKWeight, error) {
|
|
m.callCount++
|
|
return m.minFee, nil
|
|
}
|
|
|
|
// TestMinFeeManager tests that the minFeeManager returns an up to date min fee
|
|
// by querying the chain backend and that it returns a cached fee if the chain
|
|
// backend was recently queried.
|
|
func TestMinFeeManager(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
// Initialize the mock backend and let it have a minimum fee rate
|
|
// below our fee floor.
|
|
chainBackend := &mockChainBackend{
|
|
minFee: FeePerKwFloor - 1,
|
|
}
|
|
|
|
// Initialise the min fee manager. This should call the chain backend
|
|
// once.
|
|
feeManager, err := newMinFeeManager(
|
|
100*time.Millisecond,
|
|
chainBackend.fetchFee,
|
|
)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, chainBackend.callCount)
|
|
|
|
// Check that the minimum fee rate is clamped by our fee floor.
|
|
require.Equal(t, feeManager.minFeePerKW, FeePerKwFloor)
|
|
|
|
// If the fee is requested again, the stored fee should be returned
|
|
// and the chain backend should not be queried.
|
|
chainBackend.minFee = SatPerKWeight(2000)
|
|
minFee := feeManager.fetchMinFee()
|
|
require.Equal(t, minFee, FeePerKwFloor)
|
|
require.Equal(t, 1, chainBackend.callCount)
|
|
|
|
// Fake the passing of time.
|
|
feeManager.lastUpdatedTime = time.Now().Add(-200 * time.Millisecond)
|
|
|
|
// If the fee is queried again after the backoff period has passed
|
|
// then the chain backend should be queried again for the min fee.
|
|
minFee = feeManager.fetchMinFee()
|
|
require.Equal(t, SatPerKWeight(2000), minFee)
|
|
require.Equal(t, 2, chainBackend.callCount)
|
|
}
|