aboutsummaryrefslogtreecommitdiffstats
path: root/tests/archive.rs
diff options
context:
space:
mode:
authorDamian <damian@autistici.org>2019-12-17 20:00:04 +0000
committerDamian <damian@autistici.org>2020-03-02 06:07:20 +0000
commitd0be1f2ea97342ef577ebe879971776422b08038 (patch)
tree8af7ecae6095619957e719b763407b9bd8bd3501 /tests/archive.rs
parentMerge pull request #254 from svenstaro/dependabot/cargo/rstest-0.5.3 (diff)
downloadminiserve-d0be1f2ea97342ef577ebe879971776422b08038.tar.gz
miniserve-d0be1f2ea97342ef577ebe879971776422b08038.zip
Added option to disable archives
Diffstat (limited to '')
-rw-r--r--tests/archive.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/archive.rs b/tests/archive.rs
new file mode 100644
index 0000000..c692d90
--- /dev/null
+++ b/tests/archive.rs
@@ -0,0 +1,46 @@
+mod fixtures;
+
+use assert_cmd::prelude::*;
+use assert_fs::fixture::TempDir;
+use fixtures::{port, tmpdir, Error};
+use rstest::rstest;
+use select::document::Document;
+use select::predicate::Text;
+use std::process::{Command, Stdio};
+use std::thread::sleep;
+use std::time::Duration;
+use reqwest::StatusCode;
+
+#[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())
+ .arg("-r")
+ .stdout(Stdio::null())
+ .spawn()?;
+
+ sleep(Duration::from_secs(1));
+
+ // Ensure the links to the archives are not present
+ let body = reqwest::get(format!("http://localhost:{}", port).as_str())?.error_for_status()?;
+ 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
+ assert_eq!(
+ reqwest::get(
+ format!("http://localhost:{}/?download=tar_gz", port).as_str())?
+ .status(),
+ StatusCode::FORBIDDEN);
+ assert_eq!(
+ reqwest::get(
+ format!("http://localhost:{}/?download=tar", port).as_str())?
+ .status(),
+ StatusCode::FORBIDDEN);
+
+ child.kill()?;
+
+ Ok(())
+} \ No newline at end of file