Skip to content

Commit a7f0488

Browse files
committed
Add a cancel_query test
1 parent 7810b96 commit a7f0488

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

postgres-tokio/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,8 @@ impl Connection {
312312
fn simple_query(self, query: &str) -> BoxFuture<(Vec<RowData>, Connection), Error> {
313313
let mut buf = vec![];
314314
frontend::query(query, &mut buf)
315-
.map(|()| buf)
316315
.into_future()
317-
.and_then(move |buf| self.0.send(buf))
316+
.and_then(move |()| self.0.send(buf))
318317
.map_err(Error::Io)
319318
.and_then(|s| Connection(s).simple_read_rows(vec![]))
320319
.boxed()

postgres-tokio/src/test.rs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
use futures::Future;
1+
use futures::{Future, IntoFuture};
22
use futures_state_stream::StateStream;
33
use std::error::Error as StdError;
4-
use tokio_core::reactor::Core;
4+
use std::time::Duration;
5+
use tokio_core::reactor::{Core, Interval};
56

67
use super::*;
78
use error::{Error, ConnectError, SqlState};
@@ -331,3 +332,36 @@ fn enum_() {
331332

332333
l.run(done).unwrap();
333334
}
335+
336+
#[test]
337+
fn cancel() {
338+
let mut l = Core::new().unwrap();
339+
let handle = l.handle();
340+
341+
let done = Connection::connect("postgres://postgres@localhost", TlsMode::None, &handle)
342+
.then(move |c| {
343+
let c = c.unwrap();
344+
let cancel_data = c.cancel_data();
345+
let cancel = Interval::new(Duration::from_secs(1), &handle)
346+
.into_future()
347+
.then(move |r| {
348+
r.unwrap();
349+
cancel_query("postgres://postgres@localhost",
350+
TlsMode::None,
351+
cancel_data,
352+
&handle)
353+
})
354+
.then(Ok::<_, ()>);
355+
c.batch_execute("SELECT pg_sleep(10)")
356+
.then(Ok::<_, ()>)
357+
.join(cancel)
358+
});
359+
360+
let (select, cancel) = l.run(done).unwrap();
361+
cancel.unwrap();
362+
match select {
363+
Err(Error::Db(e, _)) => assert_eq!(e.code, SqlState::QueryCanceled),
364+
Err(e) => panic!("unexpected error {}", e),
365+
Ok(_) => panic!("unexpected success"),
366+
}
367+
}

0 commit comments

Comments
 (0)