mod router_service;
pub use router_service::UnixRouterService;
mod ext;
pub use ext::UnixRequestExt;
mod request_meta;
#[cfg(test)]
mod tests {
use super::*;
use futures::future::poll_fn;
use hyper::{Body, Method, Request, Response};
use routerify::{Error, Router};
use std::task::Poll;
use tokio::net::UnixStream;
use tower::Service;
#[tokio::test]
pub async fn unixsocket() {
const RESPONSE_TEXT: &str = "Hello world!";
let mut router_service = {
let router: Router<Body, Error> = Router::builder()
.get("/", |_req| async move {
Ok(Response::new(Body::from(RESPONSE_TEXT)))
})
.build()
.unwrap();
UnixRouterService::new(router).unwrap()
};
poll_fn(|ctx| -> Poll<_> { router_service.poll_ready(ctx) })
.await
.expect("router service is not ready");
let (_, server) = UnixStream::pair().unwrap();
let mut service = router_service.call(&server).await.unwrap();
poll_fn(|ctx| -> Poll<_> { service.poll_ready(ctx) })
.await
.expect("request service is not ready");
let req = Request::builder()
.method(Method::GET)
.uri("/")
.body(hyper::Body::empty())
.unwrap();
let resp: Response<hyper::body::Body> = service.call(req).await.unwrap();
let body = resp.into_body();
let body = String::from_utf8(hyper::body::to_bytes(body).await.unwrap().to_vec()).unwrap();
assert_eq!(RESPONSE_TEXT, body);
}
}