func testIterator(t *testing.T, db btcdb.Db, shas []btcwire.ShaHash, sync string) { // Iterate over the whole list of shas. iter, err := db.NewIterateBlocks() if err != nil { t.Errorf("failed to create iterated blocks") return } // Skip the genesis block. _ = iter.NextRow() i := 0 for ; iter.NextRow(); i++ { key, pver, buf, err := iter.Row() if err != nil { t.Errorf("iter.NextRow() failed: %v (%s)", err, sync) break } if i >= len(shas) { t.Errorf("iterator returned more shas than "+ "expected - %d (%s)", i, sync) break } if !key.IsEqual(&shas[i]) { t.Errorf("iterator test: %dth sha doesn't match (%s)", i, sync) } if !bytes.Equal(zeroBlock, buf) { t.Errorf("iterator test: %d buf incorrect (%s)", i, sync) } if pver != 1 { t.Errorf("iterator: %dth pver is %d and not 1 (%s)", i, pver, sync) } } if i < len(shas) { t.Errorf("iterator got no rows on %dth loop, should have %d "+ "(%s)", i, len(shas), sync) } if _, _, _, err = iter.Row(); err == nil { t.Errorf("done iterator didn't return failure") } iter.Close() }