status-im/status-go

View on GitHub
services/wallet/balance/ttl_cache_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package balance

import (
    "math/big"
    "testing"
    "time"

    "github.com/stretchr/testify/require"

    "github.com/ethereum/go-ethereum/common"
)

func Test_ttlCacheAll(t *testing.T) {
    const ttl = 10 * time.Millisecond
    cache := newCacheWithTTL(ttl)

    // init args
    block := big.NewInt(1)
    chainID := uint64(1)
    account := common.Address{1}
    balance := big.NewInt(1)

    // Test balance
    cache.AddBalance(account, chainID, block, balance)
    require.Equal(t, 1, cache.BalanceSize(account, chainID))
    require.Equal(t, 0, cache.NonceSize(account, chainID))

    balRes := cache.GetBalance(account, chainID, block)
    require.Equal(t, balance, balRes)

    cache.Clear()
    require.Equal(t, 0, cache.BalanceSize(account, chainID))
    require.Equal(t, 0, cache.NonceSize(account, chainID))

    // Test nonce
    nonce := int64(2)
    cache.AddNonce(account, chainID, block, &nonce)
    require.Equal(t, 1, cache.NonceSize(account, chainID))
    require.Equal(t, 0, cache.BalanceSize(account, chainID))

    nonceRes := cache.GetNonce(account, chainID, block)
    require.Equal(t, nonce, *nonceRes)
    cache.Clear()
    require.Equal(t, 0, cache.BalanceSize(account, chainID))
    require.Equal(t, 0, cache.NonceSize(account, chainID))

    // Test cache expiration
    cache.Clear()
    cache.AddBalance(account, chainID, block, balance)
    cache.AddNonce(account, chainID, block, &nonce)
    time.Sleep(ttl * 2) // wait for cache to expire
    require.Equal(t, 0, cache.BalanceSize(account, chainID))
    require.Equal(t, 0, cache.NonceSize(account, chainID))
    require.Equal(t, 1, cache.nonceRangeCache.size(account, chainID)) // not updated by ttlCache for now
    cache.Clear()

    // Test nonceRange size after adding nonce
    cache.Clear()
    cache.AddNonce(account, chainID, block, &nonce)
    require.Equal(t, 1, cache.nonceRangeCache.size(account, chainID))
    require.Equal(t, 1, len(cache.nonceRangeCache.sortedRanges))

    // Test nonceRange size after clearing
    cache.nonceRangeCache.clear()
    require.Equal(t, 0, cache.nonceRangeCache.size(account, chainID))
    require.Equal(t, 0, len(cache.nonceRangeCache.sortedRanges))
}