Tests that the node iterator indeed walks over the entire database contents.
(t *testing.T)
| 26 | |
| 27 | // Tests that the node iterator indeed walks over the entire database contents. |
| 28 | func TestNodeIteratorCoverage(t *testing.T) { |
| 29 | // Create some arbitrary test state to iterate |
| 30 | db, root, _ := makeTestState() |
| 31 | |
| 32 | state, err := New(root, db) |
| 33 | if err != nil { |
| 34 | t.Fatalf("failed to create state trie at %x: %v", root, err) |
| 35 | } |
| 36 | // Gather all the node hashes found by the iterator |
| 37 | hashes := make(map[common.Hash]struct{}) |
| 38 | for it := NewNodeIterator(state); it.Next(); { |
| 39 | if it.Hash != (common.Hash{}) { |
| 40 | hashes[it.Hash] = struct{}{} |
| 41 | } |
| 42 | } |
| 43 | // Cross check the iterated hashes and the database/nodepool content |
| 44 | for hash := range hashes { |
| 45 | if _, err := db.TrieDB().Node(hash); err != nil { |
| 46 | t.Errorf("failed to retrieve reported node %x", hash) |
| 47 | } |
| 48 | } |
| 49 | for _, hash := range db.TrieDB().Nodes() { |
| 50 | if _, ok := hashes[hash]; !ok { |
| 51 | t.Errorf("state entry not reported %x", hash) |
| 52 | } |
| 53 | } |
| 54 | for _, key := range db.TrieDB().DiskDB().(*database.MemDatabase).Keys() { |
| 55 | if bytes.HasPrefix(key, []byte("secure-key-")) { |
| 56 | continue |
| 57 | } |
| 58 | if _, ok := hashes[common.BytesToHash(key)]; !ok { |
| 59 | t.Errorf("state entry not reported %x", key) |
| 60 | } |
| 61 | } |
| 62 | } |
nothing calls this directly
no test coverage detected