From d0f01417aed32382f95211fe3e8c8b4b866ab673 Mon Sep 17 00:00:00 2001 From: Anthony Graignic <anthony.graignic@uca.fr> Date: Tue, 5 Dec 2023 15:16:10 +0100 Subject: [PATCH] Add unit tests to reproduce issue #123 --- src/consensus/base.rs | 74 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/consensus/base.rs b/src/consensus/base.rs index 2bd896f6..f17b9e54 100644 --- a/src/consensus/base.rs +++ b/src/consensus/base.rs @@ -213,6 +213,11 @@ pub type BlockRewardSchedule = BlockSchedule<U256>; #[cfg(test)] mod tests { + use std::{ + thread::sleep, + time::{Duration, UNIX_EPOCH}, + }; + use crate::res::chainspec::MAINNET; use super::*; @@ -334,4 +339,73 @@ mod tests { assert_eq!(schedule.for_block(BlockNumber(block)), expected_reward); } } + + #[test] + fn validate_block_header_error_future_block_issue_123() { + // ARRANGE + let consensus_engine_base = ConsensusEngineBase::new(ChainId(63), None, None); + + let now = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs(); + + sleep(Duration::from_secs(3)); + + let mut header = BlockHeader::default(); + header.timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() + + 5; + let parent = BlockHeader::default(); + + sleep(Duration::from_secs(3)); + + // ACT + let result = consensus_engine_base.validate_block_header(&header, &parent, true); + + // ASSERT + assert!(result.is_err()); + } + + #[test] + fn validate_block_header_error_future_block() { + // ARRANGE + let consensus_engine_base = ConsensusEngineBase::new(ChainId(63), None, None); + + let mut header = BlockHeader::default(); + header.timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() + + 1_000_000; + let parent = BlockHeader::default(); + + // ACT + let result = consensus_engine_base.validate_block_header(&header, &parent, true); + + // ASSERT + assert!(result.is_err()); + } + + #[test] + fn validate_block_header_should_work() { + // ARRANGE + let consensus_engine_base = ConsensusEngineBase::new(ChainId(63), None, None); + + let mut header = BlockHeader::default(); + header.timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() + - 3600; + let parent = BlockHeader::default(); + + // ACT + let result = consensus_engine_base.validate_block_header(&header, &parent, true); + + // ASSERT + assert!(result.is_ok()); + } } -- GitLab