Fix XCMP max message size check (#1250)

Improved max message size logic and added test for it

---------

Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>
Co-authored-by: command-bot <>
This commit is contained in:
Just van Stam
2023-12-04 23:02:16 +01:00
committed by GitHub
parent 6d50cd43c0
commit a9738adedb
2 changed files with 56 additions and 2 deletions
+44
View File
@@ -731,6 +731,50 @@ fn xcmp_queue_send_xcm_works() {
})
}
#[test]
fn xcmp_queue_send_too_big_xcm_fails() {
new_test_ext().execute_with(|| {
let sibling_para_id = ParaId::from(12345);
let dest = (Parent, X1(Parachain(sibling_para_id.into()))).into();
let max_message_size = 100_u32;
// open HRMP channel to the sibling_para_id with a set `max_message_size`
ParachainSystem::open_custom_outbound_hrmp_channel_for_benchmarks_or_tests(
sibling_para_id,
cumulus_primitives_core::AbridgedHrmpChannel {
max_message_size,
max_capacity: 10,
max_total_size: 10_000_000_u32,
msg_count: 0,
total_size: 0,
mqc_head: None,
},
);
// Message is crafted to exceed `max_message_size`
let mut message = Xcm::builder_unsafe();
for _ in 0..97 {
message = message.clear_origin();
}
let message = message.build();
let encoded_message_size = message.encode().len();
let versioned_size = 1; // VersionedXcm enum is added by `send_xcm` and it add one additional byte
assert_eq!(encoded_message_size, max_message_size as usize - versioned_size);
// check empty outbound queue
assert!(XcmpQueue::take_outbound_messages(usize::MAX).is_empty());
// Message is too big because after adding the VersionedXcm enum, it would reach
// `max_message_size` Then, adding the format, which is the worst case scenario in which a
// new page is needed, would get it over the limit
assert_eq!(send_xcm::<XcmpQueue>(dest, message), Err(SendError::Transport("TooBig")),);
// outbound queue is still empty
assert!(XcmpQueue::take_outbound_messages(usize::MAX).is_empty());
});
}
#[test]
fn verify_fee_factor_increase_and_decrease() {
use cumulus_primitives_core::AbridgedHrmpChannel;