mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-19 01:51:02 +00:00
Make sure we send collators its role on connect (#991)
This commit is contained in:
@@ -335,9 +335,15 @@ enum CollatorState {
|
|||||||
impl CollatorState {
|
impl CollatorState {
|
||||||
fn send_key<F: FnMut(Message)>(&mut self, key: ValidatorId, mut f: F) {
|
fn send_key<F: FnMut(Message)>(&mut self, key: ValidatorId, mut f: F) {
|
||||||
f(Message::ValidatorId(key));
|
f(Message::ValidatorId(key));
|
||||||
if let CollatorState::RolePending(role) = *self {
|
match self {
|
||||||
f(Message::CollatorRole(role));
|
CollatorState::RolePending(role) => {
|
||||||
*self = CollatorState::Primed(Some(role));
|
f(Message::CollatorRole(*role));
|
||||||
|
*self = CollatorState::Primed(Some(*role));
|
||||||
|
},
|
||||||
|
CollatorState::Fresh => {
|
||||||
|
*self = CollatorState::Primed(None);
|
||||||
|
},
|
||||||
|
CollatorState::Primed(_) => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -579,7 +579,7 @@ fn fetches_pov_block_from_gossip() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn validator_sends_key_to_collator_on_status() {
|
fn validator_sends_key_and_role_to_collator_on_status() {
|
||||||
let (service, _gossip, mut pool, worker_task) = test_setup(Config { collating_for: None });
|
let (service, _gossip, mut pool, worker_task) = test_setup(Config { collating_for: None });
|
||||||
|
|
||||||
let peer = PeerId::random();
|
let peer = PeerId::random();
|
||||||
@@ -602,7 +602,35 @@ fn validator_sends_key_to_collator_on_status() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let expected_msg = Message::ValidatorId(validator_id.clone());
|
let expected_msg = Message::ValidatorId(validator_id.clone());
|
||||||
assert!(service.network_service.recorded.lock().notifications.iter().any(|(p, notification)| {
|
let validator_id_pos = service.network_service.recorded.lock().notifications.iter().position(|(p, notification)| {
|
||||||
peer == *p && *notification == expected_msg
|
peer == *p && *notification == expected_msg
|
||||||
}));
|
});
|
||||||
|
|
||||||
|
let expected_msg = Message::CollatorRole(CollatorRole::Primary);
|
||||||
|
let collator_role_pos = service.network_service.recorded.lock().notifications.iter().position(|(p, notification)| {
|
||||||
|
peer == *p && *notification == expected_msg
|
||||||
|
});
|
||||||
|
|
||||||
|
assert!(validator_id_pos < collator_role_pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn collator_state_send_key_updates_state_correctly() {
|
||||||
|
let mut state = CollatorState::Fresh;
|
||||||
|
state.send_key(Sr25519Keyring::Alice.public().into(), |_| {});
|
||||||
|
assert!(matches!(state, CollatorState::Primed(None)));
|
||||||
|
|
||||||
|
let mut state = CollatorState::RolePending(CollatorRole::Primary);
|
||||||
|
|
||||||
|
let mut counter = 0;
|
||||||
|
state.send_key(Sr25519Keyring::Alice.public().into(), |msg| {
|
||||||
|
match (counter, msg) {
|
||||||
|
(0, Message::ValidatorId(_)) => {
|
||||||
|
counter += 1;
|
||||||
|
},
|
||||||
|
(1, Message::CollatorRole(CollatorRole::Primary)) => {},
|
||||||
|
err @ _ => panic!("Unexpected message: {:?}", err),
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assert!(matches!(state, CollatorState::Primed(Some(CollatorRole::Primary))));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user