Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
add e2e tests for permissionless election
  • Loading branch information
kostekIV committed Nov 2, 2022
commit be375eab147846683ed3d12f358da479c5a075e6
16 changes: 16 additions & 0 deletions .github/workflows/e2e-tests-main-devnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,21 @@ jobs:
follow-up-finalization-check: true
timeout-minutes: 15

run-e2e-permissionless-ban:
needs: [build-test-docker, build-test-client]
name: Run permissionless ban test
runs-on: ubuntu-20.04
steps:
- name: Checkout source code
uses: actions/checkout@v2

- name: Run e2e test
uses: ./.github/actions/run-e2e-test
with:
test-case: permissionless_ban
follow-up-finalization-check: true
timeout-minutes: 10

run-e2e-version-upgrade:
needs: [build-test-docker, build-test-client]
name: Run basic (positive) version-upgrade test
Expand Down Expand Up @@ -473,6 +488,7 @@ jobs:
run-e2e-ban-counter-clearing,
run-e2e-version-upgrade,
run-e2e-ban-automatic,
run-e2e-permissionless-ban,
]
name: Check e2e test suite completion
runs-on: ubuntu-20.04
Expand Down
50 changes: 49 additions & 1 deletion aleph-client/src/elections.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use codec::Encode;
use primitives::{
BanConfig, BanInfo, CommitteeSeats, EraIndex, EraValidators, SessionCount, SessionIndex,
BanConfig, BanInfo, CommitteeSeats, ElectionOpenness, EraIndex, EraValidators, SessionCount,
SessionIndex,
};
use sp_core::H256;
use substrate_api_client::{compose_call, compose_extrinsic, XtStatus};
Expand Down Expand Up @@ -119,3 +121,49 @@ pub fn change_ban_config(
);
send_xt(sudo_connection, xt, Some("set_ban_config"), status);
}

pub fn set_elections_openness(
sudo_connection: &RootConnection,
mode: ElectionOpenness,
status: XtStatus,
) {
let call = compose_call!(
sudo_connection.as_connection().metadata,
PALLET,
"set_elections_openness",
mode
);
let xt = compose_extrinsic!(
sudo_connection.as_connection(),
"Sudo",
"sudo_unchecked_weight",
call,
0_u64
);
send_xt(sudo_connection, xt, Some("set_elections_openness"), status);
}

