rs-tftpd/tests/integration_test.rs
shuyuImpossible d43382f59a
Add upload directory and download directory (#14)
Co-authored-by: y1shu <yu.shu@nokia-sbell.com>
Co-authored-by: Altuğ Bakan <mail@alt.ug>
2023-11-04 12:49:02 +01:00

157 lines
3.7 KiB
Rust

#![cfg(feature = "integration")]
use std::fs::{create_dir_all, remove_dir_all};
use std::process::{Child, Command, ExitStatus};
const SERVER_DIR: &str = "target/integration/server";
const CLIENT_DIR: &str = "target/integration/client";
struct CommandRunner {
process: Child,
}
impl CommandRunner {
fn new(program: &str, args: &[&str]) -> Self {
let command = Command::new(program)
.args(args)
.spawn()
.expect("error starting process");
Self { process: command }
}
fn wait(&mut self) -> ExitStatus {
self.process.wait().expect("error waiting for process")
}
fn kill(&mut self) {
self.process.kill().expect("error killing process");
}
}
impl Drop for CommandRunner {
fn drop(&mut self) {
self.kill()
}
}
#[test]
fn test_send() {
let file_name = "send";
let port = "6969";
initialize(format!("{SERVER_DIR}/{file_name}").as_str());
let _server = CommandRunner::new("target/debug/tftpd", &["-p", port, "-d", SERVER_DIR]);
let mut client = CommandRunner::new(
"atftp",
&[
"-g",
"-r",
file_name,
"-l",
format!("{CLIENT_DIR}/{file_name}").as_str(),
"127.0.0.1",
port,
],
);
let status = client.wait();
assert!(status.success());
}
#[test]
fn test_receive() {
let file_name = "receive";
let port = "6970";
initialize(format!("{CLIENT_DIR}/{file_name}").as_str());
let _server = CommandRunner::new("target/debug/tftpd", &["-p", port, "-d", SERVER_DIR]);
let mut client = CommandRunner::new(
"atftp",
&[
"-p",
"-r",
file_name,
"-l",
format!("{CLIENT_DIR}/{file_name}").as_str(),
"127.0.0.1",
port,
],
);
let status = client.wait();
assert!(status.success());
}
#[test]
fn test_send_dir() {
let file_name = "send_dir";
let port = "6971";
initialize(format!("{SERVER_DIR}/{file_name}").as_str());
let _server = CommandRunner::new("target/debug/tftpd", &["-p", port, "-sd", SERVER_DIR]);
let mut client = CommandRunner::new(
"atftp",
&[
"-g",
"-r",
file_name,
"-l",
format!("{CLIENT_DIR}/{file_name}").as_str(),
"127.0.0.1",
port,
],
);
let status = client.wait();
assert!(status.success());
}
#[test]
fn test_receive_dir() {
let file_name = "receive_dir";
let port = "6972";
initialize(format!("{CLIENT_DIR}/{file_name}").as_str());
let _server = CommandRunner::new("target/debug/tftpd", &["-p", port, "-rd", SERVER_DIR]);
let mut client = CommandRunner::new(
"atftp",
&[
"-p",
"-r",
file_name,
"-l",
format!("{CLIENT_DIR}/{file_name}").as_str(),
"127.0.0.1",
port,
],
);
let status = client.wait();
assert!(status.success());
}
fn initialize(file_name: &str) {
create_folders();
create_file(file_name);
}
fn create_folders() {
let _ = remove_dir_all(SERVER_DIR);
let _ = remove_dir_all(CLIENT_DIR);
create_dir_all(SERVER_DIR).expect("error creating server directory");
create_dir_all(CLIENT_DIR).expect("error creating client directory");
}
fn create_file(file_name: &str) {
Command::new("dd")
.args([
"if=/dev/urandom",
format!("of={file_name}").as_str(),
"bs=1M",
"count=10",
])
.spawn()
.expect("error creating test file")
.wait()
.expect("error waiting for test file creation");
}