Skip to content
Snippets Groups Projects
Unverified Commit 88080338 authored by bgallois's avatar bgallois
Browse files

add end2end test grandpa offences

parent 636645b0
No related branches found
No related tags found
No related merge requests found
...@@ -59,6 +59,9 @@ where ...@@ -59,6 +59,9 @@ where
{ {
if !blacklist.contains(&member_id) { if !blacklist.contains(&member_id) {
blacklist.push(member_id); blacklist.push(member_id);
Self::deposit_event(Event::MemberAddedToBlacklist {
member: member_id,
});
add_db_reads_writes(0, 1); add_db_reads_writes(0, 1);
} }
Self::insert_out(member_id); Self::insert_out(member_id);
......
...@@ -179,6 +179,8 @@ pub mod pallet { ...@@ -179,6 +179,8 @@ pub mod pallet {
MemberRemoved { member: T::MemberId }, MemberRemoved { member: T::MemberId },
/// A member has been removed from the blacklist. /// A member has been removed from the blacklist.
MemberRemovedFromBlacklist { member: T::MemberId }, MemberRemovedFromBlacklist { member: T::MemberId },
/// A member has been blacklisted.
MemberAddedToBlacklist { member: T::MemberId },
} }
// ERRORS // // ERRORS //
......
...@@ -1370,3 +1370,47 @@ fn test_imonline_offence() { ...@@ -1370,3 +1370,47 @@ fn test_imonline_offence() {
)); ));
}) })
} }
#[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().into(),
};
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 },
));
})
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment