github.com/decred/dcrlnd@v0.7.6/channeldb/gossiper_test.go (about)

     1  package channeldb
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/decred/dcrlnd/routing/route"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestGossiperTS(t *testing.T) {
    13  	db, cleanup, err := MakeTestDB()
    14  	require.NoError(t, err)
    15  	defer cleanup()
    16  
    17  	// Try to read the ts of an unrecorded peer.
    18  	_, err = db.ReadPeerLastGossipMsgTS(testPub)
    19  	if !errors.Is(err, ErrNoPeerLastGossipMsgTS) {
    20  		t.Fatalf("Unexpected error: got %v, want %v", err, ErrNoPeerLastGossipMsgTS)
    21  	}
    22  
    23  	var (
    24  		testPub2 = route.Vertex{2, 2, 2}
    25  		wantTS   = time.Unix(200, 23)
    26  	)
    27  
    28  	// Write a test TS.
    29  	err = db.UpdatePeerLastGossipMsgTS(testPub2, wantTS)
    30  	require.NoError(t, err)
    31  
    32  	// Read back the test TS.
    33  	gotTS, err := db.ReadPeerLastGossipMsgTS(testPub2)
    34  	require.NoError(t, err)
    35  	require.Equal(t, wantTS, gotTS)
    36  
    37  	// Write a TS that is before the last recorded TS. This should error.
    38  	err = db.UpdatePeerLastGossipMsgTS(testPub2, wantTS.Add(-1))
    39  	if !errors.Is(err, ErrOutdatedLastGossipMsgTS) {
    40  		t.Fatalf("Unexpected error: got %v, want %v", err, ErrOutdatedLastGossipMsgTS)
    41  	}
    42  
    43  	// The TS should still be the old one.
    44  	gotTS, err = db.ReadPeerLastGossipMsgTS(testPub2)
    45  	require.NoError(t, err)
    46  	require.Equal(t, wantTS, gotTS)
    47  
    48  	// Write a TS that is after the last recorded TS.
    49  	newWantTS := wantTS.Add(1)
    50  	err = db.UpdatePeerLastGossipMsgTS(testPub2, newWantTS)
    51  	require.NoError(t, err)
    52  
    53  	// The TS should have been updated.
    54  	gotTS, err = db.ReadPeerLastGossipMsgTS(testPub2)
    55  	require.NoError(t, err)
    56  	require.Equal(t, newWantTS, gotTS)
    57  }