From abd923185f60c28c2573a8bde60edbb2f8a7db34 Mon Sep 17 00:00:00 2001
From: Hugo Trentesaux <hugo@trentesaux.fr>
Date: Tue, 30 Jan 2024 23:05:09 +0100
Subject: [PATCH] check live tests

---
 Cargo.lock                      | 78 +++++++++++++++++++++++----------
 Cargo.toml                      |  2 +-
 live-tests/Cargo.toml           |  2 +-
 live-tests/tests/sanity_gdev.rs | 37 +++++++++++-----
 4 files changed, 82 insertions(+), 37 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index bb540fd99..026013d64 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -194,7 +194,7 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -298,7 +298,7 @@ dependencies = [
  "derivative",
  "hashbrown 0.13.2",
  "itertools 0.10.5",
- "num-traits",
+ "num-traits 0.2.17",
  "rayon",
  "zeroize",
 ]
@@ -367,7 +367,7 @@ dependencies = [
  "digest 0.10.7",
  "itertools 0.10.5",
  "num-bigint",
- "num-traits",
+ "num-traits 0.2.17",
  "paste",
  "rustc_version",
  "zeroize",
@@ -390,7 +390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565"
 dependencies = [
  "num-bigint",
- "num-traits",
+ "num-traits 0.2.17",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
@@ -480,7 +480,7 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.17",
  "rand 0.8.5",
  "rayon",
 ]
@@ -553,7 +553,7 @@ dependencies = [
  "asn1-rs-impl",
  "displaydoc",
  "nom",
- "num-traits",
+ "num-traits 0.2.17",
  "rusticata-macros",
  "thiserror",
  "time",
@@ -1304,7 +1304,7 @@ dependencies = [
  "android-tzdata",
  "iana-time-zone",
  "js-sys",
- "num-traits",
+ "num-traits 0.2.17",
  "wasm-bindgen",
  "windows-targets 0.52.0",
 ]
@@ -1690,6 +1690,15 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "countmap"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef2a403c4af585607826502480ab6e453f320c230ef67255eee21f0cc72c0a6"
+dependencies = [
+ "num-traits 0.1.43",
+]
+
 [[package]]
 name = "cpp_demangle"
 version = "0.3.5"
@@ -2222,7 +2231,7 @@ dependencies = [
  "displaydoc",
  "nom",
  "num-bigint",
- "num-traits",
+ "num-traits 0.2.17",
  "rusticata-macros",
 ]
 
@@ -2370,7 +2379,7 @@ dependencies = [
  "fnv",
  "hex",
  "log",
- "num-traits",
+ "num-traits 0.2.17",
  "parity-scale-codec",
  "rayon",
  "simple_logger",
@@ -2567,6 +2576,20 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "duniter-live-tests"
+version = "3.0.0"
+dependencies = [
+ "anyhow",
+ "countmap",
+ "hex-literal",
+ "parity-scale-codec",
+ "sp-core",
+ "sp-runtime",
+ "subxt",
+ "tokio",
+]
+
 [[package]]
 name = "duniter-primitives"
 version = "3.0.0"
@@ -2953,7 +2976,7 @@ dependencies = [
  "futures 0.3.30",
  "futures-timer",
  "log",
- "num-traits",
+ "num-traits 0.2.17",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "scale-info",
@@ -2994,7 +3017,7 @@ version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -4523,7 +4546,7 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -5960,7 +5983,7 @@ dependencies = [
  "nalgebra-macros",
  "num-complex",
  "num-rational",
- "num-traits",
+ "num-traits 0.2.17",
  "simba",
  "typenum",
 ]
@@ -6188,7 +6211,7 @@ checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
 dependencies = [
  "autocfg",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -6197,7 +6220,7 @@ version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -6217,7 +6240,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
 dependencies = [
  "autocfg",
- "num-traits",
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -6229,7 +6252,16 @@ dependencies = [
  "autocfg",
  "num-bigint",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.17",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+dependencies = [
+ "num-traits 0.2.17",
 ]
 
 [[package]]
@@ -7823,7 +7855,7 @@ version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.17",
  "rand 0.8.5",
 ]
 
@@ -8625,7 +8657,7 @@ dependencies = [
  "log",
  "num-bigint",
  "num-rational",
- "num-traits",
+ "num-traits 0.2.17",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "sc-client-api",
@@ -9911,7 +9943,7 @@ checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
 dependencies = [
  "approx",
  "num-complex",
- "num-traits",
+ "num-traits 0.2.17",
  "paste",
  "wide",
 ]
@@ -10016,7 +10048,7 @@ dependencies = [
  "nom",
  "num-bigint",
  "num-rational",
- "num-traits",
+ "num-traits 0.2.17",
  "pbkdf2 0.12.2",
  "pin-project",
  "poly1305",
@@ -10188,7 +10220,7 @@ version = "16.0.0"
 source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "integer-sqrt",
- "num-traits",
+ "num-traits 0.2.17",
  "parity-scale-codec",
  "scale-info",
  "serde",
@@ -12467,7 +12499,7 @@ checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a"
 dependencies = [
  "downcast-rs",
  "libm",
- "num-traits",
+ "num-traits 0.2.17",
  "paste",
 ]
 
diff --git a/Cargo.toml b/Cargo.toml
index e0fe00ada..4951122c6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -156,7 +156,7 @@ members = [
     'client/distance',
     'distance-oracle',
     'end2end-tests',
-    #'live-tests',
+    'live-tests',
     'pallets/authority-members',
     'pallets/certification',
     'pallets/distance',
diff --git a/live-tests/Cargo.toml b/live-tests/Cargo.toml
index d29c9455c..ab7efc7fd 100644
--- a/live-tests/Cargo.toml
+++ b/live-tests/Cargo.toml
@@ -15,5 +15,5 @@ hex-literal = "0.4"
 parity-scale-codec = "3.4.0"
 sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, features = ["std"] } # https://github.com/paritytech/subxt/issues/437
-subxt = { git = 'https://github.com/paritytech/subxt.git', tag = 'v0.33.0', default-features = false, features = ["substrate-compat", "native"] }
+subxt = { git = 'https://github.com/duniter/subxt', branch = 'subxt-v0.34.0-duniter-substrate-v1.6.0', default-features = false, features = ["substrate-compat", "native", "jsonrpsee"] }
 tokio = { version = "1.28", features = ["macros", "time", "rt-multi-thread"], default-features = false }
diff --git a/live-tests/tests/sanity_gdev.rs b/live-tests/tests/sanity_gdev.rs
index e326b7191..814af0786 100644
--- a/live-tests/tests/sanity_gdev.rs
+++ b/live-tests/tests/sanity_gdev.rs
@@ -14,6 +14,10 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
+// WARNING
+// these live test build but I'm not sure they actually test something
+// they should be checked against corrupted storage to see that they actually fail
+
 #[subxt::subxt(runtime_metadata_path = "../resources/metadata.scale")]
 pub mod gdev {}
 
@@ -22,7 +26,13 @@ use hex_literal::hex;
 use sp_core::crypto::AccountId32;
 use sp_core::{blake2_128, ByteArray, H256};
 use std::collections::{HashMap, HashSet};
+use subxt::backend::rpc::RpcClient;
 use subxt::config::SubstrateConfig as GdevConfig;
+use subxt::ext::sp_core;
+// use subxt::config::substrate::SubstrateExtrinsicParamsBuilder;
+// use subxt::backend::rpc::RpcParams;
+// use subxt::config::SubstrateExtrinsicParams;
+// use subxt::ext::{sp_core, sp_runtime};
 
 const DEFAULT_ENDPOINT: &str = "ws://localhost:9944";
 
@@ -58,14 +68,17 @@ struct Storage {
 async fn main() -> anyhow::Result<()> {
     let ws_rpc_endpoint =
         std::env::var("WS_RPC_ENDPOINT").unwrap_or_else(|_| DEFAULT_ENDPOINT.to_owned());
-    let client = Client::from_url(ws_rpc_endpoint)
+    let rpc = RpcClient::from_url(ws_rpc_endpoint)
         .await
-        .expect("fail to connect to node");
+        .expect("Failed to create the rpc backend");
+    let client = Client::from_rpc_client(rpc.clone()).await.unwrap();
 
     let maybe_block_hash = if let Ok(block_number) = std::env::var("AT_BLOCK_NUMBER") {
         let block_number: BlockNumber = block_number.parse()?;
         println!("Run sanity tests against ÄžDev at block #{}.", block_number);
-        client.rpc().block_hash(Some(block_number.into())).await?
+        // FIXME
+        // client.at(block_number).await?
+        None
     } else {
         println!("Run sanity tests against ÄžDev at last best block");
         None
@@ -84,11 +97,11 @@ async fn sanity_tests_at(client: Client, _maybe_block_hash: Option<H256>) -> any
         .at_latest()
         .await
         .unwrap()
-        .iter(gdev::storage().system().account_root(), 100)
+        .iter(gdev::storage().system().account_iter())
         .await?;
-    while let Some((key, account_info)) = account_iter.next().await? {
+    while let Some(Ok((key, account_info))) = account_iter.next().await {
         let mut account_id_bytes = [0u8; 32];
-        account_id_bytes.copy_from_slice(&key.0[48..]);
+        account_id_bytes.copy_from_slice(&key[48..]);
         accounts.insert(AccountId32::new(account_id_bytes), account_info);
     }
     println!("accounts.len(): {}.", accounts.len());
@@ -100,11 +113,11 @@ async fn sanity_tests_at(client: Client, _maybe_block_hash: Option<H256>) -> any
         .at_latest()
         .await
         .unwrap()
-        .iter(gdev::storage().identity().identities_root(), 100)
+        .iter(gdev::storage().identity().identities_iter())
         .await?;
-    while let Some((key, idty_value)) = idty_iter.next().await? {
+    while let Some(Ok((key, idty_value))) = idty_iter.next().await {
         let mut idty_index_bytes = [0u8; 4];
-        idty_index_bytes.copy_from_slice(&key.0[40..]);
+        idty_index_bytes.copy_from_slice(&key[40..]);
         let idty_val = IdtyValue {
             data: idty_value.data,
             next_creatable_identity_on: idty_value.next_creatable_identity_on,
@@ -124,11 +137,11 @@ async fn sanity_tests_at(client: Client, _maybe_block_hash: Option<H256>) -> any
         .at_latest()
         .await
         .unwrap()
-        .iter(gdev::storage().identity().identity_index_of_root(), 100)
+        .iter(gdev::storage().identity().identity_index_of_iter())
         .await?;
-    while let Some((key, idty_index)) = idty_index_of_iter.next().await? {
+    while let Some(Ok((key, idty_index))) = idty_index_of_iter.next().await {
         let mut blake2_128_bytes = [0u8; 16];
-        blake2_128_bytes.copy_from_slice(&key.0[32..48]);
+        blake2_128_bytes.copy_from_slice(&key[32..48]);
         identity_index_of.insert(blake2_128_bytes, idty_index);
     }
     println!("identity_index_of.len(): {}.", identity_index_of.len());
-- 
GitLab