mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-13 19:45:54 +00:00
testing: Prepare light client testing with substrate binary and add subxt-test macro (#1507)
* testing: Add long running light client flag and cfg aliases
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Expose clients depending on feature flags
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* subxt: Use unstable backend for light client
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Disable flaky lightclient tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ci: Add long runnnig step
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Revert "subxt: Use unstable backend for light client"
This reverts commit ea6f3cc58b.
* ci: Long running tests for 60 mins
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ci: Use 16 cores for light-client testing
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ci: Isolate light-client testing to save CI minutes
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Retry on Tx::Dropped for lightclinet only
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Wait for more blocks for the lightclient init
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* subxt: Use unstable backend for light client
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Disable legacy RPC tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Disable sudo and contracts tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Retry constructing lightclient on read-proof errors
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Disable tx dynamic test
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* proc-macro: Timeout for tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Add timeout 800 seconds
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* proc-macro/tests: Adjust subxt-test proc-macro
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* proc-macro: Rename crate to subxt-test-proc-macro
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Use default subxt-proc-macro timeout
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* light-client: Remove println
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* subxt: Remove tokio as dependency, use it only for testing
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Chagne default timeout to 6 seconds
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* proc-macro: Add env timeout variable
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ci: Add subxt env var for controling test timeouts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* tests/tx-retries: Retry on `Non node available` error
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Use unstable backend for testing lightclient
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Remove old lightclient object
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* testing: Adjust for the new interface
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* backend/rpc: Allow older version of the initialized event
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* rpc/tests: Check initialized decodes correctly
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ci: Reset workflow
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Apply cargo fmt
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Remove unused dep
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Remove gitmerge old file
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Remove unused dep
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* rename proc-macro to subxt-test-macro
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* tests: Remove txretries for lightclient
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* tests: Wait for 5 blocks for the lightclient full testing suite
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* tests: Group imports
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* macro: Rename const value
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
---------
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
This commit is contained in:
@@ -11,7 +11,7 @@ use crate::config::BlockHash;
|
||||
use crate::{Config, Error};
|
||||
use derive_where::derive_where;
|
||||
use futures::{Stream, StreamExt};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Deserializer, Serialize};
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
use std::task::Poll;
|
||||
|
||||
@@ -377,8 +377,7 @@ pub enum FollowEvent<Hash> {
|
||||
///
|
||||
/// This is the first event generated by the `follow` subscription
|
||||
/// and is submitted only once.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Initialized<Hash> {
|
||||
/// The hashes of the last finalized blocks.
|
||||
pub finalized_block_hashes: Vec<Hash>,
|
||||
@@ -391,6 +390,30 @@ pub struct Initialized<Hash> {
|
||||
pub finalized_block_runtime: Option<RuntimeEvent>,
|
||||
}
|
||||
|
||||
impl<'de, Hash: Deserialize<'de>> Deserialize<'de> for Initialized<Hash> {
|
||||
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
|
||||
// Custom struct that can deserialize both `finalizedBlockHash` and `finalizedBlockHashes`.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct InitializedIR<Hash> {
|
||||
finalized_block_hashes: Option<Vec<Hash>>,
|
||||
finalized_block_hash: Option<Hash>,
|
||||
finalized_block_runtime: Option<RuntimeEvent>,
|
||||
}
|
||||
|
||||
let ir = InitializedIR::deserialize(deserializer)?;
|
||||
let finalized_block_hashes = ir
|
||||
.finalized_block_hashes
|
||||
.or_else(|| ir.finalized_block_hash.map(|hash| vec![hash]))
|
||||
.ok_or_else(|| serde::de::Error::custom("Missing finalized block hashes"))?;
|
||||
|
||||
Ok(Initialized {
|
||||
finalized_block_hashes,
|
||||
finalized_block_runtime: ir.finalized_block_runtime,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// The runtime event generated if the `follow` subscription
|
||||
/// has set the `with_runtime` flag.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
|
||||
@@ -973,4 +996,30 @@ mod test {
|
||||
let _ = serde_json::from_value::<Foo32>(from_err)
|
||||
.expect_err("can't deser invalid num into u32");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn chain_head_initialized() {
|
||||
// Latest format version.
|
||||
let event = serde_json::json!({
|
||||
"finalizedBlockHashes": ["0x1", "0x2"],
|
||||
});
|
||||
let decoded: Initialized<String> = serde_json::from_value(event).unwrap();
|
||||
assert_eq!(
|
||||
decoded.finalized_block_hashes,
|
||||
vec!["0x1".to_string(), "0x2".to_string()]
|
||||
);
|
||||
|
||||
// Old format.
|
||||
let event = serde_json::json!({
|
||||
"finalizedBlockHash": "0x1",
|
||||
});
|
||||
let decoded: Initialized<String> = serde_json::from_value(event).unwrap();
|
||||
assert_eq!(decoded.finalized_block_hashes, vec!["0x1".to_string()]);
|
||||
|
||||
// Wrong format.
|
||||
let event = serde_json::json!({
|
||||
"finalizedBlockHash": ["0x1"],
|
||||
});
|
||||
let _ = serde_json::from_value::<Initialized<String>>(event).unwrap_err();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user