Use runtime storage in PoA -> Substrate module tests (#103)

* removeInMemoryStorage + extract Kovan stuff to runtime

* removed comment from the future

* remove redundant conversions

* remove redundant `u8 as usize`

* remove redundant `u8 as usize`

* Update modules/ethereum/src/mock.rs

Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com>

* use hex-literal in kovan config

* cargo fmt --all

* extracted insert_header

* cargo fmt --all

Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com>
This commit is contained in:
Svyatoslav Nikolsky
2020-06-01 17:51:12 +03:00
committed by Bastian Köcher
parent 7fb99cd575
commit a6a86c21bb
11 changed files with 689 additions and 875 deletions
+95 -91
View File
@@ -214,106 +214,110 @@ pub(crate) fn ancestry<'a, S: Storage>(
#[cfg(test)]
mod tests {
use super::*;
use crate::tests::{genesis, validator, validators_addresses, InMemoryStorage};
use crate::HeaderToImport;
use crate::mock::{custom_test_ext, genesis, validator, validators_addresses, TestRuntime};
use crate::{BridgeStorage, HeaderToImport};
#[test]
fn verifies_header_author() {
assert_eq!(
finalize_blocks(
&InMemoryStorage::new(genesis(), validators_addresses(5)),
&Default::default(),
(&Default::default(), &[]),
&Default::default(),
None,
&Header::default(),
0,
),
Err(Error::NotValidator),
);
custom_test_ext(genesis(), validators_addresses(5)).execute_with(|| {
assert_eq!(
finalize_blocks(
&BridgeStorage::<TestRuntime>::new(),
&Default::default(),
(&Default::default(), &[]),
&Default::default(),
None,
&Header::default(),
0,
),
Err(Error::NotValidator),
);
});
}
#[test]
fn prepares_votes() {
// let's say we have 5 validators (we need 'votes' from 3 validators to achieve
// finality)
let mut storage = InMemoryStorage::new(genesis(), validators_addresses(5));
custom_test_ext(genesis(), validators_addresses(5)).execute_with(|| {
// let's say we have 5 validators (we need 'votes' from 3 validators to achieve
// finality)
let mut storage = BridgeStorage::<TestRuntime>::new();
// when header#1 is inserted, nothing is finalized (1 vote)
let header1 = Header {
author: validator(0).address().as_fixed_bytes().into(),
parent_hash: genesis().hash(),
number: 1,
..Default::default()
};
let hash1 = header1.hash();
let mut header_to_import = HeaderToImport {
context: storage.import_context(None, &genesis().hash()).unwrap(),
is_best: true,
hash: hash1,
header: header1,
total_difficulty: 0.into(),
enacted_change: None,
scheduled_change: None,
};
assert_eq!(
finalize_blocks(
&storage,
&Default::default(),
(&Default::default(), &validators_addresses(5)),
&hash1,
None,
&header_to_import.header,
u64::max_value(),
),
Ok(Vec::new()),
);
storage.insert_header(header_to_import.clone());
// when header#1 is inserted, nothing is finalized (1 vote)
let header1 = Header {
author: validator(0).address().as_fixed_bytes().into(),
parent_hash: genesis().hash(),
number: 1,
..Default::default()
};
let hash1 = header1.hash();
let mut header_to_import = HeaderToImport {
context: storage.import_context(None, &genesis().hash()).unwrap(),
is_best: true,
hash: hash1,
header: header1,
total_difficulty: 0.into(),
enacted_change: None,
scheduled_change: None,
};
assert_eq!(
finalize_blocks(
&storage,
&Default::default(),
(&Default::default(), &validators_addresses(5)),
&hash1,
None,
&header_to_import.header,
u64::max_value(),
),
Ok(Vec::new()),
);
storage.insert_header(header_to_import.clone());
// when header#2 is inserted, nothing is finalized (2 votes)
header_to_import.header = Header {
author: validator(1).address().as_fixed_bytes().into(),
parent_hash: hash1,
number: 2,
..Default::default()
};
header_to_import.hash = header_to_import.header.hash();
let hash2 = header_to_import.header.hash();
assert_eq!(
finalize_blocks(
&storage,
&Default::default(),
(&Default::default(), &validators_addresses(5)),
&hash2,
None,
&header_to_import.header,
u64::max_value(),
),
Ok(Vec::new()),
);
storage.insert_header(header_to_import.clone());
// when header#2 is inserted, nothing is finalized (2 votes)
header_to_import.header = Header {
author: validator(1).address().as_fixed_bytes().into(),
parent_hash: hash1,
number: 2,
..Default::default()
};
header_to_import.hash = header_to_import.header.hash();
let hash2 = header_to_import.header.hash();
assert_eq!(
finalize_blocks(
&storage,
&Default::default(),
(&Default::default(), &validators_addresses(5)),
&hash2,
None,
&header_to_import.header,
u64::max_value(),
),
Ok(Vec::new()),
);
storage.insert_header(header_to_import.clone());
// when header#3 is inserted, header#1 is finalized (3 votes)
header_to_import.header = Header {
author: validator(2).address().as_fixed_bytes().into(),
parent_hash: hash2,
number: 3,
..Default::default()
};
header_to_import.hash = header_to_import.header.hash();
let hash3 = header_to_import.header.hash();
assert_eq!(
finalize_blocks(
&storage,
&Default::default(),
(&Default::default(), &validators_addresses(5)),
&hash3,
None,
&header_to_import.header,
u64::max_value(),
),
Ok(vec![(1, hash1, None)]),
);
storage.insert_header(header_to_import);
// when header#3 is inserted, header#1 is finalized (3 votes)
header_to_import.header = Header {
author: validator(2).address().as_fixed_bytes().into(),
parent_hash: hash2,
number: 3,
..Default::default()
};
header_to_import.hash = header_to_import.header.hash();
let hash3 = header_to_import.header.hash();
assert_eq!(
finalize_blocks(
&storage,
&Default::default(),
(&Default::default(), &validators_addresses(5)),
&hash3,
None,
&header_to_import.header,
u64::max_value(),
),
Ok(vec![(1, hash1, None)]),
);
storage.insert_header(header_to_import);
});
}
}