mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-29 09:41:34 +00:00
Cleaner shutdown process (#992)
* Cleaner shutdown process * Finish * Fix Yamux panic * Remove irrelevant tests * Update core/src/nodes/handled_node_tasks.rs Co-Authored-By: tomaka <pierre.krieger1708@gmail.com> * Fix yamux error handling * Update yamux
This commit is contained in:
@ -129,12 +129,12 @@ fn events_in_a_node_reaches_the_collection_stream() {
|
||||
let task_peer_id = PeerId::random();
|
||||
|
||||
let mut handler = Handler::default();
|
||||
handler.state = Some(HandlerState::Ready(Some(NodeHandlerEvent::Custom(OutEvent::Custom("init")))));
|
||||
handler.state = Some(HandlerState::Ready(NodeHandlerEvent::Custom(OutEvent::Custom("init"))));
|
||||
let handler_states = vec![
|
||||
HandlerState::Err,
|
||||
HandlerState::Ready(Some(NodeHandlerEvent::Custom(OutEvent::Custom("from handler 3") ))),
|
||||
HandlerState::Ready(Some(NodeHandlerEvent::Custom(OutEvent::Custom("from handler 2") ))),
|
||||
HandlerState::Ready(Some(NodeHandlerEvent::Custom(OutEvent::Custom("from handler 1") ))),
|
||||
HandlerState::Ready(NodeHandlerEvent::Custom(OutEvent::Custom("from handler 3") )),
|
||||
HandlerState::Ready(NodeHandlerEvent::Custom(OutEvent::Custom("from handler 2") )),
|
||||
HandlerState::Ready(NodeHandlerEvent::Custom(OutEvent::Custom("from handler 1") )),
|
||||
];
|
||||
handler.next_states = handler_states;
|
||||
|
||||
@ -265,55 +265,7 @@ fn task_closed_with_error_when_task_is_connected_yields_node_error() {
|
||||
rt.block_on(future::poll_fn(move || -> Poll<_, ()> {
|
||||
let mut cs = cs_fut.lock();
|
||||
assert_matches!(cs.poll(), Async::Ready(collection_ev) => {
|
||||
assert_matches!(collection_ev, CollectionEvent::NodeError{..});
|
||||
});
|
||||
Ok(Async::Ready(()))
|
||||
})).expect("tokio works");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn task_closed_ok_when_task_is_connected_yields_node_closed() {
|
||||
let cs = Arc::new(Mutex::new(TestCollectionStream::new()));
|
||||
let peer_id = PeerId::random();
|
||||
let muxer = DummyMuxer::new();
|
||||
let task_inner_fut = future::ok((peer_id.clone(), muxer));
|
||||
let mut handler = Handler::default();
|
||||
handler.next_states = vec![HandlerState::Ready(None)]; // triggered when sending a NextState event
|
||||
|
||||
cs.lock().add_reach_attempt(task_inner_fut, handler);
|
||||
let mut rt = Builder::new().core_threads(1).build().unwrap();
|
||||
|
||||
// Kick it off
|
||||
let cs_fut = cs.clone();
|
||||
rt.block_on(future::poll_fn(move || -> Poll<_, ()> {
|
||||
let mut cs = cs_fut.lock();
|
||||
assert_matches!(cs.poll(), Async::NotReady);
|
||||
// send an event so the Handler errors in two polls
|
||||
cs.broadcast_event(&InEvent::NextState);
|
||||
Ok(Async::Ready(()))
|
||||
})).expect("tokio works");
|
||||
|
||||
// Accept the new node
|
||||
let cs_fut = cs.clone();
|
||||
rt.block_on(future::poll_fn(move || -> Poll<_, ()> {
|
||||
let mut cs = cs_fut.lock();
|
||||
// NodeReached, accept the connection so the task transitions from Pending to Connected
|
||||
assert_matches!(cs.poll(), Async::Ready(CollectionEvent::NodeReached(reach_ev)) => {
|
||||
reach_ev.accept(());
|
||||
});
|
||||
Ok(Async::Ready(()))
|
||||
})).expect("tokio works");
|
||||
|
||||
assert!(cs.lock().has_connection(&peer_id));
|
||||
|
||||
// Next poll, the Handler returns Async::Ready(None) because of the
|
||||
// NextState message sent before.
|
||||
let cs_fut = cs.clone();
|
||||
rt.block_on(future::poll_fn(move || -> Poll<_, ()> {
|
||||
let mut cs = cs_fut.lock();
|
||||
// Node is closed normally: TaskClosed, Ok(())
|
||||
assert_matches!(cs.poll(), Async::Ready(CollectionEvent::NodeClosed{ peer_id: peer_id_in_event, .. }) => {
|
||||
assert_eq!(peer_id_in_event, peer_id);
|
||||
assert_matches!(collection_ev, CollectionEvent::NodeClosed{..});
|
||||
});
|
||||
Ok(Async::Ready(()))
|
||||
})).expect("tokio works");
|
||||
|
Reference in New Issue
Block a user