github.com/status-im/status-go@v1.1.0/services/wallet/blockchainstate/blockchainstate_test.go (about)

     1  package blockchainstate
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  var mockupTime = time.Unix(946724400, 0) // 2000-01-01 12:00:00
    11  
    12  func mockupSince(t time.Time) time.Duration {
    13  	return mockupTime.Sub(t)
    14  }
    15  
    16  func setupTestState(t *testing.T) (s *BlockChainState) {
    17  	state := NewBlockChainState()
    18  	state.sinceFn = mockupSince
    19  	return state
    20  }
    21  
    22  func TestEstimateLatestBlockNumber(t *testing.T) {
    23  	state := setupTestState(t)
    24  
    25  	state.setLatestBlockDataForChain(1, LatestBlockData{
    26  		blockNumber:   uint64(100),
    27  		timestamp:     mockupTime.Add(-31 * time.Second),
    28  		blockDuration: 10 * time.Second,
    29  	})
    30  
    31  	state.setLatestBlockDataForChain(2, LatestBlockData{
    32  		blockNumber:   uint64(200),
    33  		timestamp:     mockupTime.Add(-5 * time.Second),
    34  		blockDuration: 12 * time.Second,
    35  	})
    36  
    37  	val, ok := state.estimateLatestBlockNumber(1)
    38  	require.True(t, ok)
    39  	require.Equal(t, uint64(103), val)
    40  	val, ok = state.estimateLatestBlockNumber(2)
    41  	require.True(t, ok)
    42  	require.Equal(t, uint64(200), val)
    43  	val, ok = state.estimateLatestBlockNumber(3)
    44  	require.False(t, ok)
    45  	require.Equal(t, uint64(0), val)
    46  }