Newer
Older
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
let source_client = TestClient::from(clients_data.clone());
let target_client = TestClient::from(clients_data);
assert_eq!(
run_until_connection_lost(
source_client.clone(),
target_client.clone(),
None,
true,
exit_signal.into_future().map(|(_, _)| ()),
)
.await,
Ok(()),
);
assert_eq!(
target_client
.data
.lock()
.await
.submitted_proof_at_source_relay_block
.map(|id| id.0),
Some(90)
);
}
fn test_tx_tracker() -> SubmittedHeadsTracker<TestParachainsPipeline> {
SubmittedHeadsTracker::new(
Svyatoslav Nikolsky
committed
AvailableHeader::Available(HeaderId(20, PARA_20_HASH)),
TestTransactionTracker(None),
Svyatoslav Nikolsky
committed
impl From<SubmittedHeadStatus<TestParachainsPipeline>> for Option<()> {
fn from(status: SubmittedHeadStatus<TestParachainsPipeline>) -> Option<()> {
match status {
Svyatoslav Nikolsky
committed
SubmittedHeadStatus::Waiting(_) => Some(()),
_ => None,
}
}
}
#[async_std::test]
Svyatoslav Nikolsky
committed
async fn tx_tracker_update_when_head_at_target_has_none_value() {
Svyatoslav Nikolsky
committed
Some(()),
test_tx_tracker()
Svyatoslav Nikolsky
committed
.update(&HeaderId(0, Default::default()), &Some(HeaderId(10, PARA_10_HASH)))
.await
.into(),
#[async_std::test]
Svyatoslav Nikolsky
committed
async fn tx_tracker_update_when_head_at_target_has_old_value() {
Svyatoslav Nikolsky
committed
Some(()),
Svyatoslav Nikolsky
committed
.update(&HeaderId(0, Default::default()), &Some(HeaderId(10, PARA_10_HASH)))
.await
.into(),
#[async_std::test]
Svyatoslav Nikolsky
committed
async fn tx_tracker_update_when_head_at_target_has_same_value() {
assert!(matches!(
Svyatoslav Nikolsky
committed
.update(&HeaderId(0, Default::default()), &Some(HeaderId(20, PARA_20_HASH)))
.await,
SubmittedHeadStatus::Final(TrackedTransactionStatus::Finalized(_)),
));
#[async_std::test]
Svyatoslav Nikolsky
committed
async fn tx_tracker_update_when_head_at_target_has_better_value() {
assert!(matches!(
Svyatoslav Nikolsky
committed
.update(&HeaderId(0, Default::default()), &Some(HeaderId(30, PARA_20_HASH)))
.await,
SubmittedHeadStatus::Final(TrackedTransactionStatus::Finalized(_)),
));
#[async_std::test]
async fn tx_tracker_update_when_tx_is_lost() {
let mut tx_tracker = test_tx_tracker();
tx_tracker.transaction_tracker =
futures::future::ready(TrackedTransactionStatus::Lost).boxed().shared();
assert!(matches!(
tx_tracker
Svyatoslav Nikolsky
committed
.update(&HeaderId(0, Default::default()), &Some(HeaderId(10, PARA_10_HASH)))
.await,
Svyatoslav Nikolsky
committed
SubmittedHeadStatus::Final(TrackedTransactionStatus::Lost),
));
}
#[async_std::test]
async fn tx_tracker_update_when_tx_is_finalized_but_heads_are_not_updated() {
let mut tx_tracker = test_tx_tracker();
tx_tracker.transaction_tracker =
futures::future::ready(TrackedTransactionStatus::Finalized(Default::default()))
.boxed()
.shared();
assert!(matches!(
tx_tracker
Svyatoslav Nikolsky
committed
.update(&HeaderId(0, Default::default()), &Some(HeaderId(10, PARA_10_HASH)))
.await,
Svyatoslav Nikolsky
committed
SubmittedHeadStatus::Final(TrackedTransactionStatus::Lost),
Svyatoslav Nikolsky
committed
#[test]
fn parachain_is_not_updated_if_it_is_unavailable() {
assert!(!is_update_required::<TestParachainsPipeline>(
AvailableHeader::Unavailable,
None,
Default::default(),
Default::default(),
));
assert!(!is_update_required::<TestParachainsPipeline>(
AvailableHeader::Unavailable,
Some(HeaderId(10, PARA_10_HASH)),
Default::default(),
Default::default(),
));
}
#[test]
fn parachain_is_not_updated_if_it_is_unknown_to_both_clients() {
assert!(!is_update_required::<TestParachainsPipeline>(
AvailableHeader::Missing,
None,
Default::default(),
Default::default(),
),);
Svyatoslav Nikolsky
committed
fn parachain_is_not_updated_if_target_has_better_head() {
assert!(!is_update_required::<TestParachainsPipeline>(
AvailableHeader::Available(HeaderId(10, Default::default())),
Some(HeaderId(20, Default::default())),
Default::default(),
Default::default(),
Svyatoslav Nikolsky
committed
),);
}
#[test]
fn parachain_is_updated_after_offboarding() {
Svyatoslav Nikolsky
committed
assert!(is_update_required::<TestParachainsPipeline>(
AvailableHeader::Missing,
Some(HeaderId(20, Default::default())),
Default::default(),
Default::default(),
Svyatoslav Nikolsky
committed
),);
}
#[test]
fn parachain_is_updated_after_onboarding() {
Svyatoslav Nikolsky
committed
assert!(is_update_required::<TestParachainsPipeline>(
AvailableHeader::Available(HeaderId(30, Default::default())),
None,
Default::default(),
Default::default(),
Svyatoslav Nikolsky
committed
),);
}
#[test]
fn parachain_is_updated_if_newer_head_is_known() {
Svyatoslav Nikolsky
committed
assert!(is_update_required::<TestParachainsPipeline>(
AvailableHeader::Available(HeaderId(40, Default::default())),
Some(HeaderId(30, Default::default())),
Default::default(),
Default::default(),
Svyatoslav Nikolsky
committed
),);