From b2816629e4f25a4084ac8806b8f1f8b844834b9a Mon Sep 17 00:00:00 2001 From: Carson McManus Date: Mon, 29 Jan 2024 19:07:44 -0500 Subject: add unit tests --- tests/serve_request.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'tests') diff --git a/tests/serve_request.rs b/tests/serve_request.rs index ac4360e..61de15f 100644 --- a/tests/serve_request.rs +++ b/tests/serve_request.rs @@ -321,3 +321,34 @@ fn serves_requests_static_file_check( Ok(()) } + +#[rstest] +#[case(server(&["--disable-indexing"]))] +fn serves_no_directory_if_indexing_disabled(#[case] server: TestServer) -> Result<(), Error> { + let body = reqwest::blocking::get(server.url())?; + 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() == "File not found.") + .next() + .is_some()); + + Ok(()) +} + +#[rstest] +#[case(server(&["--disable-indexing"]))] +fn serves_file_requests_when_indexing_disabled(#[case] server: TestServer) -> Result<(), Error> { + reqwest::blocking::get(format!("{}/{}", server.url(), FILES[0]))?.error_for_status()?; + + Ok(()) +} -- cgit v1.2.3 From a8704314bac7bffa1f7b460b09af9b5ffc97f63a Mon Sep 17 00:00:00 2001 From: Carson McManus Date: Tue, 30 Jan 2024 09:35:41 -0500 Subject: add test for disabled archives --- tests/archive.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'tests') diff --git a/tests/archive.rs b/tests/archive.rs index b8def22..e6d0263 100644 --- a/tests/archive.rs +++ b/tests/archive.rs @@ -56,3 +56,31 @@ fn test_tar_archives(#[with(&["-g"])] server: TestServer) -> Result<(), Error> { Ok(()) } + +#[rstest] +#[case(server(&["--disable-indexing", "--enable-tar-gz", "--enable-tar", "--enable-zip"]))] +fn archives_are_disabled_when_indexing_disabled(#[case] server: TestServer) -> Result<(), Error> { + // 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")); + + // 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. + assert_eq!( + reqwest::blocking::get(server.url().join("?download=tar_gz")?)?.status(), + StatusCode::NOT_FOUND + ); + assert_eq!( + reqwest::blocking::get(server.url().join("?download=tar")?)?.status(), + StatusCode::NOT_FOUND + ); + assert_eq!( + reqwest::blocking::get(server.url().join("?download=zip")?)?.status(), + StatusCode::NOT_FOUND + ); + + Ok(()) +} -- cgit v1.2.3 From d9085223ba45e98719abd147ec9d3e10188d5351 Mon Sep 17 00:00:00 2001 From: Carson McManus Date: Tue, 30 Jan 2024 09:38:36 -0500 Subject: tweak test assertions --- tests/serve_request.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/serve_request.rs b/tests/serve_request.rs index 61de15f..b7359c3 100644 --- a/tests/serve_request.rs +++ b/tests/serve_request.rs @@ -337,6 +337,10 @@ fn serves_no_directory_if_indexing_disabled(#[case] server: TestServer) -> Resul .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() @@ -348,7 +352,7 @@ fn serves_no_directory_if_indexing_disabled(#[case] server: TestServer) -> Resul #[rstest] #[case(server(&["--disable-indexing"]))] fn serves_file_requests_when_indexing_disabled(#[case] server: TestServer) -> Result<(), Error> { - reqwest::blocking::get(format!("{}/{}", server.url(), FILES[0]))?.error_for_status()?; + reqwest::blocking::get(format!("{}{}", server.url(), FILES[0]))?.error_for_status()?; Ok(()) } -- cgit v1.2.3