Add block gen test for pos blocks

This commit is contained in:
Paul Hauner
2021-09-28 20:38:12 +10:00
parent af6095acf4
commit 91a3cbc78a

View File

@@ -50,7 +50,7 @@ impl ExecutionBlockGenerator {
}
}
pub fn insert_merge_block(&mut self, number: u64, block_hash: Hash256) -> Result<(), String> {
pub fn insert_pos_block(&mut self, number: u64) -> Result<(), String> {
if number <= self.terminal_block_number {
return Err(format!(
"cannot insert block {} as it is prior to terminal block {}",
@@ -58,6 +58,13 @@ impl ExecutionBlockGenerator {
));
}
let time_based_block = self.block_number_at(self.seconds_since_genesis);
if time_based_block < self.terminal_block_number {
if number > time_based_block {
return Err(format!("it is too early to insert block {}", number));
}
}
let next_block = self
.latest_merge_block
.unwrap_or(self.terminal_block_number)
@@ -148,7 +155,7 @@ mod test {
use super::*;
#[test]
fn simple() {
fn pow_chain_only() {
const TERMINAL_DIFFICULTY: u64 = 10;
const TERMINAL_BLOCK: u64 = 10;
const DIFFICULTY_INCREMENT: u64 = 1;
@@ -201,4 +208,37 @@ mod test {
generator.increment_seconds_since_genesis(1);
}
}
#[test]
fn pos_blocks() {
const TERMINAL_DIFFICULTY: u64 = 10;
const TERMINAL_BLOCK: u64 = 10;
let mut generator = ExecutionBlockGenerator::new(TERMINAL_DIFFICULTY, TERMINAL_BLOCK);
let penultimate_pow_block = generator.terminal_block_number.checked_sub(1).unwrap();
let last_pow_block = generator.terminal_block_number;
let first_pos_block = generator.terminal_block_number + 1;
let second_pos_block = first_pos_block + 1;
generator.set_clock_for_block_number(penultimate_pow_block);
assert!(generator.block_by_number(last_pow_block).is_none());
assert!(generator.insert_pos_block(first_pos_block).is_err());
generator.set_clock_for_block_number(last_pow_block);
generator.block_by_number(last_pow_block).unwrap();
assert!(generator.block_by_number(first_pos_block).is_none());
generator.insert_pos_block(first_pos_block).unwrap();
generator.block_by_number(first_pos_block).unwrap();
assert!(generator.insert_pos_block(first_pos_block).is_err());
generator.insert_pos_block(second_pos_block).unwrap();
}
}