mongodb 3.10.0

The official MongoDB driver for Rust
Documentation
use super::*;
use crate::runtime::{AsyncStream, WorkerHandle};

#[tokio::test]
async fn cancelled_checkout_returns_connection_and_requests_retry() {
    let (requester, mut receiver) = connection_requester::channel(WorkerHandle::new_mocked());
    let mut checkout = Box::pin(requester.request());
    assert!(futures::poll!(&mut checkout).is_pending());
    let request = receiver.recv().await.unwrap();
    assert!(!request.is_abandoned());
    drop(checkout);

    #[cfg(feature = "tracing-unstable")]
    let event_emitter = CmapEventEmitter::new(None, ObjectId::new(), None);
    #[cfg(not(feature = "tracing-unstable"))]
    let event_emitter = CmapEventEmitter::new(None);
    let mut connection = PooledConnection::new(
        PendingConnection {
            id: 1,
            address: ServerAddress::default(),
            generation: PoolGeneration::normal(),
            event_emitter,
            time_created: Instant::now(),
            cancellation_receiver: None,
        },
        AsyncStream::Null,
    );
    let connection_id = connection.id;
    let (manager, _) = manager::channel();
    connection.mark_checked_out(manager.clone(), None);
    let mut available = VecDeque::new();
    assert_eq!(
        ConnectionPoolWorker::fulfill_checkout(request, connection, &mut available),
        ControlFlow::Continue(())
    );
    assert_eq!(available.len(), 1);

    let mut checkout = Box::pin(requester.request());
    assert!(futures::poll!(&mut checkout).is_pending());
    let request = receiver.recv().await.unwrap();
    let mut connection = available.pop_back().unwrap();
    connection.mark_checked_out(manager, None);
    assert_eq!(
        ConnectionPoolWorker::fulfill_checkout(request, connection, &mut available),
        ControlFlow::Break(())
    );
    assert_eq!(checkout.await.unwrap_pooled_connection().id, connection_id);
    assert!(available.is_empty());
}