diff --git a/eth/api.go b/eth/api.go index 1cdc2a4150..c72217aabe 100644 --- a/eth/api.go +++ b/eth/api.go @@ -345,8 +345,8 @@ func accountRange(st state.Trie, start *common.Address, maxResults int) (Account it := trie.NewIterator(st.NodeIterator(crypto.Keccak256(start[:]))) result := AccountRangeResult{Addresses: []common.Address{}, Next: common.Address{}} - if maxResults > AccountRangeAtMaxResults { - maxResults = AccountRangeAtMaxResults + if maxResults > AccountRangeMaxResults { + maxResults = AccountRangeMaxResults } for i := 0; i < maxResults && it.Next(); i++ { @@ -369,7 +369,7 @@ func accountRange(st state.Trie, start *common.Address, maxResults int) (Account } const ( - AccountRangeAtMaxResults = 256 + AccountRangeMaxResults = 256 ) // AccountRangeAt enumerates all accounts in the latest state diff --git a/eth/api_test.go b/eth/api_test.go index 6a180bd87a..c76be5aa76 100644 --- a/eth/api_test.go +++ b/eth/api_test.go @@ -31,7 +31,7 @@ import ( var dumper = spew.ConfigState{Indent: " "} -func accountRangeExpect(t *testing.T, trie *state.Trie, statedb *state.StateDB, start *common.Address, requestedNum int, expectedNum int) AccountRangeResult { +func accountRangeTest(t *testing.T, trie *state.Trie, statedb *state.StateDB, start *common.Address, requestedNum int, expectedNum int) AccountRangeResult { result, err := accountRange(*trie, start, requestedNum) if err != nil { t.Fatal(err) @@ -54,15 +54,12 @@ func TestAccountRangeAt(t *testing.T) { var ( statedb = state.NewDatabase(ethdb.NewMemDatabase()) state, _ = state.New(common.Hash{}, statedb) - addrs = [512]common.Address{} + addrs = [AccountRangeMaxResults * 2]common.Address{} ) - for i := 0; i < 512; i++ { + for i := range addrs { addr := fmt.Sprintf("%x", i) addrs[i] = common.HexToAddress(addr) - } - - for i := range addrs { state.SetBalance(addrs[i], big.NewInt(1)) } @@ -74,15 +71,19 @@ func TestAccountRangeAt(t *testing.T) { t.Fatal(err) } - // test getting number of results less than max - accountRangeExpect(t, &trie, state, &common.Address{0x0}, 128, 128) + t.Logf("test getting number of results less than max") + accountRangeTest(t, &trie, state, &common.Address{0x0}, AccountRangeMaxResults / 2, AccountRangeMaxResults / 2) - // test getting number of results greater than max - accountRangeExpect(t, &trie, state, &common.Address{0x0}, 512, 256) + t.Logf("test getting number of results greater than max %d", AccountRangeMaxResults) + accountRangeTest(t, &trie, state, &common.Address{0x0}, AccountRangeMaxResults * 2, AccountRangeMaxResults) + + t.Logf("test pagination") // test pagination - firstResult := accountRangeExpect(t, &trie, state, &common.Address{0x0}, 128, 128) - secondResult := accountRangeExpect(t, &trie, state, &firstResult.Next, 128, 128) + firstResult := accountRangeTest(t, &trie, state, &common.Address{0x0}, AccountRangeMaxResults, AccountRangeMaxResults) + + t.Logf("test pagination 2") + secondResult := accountRangeTest(t, &trie, state, &firstResult.Next, AccountRangeMaxResults, AccountRangeMaxResults) for i := range firstResult.Addresses { for j := range secondResult.Addresses {