diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/archive.rs | 20 | ||||
-rw-r--r-- | tests/auth.rs | 4 | ||||
-rw-r--r-- | tests/auth_file.rs | 4 | ||||
-rw-r--r-- | tests/bind.rs | 2 | ||||
-rw-r--r-- | tests/cli.rs | 2 | ||||
-rw-r--r-- | tests/create_directories.rs | 70 | ||||
-rw-r--r-- | tests/header.rs | 2 | ||||
-rw-r--r-- | tests/navigation.rs | 2 | ||||
-rw-r--r-- | tests/qrcode.rs | 2 | ||||
-rw-r--r-- | tests/raw.rs | 2 | ||||
-rw-r--r-- | tests/readme.rs | 40 | ||||
-rw-r--r-- | tests/serve_request.rs | 140 | ||||
-rw-r--r-- | tests/tls.rs | 2 | ||||
-rw-r--r-- | tests/upload_files.rs | 40 | ||||
-rw-r--r-- | tests/webdav.rs | 8 |
15 files changed, 198 insertions, 142 deletions
diff --git a/tests/archive.rs b/tests/archive.rs index a8b5ed2..2e96797 100644 --- a/tests/archive.rs +++ b/tests/archive.rs @@ -1,19 +1,21 @@ -use reqwest::StatusCode; +use reqwest::StatusCode; use rstest::rstest; use select::{document::Document, predicate::Text}; mod fixtures; -use crate::fixtures::{server, Error, TestServer}; +use crate::fixtures::{Error, TestServer, server}; #[rstest] fn archives_are_disabled(server: TestServer) -> Result<(), Error> { // Ensure the links to the archives are not present let body = reqwest::blocking::get(server.url())?.error_for_status()?; let parsed = Document::from_read(body)?; - assert!(parsed - .find(Text) - .all(|x| x.text() != "Download .tar.gz" && x.text() != "Download .tar")); + assert!( + parsed + .find(Text) + .all(|x| x.text() != "Download .tar.gz" && x.text() != "Download .tar") + ); // Try to download anyway, ensure it's forbidden assert_eq!( @@ -65,9 +67,11 @@ fn archives_are_disabled_when_indexing_disabled( // Ensure the links to the archives are not present let body = reqwest::blocking::get(server.url())?; let parsed = Document::from_read(body)?; - assert!(parsed - .find(Text) - .all(|x| x.text() != "Download .tar.gz" && x.text() != "Download .tar")); + assert!( + parsed + .find(Text) + .all(|x| x.text() != "Download .tar.gz" && x.text() != "Download .tar") + ); // Try to download anyway, ensure it's forbidden // We assert for not found to make sure we aren't leaking information about directories that do exist. diff --git a/tests/auth.rs b/tests/auth.rs index efa7827..5227b49 100644 --- a/tests/auth.rs +++ b/tests/auth.rs @@ -1,11 +1,11 @@ use pretty_assertions::assert_eq; -use reqwest::{blocking::Client, StatusCode}; +use reqwest::{StatusCode, blocking::Client}; use rstest::rstest; use select::{document::Document, predicate::Text}; mod fixtures; -use crate::fixtures::{server, Error, FILES}; +use crate::fixtures::{Error, FILES, server}; #[rstest] #[case("testuser:testpassword", "testuser", "testpassword")] diff --git a/tests/auth_file.rs b/tests/auth_file.rs index 5632d46..89f0dbe 100644 --- a/tests/auth_file.rs +++ b/tests/auth_file.rs @@ -1,10 +1,10 @@ -use reqwest::{blocking::Client, StatusCode}; +use reqwest::{StatusCode, blocking::Client}; use rstest::rstest; use select::{document::Document, predicate::Text}; mod fixtures; -use crate::fixtures::{server, Error, TestServer, FILES}; +use crate::fixtures::{Error, FILES, TestServer, server}; #[rstest] #[case("joe", "123")] diff --git a/tests/bind.rs b/tests/bind.rs index e6c448a..e051308 100644 --- a/tests/bind.rs +++ b/tests/bind.rs @@ -8,7 +8,7 @@ use rstest::rstest; mod fixtures; -use crate::fixtures::{port, server, tmpdir, Error, TestServer}; +use crate::fixtures::{Error, TestServer, port, server, tmpdir}; #[rstest] #[case(&["-i", "12.123.234.12"])] diff --git a/tests/cli.rs b/tests/cli.rs index 7c53698..1ed4398 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -1,7 +1,7 @@ use std::process::Command; use assert_cmd::prelude::*; -use clap::{crate_name, crate_version, ValueEnum}; +use clap::{ValueEnum, crate_name, crate_version}; use clap_complete::Shell; mod fixtures; diff --git a/tests/create_directories.rs b/tests/create_directories.rs index bd9259f..d118fc6 100644 --- a/tests/create_directories.rs +++ b/tests/create_directories.rs @@ -1,4 +1,4 @@ -use reqwest::blocking::{multipart, Client}; +use reqwest::blocking::{Client, multipart}; use rstest::rstest; use select::{ document::Document, @@ -7,7 +7,7 @@ use select::{ mod fixtures; -use crate::fixtures::{server, Error, TestServer, DIRECTORY_SYMLINK}; +use crate::fixtures::{DIRECTORY_SYMLINK, Error, TestServer, server}; /// This should work because the flags for uploading files and creating directories /// are set, and the directory name and path are valid. @@ -43,9 +43,11 @@ fn creating_directories_works( // After creating, check whether the directory is now getting listed. let body = reqwest::blocking::get(server.url())?; let parsed = Document::from_read(body)?; - assert!(parsed - .find(Text) - .any(|x| x.text() == test_directory_name.to_owned() + "/")); + assert!( + parsed + .find(Text) + .any(|x| x.text() == test_directory_name.to_owned() + "/") + ); Ok(()) } @@ -72,19 +74,23 @@ fn creating_directories_is_prevented(server: TestServer) -> Result<(), Error> { let client = Client::new(); // This should fail - assert!(client - .post(server.url().join("/upload?path=/")?) - .multipart(form) - .send()? - .error_for_status() - .is_err()); + assert!( + client + .post(server.url().join("/upload?path=/")?) + .multipart(form) + .send()? + .error_for_status() + .is_err() + ); // After creating, check whether the directory is now getting listed (shouldn't). let body = reqwest::blocking::get(server.url())?; let parsed = Document::from_read(body)?; - assert!(parsed - .find(Text) - .all(|x| x.text() != test_directory_name.to_owned() + "/")); + assert!( + parsed + .find(Text) + .all(|x| x.text() != test_directory_name.to_owned() + "/") + ); Ok(()) } @@ -106,16 +112,18 @@ fn creating_directories_through_symlinks_is_prevented( let form = form.part("mkdir", part); // This should fail - assert!(Client::new() - .post( - server - .url() - .join(format!("/upload?path=/{DIRECTORY_SYMLINK}").as_str())? - ) - .multipart(form) - .send()? - .error_for_status() - .is_err()); + assert!( + Client::new() + .post( + server + .url() + .join(format!("/upload?path=/{DIRECTORY_SYMLINK}").as_str())? + ) + .multipart(form) + .send()? + .error_for_status() + .is_err() + ); Ok(()) } @@ -145,12 +153,14 @@ fn prevent_path_transversal_attacks( let form = form.part("mkdir", part); // This should fail - assert!(Client::new() - .post(server.url().join(&format!("/upload/path={path}"))?) - .multipart(form) - .send()? - .error_for_status() - .is_err()); + assert!( + Client::new() + .post(server.url().join(&format!("/upload/path={path}"))?) + .multipart(form) + .send()? + .error_for_status() + .is_err() + ); Ok(()) } diff --git a/tests/header.rs b/tests/header.rs index 443f2ba..2f2c6e6 100644 --- a/tests/header.rs +++ b/tests/header.rs @@ -2,7 +2,7 @@ use rstest::rstest; mod fixtures; -use crate::fixtures::{server, Error}; +use crate::fixtures::{Error, server}; #[rstest] #[case(vec!["x-info: 123".to_string()])] diff --git a/tests/navigation.rs b/tests/navigation.rs index 1bd8e81..a391468 100644 --- a/tests/navigation.rs +++ b/tests/navigation.rs @@ -7,7 +7,7 @@ use select::document::Document; mod fixtures; mod utils; -use crate::fixtures::{server, Error, TestServer, DEEPLY_NESTED_FILE, DIRECTORIES}; +use crate::fixtures::{DEEPLY_NESTED_FILE, DIRECTORIES, Error, TestServer, server}; use crate::utils::{get_link_from_text, get_link_hrefs_with_prefix}; #[rstest] diff --git a/tests/qrcode.rs b/tests/qrcode.rs index 6951d7a..050948d 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -9,7 +9,7 @@ use select::{document::Document, predicate::Attr}; mod fixtures; -use crate::fixtures::{port, server, tmpdir, Error, TestServer}; +use crate::fixtures::{Error, TestServer, port, server, tmpdir}; #[rstest] fn webpage_hides_qrcode_when_disabled(server: TestServer) -> Result<(), Error> { diff --git a/tests/raw.rs b/tests/raw.rs index 051c3e3..be32fdf 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -8,7 +8,7 @@ use select::{ mod fixtures; -use crate::fixtures::{server, Error, TestServer}; +use crate::fixtures::{Error, TestServer, server}; /// The footer displays the correct wget command to download the folder recursively // This test can't test all aspects of the wget footer, diff --git a/tests/readme.rs b/tests/readme.rs index cafff3d..a30d00e 100644 --- a/tests/readme.rs +++ b/tests/readme.rs @@ -1,4 +1,4 @@ -use std::fs::{remove_file, File}; +use std::fs::{File, remove_file}; use std::io::Write; use std::path::PathBuf; @@ -8,7 +8,7 @@ use select::{document::Document, node::Node}; mod fixtures; -use fixtures::{server, Error, TestServer, DIRECTORIES, FILES}; +use fixtures::{DIRECTORIES, Error, FILES, TestServer, server}; fn write_readme_contents(path: PathBuf, filename: &str) -> PathBuf { let readme_path = path.join(filename); @@ -21,10 +21,12 @@ fn write_readme_contents(path: PathBuf, filename: &str) -> PathBuf { fn assert_readme_contents(parsed_dom: &Document, filename: &str) { assert!(parsed_dom.find(Attr("id", "readme")).next().is_some()); - assert!(parsed_dom - .find(Attr("id", "readme-filename")) - .next() - .is_some()); + assert!( + parsed_dom + .find(Attr("id", "readme-filename")) + .next() + .is_some() + ); assert!( parsed_dom .find(Attr("id", "readme-filename")) @@ -33,17 +35,21 @@ fn assert_readme_contents(parsed_dom: &Document, filename: &str) { .text() == filename ); - assert!(parsed_dom - .find(Attr("id", "readme-contents")) - .next() - .is_some()); - assert!(parsed_dom - .find(Attr("id", "readme-contents")) - .next() - .unwrap() - .text() - .trim() - .contains(&format!("Contents of {filename}"))); + assert!( + parsed_dom + .find(Attr("id", "readme-contents")) + .next() + .is_some() + ); + assert!( + parsed_dom + .find(Attr("id", "readme-contents")) + .next() + .unwrap() + .text() + .trim() + .contains(&format!("Contents of {filename}")) + ); } /// Do not show readme contents by default diff --git a/tests/serve_request.rs b/tests/serve_request.rs index 6ee6473..d9d4880 100644 --- a/tests/serve_request.rs +++ b/tests/serve_request.rs @@ -13,8 +13,8 @@ use select::{document::Document, node::Node, predicate::Attr}; mod fixtures; use crate::fixtures::{ - port, server, tmpdir, Error, TestServer, DIRECTORIES, DIRECTORY_SYMLINK, FILES, FILE_SYMLINK, - HIDDEN_DIRECTORIES, HIDDEN_FILES, + DIRECTORIES, DIRECTORY_SYMLINK, Error, FILE_SYMLINK, FILES, HIDDEN_DIRECTORIES, HIDDEN_FILES, + TestServer, port, server, tmpdir, }; #[rstest] @@ -55,17 +55,21 @@ fn serves_requests_with_non_default_port(server: TestServer) -> Result<(), Error } for &directory in DIRECTORIES { - assert!(parsed - .find(|x: &Node| x.text() == directory) - .next() - .is_some()); + assert!( + parsed + .find(|x: &Node| x.text() == directory) + .next() + .is_some() + ); let dir_body = reqwest::blocking::get(server.url().join(directory)?)?.error_for_status()?; let dir_body_parsed = Document::from_read(dir_body)?; for &file in FILES { - assert!(dir_body_parsed - .find(|x: &Node| x.text() == file) - .next() - .is_some()); + assert!( + dir_body_parsed + .find(|x: &Node| x.text() == file) + .next() + .is_some() + ); } } @@ -105,17 +109,21 @@ fn serves_requests_hidden_files(#[with(&["--hidden"])] server: TestServer) -> Re } for &directory in DIRECTORIES.iter().chain(HIDDEN_DIRECTORIES) { - assert!(parsed - .find(|x: &Node| x.text() == directory) - .next() - .is_some()); + assert!( + parsed + .find(|x: &Node| x.text() == directory) + .next() + .is_some() + ); let dir_body = reqwest::blocking::get(server.url().join(directory)?)?.error_for_status()?; let dir_body_parsed = Document::from_read(dir_body)?; for &file in FILES.iter().chain(HIDDEN_FILES) { - assert!(dir_body_parsed - .find(|x: &Node| x.text() == file) - .next() - .is_some()); + assert!( + dir_body_parsed + .find(|x: &Node| x.text() == file) + .next() + .is_some() + ); } } @@ -128,10 +136,12 @@ fn serves_requests_no_hidden_files_without_flag(server: TestServer) -> Result<() let parsed = Document::from_read(body)?; for &hidden_item in HIDDEN_FILES.iter().chain(HIDDEN_DIRECTORIES) { - assert!(parsed - .find(|x: &Node| x.text() == hidden_item) - .next() - .is_none()); + assert!( + parsed + .find(|x: &Node| x.text() == hidden_item) + .next() + .is_none() + ); let resp = reqwest::blocking::get(server.url().join(hidden_item)?)?; assert_eq!(resp.status(), StatusCode::BAD_REQUEST); } @@ -191,10 +201,12 @@ fn serves_requests_symlinks( assert_eq!(node.unwrap().attr("class").unwrap(), "file"); } } - assert!(parsed - .find(|x: &Node| x.text() == BROKEN_SYMLINK) - .next() - .is_none()); + assert!( + parsed + .find(|x: &Node| x.text() == BROKEN_SYMLINK) + .next() + .is_none() + ); Ok(()) } @@ -267,10 +279,12 @@ fn serve_index_instead_of_404_in_spa_mode( ) -> Result<(), Error> { let body = reqwest::blocking::get(format!("{}{}", server.url(), url))?.error_for_status()?; let parsed = Document::from_read(body)?; - assert!(parsed - .find(|x: &Node| x.text() == "Test Hello Yes") - .next() - .is_some()); + assert!( + parsed + .find(|x: &Node| x.text() == "Test Hello Yes") + .next() + .is_some() + ); Ok(()) } @@ -285,10 +299,12 @@ fn serve_file_instead_of_404_in_pretty_urls_mode( ) -> Result<(), Error> { let body = reqwest::blocking::get(format!("{}{}", server.url(), url))?.error_for_status()?; let parsed = Document::from_read(body)?; - assert!(parsed - .find(|x: &Node| x.text() == "Test Hello Yes") - .next() - .is_some()); + assert!( + parsed + .find(|x: &Node| x.text() == "Test Hello Yes") + .next() + .is_some() + ); Ok(()) } @@ -320,12 +336,16 @@ fn serves_requests_static_file_check( let parsed = Document::from_read(body)?; let re = Regex::new(&static_file_pattern).unwrap(); - assert!(parsed - .find(Attr("rel", "stylesheet")) - .all(|x| re.is_match(x.attr("href").unwrap()))); - assert!(parsed - .find(Attr("rel", "icon")) - .all(|x| re.is_match(x.attr("href").unwrap()))); + assert!( + parsed + .find(Attr("rel", "stylesheet")) + .all(|x| re.is_match(x.attr("href").unwrap())) + ); + assert!( + parsed + .find(Attr("rel", "icon")) + .all(|x| re.is_match(x.attr("href").unwrap())) + ); Ok(()) } @@ -337,22 +357,30 @@ fn serves_no_directory_if_indexing_disabled(#[case] server: TestServer) -> Resul assert_eq!(body.status(), StatusCode::NOT_FOUND); let parsed = Document::from_read(body)?; - assert!(parsed - .find(|x: &Node| x.text() == FILES[0]) - .next() - .is_none()); - assert!(parsed - .find(|x: &Node| x.text() == DIRECTORIES[0]) - .next() - .is_none()); - assert!(parsed - .find(|x: &Node| x.text() == "404 Not Found") - .next() - .is_some()); - assert!(parsed - .find(|x: &Node| x.text() == "File not found.") - .next() - .is_some()); + assert!( + parsed + .find(|x: &Node| x.text() == FILES[0]) + .next() + .is_none() + ); + assert!( + parsed + .find(|x: &Node| x.text() == DIRECTORIES[0]) + .next() + .is_none() + ); + assert!( + parsed + .find(|x: &Node| x.text() == "404 Not Found") + .next() + .is_some() + ); + assert!( + parsed + .find(|x: &Node| x.text() == "File not found.") + .next() + .is_some() + ); Ok(()) } diff --git a/tests/tls.rs b/tests/tls.rs index 9cc441c..9f2d9b5 100644 --- a/tests/tls.rs +++ b/tests/tls.rs @@ -6,7 +6,7 @@ use select::{document::Document, node::Node}; mod fixtures; -use crate::fixtures::{server, Error, TestServer, FILES}; +use crate::fixtures::{Error, FILES, TestServer, server}; /// Can start the server with TLS and receive encrypted responses. #[rstest] diff --git a/tests/upload_files.rs b/tests/upload_files.rs index 15730bb..42ec9e6 100644 --- a/tests/upload_files.rs +++ b/tests/upload_files.rs @@ -2,7 +2,7 @@ use std::fs::create_dir_all; use std::path::Path; use assert_fs::fixture::TempDir; -use reqwest::blocking::{multipart, Client}; +use reqwest::blocking::{Client, multipart}; use reqwest::header::HeaderMap; use rstest::rstest; use select::document::Document; @@ -10,7 +10,7 @@ use select::predicate::{Attr, Text}; mod fixtures; -use crate::fixtures::{server, tmpdir, Error, TestServer}; +use crate::fixtures::{Error, TestServer, server, tmpdir}; // Generate the hashes using the following // ```bash @@ -28,7 +28,9 @@ use crate::fixtures::{server, tmpdir, Error, TestServer}; )] #[case::sha512_hash( Some("SHA512"), - Some("03bcfc52c53904e34e06b95e8c3ee1275c66960c441417892e977d52687e28afae85b6039509060ee07da739e4e7fc3137acd142162c1456f723604f8365e154") + Some( + "03bcfc52c53904e34e06b95e8c3ee1275c66960c441417892e977d52687e28afae85b6039509060ee07da739e4e7fc3137acd142162c1456f723604f8365e154" + ) )] fn uploading_files_works( #[with(&["-u"])] server: TestServer, @@ -100,12 +102,14 @@ fn uploading_files_is_prevented(server: TestServer) -> Result<(), Error> { let client = Client::new(); // Ensure uploading fails and returns an error - assert!(client - .post(server.url().join("/upload?path=/")?) - .multipart(form) - .send()? - .error_for_status() - .is_err()); + assert!( + client + .post(server.url().join("/upload?path=/")?) + .multipart(form) + .send()? + .error_for_status() + .is_err() + ); // After uploading, check whether the uploaded file is NOT getting listed. let body = reqwest::blocking::get(server.url())?; @@ -127,7 +131,9 @@ fn uploading_files_is_prevented(server: TestServer) -> Result<(), Error> { )] #[case::sha512_hash( Some("SHA512"), - Some("d3fe39ab560dd7ba91e6e2f8c948066d696f2afcfc90bf9df32946512f6934079807f301235b88b72bf746b6a88bf111bc5abe5c711514ed0731d286985297ba") + Some( + "d3fe39ab560dd7ba91e6e2f8c948066d696f2afcfc90bf9df32946512f6934079807f301235b88b72bf746b6a88bf111bc5abe5c711514ed0731d286985297ba" + ) )] #[case::sha128_hash(Some("SHA128"), Some("invalid"))] fn uploading_files_with_invalid_sha_func_is_prevented( @@ -159,12 +165,14 @@ fn uploading_files_with_invalid_sha_func_is_prevented( let client = Client::builder().default_headers(headers).build()?; - assert!(client - .post(server.url().join("/upload?path=/")?) - .multipart(form) - .send()? - .error_for_status() - .is_err()); + assert!( + client + .post(server.url().join("/upload?path=/")?) + .multipart(form) + .send()? + .error_for_status() + .is_err() + ); // After uploading, check whether the uploaded file is NOT getting listed. let body = reqwest::blocking::get(server.url())?; diff --git a/tests/webdav.rs b/tests/webdav.rs index 09d04e9..58ce9e8 100644 --- a/tests/webdav.rs +++ b/tests/webdav.rs @@ -3,18 +3,18 @@ use std::process::Command; use assert_cmd::prelude::*; use assert_fs::TempDir; use predicates::str::contains; -use reqwest::{blocking::Client, Method}; +use reqwest::{Method, blocking::Client}; use reqwest_dav::{ - list_cmd::{ListEntity, ListFile, ListFolder}, ClientBuilder as DavClientBuilder, + list_cmd::{ListEntity, ListFile, ListFolder}, }; use rstest::rstest; mod fixtures; use crate::fixtures::{ - server, tmpdir, Error, TestServer, DIRECTORIES, DIRECTORY_SYMLINK, FILES, FILE_SYMLINK, - HIDDEN_DIRECTORIES, HIDDEN_FILES, + DIRECTORIES, DIRECTORY_SYMLINK, Error, FILE_SYMLINK, FILES, HIDDEN_DIRECTORIES, HIDDEN_FILES, + TestServer, server, tmpdir, }; #[rstest] |