mirror of https://github.com/fafhrd91/actix-web
remove NamedFile::open from io-uring feature
This commit is contained in:
parent
200cf0c073
commit
8bc92b764f
|
@ -15,7 +15,7 @@ name = "actix_files"
|
||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
io-uring = ["actix-web/io-uring", "tokio", "tokio-uring"]
|
io-uring = ["actix-web/io-uring", "tokio-uring"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-web = { version = "4.0.0-beta.9", default-features = false }
|
actix-web = { version = "4.0.0-beta.9", default-features = false }
|
||||||
|
@ -35,7 +35,6 @@ mime_guess = "2.0.1"
|
||||||
percent-encoding = "2.1"
|
percent-encoding = "2.1"
|
||||||
pin-project-lite = "0.2.7"
|
pin-project-lite = "0.2.7"
|
||||||
|
|
||||||
tokio = { version = "1", optional = true }
|
|
||||||
tokio-uring = { version = "0.1", optional = true }
|
tokio-uring = { version = "0.1", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -98,9 +98,9 @@ async fn chunked_read_file_callback(
|
||||||
let n_bytes = file.by_ref().take(max_bytes as u64).read_to_end(&mut buf)?;
|
let n_bytes = file.by_ref().take(max_bytes as u64).read_to_end(&mut buf)?;
|
||||||
|
|
||||||
if n_bytes == 0 {
|
if n_bytes == 0 {
|
||||||
Err(io::ErrorKind::UnexpectedEof.into())
|
Err(io::Error::from(io::ErrorKind::UnexpectedEof))
|
||||||
} else {
|
} else {
|
||||||
Ok::<_, io::Error>((file, Bytes::from(buf)))
|
Ok((file, Bytes::from(buf)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
|
|
|
@ -102,7 +102,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_if_modified_since_without_if_none_match() {
|
async fn test_if_modified_since_without_if_none_match() {
|
||||||
let file = NamedFile::open("Cargo.toml").unwrap();
|
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let since = header::HttpDate::from(SystemTime::now().add(Duration::from_secs(60)));
|
let since = header::HttpDate::from(SystemTime::now().add(Duration::from_secs(60)));
|
||||||
|
|
||||||
let req = TestRequest::default()
|
let req = TestRequest::default()
|
||||||
|
@ -114,7 +114,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_if_modified_since_without_if_none_match_same() {
|
async fn test_if_modified_since_without_if_none_match_same() {
|
||||||
let file = NamedFile::open("Cargo.toml").unwrap();
|
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let since = file.last_modified().unwrap();
|
let since = file.last_modified().unwrap();
|
||||||
|
|
||||||
let req = TestRequest::default()
|
let req = TestRequest::default()
|
||||||
|
@ -126,7 +126,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_if_modified_since_with_if_none_match() {
|
async fn test_if_modified_since_with_if_none_match() {
|
||||||
let file = NamedFile::open("Cargo.toml").unwrap();
|
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let since = header::HttpDate::from(SystemTime::now().add(Duration::from_secs(60)));
|
let since = header::HttpDate::from(SystemTime::now().add(Duration::from_secs(60)));
|
||||||
|
|
||||||
let req = TestRequest::default()
|
let req = TestRequest::default()
|
||||||
|
@ -139,7 +139,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_if_unmodified_since() {
|
async fn test_if_unmodified_since() {
|
||||||
let file = NamedFile::open("Cargo.toml").unwrap();
|
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let since = file.last_modified().unwrap();
|
let since = file.last_modified().unwrap();
|
||||||
|
|
||||||
let req = TestRequest::default()
|
let req = TestRequest::default()
|
||||||
|
@ -151,7 +151,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_if_unmodified_since_failed() {
|
async fn test_if_unmodified_since_failed() {
|
||||||
let file = NamedFile::open("Cargo.toml").unwrap();
|
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let since = header::HttpDate::from(SystemTime::UNIX_EPOCH);
|
let since = header::HttpDate::from(SystemTime::UNIX_EPOCH);
|
||||||
|
|
||||||
let req = TestRequest::default()
|
let req = TestRequest::default()
|
||||||
|
@ -163,8 +163,8 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_text() {
|
async fn test_named_file_text() {
|
||||||
assert!(NamedFile::open("test--").is_err());
|
assert!(NamedFile::open_async("test--").await.is_err());
|
||||||
let mut file = NamedFile::open("Cargo.toml").unwrap();
|
let mut file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
{
|
{
|
||||||
file.file();
|
file.file();
|
||||||
let _f: &File = &file;
|
let _f: &File = &file;
|
||||||
|
@ -187,8 +187,8 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_content_disposition() {
|
async fn test_named_file_content_disposition() {
|
||||||
assert!(NamedFile::open("test--").is_err());
|
assert!(NamedFile::open_async("test--").await.is_err());
|
||||||
let mut file = NamedFile::open("Cargo.toml").unwrap();
|
let mut file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
{
|
{
|
||||||
file.file();
|
file.file();
|
||||||
let _f: &File = &file;
|
let _f: &File = &file;
|
||||||
|
@ -204,7 +204,8 @@ mod tests {
|
||||||
"inline; filename=\"Cargo.toml\""
|
"inline; filename=\"Cargo.toml\""
|
||||||
);
|
);
|
||||||
|
|
||||||
let file = NamedFile::open("Cargo.toml")
|
let file = NamedFile::open_async("Cargo.toml")
|
||||||
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.disable_content_disposition();
|
.disable_content_disposition();
|
||||||
let req = TestRequest::default().to_http_request();
|
let req = TestRequest::default().to_http_request();
|
||||||
|
@ -249,7 +250,8 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_set_content_type() {
|
async fn test_named_file_set_content_type() {
|
||||||
let mut file = NamedFile::open("Cargo.toml")
|
let mut file = NamedFile::open_async("Cargo.toml")
|
||||||
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_content_type(mime::TEXT_XML);
|
.set_content_type(mime::TEXT_XML);
|
||||||
{
|
{
|
||||||
|
@ -274,7 +276,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_image() {
|
async fn test_named_file_image() {
|
||||||
let mut file = NamedFile::open("tests/test.png").unwrap();
|
let mut file = NamedFile::open_async("tests/test.png").await.unwrap();
|
||||||
{
|
{
|
||||||
file.file();
|
file.file();
|
||||||
let _f: &File = &file;
|
let _f: &File = &file;
|
||||||
|
@ -297,7 +299,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_javascript() {
|
async fn test_named_file_javascript() {
|
||||||
let file = NamedFile::open("tests/test.js").unwrap();
|
let file = NamedFile::open_async("tests/test.js").await.unwrap();
|
||||||
|
|
||||||
let req = TestRequest::default().to_http_request();
|
let req = TestRequest::default().to_http_request();
|
||||||
let resp = file.respond_to(&req).await.unwrap();
|
let resp = file.respond_to(&req).await.unwrap();
|
||||||
|
@ -317,7 +319,8 @@ mod tests {
|
||||||
disposition: DispositionType::Attachment,
|
disposition: DispositionType::Attachment,
|
||||||
parameters: vec![DispositionParam::Filename(String::from("test.png"))],
|
parameters: vec![DispositionParam::Filename(String::from("test.png"))],
|
||||||
};
|
};
|
||||||
let mut file = NamedFile::open("tests/test.png")
|
let mut file = NamedFile::open_async("tests/test.png")
|
||||||
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_content_disposition(cd);
|
.set_content_disposition(cd);
|
||||||
{
|
{
|
||||||
|
@ -342,7 +345,7 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_binary() {
|
async fn test_named_file_binary() {
|
||||||
let mut file = NamedFile::open("tests/test.binary").unwrap();
|
let mut file = NamedFile::open_async("tests/test.binary").await.unwrap();
|
||||||
{
|
{
|
||||||
file.file();
|
file.file();
|
||||||
let _f: &File = &file;
|
let _f: &File = &file;
|
||||||
|
@ -365,7 +368,8 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_status_code_text() {
|
async fn test_named_file_status_code_text() {
|
||||||
let mut file = NamedFile::open("Cargo.toml")
|
let mut file = NamedFile::open_async("Cargo.toml")
|
||||||
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_status_code(StatusCode::NOT_FOUND);
|
.set_status_code(StatusCode::NOT_FOUND);
|
||||||
{
|
{
|
||||||
|
@ -581,7 +585,8 @@ mod tests {
|
||||||
async fn test_named_file_content_encoding() {
|
async fn test_named_file_content_encoding() {
|
||||||
let srv = test::init_service(App::new().wrap(Compress::default()).service(
|
let srv = test::init_service(App::new().wrap(Compress::default()).service(
|
||||||
web::resource("/").to(|| async {
|
web::resource("/").to(|| async {
|
||||||
NamedFile::open("Cargo.toml")
|
NamedFile::open_async("Cargo.toml")
|
||||||
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_content_encoding(header::ContentEncoding::Identity)
|
.set_content_encoding(header::ContentEncoding::Identity)
|
||||||
}),
|
}),
|
||||||
|
@ -601,7 +606,8 @@ mod tests {
|
||||||
async fn test_named_file_content_encoding_gzip() {
|
async fn test_named_file_content_encoding_gzip() {
|
||||||
let srv = test::init_service(App::new().wrap(Compress::default()).service(
|
let srv = test::init_service(App::new().wrap(Compress::default()).service(
|
||||||
web::resource("/").to(|| async {
|
web::resource("/").to(|| async {
|
||||||
NamedFile::open("Cargo.toml")
|
NamedFile::open_async("Cargo.toml")
|
||||||
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_content_encoding(header::ContentEncoding::Gzip)
|
.set_content_encoding(header::ContentEncoding::Gzip)
|
||||||
}),
|
}),
|
||||||
|
@ -627,7 +633,7 @@ mod tests {
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_allowed_method() {
|
async fn test_named_file_allowed_method() {
|
||||||
let req = TestRequest::default().method(Method::GET).to_http_request();
|
let req = TestRequest::default().method(Method::GET).to_http_request();
|
||||||
let file = NamedFile::open("Cargo.toml").unwrap();
|
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let resp = file.respond_to(&req).await.unwrap();
|
let resp = file.respond_to(&req).await.unwrap();
|
||||||
assert_eq!(resp.status(), StatusCode::OK);
|
assert_eq!(resp.status(), StatusCode::OK);
|
||||||
}
|
}
|
||||||
|
@ -838,9 +844,8 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_serve_named_file() {
|
async fn test_serve_named_file() {
|
||||||
let srv =
|
let factory = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
test::init_service(App::new().service(NamedFile::open("Cargo.toml").unwrap()))
|
let srv = test::init_service(App::new().service(factory)).await;
|
||||||
.await;
|
|
||||||
|
|
||||||
let req = TestRequest::get().uri("/Cargo.toml").to_request();
|
let req = TestRequest::get().uri("/Cargo.toml").to_request();
|
||||||
let res = test::call_service(&srv, req).await;
|
let res = test::call_service(&srv, req).await;
|
||||||
|
@ -857,11 +862,9 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_serve_named_file_prefix() {
|
async fn test_serve_named_file_prefix() {
|
||||||
let srv = test::init_service(
|
let factory = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
App::new()
|
let srv =
|
||||||
.service(web::scope("/test").service(NamedFile::open("Cargo.toml").unwrap())),
|
test::init_service(App::new().service(web::scope("/test").service(factory))).await;
|
||||||
)
|
|
||||||
.await;
|
|
||||||
|
|
||||||
let req = TestRequest::get().uri("/test/Cargo.toml").to_request();
|
let req = TestRequest::get().uri("/test/Cargo.toml").to_request();
|
||||||
let res = test::call_service(&srv, req).await;
|
let res = test::call_service(&srv, req).await;
|
||||||
|
@ -878,10 +881,8 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_named_file_default_service() {
|
async fn test_named_file_default_service() {
|
||||||
let srv = test::init_service(
|
let factory = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
App::new().default_service(NamedFile::open("Cargo.toml").unwrap()),
|
let srv = test::init_service(App::new().default_service(factory)).await;
|
||||||
)
|
|
||||||
.await;
|
|
||||||
|
|
||||||
for route in ["/foobar", "/baz", "/"].iter() {
|
for route in ["/foobar", "/baz", "/"].iter() {
|
||||||
let req = TestRequest::get().uri(route).to_request();
|
let req = TestRequest::get().uri(route).to_request();
|
||||||
|
@ -896,8 +897,9 @@ mod tests {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_default_handler_named_file() {
|
async fn test_default_handler_named_file() {
|
||||||
|
let factory = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||||
let st = Files::new("/", ".")
|
let st = Files::new("/", ".")
|
||||||
.default_handler(NamedFile::open("Cargo.toml").unwrap())
|
.default_handler(factory)
|
||||||
.new_service(())
|
.new_service(())
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
@ -219,6 +219,7 @@ impl NamedFile {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "io-uring"))]
|
||||||
/// Attempts to open a file in read-only mode.
|
/// Attempts to open a file in read-only mode.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
|
@ -229,16 +230,8 @@ impl NamedFile {
|
||||||
/// let file = NamedFile::open("foo.txt");
|
/// let file = NamedFile::open("foo.txt");
|
||||||
/// ```
|
/// ```
|
||||||
pub fn open<P: AsRef<Path>>(path: P) -> io::Result<NamedFile> {
|
pub fn open<P: AsRef<Path>>(path: P) -> io::Result<NamedFile> {
|
||||||
#[cfg(not(feature = "io-uring"))]
|
let file = File::open(&path)?;
|
||||||
{
|
Self::from_file(file, path)
|
||||||
let file = File::open(&path)?;
|
|
||||||
Self::from_file(file, path)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "io-uring")]
|
|
||||||
{
|
|
||||||
tokio::runtime::Handle::current().block_on(Self::open_async(path))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Attempts to open a file asynchronously in read-only mode.
|
/// Attempts to open a file asynchronously in read-only mode.
|
||||||
|
|
Loading…
Reference in New Issue