diff options
author | Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com> | 2021-04-24 04:28:55 +0000 |
---|---|---|
committer | Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com> | 2021-08-26 11:21:47 +0000 |
commit | dfd0ecf931b68ea373be1e4e785421d48ca6fed5 (patch) | |
tree | 115986299dcdeccc0bf2fac00da32dc64759ec1f /tests/archive.rs | |
parent | Upgrade deps (diff) | |
download | miniserve-dfd0ecf931b68ea373be1e4e785421d48ca6fed5.tar.gz miniserve-dfd0ecf931b68ea373be1e4e785421d48ca6fed5.zip |
tests: Refactor!
Remove duplicate code responsible for the initial setup and teardown of
the test binary.
This introduces `TestServer` as a resource manager for a running
miniserve binary, which can be created with the fixtures `server()` and
`server_no_stderr()`
It also provides convenience function for handling server url.
Diffstat (limited to '')
-rw-r--r-- | tests/archive.rs | 60 |
1 files changed, 12 insertions, 48 deletions
diff --git a/tests/archive.rs b/tests/archive.rs index 6a7f8bf..eba38bc 100644 --- a/tests/archive.rs +++ b/tests/archive.rs @@ -1,30 +1,15 @@ mod fixtures; -use assert_cmd::prelude::*; -use assert_fs::fixture::TempDir; -use fixtures::{port, tmpdir, Error}; +use fixtures::{server, Error, TestServer}; use reqwest::StatusCode; use rstest::rstest; use select::document::Document; use select::predicate::Text; -use std::process::{Command, Stdio}; -use std::thread::sleep; -use std::time::Duration; #[rstest] -fn archives_are_disabled(tmpdir: TempDir, port: u16) -> Result<(), Error> { - let mut child = Command::cargo_bin("miniserve")? - .arg(tmpdir.path()) - .arg("-p") - .arg(port.to_string()) - .stdout(Stdio::null()) - .spawn()?; - - sleep(Duration::from_secs(1)); - +fn archives_are_disabled(server: TestServer) -> Result<(), Error> { // Ensure the links to the archives are not present - let body = reqwest::blocking::get(format!("http://localhost:{}", port).as_str())? - .error_for_status()?; + let body = reqwest::blocking::get(server.url())?.error_for_status()?; let parsed = Document::from_read(body)?; assert!(parsed .find(Text) @@ -32,63 +17,42 @@ fn archives_are_disabled(tmpdir: TempDir, port: u16) -> Result<(), Error> { // Try to download anyway, ensure it's forbidden assert_eq!( - reqwest::blocking::get(format!("http://localhost:{}/?download=tar_gz", port).as_str())? - .status(), + reqwest::blocking::get(server.url().join("?download=tar_gz")?)?.status(), StatusCode::FORBIDDEN ); assert_eq!( - reqwest::blocking::get(format!("http://localhost:{}/?download=tar", port).as_str())? - .status(), + reqwest::blocking::get(server.url().join("?download=tar")?)?.status(), StatusCode::FORBIDDEN ); assert_eq!( - reqwest::blocking::get(format!("http://localhost:{}/?download=zip", port).as_str())? - .status(), + reqwest::blocking::get(server.url().join("?download=zip")?)?.status(), StatusCode::FORBIDDEN ); - child.kill()?; - Ok(()) } -#[rstest] -fn test_tar_archives(tmpdir: TempDir, port: u16) -> Result<(), Error> { - let mut child = Command::cargo_bin("miniserve")? - .arg(tmpdir.path()) - .arg("-p") - .arg(port.to_string()) - .arg("-g") - .stdout(Stdio::null()) - .spawn()?; - - sleep(Duration::from_secs(1)); - +#[rstest(server(&["-g"]))] +fn test_tar_archives(server: TestServer) -> Result<(), Error> { // Ensure the links to the tar archive exists and tar not exists - let body = reqwest::blocking::get(format!("http://localhost:{}", port).as_str())? - .error_for_status()?; + let body = reqwest::blocking::get(server.url())?.error_for_status()?; let parsed = Document::from_read(body)?; assert!(parsed.find(Text).any(|x| x.text() == "Download .tar.gz")); assert!(parsed.find(Text).all(|x| x.text() != "Download .tar")); // Try to download, only tar_gz should works assert_eq!( - reqwest::blocking::get(format!("http://localhost:{}/?download=tar_gz", port).as_str())? - .status(), + reqwest::blocking::get(server.url().join("?download=tar_gz")?)?.status(), StatusCode::OK ); assert_eq!( - reqwest::blocking::get(format!("http://localhost:{}/?download=tar", port).as_str())? - .status(), + reqwest::blocking::get(server.url().join("?download=tar")?)?.status(), StatusCode::FORBIDDEN ); assert_eq!( - reqwest::blocking::get(format!("http://localhost:{}/?download=zip", port).as_str())? - .status(), + reqwest::blocking::get(server.url().join("?download=zip")?)?.status(), StatusCode::FORBIDDEN ); - child.kill()?; - Ok(()) } |