github.com/decred/dcrlnd@v0.7.6/routing/shards/shard_tracker_test.go (about)

     1  package shards_test
     2  
     3  import (
     4  	"crypto/rand"
     5  	"testing"
     6  
     7  	"github.com/decred/dcrlnd/lntypes"
     8  	"github.com/decred/dcrlnd/routing/shards"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // TestSimpleShardTracker tests that the simple tracker that keeps a map from
    13  // attemptID-> payment hash works.
    14  func TestSimpleShardTracker(t *testing.T) {
    15  	var testHashes [2]lntypes.Hash
    16  	for i := range testHashes {
    17  		_, err := rand.Read(testHashes[i][:])
    18  		require.NoError(t, err)
    19  	}
    20  
    21  	startAttempts := map[uint64]lntypes.Hash{
    22  		1: testHashes[1],
    23  	}
    24  
    25  	tracker := shards.NewSimpleShardTracker(testHashes[0], startAttempts)
    26  
    27  	// Trying to retrieve a hash for id 0 should result in an error.
    28  	_, err := tracker.GetHash(0)
    29  	require.Error(t, err)
    30  
    31  	// Getting id 1 should workd.
    32  	hash1, err := tracker.GetHash(1)
    33  	require.NoError(t, err)
    34  
    35  	require.Equal(t, testHashes[1], hash1)
    36  
    37  	// Finally, create a new shard and immediately retrieve the hash.
    38  	shard, err := tracker.NewShard(2, false)
    39  	require.NoError(t, err)
    40  
    41  	// It's hash should be the tracker's overall payment hash.
    42  	hash2, err := tracker.GetHash(2)
    43  	require.NoError(t, err)
    44  
    45  	require.Equal(t, testHashes[0], shard.Hash())
    46  	require.Equal(t, testHashes[0], hash2)
    47  }