mirror of
https://github.com/sigoden/dufs.git
synced 2026-04-09 00:59:02 +03:00
feat: support config file with --config option (#281)
This commit is contained in:
56
tests/config.rs
Normal file
56
tests/config.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
mod fixtures;
|
||||
mod utils;
|
||||
|
||||
use assert_cmd::prelude::*;
|
||||
use assert_fs::TempDir;
|
||||
use diqwest::blocking::WithDigestAuth;
|
||||
use fixtures::{port, tmpdir, wait_for_port, Error};
|
||||
use rstest::rstest;
|
||||
use std::path::PathBuf;
|
||||
use std::process::{Command, Stdio};
|
||||
|
||||
#[rstest]
|
||||
fn use_config_file(tmpdir: TempDir, port: u16) -> Result<(), Error> {
|
||||
let config_path = get_config_path().display().to_string();
|
||||
let mut child = Command::cargo_bin("dufs")?
|
||||
.arg(tmpdir.path())
|
||||
.arg("-p")
|
||||
.arg(port.to_string())
|
||||
.args(["--config", &config_path])
|
||||
.stdout(Stdio::piped())
|
||||
.spawn()?;
|
||||
|
||||
wait_for_port(port);
|
||||
|
||||
let url = format!("http://localhost:{port}/dufs/index.html");
|
||||
let resp = fetch!(b"GET", &url).send()?;
|
||||
assert_eq!(resp.status(), 401);
|
||||
|
||||
let url = format!("http://localhost:{port}/dufs/index.html");
|
||||
let resp = fetch!(b"GET", &url).send_with_digest_auth("user", "pass")?;
|
||||
assert_eq!(resp.text()?, "This is index.html");
|
||||
|
||||
let url = format!("http://localhost:{port}/dufs?simple");
|
||||
let resp = fetch!(b"GET", &url).send_with_digest_auth("user", "pass")?;
|
||||
let text: String = resp.text().unwrap();
|
||||
assert!(text.split('\n').any(|c| c == "dir1/"));
|
||||
assert!(!text.split('\n').any(|c| c == "dir3/"));
|
||||
assert!(!text.split('\n').any(|c| c == "test.txt"));
|
||||
|
||||
let url = format!("http://localhost:{port}/dufs/dir1/upload.txt");
|
||||
let resp = fetch!(b"PUT", &url)
|
||||
.body("Hello")
|
||||
.send_with_digest_auth("user", "pass")?;
|
||||
assert_eq!(resp.status(), 201);
|
||||
|
||||
child.kill()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_config_path() -> PathBuf {
|
||||
let mut path = std::env::current_dir().expect("Failed to get current directory");
|
||||
path.push("tests");
|
||||
path.push("data");
|
||||
path.push("config.yaml");
|
||||
path
|
||||
}
|
||||
9
tests/data/config.yaml
Normal file
9
tests/data/config.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
bind:
|
||||
- 0.0.0.0
|
||||
path-prefix: dufs
|
||||
hidden:
|
||||
- dir3
|
||||
- test.txt
|
||||
auth:
|
||||
- user:pass@/:rw
|
||||
allow-upload: true
|
||||
@@ -41,7 +41,7 @@ fn log_remote_user(
|
||||
|
||||
assert_eq!(resp.status(), 200);
|
||||
|
||||
let mut buf = [0; 4096];
|
||||
let mut buf = [0; 2048];
|
||||
let buf_len = stdout.read(&mut buf)?;
|
||||
let output = std::str::from_utf8(&buf[0..buf_len])?;
|
||||
|
||||
@@ -69,7 +69,7 @@ fn no_log(tmpdir: TempDir, port: u16, #[case] args: &[&str]) -> Result<(), Error
|
||||
let resp = fetch!(b"GET", &format!("http://localhost:{port}")).send()?;
|
||||
assert_eq!(resp.status(), 200);
|
||||
|
||||
let mut buf = [0; 4096];
|
||||
let mut buf = [0; 2048];
|
||||
let buf_len = stdout.read(&mut buf)?;
|
||||
let output = std::str::from_utf8(&buf[0..buf_len])?;
|
||||
|
||||
|
||||
22
tests/tls.rs
22
tests/tls.rs
@@ -7,6 +7,8 @@ use predicates::str::contains;
|
||||
use reqwest::blocking::ClientBuilder;
|
||||
use rstest::rstest;
|
||||
|
||||
use crate::fixtures::port;
|
||||
|
||||
/// Can start the server with TLS and receive encrypted responses.
|
||||
#[rstest]
|
||||
#[case(server(&[
|
||||
@@ -33,8 +35,16 @@ fn tls_works(#[case] server: TestServer) -> Result<(), Error> {
|
||||
/// Wrong path for cert throws error.
|
||||
#[rstest]
|
||||
fn wrong_path_cert() -> Result<(), Error> {
|
||||
let port = port().to_string();
|
||||
Command::cargo_bin("dufs")?
|
||||
.args(["--tls-cert", "wrong", "--tls-key", "tests/data/key.pem"])
|
||||
.args([
|
||||
"--tls-cert",
|
||||
"wrong",
|
||||
"--tls-key",
|
||||
"tests/data/key.pem",
|
||||
"--port",
|
||||
&port,
|
||||
])
|
||||
.assert()
|
||||
.failure()
|
||||
.stderr(contains("Failed to access `wrong`"));
|
||||
@@ -45,8 +55,16 @@ fn wrong_path_cert() -> Result<(), Error> {
|
||||
/// Wrong paths for key throws errors.
|
||||
#[rstest]
|
||||
fn wrong_path_key() -> Result<(), Error> {
|
||||
let port = port().to_string();
|
||||
Command::cargo_bin("dufs")?
|
||||
.args(["--tls-cert", "tests/data/cert.pem", "--tls-key", "wrong"])
|
||||
.args([
|
||||
"--tls-cert",
|
||||
"tests/data/cert.pem",
|
||||
"--tls-key",
|
||||
"wrong",
|
||||
"--port",
|
||||
&port,
|
||||
])
|
||||
.assert()
|
||||
.failure()
|
||||
.stderr(contains("Failed to access `wrong`"));
|
||||
|
||||
Reference in New Issue
Block a user