mod common;
use std::io;
use std::net::SocketAddr;
use std::path::Path;
use futures::future::Either;
use rand::rngs::StdRng;
use rand::Rng;
use rand::SeedableRng;
use rudolfs::LocalServerBuilder;
use tokio::sync::oneshot;
use common::{init_logger, GitRepo, SERVER_ADDR};
#[tokio::test(flavor = "multi_thread")]
async fn local_smoke_test_encrypted() -> Result<(), Box<dyn std::error::Error>>
{
let _guard = init_logger();
let mut rng = StdRng::seed_from_u64(42);
let data = tempfile::TempDir::new()?;
let key = rng.gen();
let mut server = LocalServerBuilder::new(data.path().into());
server.key(key);
let server = server.spawn(SERVER_ADDR).await?;
let addr = server.addr();
let (shutdown_tx, shutdown_rx) = oneshot::channel();
let server = tokio::spawn(futures::future::select(shutdown_rx, server));
exercise_server(addr, &mut rng)?;
shutdown_tx.send(()).expect("server died too soon");
if let Either::Right((result, _)) = server.await? {
result?;
}
Ok(())
}
#[tokio::test(flavor = "multi_thread")]
async fn local_smoke_test_unencrypted() -> Result<(), Box<dyn std::error::Error>>
{
let _guard = init_logger();
let mut rng = StdRng::seed_from_u64(42);
let data = tempfile::TempDir::new()?;
let server = LocalServerBuilder::new(data.path().into());
let server = server.spawn(SERVER_ADDR).await?;
let addr = server.addr();
let (shutdown_tx, shutdown_rx) = oneshot::channel();
let server = tokio::spawn(futures::future::select(shutdown_rx, server));
exercise_server(addr, &mut rng)?;
shutdown_tx.send(()).expect("server died too soon");
if let Either::Right((result, _)) = server.await? {
result?;
}
Ok(())
}
fn exercise_server(addr: SocketAddr, rng: &mut impl Rng) -> io::Result<()> {
let repo = GitRepo::init(addr)?;
repo.add_random(Path::new("4mb.bin"), 4 * 1024 * 1024, rng)?;
repo.add_random(Path::new("8mb.bin"), 8 * 1024 * 1024, rng)?;
repo.add_random(Path::new("16mb.bin"), 16 * 1024 * 1024, rng)?;
repo.commit("Add LFS objects")?;
repo.lfs_push()?;
repo.lfs_push()?;
repo.lfs_pull()?;
let repo_clone = repo.clone_repo().expect("unable to clone");
repo_clone.lfs_pull()?;
repo.add_random(Path::new("4mb_2.bin"), 4 * 1024 * 1024, rng)?;
repo.add_random(Path::new("8mb_2.bin"), 8 * 1024 * 1024, rng)?;
repo.add_random(Path::new("16mb_2.bin"), 16 * 1024 * 1024, rng)?;
repo.commit("Add LFS objects 2")?;
repo_clone.pull()?;
Ok(())
}