Skip to content

Commit a4775e8

Browse files
authored
Merge pull request #35 from yoshuawuyts/hex-files
use carriage return in fixtures
2 parents 6b0af9a + 5c55030 commit a4775e8

File tree

4 files changed

+69
-45
lines changed

4 files changed

+69
-45
lines changed

tests/common/mod.rs

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

38
#[macro_export]
49
macro_rules! assert {
5-
($actual:expr, $expected:expr, $block:expr) => {
10+
($actual:expr, $expected_file:expr, $block:expr) => {
611
task::block_on(async {
12+
use async_std::io::prelude::*;
713
$block.await.unwrap();
814
let mut actual = std::string::String::from_utf8($actual).unwrap();
9-
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();
1017
match expected.find("{DATE}") {
1118
Some(i) => {
1219
expected.replace_range(i..i + 6, "");
@@ -25,22 +32,38 @@ macro_rules! assert {
2532
};
2633
}
2734

28-
pub fn read_fixture(name: &str) -> Vec<u8> {
29-
use std::io::Read;
30-
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-
let mut contents = Vec::new();
35-
file.read_to_end(&mut contents)
36-
.expect("Couldn't read fixture files contents");
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+
}
3765

38-
let mut result = Vec::<u8>::new();
39-
for byte in contents {
40-
if byte == 0x0A {
41-
result.push(0x0D);
42-
}
43-
result.push(byte);
66+
fn poll_close(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
67+
Pin::new(&mut &*self.0).poll_close(cx)
4468
}
45-
result
4669
}

tests/fixtures/request1.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
POST / HTTP/1.1
2-
Host: localhost:8080
3-
User-Agent: curl/7.54.0
4-
Accept: */*
5-
Content-Length: 2
6-
Content-Type: application/x-www-form-urlencoded
7-
1+
POST / HTTP/1.1
2+
Host: localhost:8080
3+
User-Agent: curl/7.54.0
4+
Accept: */*
5+
Content-Length: 2
6+
Content-Type: application/x-www-form-urlencoded
7+

tests/fixtures/response1.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
HTTP/1.1 200 OK
2-
Content-Length: 0
3-
Date: {DATE}
4-
content-type: text/plain; charset=utf-8
5-
1+
HTTP/1.1 200 OK
2+
Content-Length: 0
3+
Date: {DATE}
4+
content-type: text/plain; charset=utf-8
5+

tests/server.rs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
mod common;
22
use async_h1::server;
3-
use async_std::io::Cursor;
43
use async_std::task;
54
use common::read_fixture;
65
use http_types::{Response, StatusCode};
76

87
#[test]
98
fn test_basic_request() {
10-
let request = read_fixture("request1");
11-
let expected = read_fixture("response1");
12-
let mut actual = Vec::new();
13-
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";
1414

15-
assert!(
16-
actual,
17-
expected,
18-
server::accept(addr, Cursor::new(request), &mut actual, |_req| {
19-
async {
20-
let mut resp = Response::new(StatusCode::Ok);
21-
resp.set_body("");
22-
Ok(resp)
23-
}
24-
})
25-
);
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+
})
2627
}

0 commit comments

Comments
 (0)