mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 13:46:43 +00:00
triedb/pathdb: add test case
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
5572f2ed22
commit
8315b60fd1
1 changed files with 41 additions and 0 deletions
|
|
@ -21,6 +21,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/core/rawdb"
|
||||
"github.com/ethereum/go-ethereum/rlp"
|
||||
)
|
||||
|
||||
// TestHistoryIndexerShortenDeadlock tests that a call to shorten does not
|
||||
|
|
@ -55,3 +56,43 @@ func TestHistoryIndexerShortenDeadlock(t *testing.T) {
|
|||
t.Fatal("timed out waiting for shorten to complete, potential deadlock")
|
||||
}
|
||||
}
|
||||
|
||||
// TestHistoryIndexerDeadLoop tests the specific scenario that causes
|
||||
// dead loop when the metadata shows a higher value than the target.
|
||||
func TestHistoryIndexerDeadLoop(t *testing.T) {
|
||||
// log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelDebug, true)))
|
||||
db := rawdb.NewMemoryDatabase()
|
||||
freezer, _ := rawdb.NewStateFreezer(t.TempDir(), false, false)
|
||||
defer freezer.Close()
|
||||
|
||||
histories := makeHistories(10)
|
||||
for i, h := range histories {
|
||||
accountData, storageData, accountIndex, storageIndex := h.encode()
|
||||
rawdb.WriteStateHistory(freezer, uint64(i+1), h.meta.encode(), accountIndex, storageIndex, accountData, storageData)
|
||||
}
|
||||
|
||||
var m indexMetadata
|
||||
m.Version = stateIndexVersion
|
||||
m.Last = 8 // Higher than our target of 5
|
||||
blob, _ := rlp.EncodeToBytes(m)
|
||||
rawdb.WriteStateHistoryIndexMetadata(db, blob)
|
||||
|
||||
// Create indexer with target that is less than the metadata
|
||||
indexer := newHistoryIndexer(db, freezer, 5)
|
||||
defer indexer.close()
|
||||
|
||||
// Wait for indexing to complete
|
||||
timeout := time.After(5 * time.Second)
|
||||
for {
|
||||
select {
|
||||
case <-timeout:
|
||||
t.Fatal("timed out waiting for indexing to complete")
|
||||
default:
|
||||
if indexer.inited() {
|
||||
// Indexing completed successfully, no infinite loop occurred
|
||||
return
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue