Skip to content
Snippets Groups Projects

Add end2end test for offences

Merged Benjamin Gallois requested to merge bgallois/duniter-v2s:114-offences-testing into master
All threads resolved!
2 files
+ 150
128
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -19,21 +19,15 @@ mod common;
@@ -19,21 +19,15 @@ mod common;
use common::*;
use common::*;
use frame_support::instances::Instance1;
use frame_support::instances::Instance1;
use frame_support::traits::StoredMap;
use frame_support::traits::StoredMap;
use frame_support::traits::ValidatorSet;
use frame_support::traits::ValidatorSetWithIdentification;
use frame_support::traits::{Get, PalletInfo, StorageInfo, StorageInfoTrait};
use frame_support::traits::{Get, PalletInfo, StorageInfo, StorageInfoTrait};
use frame_support::{assert_noop, assert_ok};
use frame_support::{assert_noop, assert_ok};
use frame_support::{StorageHasher, Twox128};
use frame_support::{StorageHasher, Twox128};
use gdev_runtime::*;
use gdev_runtime::*;
use pallet_duniter_wot::IdtyRemovalWotReason;
use pallet_duniter_wot::IdtyRemovalWotReason;
use pallet_im_online::UnresponsivenessOffence;
use pallet_membership::MembershipRemovalReason;
use pallet_membership::MembershipRemovalReason;
use pallet_session::historical::IdentificationTuple;
use sp_core::Encode;
use sp_core::Encode;
use sp_keyring::AccountKeyring;
use sp_keyring::AccountKeyring;
use sp_runtime::traits::Convert;
use sp_runtime::MultiAddress;
use sp_runtime::MultiAddress;
use sp_staking::offence::ReportOffence;
#[test]
#[test]
fn verify_treasury_account() {
fn verify_treasury_account() {
@@ -1335,125 +1329,3 @@ fn smith_data_problem() {
@@ -1335,125 +1329,3 @@ fn smith_data_problem() {
run_to_block(4);
run_to_block(4);
});
});
}
}
#[test]
fn test_imonline_offence() {
ExtBuilder::new(1, 3, 4).build().execute_with(|| {
run_to_block(1);
let session_index = Session::current_index();
let current_validators= <Runtime as pallet_im_online::Config>::ValidatorSet::validators();
// Construct an offence where all validators (member: 1) are offenders
let offenders = current_validators
.into_iter()
.enumerate()
.filter_map(|(_, id)| {
<<Runtime as pallet_im_online::Config>::ValidatorSet as ValidatorSetWithIdentification<sp_runtime::AccountId32>>::IdentificationOf::convert(
id.clone()
).map(|full_id| (id, full_id))
})
.collect::<Vec<IdentificationTuple<Runtime>>>();
let keys = ImOnline::keys();
let validator_set_count = keys.len() as u32;
let offence = UnresponsivenessOffence { session_index, validator_set_count, offenders };
let _ = <Runtime as pallet_im_online::Config>::ReportUnresponsiveness::report_offence(vec![], offence);
// An offence is deposited
System::assert_has_event(RuntimeEvent::Offences(
pallet_offences::Event::Offence {
kind: *b"im-online:offlin",
timeslot: vec![0, 0, 0, 0],
},
));
// Offenders are punished
System::assert_has_event(RuntimeEvent::AuthorityMembers(
pallet_authority_members::Event::MemberGoOffline {
member: 1
},
));
assert_eq!(AuthorityMembers::blacklist().len(), 0);
})
}
#[test]
fn test_grandpa_offence() {
ExtBuilder::new(1, 3, 4).build().execute_with(|| {
run_to_block(1);
let session_index = Session::current_index();
let current_validators = <Runtime as pallet_im_online::Config>::ValidatorSet::validators();
// Construct an offence where all validators (member: 1) are offenders
let mut offenders = current_validators
.into_iter()
.enumerate()
.filter_map(|(_, id)| {
<Runtime as pallet_session::historical::Config>::FullIdentificationOf::convert(
id.clone(),
)
.map(|full_id| (id, full_id))
})
.collect::<Vec<IdentificationTuple<Runtime>>>();
let keys = ImOnline::keys();
let validator_set_count = keys.len() as u32;
let time_slot = pallet_grandpa::TimeSlot {
set_id: 0,
round: 0,
};
let offence = pallet_grandpa::EquivocationOffence {
time_slot,
session_index,
validator_set_count,
offender: offenders.pop().unwrap(),
};
let _ = Offences::report_offence(vec![], offence);
// An offence is deposited
System::assert_has_event(RuntimeEvent::Offences(pallet_offences::Event::Offence {
kind: *b"grandpa:equivoca",
timeslot: vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
}));
// Offenders are punished
System::assert_has_event(RuntimeEvent::AuthorityMembers(
pallet_authority_members::Event::MemberGoOffline { member: 1 },
));
System::assert_has_event(RuntimeEvent::AuthorityMembers(
pallet_authority_members::Event::MemberAddedToBlacklist { member: 1 },
));
assert_eq!(AuthorityMembers::blacklist().len(), 1);
})
}
#[test]
fn test_babe_offence() {
ExtBuilder::new(1, 3, 4).build().execute_with(|| {
run_to_block(1);
let session_index = Session::current_index();
let current_validators = <Runtime as pallet_im_online::Config>::ValidatorSet::validators();
// Construct an offence where all validators (member: 1) are offenders
let mut offenders = current_validators
.into_iter()
.enumerate()
.filter_map(|(_, id)| {
<Runtime as pallet_session::historical::Config>::FullIdentificationOf::convert(
id.clone(),
)
.map(|full_id| (id, full_id))
})
.collect::<Vec<IdentificationTuple<Runtime>>>();
let keys = ImOnline::keys();
let validator_set_count = keys.len() as u32;
let offence = pallet_babe::EquivocationOffence {
slot: 0u64.into(),
session_index,
validator_set_count,
offender: offenders.pop().unwrap(),
};
let _ = Offences::report_offence(vec![], offence);
// An offence is deposited
System::assert_has_event(RuntimeEvent::Offences(pallet_offences::Event::Offence {
kind: *b"babe:equivocatio",
timeslot: vec![0, 0, 0, 0, 0, 0, 0, 0],
}));
// Offenders are punished
System::assert_has_event(RuntimeEvent::AuthorityMembers(
pallet_authority_members::Event::MemberGoOffline { member: 1 },
));
System::assert_has_event(RuntimeEvent::AuthorityMembers(
pallet_authority_members::Event::MemberAddedToBlacklist { member: 1 },
));
assert_eq!(AuthorityMembers::blacklist().len(), 1);
})
}
Loading