mirror of https://github.com/fafhrd91/actix-web
add test for pool drop
This commit is contained in:
parent
9619be602c
commit
85cab633ad
|
@ -389,7 +389,13 @@ mod test {
|
||||||
|
|
||||||
// A stream type always return pending on async read.
|
// A stream type always return pending on async read.
|
||||||
// mock a usable tcp stream that ready to be used as client
|
// mock a usable tcp stream that ready to be used as client
|
||||||
struct TestStream;
|
struct TestStream(Rc<Cell<usize>>);
|
||||||
|
|
||||||
|
impl Drop for TestStream {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
self.0.set(self.0.get() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl AsyncRead for TestStream {
|
impl AsyncRead for TestStream {
|
||||||
fn poll_read(
|
fn poll_read(
|
||||||
|
@ -421,7 +427,7 @@ mod test {
|
||||||
self: Pin<&mut Self>,
|
self: Pin<&mut Self>,
|
||||||
_: &mut Context<'_>,
|
_: &mut Context<'_>,
|
||||||
) -> Poll<io::Result<()>> {
|
) -> Poll<io::Result<()>> {
|
||||||
unimplemented!()
|
Poll::Ready(Ok(()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +446,8 @@ mod test {
|
||||||
|
|
||||||
fn call(&self, _: Connect) -> Self::Future {
|
fn call(&self, _: Connect) -> Self::Future {
|
||||||
self.generated.set(self.generated.get() + 1);
|
self.generated.set(self.generated.get() + 1);
|
||||||
Box::pin(async { Ok((TestStream, Protocol::Http1)) })
|
let generated = self.generated.clone();
|
||||||
|
Box::pin(async { Ok((TestStream(generated), Protocol::Http1)) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,4 +604,54 @@ mod test {
|
||||||
assert_eq!(2, generated_clone.get());
|
assert_eq!(2, generated_clone.get());
|
||||||
release(conn);
|
release(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn test_pool_drop() {
|
||||||
|
let generated = Rc::new(Cell::new(0));
|
||||||
|
let generated_clone = generated.clone();
|
||||||
|
|
||||||
|
let connector = TestPoolConnector { generated };
|
||||||
|
|
||||||
|
let config = ConnectorConfig::default();
|
||||||
|
|
||||||
|
let pool = Rc::new(super::ConnectionPool::new(connector, config));
|
||||||
|
|
||||||
|
let req = Connect {
|
||||||
|
uri: Uri::from_static("https://crates.io"),
|
||||||
|
addr: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let conn = pool.call(req.clone()).await.unwrap();
|
||||||
|
assert_eq!(1, generated_clone.get());
|
||||||
|
release(conn);
|
||||||
|
|
||||||
|
let req = Connect {
|
||||||
|
uri: Uri::from_static("https://google.com"),
|
||||||
|
addr: None,
|
||||||
|
};
|
||||||
|
let conn = pool.call(req.clone()).await.unwrap();
|
||||||
|
assert_eq!(2, generated_clone.get());
|
||||||
|
release(conn);
|
||||||
|
|
||||||
|
let clone1 = pool.clone();
|
||||||
|
let clone2 = clone1.clone();
|
||||||
|
|
||||||
|
drop(clone2);
|
||||||
|
for _ in 0..2 {
|
||||||
|
actix_rt::task::yield_now().await;
|
||||||
|
}
|
||||||
|
assert_eq!(2, generated_clone.get());
|
||||||
|
|
||||||
|
drop(clone1);
|
||||||
|
for _ in 0..2 {
|
||||||
|
actix_rt::task::yield_now().await;
|
||||||
|
}
|
||||||
|
assert_eq!(2, generated_clone.get());
|
||||||
|
|
||||||
|
drop(pool);
|
||||||
|
for _ in 0..2 {
|
||||||
|
actix_rt::task::yield_now().await;
|
||||||
|
}
|
||||||
|
assert_eq!(0, generated_clone.get());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue