github.com/status-im/status-go@v1.1.0/services/wallet/balance/ttl_cache_test.go (about) 1 package balance 2 3 import ( 4 "math/big" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/ethereum/go-ethereum/common" 11 ) 12 13 func Test_ttlCacheAll(t *testing.T) { 14 const ttl = 10 * time.Millisecond 15 cache := newCacheWithTTL(ttl) 16 17 // init args 18 block := big.NewInt(1) 19 chainID := uint64(1) 20 account := common.Address{1} 21 balance := big.NewInt(1) 22 23 // Test balance 24 cache.AddBalance(account, chainID, block, balance) 25 require.Equal(t, 1, cache.BalanceSize(account, chainID)) 26 require.Equal(t, 0, cache.NonceSize(account, chainID)) 27 28 balRes := cache.GetBalance(account, chainID, block) 29 require.Equal(t, balance, balRes) 30 31 cache.Clear() 32 require.Equal(t, 0, cache.BalanceSize(account, chainID)) 33 require.Equal(t, 0, cache.NonceSize(account, chainID)) 34 35 // Test nonce 36 nonce := int64(2) 37 cache.AddNonce(account, chainID, block, &nonce) 38 require.Equal(t, 1, cache.NonceSize(account, chainID)) 39 require.Equal(t, 0, cache.BalanceSize(account, chainID)) 40 41 nonceRes := cache.GetNonce(account, chainID, block) 42 require.Equal(t, nonce, *nonceRes) 43 cache.Clear() 44 require.Equal(t, 0, cache.BalanceSize(account, chainID)) 45 require.Equal(t, 0, cache.NonceSize(account, chainID)) 46 47 // Test cache expiration 48 cache.Clear() 49 cache.AddBalance(account, chainID, block, balance) 50 cache.AddNonce(account, chainID, block, &nonce) 51 time.Sleep(ttl * 2) // wait for cache to expire 52 require.Equal(t, 0, cache.BalanceSize(account, chainID)) 53 require.Equal(t, 0, cache.NonceSize(account, chainID)) 54 require.Equal(t, 1, cache.nonceRangeCache.size(account, chainID)) // not updated by ttlCache for now 55 cache.Clear() 56 57 // Test nonceRange size after adding nonce 58 cache.Clear() 59 cache.AddNonce(account, chainID, block, &nonce) 60 require.Equal(t, 1, cache.nonceRangeCache.size(account, chainID)) 61 require.Equal(t, 1, len(cache.nonceRangeCache.sortedRanges)) 62 63 // Test nonceRange size after clearing 64 cache.nonceRangeCache.clear() 65 require.Equal(t, 0, cache.nonceRangeCache.size(account, chainID)) 66 require.Equal(t, 0, len(cache.nonceRangeCache.sortedRanges)) 67 }