#![cfg(not(target_os = "linux"))]
extern crate dope;
mod common;
use std::pin::{Pin, pin};
use dope::manifold::Manifold;
use dope::manifold::Outcome;
use dope::manifold::listener::{self, Application};
use dope::{Completion, Cqe};
use dope_net::link::slot::Slot;
use dope_net::wire::identity::Identity;
use o3::buffer::RetainBytes;
struct App;
impl<'d> Application<'d> for App {
type Conn = ();
type Wire = Identity;
fn chunk<R: RetainBytes>(
self: Pin<&mut Self>,
_slot: &mut Slot<'d, Self::Wire, listener::State<Self::Conn>>,
_chunk: R,
_aux: &mut listener::Aux,
_driver: &mut dope::DriverContext<'_, 'd>,
) -> Outcome {
Outcome::Ok
}
fn send(
self: Pin<&mut Self>,
_slot: &mut Slot<'d, Self::Wire, listener::State<Self::Conn>>,
_sent: usize,
_aux: &mut listener::Aux,
_driver: &mut dope::DriverContext<'_, 'd>,
) {
}
fn close(
self: Pin<&mut Self>,
_slot: &mut Slot<'d, Self::Wire, listener::State<Self::Conn>>,
_aux: &mut listener::Aux,
) {
}
}
#[test]
fn accept_cancel_completes_the_armed_target() {
let (exec, cfg) = common::tcp_host(8, Default::default());
exec.enter(|mut session| {
let hash_builder = session.seed().derive(dope::hash::domain::ACCEPT).state();
let mut driver = session.driver_access();
let (listener, _) =
common::open_listener::<0, _, common::Plain>(App, cfg, hash_builder, &mut driver);
let mut listener = pin!(listener);
Manifold::pre_park(listener.as_mut(), &mut driver);
Manifold::shutdown(listener.as_mut(), &mut driver);
let mut cqes = [Cqe::ZERO; 2];
let n = driver.drain(&mut cqes);
assert_eq!(n, 1);
assert_eq!(cqes[0].kind(), dope::driver::token::kind::ACCEPT);
assert_eq!(cqes[0].result, -libc::ECANCELED);
});
}