diff --git a/Cargo.lock b/Cargo.lock index 541bc62d..2278ab7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -602,7 +602,7 @@ dependencies = [ "frame-system", "linregress", "parity-scale-codec", - "paste", + "paste 0.1.18", "sp-api", "sp-io", "sp-runtime", @@ -678,7 +678,7 @@ dependencies = [ "log", "once_cell", "parity-scale-codec", - "paste", + "paste 0.1.18", "serde", "smallvec", "sp-arithmetic", @@ -1063,6 +1063,7 @@ dependencies = [ "log", "pallet-balances", "parity-scale-codec", + "paste 1.0.3", "pretty_env_logger", "serde", "serde_json", @@ -1569,6 +1570,12 @@ dependencies = [ "proc-macro-hack", ] +[[package]] +name = "paste" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7151b083b0664ed58ed669fcdd92f01c3d2fdbf10af4931a301474950b52bfa9" + [[package]] name = "paste-impl" version = "0.1.18" @@ -2024,7 +2031,7 @@ dependencies = [ "approx", "num-complex", "num-traits", - "paste", + "paste 0.1.18", ] [[package]] @@ -2304,7 +2311,7 @@ dependencies = [ "log", "parity-scale-codec", "parity-util-mem", - "paste", + "paste 0.1.18", "rand", "serde", "sp-application-crypto", diff --git a/integration_tests/Cargo.toml b/integration_tests/Cargo.toml index 021597b3..b800579b 100644 --- a/integration_tests/Cargo.toml +++ b/integration_tests/Cargo.toml @@ -19,6 +19,7 @@ pallet-balances = { git = "https://github.com/paritytech/substrate", rev = "a364 pretty_env_logger = "0.4" log = "0.4" hex = "0.4" +paste = "1.0.3" [[test]] name = "integration_tests" diff --git a/integration_tests/tests/extrinsics.rs b/integration_tests/tests/extrinsics.rs index 0c3ecbb0..14460079 100644 --- a/integration_tests/tests/extrinsics.rs +++ b/integration_tests/tests/extrinsics.rs @@ -3,15 +3,10 @@ extern crate extras; // TODO: Make test structure into a macro use crate::test_suite; -use codec::{Decode, Encode}; -use desub_core::{ - decoder::{Chain, Decoder, GenericStorage, Metadata, StorageHasher, StorageKey, StorageValue}, - SubstrateType, -}; -use primitives::twox_128; +use desub_core::decoder::{Chain, Decoder, Metadata}; pub fn init() { - pretty_env_logger::try_init(); + let _ = pretty_env_logger::try_init(); } #[test] @@ -20,7 +15,7 @@ pub fn should_decode_ext342962() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block342962(); + let (meta, ext) = test_suite::extrinsics_block_342962(); let meta = Metadata::new(meta.as_slice()); // block 6 of KSM CC3 is spec 1020 @@ -44,7 +39,7 @@ pub fn should_decode_ext422871() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block422871(); + let (meta, ext) = test_suite::extrinsics_block_422871(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1031, &meta); @@ -62,7 +57,7 @@ pub fn should_decode_ext50970() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block50970(); + let (meta, ext) = test_suite::extrinsics_block_50970(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1031, &meta); @@ -81,7 +76,7 @@ pub fn should_decode_ext_106284() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block106284(); + let (meta, ext) = test_suite::extrinsics_block_106284(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1042, &meta); @@ -101,7 +96,7 @@ pub fn should_decode_ext_1674683() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1674683(); + let (meta, ext) = test_suite::extrinsics_block_1674683(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -121,7 +116,7 @@ pub fn should_decode_ext_1677621() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1677621(); + let (meta, ext) = test_suite::extrinsics_block_1677621(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -142,7 +137,7 @@ fn should_decode_ext_1702023() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1702023(); + let (meta, ext) = test_suite::extrinsics_block_1702023(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -163,7 +158,7 @@ fn should_decode_ext_1714495() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1714495(); + let (meta, ext) = test_suite::extrinsics_block_1714495(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -183,7 +178,7 @@ fn should_decode_ext_1717926() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1717926(); + let (meta, ext) = test_suite::extrinsics_block_1717926(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -203,7 +198,7 @@ fn should_decode_ext_1718223() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1718223(); + let (meta, ext) = test_suite::extrinsics_block_1718223(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -224,7 +219,7 @@ fn should_decode_ext_1732321() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1732321(); + let (meta, ext) = test_suite::extrinsics_block_1732321(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -245,7 +240,7 @@ fn should_decode_ext_1731904() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1731904(); + let (meta, ext) = test_suite::extrinsics_block_1731904(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -266,7 +261,7 @@ fn should_decode_ext_1768321() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block1768321(); + let (meta, ext) = test_suite::extrinsics_block_1768321(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1055, &meta); @@ -287,7 +282,7 @@ fn should_decode_ext_6144() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block6144(); + let (meta, ext) = test_suite::extrinsics_block_6144(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1020, &meta); @@ -307,7 +302,7 @@ fn should_decode_ext_779410_ksm() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block779410(); + let (meta, ext) = test_suite::extrinsics_block_779410(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1042, &meta); @@ -326,7 +321,7 @@ fn should_decode_ext_899638_ksm() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block899638(); + let (meta, ext) = test_suite::extrinsics_block_899638(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1042, &meta); @@ -346,7 +341,7 @@ fn should_decode_ext_233816_ksm() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block233816(); + let (meta, ext) = test_suite::extrinsics_block_233816(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1030, &meta); @@ -365,7 +360,7 @@ fn should_decode_ext_607421_ksm() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Kusama); - let (meta, ext) = test_suite::extrinsics_block607421(); + let (meta, ext) = test_suite::extrinsics_block_607421(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(1039, &meta); @@ -384,7 +379,7 @@ fn should_decode_ext_892_dot() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Polkadot); - let (meta, ext) = test_suite::extrinsics_block892_dot(); + let (meta, ext) = test_suite::extrinsics_block_892(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(0, &meta); @@ -406,7 +401,7 @@ fn should_decode_ext_1191_wnd() { let types = extras::TypeResolver::default(); let mut decoder = Decoder::new(types, Chain::Polkadot); - let (meta, ext) = test_suite::extrinsics_block1191_wnd(); + let (meta, ext) = test_suite::extrinsics_block_1191(); let meta = Metadata::new(meta.as_slice()); decoder.register_version(0, &meta); diff --git a/integration_tests/tests/storage.rs b/integration_tests/tests/storage.rs index c7d77a82..9117447d 100644 --- a/integration_tests/tests/storage.rs +++ b/integration_tests/tests/storage.rs @@ -1,5 +1,5 @@ use crate::test_suite; -use codec::{Decode, Encode}; +use codec::Encode; use desub_core::{ decoder::{Chain, Decoder, Metadata}, SubstrateType, diff --git a/integration_tests/tests/test_suite.rs b/integration_tests/tests/test_suite.rs index a0d4078c..c1f2b320 100644 --- a/integration_tests/tests/test_suite.rs +++ b/integration_tests/tests/test_suite.rs @@ -2,124 +2,83 @@ const EXT_PATH: &'static str = "./data/extrinsics/"; use desub_core::decoder::Chain; use std::{fs::File, io::prelude::*}; -// TODO: Can make `extrinsic test` into a macro - -fn extrinsic_test>(spec: S, chain: Chain, block: S, num: usize) -> (Vec, Vec>) { - let spec: String = spec.into(); - let block: String = block.into(); - let mut exts: Vec> = Vec::new(); - let chain = chain.to_string(); - if std::path::Path::new("./integration_tests").exists() { - std::env::set_current_dir("./integration_tests").unwrap(); - } - let path = format!("{}{}/", EXT_PATH, chain); - let path = &format!("{}spec{}_block{}/", path, spec, block); - println!("{}/{}", path, std::env::current_dir().unwrap().to_str().unwrap()); - for i in 0..num { - let ext_path = &format!("{}EXTRINSIC_spec_{}_block_{}_index_{}.bin", &path, spec, block, i); - let mut f = File::open(ext_path).expect("Opening extrinsic failed"); - let mut ext = Vec::new(); - f.read_to_end(&mut ext).expect("Reading file failed"); - exts.push(ext) - } - - let mut f = File::open(&format!("{}spec_{}_block_{}_METADATA.bin", &path, spec, block)) - .expect("Opening Metadata file failed"); - let mut meta = Vec::new(); - f.read_to_end(&mut meta).expect("Reading file failed"); - - (meta, exts) -} - -/// returns raw metadata bytes and a vector of raw extrinsic bytes -/// from block 342962 with spec 1031 -pub fn extrinsics_block342962() -> (Vec, Vec>) { - extrinsic_test("1031", Chain::Kusama, "342962", 2) -} - -/// returns raw metadata bytes and a vector of raw extrinsic bytes -/// from block 422871 with spec 1031 -/// there are three extrinsics: FinalityTracker, Parachains and Timestmap -pub fn extrinsics_block422871() -> (Vec, Vec>) { - extrinsic_test("1031", Chain::Kusama, "422871", 3) -} - -/// returns raw metadata bytes and a vector of raw extrinsic bytes -/// from block 422871 with spec 1031 -/// there are three extrinsics: FinalityTracker, Parachains and Timestmap -pub fn extrinsics_block50970() -> (Vec, Vec>) { - extrinsic_test("1031", Chain::Kusama, "50970", 4) -} - -/// returns raw metadata bytes and a vector of raw extrinsic bytes -/// from block 422871 with spec 1031 -/// there are three extrinsics: FinalityTracker, Parachains and Timestmap -pub fn extrinsics_block106284() -> (Vec, Vec>) { - extrinsic_test("1042", Chain::Kusama, "106284", 4) -} - -pub fn extrinsics_block1674683() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1674683", 3) -} - -pub fn extrinsics_block1677621() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1677621", 4) -} - -pub fn extrinsics_block1702023() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1702023", 17) -} - -pub fn extrinsics_block1714495() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1714495", 4) -} - -pub fn extrinsics_block1717926() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1717926", 4) -} - -pub fn extrinsics_block1718223() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1718223", 4) -} - -pub fn extrinsics_block1732321() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1732321", 4) -} - -pub fn extrinsics_block1731904() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1731904", 4) -} - -pub fn extrinsics_block1768321() -> (Vec, Vec>) { - extrinsic_test("1055", Chain::Kusama, "1768321", 3) -} - -pub fn extrinsics_block6144() -> (Vec, Vec>) { - extrinsic_test("1020", Chain::Kusama, "6144", 3) -} - -pub fn extrinsics_block779410() -> (Vec, Vec>) { - extrinsic_test("1042", Chain::Kusama, "779410", 4) -} - -pub fn extrinsics_block899638() -> (Vec, Vec>) { - extrinsic_test("1042", Chain::Kusama, "899638", 4) -} - -pub fn extrinsics_block233816() -> (Vec, Vec>) { - extrinsic_test("1030", Chain::Kusama, "233816", 4) -} - -pub fn extrinsics_block607421() -> (Vec, Vec>) { - extrinsic_test("1039", Chain::Kusama, "607421", 4) -} - -pub fn extrinsics_block892_dot() -> (Vec, Vec>) { - extrinsic_test("0", Chain::Polkadot, "892", 4) -} - -pub fn extrinsics_block1191_wnd() -> (Vec, Vec>) { - extrinsic_test("1", Chain::Westend, "1191", 4) +use paste::paste; + +// NOTE: it is only usable in the current file. +macro_rules! decl_extrinsic_test { + ( + $( + [$spec:expr, $chain: expr, $block:expr] + )* + ) => { + $( + paste! { + pub fn []() -> (Vec, Vec>) { + let mut exts: Vec> = Vec::new(); + if std::path::Path::new("./integration_tests").exists() { + std::env::set_current_dir("./integration_tests").unwrap(); + } + let path = format!("{}{}/", EXT_PATH, $chain); + let path = &format!("{}spec{}_block{}/", path, $spec, $block); + println!( + "{}/{}", + path, + std::env::current_dir().unwrap().to_str().unwrap() + ); + + // get the number of files with prefix ${path}_EXTRINSIC in the directory. + let num_ext = std::fs::read_dir(&path) + .unwrap() + .map(|d| d.unwrap().file_name().into_string().unwrap()) + .filter(|ext| ext.starts_with("EXTRINSIC")) + .count(); + for i in 0..num_ext { + let ext_path = &format!( + "{}EXTRINSIC_spec_{}_block_{}_index_{}.bin", + &path, $spec, $block, i + ); + let mut f = File::open(ext_path).expect("Opening extrinsic failed"); + let mut ext = Vec::new(); + f.read_to_end(&mut ext).expect("Reading file failed"); + exts.push(ext) + } + + let mut f = File::open(&format!( + "{}spec_{}_block_{}_METADATA.bin", + &path, $spec, $block + )).expect("Opening Metadata file failed"); + + let mut meta = Vec::new(); + f.read_to_end(&mut meta).expect("Reading file failed"); + + (meta, exts) + } + } + )* + }; +} + +decl_extrinsic_test! { + ["1031", Chain::Kusama, "342962"] + ["1031", Chain::Kusama, "422871"] + ["1031", Chain::Kusama, "50970"] + ["1042", Chain::Kusama, "106284"] + ["1055", Chain::Kusama, "1674683"] + ["1055", Chain::Kusama, "1677621"] + ["1055", Chain::Kusama, "1702023"] + ["1055", Chain::Kusama, "1714495"] + ["1055", Chain::Kusama, "1717926"] + ["1055", Chain::Kusama, "1718223"] + ["1055", Chain::Kusama, "1732321"] + ["1055", Chain::Kusama, "1731904"] + ["1055", Chain::Kusama, "1768321"] + ["1020", Chain::Kusama, "6144"] + ["1042", Chain::Kusama, "779410"] + ["1042", Chain::Kusama, "899638"] + ["1030", Chain::Kusama, "233816"] + ["1039", Chain::Kusama, "607421"] + ["0", Chain::Polkadot, "892"] + ["1", Chain::Westend, "1191"] } /// Get the runtime metadata from KusamaCC3 from block 3,901,874