pub fn ban_from_committee<D: Encode>(
connection: &RootConnection,
to_be_banned: &AccountId,
reason: D,
status: XtStatus,
) {
let call = compose_call!(
connection.as_connection().metadata,
PALLET,
"ban_from_committee",
to_be_banned,
reason.encode()
);

let xt = compose_extrinsic!(
connection.as_connection(),
"Sudo",
"sudo_unchecked_weight",
call,
0_u64
);

send_xt(connection, xt, Some("ban_from_committee"), status);
}
11 changes: 6 additions & 5 deletions aleph-client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ pub use balances::total_issuance;
use codec::{Decode, Encode};
pub use debug::print_storages;
pub use elections::{
change_ban_config, get_ban_config, get_ban_reason_for_validator, get_committee_seats,
get_current_era_non_reserved_validators, get_current_era_reserved_validators,
get_current_era_validators, get_era_validators, get_next_era_committee_seats,
get_next_era_non_reserved_validators, get_next_era_reserved_validators,
get_next_era_validators, get_underperformed_validator_session_count, get_validator_block_count,
ban_from_committee, change_ban_config, get_ban_config, get_ban_reason_for_validator,
get_committee_seats, get_current_era_non_reserved_validators,
get_current_era_reserved_validators, get_current_era_validators, get_era_validators,
get_next_era_committee_seats, get_next_era_non_reserved_validators,
get_next_era_reserved_validators, get_next_era_validators,
get_underperformed_validator_session_count, get_validator_block_count, set_elections_openness,
};
pub use fee::get_next_fee_multiplier;
pub use finalization::set_emergency_finalizer as finalization_set_emergency_finalizer;
Expand Down
5 changes: 3 additions & 2 deletions e2e-tests/src/cases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ use crate::{
clearing_session_count as test_clearing_session_count, disable_node as test_disable_node,
era_payouts_calculated_correctly as test_era_payout, era_validators as test_era_validators,
fee_calculation as test_fee_calculation, finalization as test_finalization,
force_new_era as test_force_new_era, points_basic as test_points_basic,
points_stake_change as test_points_stake_change,
force_new_era as test_force_new_era, permissionless_ban as test_permissionless_ban,
points_basic as test_points_basic, points_stake_change as test_points_stake_change,
schedule_version_change as test_schedule_version_change,
staking_era_payouts as test_staking_era_payouts,
staking_new_validator as test_staking_new_validator, token_transfer as test_token_transfer,
Expand Down Expand Up @@ -63,5 +63,6 @@ pub fn possible_test_cases() -> PossibleTestCases {
test_clearing_session_count as TestCase,
),
("ban_automatic", test_ban_automatic as TestCase),
("permissionless_ban", test_permissionless_ban as TestCase),
]
}
65 changes: 60 additions & 5 deletions e2e-tests/src/test/ban.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
use aleph_client::{
change_ban_config, get_current_era, get_current_era_validators, get_current_session,
ban_from_committee, change_ban_config, change_validators, get_current_era,
get_current_era_non_reserved_validators, get_current_era_validators, get_current_session,
get_next_era_non_reserved_validators, get_next_era_reserved_validators,
get_underperformed_validator_session_count, wait_for_at_least_session, SignedConnection,
XtStatus,
get_underperformed_validator_session_count, wait_for_at_least_session,
wait_for_full_era_completion, SignedConnection, XtStatus,
};
use log::info;
use primitives::{
BanInfo, BanReason, SessionCount, DEFAULT_BAN_MINIMAL_EXPECTED_PERFORMANCE,
BanInfo, BanReason, CommitteeSeats, SessionCount, DEFAULT_BAN_MINIMAL_EXPECTED_PERFORMANCE,
DEFAULT_BAN_SESSION_COUNT_THRESHOLD, DEFAULT_CLEAN_SESSION_COUNTER_DELAY,
};

use crate::{
accounts::{get_validator_seed, NodeKeys},
accounts::{account_ids_from_keys, get_validator_seed, NodeKeys},
ban::{
check_ban_config, check_ban_event, check_underperformed_validator_reason,
check_underperformed_validator_session_count, check_validators, setup_test,
},
rewards::set_invalid_keys_for_validator,
validators::get_test_validators,
Config,
};

Expand Down Expand Up @@ -148,3 +150,56 @@ pub fn clearing_session_count(config: &Config) -> anyhow::Result<()> {

Ok(())
}

pub fn permissionless_ban(config: &Config) -> anyhow::Result<()> {
let root_connection = config.create_root_connection();
info!(target: "aleph-client", "changing ban config");

change_ban_config(
&root_connection,
None,
None,
Some(1),
None,
XtStatus::InBlock,
);

let root_connection = config.create_root_connection();

let validator_keys = get_test_validators(config);
let reserved_validators = account_ids_from_keys(&validator_keys.reserved);
let non_reserved_validators = account_ids_from_keys(&validator_keys.non_reserved);

let seats = CommitteeSeats {
reserved_seats: 2,
non_reserved_seats: 2,
};

// non reserved set to empty vec
change_validators(
&root_connection,
Some(reserved_validators.clone()),
Some(vec![]),
Some(seats),
XtStatus::InBlock,
);

wait_for_full_era_completion(&root_connection)?;

let validator_to_ban =
&non_reserved_validators[VALIDATOR_TO_DISABLE_NON_RESERVED_INDEX as usize];

ban_from_committee(
&root_connection,
validator_to_ban,
"valid reason",
XtStatus::InBlock,
);

wait_for_full_era_completion(&root_connection)?;
let new_non_reserved = get_current_era_non_reserved_validators(&root_connection);

assert_eq!(new_non_reserved, non_reserved_validators);

Ok(())
}
2 changes: 1 addition & 1 deletion e2e-tests/src/test/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pub use ban::{ban_automatic, clearing_session_count};
pub use ban::{ban_automatic, clearing_session_count, permissionless_ban};
pub use electing_validators::authorities_are_staking;
pub use era_payout::era_payouts_calculated_correctly;
pub use era_validators::era_validators;
Expand Down