mirror of
https://github.com/lightningnetwork/lnd.git
synced 2026-08-13 12:32:48 +02:00
Add a Timestamp interface for channel and node update ordering values
that abstracts over the two freshness semantics used by the gossip
versions:
- UnixTimestamp (uint64): seconds-since-epoch, used by v1 gossip
channels and nodes.
- BlockHeightTimestamp (uint32): block height, used by v2 gossip
channels and nodes.
Both concrete types implement IsZero() and Cmp(). Cmp returns an error
if the two operands are of different concrete types, preventing
accidental cross-version comparisons.
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package lnwire
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestUnixTimestamp tests the IsZero and Cmp methods of UnixTimestamp.
|
|
func TestUnixTimestamp(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("IsZero", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
require.True(t, UnixTimestamp(0).IsZero())
|
|
require.False(t, UnixTimestamp(1).IsZero())
|
|
require.False(t, UnixTimestamp(1_000_000).IsZero())
|
|
})
|
|
|
|
t.Run("Cmp", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := UnixTimestamp(100)
|
|
b := UnixTimestamp(200)
|
|
|
|
result, err := a.Cmp(b)
|
|
require.NoError(t, err)
|
|
require.Equal(t, LessThan, result)
|
|
|
|
result, err = b.Cmp(a)
|
|
require.NoError(t, err)
|
|
require.Equal(t, GreaterThan, result)
|
|
|
|
c := UnixTimestamp(100)
|
|
result, err = a.Cmp(c)
|
|
require.NoError(t, err)
|
|
require.Equal(t, EqualTo, result)
|
|
})
|
|
|
|
t.Run("Cmp wrong type", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
_, err := UnixTimestamp(1).Cmp(BlockHeightTimestamp(1))
|
|
require.ErrorContains(t, err, "expected UnixTimestamp")
|
|
})
|
|
}
|
|
|
|
// TestBlockHeightTimestamp tests the IsZero and Cmp methods of
|
|
// BlockHeightTimestamp.
|
|
func TestBlockHeightTimestamp(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("IsZero", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
require.True(t, BlockHeightTimestamp(0).IsZero())
|
|
require.False(t, BlockHeightTimestamp(1).IsZero())
|
|
require.False(t, BlockHeightTimestamp(800_000).IsZero())
|
|
})
|
|
|
|
t.Run("Cmp", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := BlockHeightTimestamp(500)
|
|
b := BlockHeightTimestamp(800)
|
|
|
|
result, err := a.Cmp(b)
|
|
require.NoError(t, err)
|
|
require.Equal(t, LessThan, result)
|
|
|
|
result, err = b.Cmp(a)
|
|
require.NoError(t, err)
|
|
require.Equal(t, GreaterThan, result)
|
|
|
|
c := BlockHeightTimestamp(500)
|
|
result, err = a.Cmp(c)
|
|
require.NoError(t, err)
|
|
require.Equal(t, EqualTo, result)
|
|
})
|
|
|
|
t.Run("Cmp wrong type", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
_, err := BlockHeightTimestamp(1).Cmp(UnixTimestamp(1))
|
|
require.ErrorContains(t, err, "expected BlockHeightTimestamp")
|
|
})
|
|
}
|