diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auth_file.rs | 66 | ||||
-rw-r--r-- | tests/data/auth1.txt | 3 | ||||
-rw-r--r-- | tests/serve_request.rs | 18 |
3 files changed, 87 insertions, 0 deletions
diff --git a/tests/auth_file.rs b/tests/auth_file.rs new file mode 100644 index 0000000..ddc9e25 --- /dev/null +++ b/tests/auth_file.rs @@ -0,0 +1,66 @@ +mod fixtures; + +use fixtures::{server, server_no_stderr, Error, FILES}; +use http::StatusCode; +use reqwest::blocking::Client; +use rstest::rstest; +use select::document::Document; +use select::predicate::Text; + +#[rstest( + cli_auth_file_arg, + client_username, + client_password, + case("tests/data/auth1.txt", "joe", "123"), + case("tests/data/auth1.txt", "bob", "123"), + case("tests/data/auth1.txt", "bill", "") +)] +fn auth_file_accepts( + cli_auth_file_arg: &str, + client_username: &str, + client_password: &str, +) -> Result<(), Error> { + let server = server(&["--auth-file", cli_auth_file_arg]); + let client = Client::new(); + let response = client + .get(server.url()) + .basic_auth(client_username, Some(client_password)) + .send()?; + + let status_code = response.status(); + assert_eq!(status_code, StatusCode::OK); + + let body = response.error_for_status()?; + let parsed = Document::from_read(body)?; + for &file in FILES { + assert!(parsed.find(Text).any(|x| x.text() == file)); + } + + Ok(()) +} + +#[rstest( + cli_auth_file_arg, + client_username, + client_password, + case("tests/data/auth1.txt", "joe", "wrongpassword"), + case("tests/data/auth1.txt", "bob", ""), + case("tests/data/auth1.txt", "nonexistentuser", "wrongpassword") +)] +fn auth_file_rejects( + cli_auth_file_arg: &str, + client_username: &str, + client_password: &str, +) -> Result<(), Error> { + let server = server_no_stderr(&["--auth-file", cli_auth_file_arg]); + let client = Client::new(); + let status = client + .get(server.url()) + .basic_auth(client_username, Some(client_password)) + .send()? + .status(); + + assert_eq!(status, StatusCode::UNAUTHORIZED); + + Ok(()) +} diff --git a/tests/data/auth1.txt b/tests/data/auth1.txt new file mode 100644 index 0000000..3744d61 --- /dev/null +++ b/tests/data/auth1.txt @@ -0,0 +1,3 @@ +joe:123 +bob:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 +bill: diff --git a/tests/serve_request.rs b/tests/serve_request.rs index e717525..ac4360e 100644 --- a/tests/serve_request.rs +++ b/tests/serve_request.rs @@ -268,6 +268,24 @@ fn serve_index_instead_of_404_in_spa_mode( } #[rstest] +#[case(server_no_stderr(&["--pretty-urls", "--index", FILES[1]]), "/")] +#[case(server_no_stderr(&["--pretty-urls", "--index", FILES[1]]), "test.html")] +#[case(server_no_stderr(&["--pretty-urls", "--index", FILES[1]]), "test")] +fn serve_file_instead_of_404_in_pretty_urls_mode( + #[case] server: TestServer, + #[case] url: &str, +) -> 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()); + + Ok(()) +} + +#[rstest] #[case(server(&["--route-prefix", "foobar"]))] #[case(server(&["--route-prefix", "/foobar/"]))] fn serves_requests_with_route_prefix(#[case] server: TestServer) -> Result<(), Error> { |