From dfd0ecf931b68ea373be1e4e785421d48ca6fed5 Mon Sep 17 00:00:00 2001 From: Ali MJ Al-Nasrawy Date: Sat, 24 Apr 2021 07:28:55 +0300 Subject: 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. --- tests/archive.rs | 60 ++++++++++++-------------------------------------------- 1 file changed, 12 insertions(+), 48 deletions(-) (limited to 'tests/archive.rs') 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(()) } -- cgit v1.2.3