make slow-clap tests work again based on new functionality, new tests added too

Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
This commit is contained in:
Uncle Stinky 2025-11-05 20:55:04 +03:00
parent ebae9fadbe
commit decf6665df
Signed by: st1nky
GPG Key ID: 016064BD97603B40

View File

@ -665,15 +665,14 @@ fn should_throw_error_if_session_index_is_not_current() {
network_id, network_id,
authority_prev authority_prev
)); ));
assert_ok!(do_clap_from_first_authority( assert_err!(
session_index_next, do_clap_from_first_authority(session_index_next, network_id, authority_next),
network_id, DispatchError::Other("Transaction has a bad signature")
authority_next );
));
assert_claps_info_correct(&storage_key_curr, &session_index_curr, 1); assert_claps_info_correct(&storage_key_curr, &session_index_curr, 1);
assert_claps_info_correct(&storage_key_prev, &session_index_prev, 1); assert_claps_info_correct(&storage_key_prev, &session_index_prev, 1);
assert_claps_info_correct(&storage_key_next, &session_index_next, 1); assert_claps_info_correct(&storage_key_next, &session_index_next, 0);
} }
}); });
} }
@ -688,22 +687,12 @@ fn should_throw_error_if_signer_has_incorrect_index() {
let storage_key = (session_index, transaction_hash, unique_transaction_hash); let storage_key = (session_index, transaction_hash, unique_transaction_hash);
assert_claps_info_correct(&storage_key, &session_index, 0); assert_claps_info_correct(&storage_key, &session_index, 0);
let clap = Clap { assert_invalid_signing_address(session_index, network_id, 69);
block_number: 420, assert_transaction_has_bad_signature(session_index, network_id, 69);
removed: false, assert_invalid_signing_address(session_index, network_id, 420);
transaction_hash, assert_transaction_has_bad_signature(session_index, network_id, 420);
session_index, assert_invalid_signing_address(session_index, network_id, 1337);
authority_index: 1337, assert_transaction_has_bad_signature(session_index, network_id, 1337);
network_id,
receiver: 69,
amount: 420,
};
let authority = UintAuthorityId::from((1) as u64);
let signature = authority.sign(&clap.encode()).unwrap();
assert_err!(
SlowClap::slow_clap(RuntimeOrigin::none(), clap, signature),
Error::<Runtime>::NotAnAuthority
);
assert_claps_info_correct(&storage_key, &session_index, 0); assert_claps_info_correct(&storage_key, &session_index, 0);
}); });
} }
@ -956,8 +945,8 @@ fn should_avoid_applause_during_nullification_period() {
} }
#[test] #[test]
fn should_self_applause_if_enough_received_claps() { fn should_self_applause_if_enough_claps() {
let zero: u64 = 0u64; let zero = 0u64;
let (network_id, transaction_hash, unique_transaction_hash) = let (network_id, transaction_hash, unique_transaction_hash) =
generate_unique_hash(None, None, None, None); generate_unique_hash(None, None, None, None);
let (_, receiver, amount) = get_mocked_metadata(); let (_, receiver, amount) = get_mocked_metadata();
@ -965,6 +954,7 @@ fn should_self_applause_if_enough_received_claps() {
new_test_ext().execute_with(|| { new_test_ext().execute_with(|| {
let _ = prepare_evm_network(Some(network_id), Some(0)); let _ = prepare_evm_network(Some(network_id), Some(0));
let session_index = advance_session_and_get_index(); let session_index = advance_session_and_get_index();
let next_session_index = session_index.saturating_add(1);
let storage_key = (session_index, transaction_hash, unique_transaction_hash); let storage_key = (session_index, transaction_hash, unique_transaction_hash);
assert_err!( assert_err!(
@ -976,7 +966,7 @@ fn should_self_applause_if_enough_received_claps() {
receiver, receiver,
amount, amount,
), ),
Error::<Runtime>::NotEnoughClaps Error::<Runtime>::NotEnoughClaps,
); );
assert_eq!( assert_eq!(
@ -984,59 +974,34 @@ fn should_self_applause_if_enough_received_claps() {
false false
); );
assert_eq!(Balances::balance(&receiver), zero); assert_eq!(Balances::balance(&receiver), zero);
assert_eq!(
BridgedInflationCurve::<RewardCurve, Runtime>::era_payout(zero, zero, zero),
(zero, zero)
);
assert_ok!(do_clap_from(session_index, network_id, 0, false)); assert_ok!(do_clap_from(session_index, network_id, 0, false));
assert_ok!(do_clap_from(session_index, network_id, 1, false));
assert_eq!(
pallet::ApplausesForTransaction::<Runtime>::get(&storage_key),
false
);
assert_eq!(Balances::balance(&receiver), 0);
assert_err!(
SlowClap::self_applause(
RuntimeOrigin::signed(receiver),
network_id,
session_index,
transaction_hash,
receiver,
amount,
),
Error::<Runtime>::NotEnoughClaps
);
assert_eq!(
pallet::ApplausesForTransaction::<Runtime>::get(&storage_key),
false
);
assert_eq!(Balances::balance(&receiver), 0);
Networks::on_finalize(System::block_number());
advance_session(); advance_session();
let next_session_index = Session::session_index();
let next_storage_key = (
next_session_index,
transaction_hash,
unique_transaction_hash,
);
assert_ok!(do_clap_from(next_session_index, network_id, 2, false));
assert_err!( let mut fake_claps_in_session = sp_std::collections::btree_map::BTreeMap::new();
SlowClap::self_applause( fake_claps_in_session.insert(
RuntimeOrigin::signed(receiver), 1,
network_id, SessionAuthorityInfo {
next_session_index, claps: 1,
transaction_hash, disabled: false,
receiver, },
amount,
),
Error::<Runtime>::NotEnoughClaps
); );
fake_claps_in_session.insert(
2,
SessionAuthorityInfo {
claps: 1,
disabled: false,
},
);
let mut fake_received_clap =
BoundedBTreeSet::<AuthIndex, <Runtime as pallet::Config>::MaxAuthorities>::new();
assert_eq!(fake_received_clap.try_insert(1).unwrap(), true);
assert_eq!(fake_received_clap.try_insert(2).unwrap(), true);
pallet::ReceivedClaps::<Runtime>::insert(&storage_key, fake_received_clap);
pallet::ClapsInSession::<Runtime>::insert(&next_session_index, fake_claps_in_session);
assert_ok!(SlowClap::self_applause( assert_ok!(SlowClap::self_applause(
RuntimeOrigin::signed(receiver), RuntimeOrigin::signed(receiver),
network_id, network_id,
@ -1049,10 +1014,37 @@ fn should_self_applause_if_enough_received_claps() {
pallet::ApplausesForTransaction::<Runtime>::get(&storage_key), pallet::ApplausesForTransaction::<Runtime>::get(&storage_key),
true true
); );
assert_eq!(Balances::balance(&receiver), amount);
});
}
#[test]
fn should_avoid_session_overlap_on_mended_session_index() {
let (network_id, transaction_hash, unique_transaction_hash) =
generate_unique_hash(None, None, None, None);
let (_, receiver, amount) = get_mocked_metadata();
new_test_ext().execute_with(|| {
let _ = prepare_evm_network(Some(network_id), Some(0));
let session_index = advance_session_and_get_index();
let storage_key = (session_index, transaction_hash, unique_transaction_hash);
assert_ok!(do_clap_from(session_index, network_id, 0, false));
advance_session();
assert_eq!( assert_eq!(
pallet::ApplausesForTransaction::<Runtime>::get(&next_storage_key), pallet::ApplausesForTransaction::<Runtime>::get(&storage_key),
false false
); );
assert_eq!(Balances::balance(&receiver), 0u64);
assert_ok!(do_clap_from(session_index, network_id, 1, false));
assert_ok!(do_clap_from(session_index, network_id, 2, false));
assert_eq!(
pallet::ApplausesForTransaction::<Runtime>::get(&storage_key),
true
);
assert_eq!(Balances::balance(&receiver), amount); assert_eq!(Balances::balance(&receiver), amount);
}); });
} }