Fix block detail updating (#11015)
* Add finality parameter to `null engine` * Add testcase for finalization marking in `ethcore` client * Add double cache read for db * Prevent lost update of block details * Read with pending update for block details in batch
This commit is contained in:
@@ -2644,13 +2644,13 @@ mod tests {
|
||||
receipt::{Receipt, LocalizedReceipt, TransactionOutcome},
|
||||
transaction::{Transaction, LocalizedTransaction, Action},
|
||||
};
|
||||
use test_helpers::{generate_dummy_client, get_good_dummy_block_hash, generate_dummy_client_with_data};
|
||||
use test_helpers::{generate_dummy_client, generate_dummy_client_with_data, generate_dummy_client_with_spec_and_data, get_good_dummy_block_hash};
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use kvdb::DBTransaction;
|
||||
use blockchain::ExtrasInsert;
|
||||
use blockchain::{BlockProvider, ExtrasInsert};
|
||||
use hash::keccak;
|
||||
use super::transaction_receipt;
|
||||
use ethkey::KeyPair;
|
||||
@@ -2785,4 +2785,22 @@ mod tests {
|
||||
outcome: TransactionOutcome::StateRoot(state_root),
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_mark_finalization_correctly_for_parent() {
|
||||
let client = generate_dummy_client_with_spec_and_data(spec::new_test_with_finality, 2, 0, &[]);
|
||||
let chain = client.chain();
|
||||
|
||||
let block1_details = chain.block_hash(1).and_then(|h| chain.block_details(&h));
|
||||
assert!(block1_details.is_some());
|
||||
let block1_details = block1_details.unwrap();
|
||||
assert_eq!(block1_details.children.len(), 1);
|
||||
assert!(block1_details.is_finalized);
|
||||
|
||||
let block2_details = chain.block_hash(2).and_then(|h| chain.block_details(&h));
|
||||
assert!(block2_details.is_some());
|
||||
let block2_details = block2_details.unwrap();
|
||||
assert_eq!(block2_details.children.len(), 0);
|
||||
assert!(!block2_details.is_finalized);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user