Skip to content

Commit 5c55030

Browse files
committed
fix tests
Signed-off-by: Yoshua Wuyts <[email protected]>
1 parent 51dcfe6 commit 5c55030

File tree

2 files changed

+57
-21
lines changed

2 files changed

+57
-21
lines changed

tests/common/mod.rs

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
use async_std::io::Read;
21
use async_std::fs::File;
2+
use async_std::io::{self, Read, Write};
33
use async_std::path::PathBuf;
4+
use async_std::sync::Arc;
5+
use async_std::task::{Context, Poll};
6+
use std::pin::Pin;
47

58
#[macro_export]
69
macro_rules! assert {
7-
($actual:expr, $expected:expr, $block:expr) => {
10+
($actual:expr, $expected_file:expr, $block:expr) => {
811
task::block_on(async {
12+
use async_std::io::prelude::*;
913
$block.await.unwrap();
1014
let mut actual = std::string::String::from_utf8($actual).unwrap();
11-
let mut expected = std::string::String::from_utf8($expected).unwrap();
15+
let mut expected = std::string::String::new();
16+
$expected_file.read_to_string(&mut expected).await.unwrap();
1217
match expected.find("{DATE}") {
1318
Some(i) => {
1419
expected.replace_range(i..i + 6, "");
@@ -27,9 +32,38 @@ macro_rules! assert {
2732
};
2833
}
2934

30-
pub fn read_fixture(name: &str) -> Arc<File> {
35+
pub async fn read_fixture(name: &str) -> TestFile {
3136
let directory: PathBuf = env!("CARGO_MANIFEST_DIR").into();
3237
let path: PathBuf = format!("tests/fixtures/{}.txt", name).into();
33-
let mut file = File::open(directory.join(path)).expect("Reading fixture file didn't work");
34-
Arc::new(file)
38+
let file = File::open(directory.join(path))
39+
.await
40+
.expect("Reading fixture file didn't work");
41+
TestFile(Arc::new(file))
42+
}
43+
44+
#[derive(Clone)]
45+
pub struct TestFile(Arc<File>);
46+
47+
impl Read for TestFile {
48+
fn poll_read(
49+
self: Pin<&mut Self>,
50+
cx: &mut Context,
51+
buf: &mut [u8],
52+
) -> Poll<io::Result<usize>> {
53+
Pin::new(&mut &*self.0).poll_read(cx, buf)
54+
}
55+
}
56+
57+
impl Write for TestFile {
58+
fn poll_write(self: Pin<&mut Self>, cx: &mut Context, buf: &[u8]) -> Poll<io::Result<usize>> {
59+
Pin::new(&mut &*self.0).poll_write(cx, buf)
60+
}
61+
62+
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
63+
Pin::new(&mut &*self.0).poll_flush(cx)
64+
}
65+
66+
fn poll_close(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
67+
Pin::new(&mut &*self.0).poll_close(cx)
68+
}
3569
}

tests/server.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,22 @@ use http_types::{Response, StatusCode};
66

77
#[test]
88
fn test_basic_request() {
9-
let request = read_fixture("request1");
10-
let expected = read_fixture("response1");
11-
let mut actual = Vec::new();
12-
let addr = "http://example.com";
9+
task::block_on(async {
10+
let request = read_fixture("request1").await;
11+
let mut expected = read_fixture("response1").await;
12+
let mut actual = Vec::new();
13+
let addr = "http://example.com";
1314

14-
assert!(
15-
actual,
16-
expected,
17-
server::accept(addr, request, &mut actual, |_req| {
18-
async {
19-
let mut resp = Response::new(StatusCode::Ok);
20-
resp.set_body("");
21-
Ok(resp)
22-
}
23-
})
24-
);
15+
assert!(
16+
actual,
17+
expected,
18+
server::accept(addr, request.clone(), &mut actual, |_req| {
19+
async {
20+
let mut resp = Response::new(StatusCode::Ok);
21+
resp.set_body("");
22+
Ok(resp)
23+
}
24+
})
25+
);
26+
})
2527
}

0 commit comments

Comments
 (0)