Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/zombienet-tests/zombienet_polkadot_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@
- job-name: "zombienet-polkadot-elastic-scaling-doesnt-break-parachains"
test-filter: "elastic_scaling::doesnt_break_parachains::doesnt_break_parachains_test"
runner-type: "default"
cumulus-image: "test-parachain"


- job-name: "zombienet-polkadot-elastic-scaling-basic-3cores"
Expand Down Expand Up @@ -247,6 +248,9 @@
echo "downloading polkadot as polkadot-old in $BIN_DIR"
curl --retry 5 --retry-delay 10 --retry-max-time 120 -L -o $BIN_DIR/polkadot-old https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-stable2512/polkadot
chmod 755 $BIN_DIR/polkadot-old
echo "downloading polkadot-parachain as polkadot-parachain-old in $BIN_DIR"
curl --retry 5 --retry-delay 10 --retry-max-time 120 -L -o $BIN_DIR/polkadot-parachain-old https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-stable2512/polkadot-parachain
chmod 755 $BIN_DIR/polkadot-parachain-old
for bin in polkadot-execute-worker polkadot-prepare-worker; do
echo "downloading $bin in $BIN_DIR"
curl --retry 5 --retry-delay 10 --retry-max-time 120 -L -o $BIN_DIR/$bin https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-stable2512/$bin
Expand All @@ -258,3 +262,5 @@
additional-env:
OLD_POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master-187cddde"
OLD_POLKADOT_COMMAND: "polkadot-old"
OLD_PARACHAIN_COMMAND: "polkadot-parachain-old"
OLD_PARACHAIN_IMAGE: "docker.io/parity/polkadot-parachain:stable2512"
6 changes: 6 additions & 0 deletions cumulus/test/runtime/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ fn main() {
.set_file_name(v3::WASM_FILE_NAME)
.build();

WasmBuilder::init_with_defaults()
.enable_feature("v3-descriptor")
.enable_feature("spec-version-3")
.set_file_name(v3_spec_version_incremented::WASM_FILE_NAME)
.build();

WasmBuilder::init_with_defaults()
.enable_feature("v3-descriptor")
.enable_feature("relay-parent-offset-2")
Expand Down
1 change: 1 addition & 0 deletions cumulus/test/runtime/src/flavors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ macro_rules! define_flavors {
define_flavor!(block_bundling, $($capabilities)*);
define_flavor!(sync_backing, $($capabilities)*);
define_flavor!(v3, $($capabilities)*);
define_flavor!(v3_spec_version_incremented, $($capabilities)*);
define_flavor!(v3_rpo_2, $($capabilities)*);
define_flavor!(v3_rpo_4, $($capabilities)*);
define_flavor!(v3_rpo_6, $($capabilities)*);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,69 @@ use codec::Decode;
use cumulus_zombienet_sdk_helpers::{
assert_finality_lag, assert_para_throughput, assign_cores, wait_for_pvf_prepare,
};
use polkadot_primitives::{CoreIndex, Id as ParaId};
use polkadot_primitives::{CandidateDescriptorVersion, CoreIndex, Id as ParaId};
use rstest::rstest;
use serde_json::json;
use std::collections::{BTreeMap, VecDeque};
use std::collections::{BTreeMap, HashMap, VecDeque};
use zombienet_sdk::{
subxt::{OnlineClient, PolkadotConfig},
NetworkConfigBuilder,
};

#[rstest]
#[case::v2(None, false)]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's have a single param named use_v3_candidates: bool and assume the chain name based on whether or not it's enabled

#[case::v3(Some("v3"), true)]
#[tokio::test(flavor = "multi_thread")]
async fn doesnt_break_parachains_test() -> Result<(), anyhow::Error> {
async fn doesnt_break_parachains_test(
#[case] collator_chain: Option<&str>,
#[case] use_v3: bool,
) -> Result<(), anyhow::Error> {
let _ = env_logger::try_init_from_env(
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
);

let images = zombienet_sdk::environment::get_images_from_env();

// V3 case additionally sets node-features bits 3+4 so the collator emits V3 descriptors.
let genesis_overrides = if use_v3 {
json!({
"configuration": {
"config": {
"scheduler_params": {
"num_cores": 1,
"max_validators_per_core": 2,
},
"node_features": {"bits": 8, "data": [0b00011000]}
}
}
})
} else {
json!({
"configuration": {
"config": {
"scheduler_params": {
"num_cores": 1,
"max_validators_per_core": 2,
}
}
}
})
};

// `--authoring=slot-based` only for the V3 case.
let mut collator_args = vec![("-lparachain=debug,aura=debug").into()];
if use_v3 {
collator_args.push("--authoring=slot-based".into());
}

let config = NetworkConfigBuilder::new()
.with_relaychain(|r| {
let r = r
.with_chain("rococo-local")
.with_default_command("polkadot")
.with_default_image(images.polkadot.as_str())
.with_default_args(vec![("-lparachain=debug").into()])
.with_genesis_overrides(json!({
"configuration": {
"config": {
"scheduler_params": {
"num_cores": 1,
"max_validators_per_core": 2,
}
}
}
}))
.with_genesis_overrides(genesis_overrides)
// Have to set a `with_validator` outside of the loop below, so that `r` has the
// right type.
.with_validator(|node| node.with_name("validator-0"));
Expand All @@ -51,12 +81,16 @@ async fn doesnt_break_parachains_test() -> Result<(), anyhow::Error> {
})
})
.with_parachain(|p| {
// Use default, which has 6 second slot time. Also, don't use slot-based collator.
p.with_id(2000)
.with_default_command("polkadot-parachain")
let p = p
.with_id(2000)
.with_default_command("test-parachain")
.with_default_image(images.cumulus.as_str())
.with_default_args(vec![("-lparachain=debug,aura=debug").into()])
.with_collator(|n| n.with_name("collator-2000"))
.with_default_args(collator_args);
let p = match collator_chain {
Some(chain) => p.with_chain(chain),
None => p,
};
p.with_collator(|n| n.with_name("collator-2000"))
})
.build()
.map_err(|e| {
Expand All @@ -77,9 +111,21 @@ async fn doesnt_break_parachains_test() -> Result<(), anyhow::Error> {
let para_id = ParaId::from(2000);
// Wait for PVF preparation to complete.
wait_for_pvf_prepare(&network, 1).await?;
// Expect the parachain to be making normal progress, 1 candidate backed per relay chain block.
// Lowering to 12 to make sure CI passes.
assert_para_throughput(&relay_client, 15, [(para_id, 12..16)], []).await?;

if use_v3 {
// V3 candidates at single-core throughput.
crate::utils::assert_candidates_version(
&relay_client,
CandidateDescriptorVersion::V3,
HashMap::from([(para_id, 12..16)]),
15,
)
.await?;
} else {
// Expect the parachain to be making normal progress, 1 candidate backed per relay chain
// block. Lowering to 12 to make sure CI passes.
assert_para_throughput(&relay_client, 15, [(para_id, 12..16)], []).await?;
}

let para_client = para_node.wait_client().await?;
// Assert the parachain finalized block height is also on par with the number of backed
Expand All @@ -97,7 +143,7 @@ async fn doesnt_break_parachains_test() -> Result<(), anyhow::Error> {
.await?[..],
)?;

// Get looakahead config
// Get lookahead config
let lookahead = u32::decode(
&mut &relay_client
.runtime_api()
Expand Down
1 change: 1 addition & 0 deletions polkadot/zombienet-sdk-tests/tests/functional/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@ mod spam_statement_distribution_requests;
mod sync_backing;
mod systematic_chunk_recovery;
mod v3_dynamic_enablement;
mod v3_old_validator_dispute_storm;
mod v3_rolling_upgrade;
mod validator_disabling;
Loading
Loading