use super::*;
#[test]
fn pezpallet_query_should_work() {
AllowUnpaidFrom::set(vec![[Teyrchain(1)].into()]);
let message = Xcm(vec![QueryPallet {
module_name: "Error".into(),
response_info: QueryResponseInfo {
destination: Teyrchain(1).into(),
query_id: 1,
max_weight: Weight::from_parts(50, 50),
},
}]);
let mut hash = fake_message_hash(&message);
let r = XcmExecutor::<TestConfig>::prepare_and_execute(
Teyrchain(1),
message,
&mut hash,
Weight::from_parts(50, 50),
Weight::zero(),
);
assert_eq!(r, Outcome::Complete { used: Weight::from_parts(10, 10) });
let expected_msg = Xcm::<()>(vec![
QueryResponse {
query_id: 1,
max_weight: Weight::from_parts(50, 50),
response: Response::PalletsInfo(Default::default()),
querier: Some(Here.into()),
},
SetTopic(hash),
]);
assert_eq!(sent_xcm(), vec![(Teyrchain(1).into(), expected_msg, hash)]);
}
#[test]
fn pezpallet_query_with_results_should_work() {
AllowUnpaidFrom::set(vec![[Teyrchain(1)].into()]);
let message = Xcm(vec![QueryPallet {
module_name: "pezpallet_balances".into(),
response_info: QueryResponseInfo {
destination: Teyrchain(1).into(),
query_id: 1,
max_weight: Weight::from_parts(50, 50),
},
}]);
let mut hash = fake_message_hash(&message);
let r = XcmExecutor::<TestConfig>::prepare_and_execute(
Teyrchain(1),
message,
&mut hash,
Weight::from_parts(50, 50),
Weight::zero(),
);
assert_eq!(r, Outcome::Complete { used: Weight::from_parts(10, 10) });
let expected_msg = Xcm::<()>(vec![
QueryResponse {
query_id: 1,
max_weight: Weight::from_parts(50, 50),
response: Response::PalletsInfo(
vec![PalletInfo::new(
1,
b"Balances".as_ref().into(),
b"pezpallet_balances".as_ref().into(),
1,
42,
69,
)
.unwrap()]
.try_into()
.unwrap(),
),
querier: Some(Here.into()),
},
SetTopic(hash),
]);
assert_eq!(sent_xcm(), vec![(Teyrchain(1).into(), expected_msg, hash)]);
}
#[test]
fn prepaid_result_of_query_should_get_free_execution() {
let query_id = 33;
expect_response(query_id, Parent.into());
let the_response = Response::Assets((Parent, 100u128).into());
let message = Xcm::<TestCall>(vec![QueryResponse {
query_id,
response: the_response.clone(),
max_weight: Weight::from_parts(10, 10),
querier: Some(Here.into()),
}]);
let mut hash = fake_message_hash(&message);
let weight_limit = Weight::from_parts(10, 10);
let r = XcmExecutor::<TestConfig>::prepare_and_execute(
Parent,
message.clone(),
&mut hash,
weight_limit,
Weight::zero(),
);
assert_eq!(r, Outcome::Complete { used: Weight::from_parts(10, 10) });
assert_eq!(response(query_id).unwrap(), the_response);
let r = XcmExecutor::<TestConfig>::prepare_and_execute(
Parent,
message.clone(),
&mut hash,
weight_limit,
Weight::zero(),
);
assert_eq!(
r,
Outcome::Incomplete {
used: Weight::from_parts(10, 10),
error: InstructionError { index: 0, error: XcmError::Barrier },
}
);
}