#[test]
fn create() {
use nuts_archive::ArchiveFactory;
use nuts_container::{Cipher, Container, CreateOptionsBuilder};
use nuts_directory::{CreateOptions, DirectoryBackend};
use tempfile::{Builder, TempDir};
let tmp_dir = Builder::new().prefix("nuts-archive").tempdir().unwrap();
let backend_options = CreateOptions::for_path(tmp_dir);
let container_options = CreateOptionsBuilder::new(Cipher::Aes128Gcm)
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<TempDir>>()
.unwrap();
let container = Container::create(backend_options, container_options).unwrap();
let archive = Container::create_service::<ArchiveFactory>(container).unwrap();
let info = archive.info();
assert_eq!(info.blocks, 0);
assert_eq!(info.files, 0);
}
#[test]
fn open() {
use nuts_archive::ArchiveFactory;
use nuts_container::{Cipher, Container, CreateOptionsBuilder, OpenOptionsBuilder};
use nuts_directory::{CreateOptions, DirectoryBackend, OpenOptions};
use tempfile::{Builder, TempDir};
let dir = Builder::new().prefix("nuts-archive").tempdir().unwrap();
{
let backend_options = CreateOptions::for_path(dir.path().to_owned());
let container_options = CreateOptionsBuilder::new(Cipher::Aes128Gcm)
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<&TempDir>>()
.unwrap();
let container = Container::create(backend_options, container_options).unwrap();
Container::create_service::<ArchiveFactory>(container).unwrap();
}
let backend_options = OpenOptions::for_path(dir);
let container_options = OpenOptionsBuilder::new()
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<TempDir>>()
.unwrap();
let container = Container::open(backend_options, container_options).unwrap();
let archive = Container::open_service::<ArchiveFactory>(container, false).unwrap();
let info = archive.info();
assert_eq!(info.blocks, 0);
assert_eq!(info.files, 0);
}
#[test]
fn append() {
use nuts_archive::ArchiveFactory;
use nuts_container::{Cipher, Container, CreateOptionsBuilder, OpenOptionsBuilder};
use nuts_directory::{CreateOptions, DirectoryBackend, OpenOptions};
use tempfile::{Builder, TempDir};
let dir = Builder::new().prefix("nuts-archive").tempdir().unwrap();
{
let backend_options = CreateOptions::for_path(dir.path().to_owned());
let container_options = CreateOptionsBuilder::new(Cipher::Aes128Gcm)
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<&TempDir>>()
.unwrap();
let container = Container::create(backend_options, container_options).unwrap();
Container::create_service::<ArchiveFactory>(container).unwrap();
}
let backend_options = OpenOptions::for_path(dir);
let container_options = OpenOptionsBuilder::new()
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<TempDir>>()
.unwrap();
let container = Container::open(backend_options, container_options).unwrap();
let mut archive = Container::open_service::<ArchiveFactory>(container, false).unwrap();
let mut entry = archive.append_file("sample file").build().unwrap();
entry.write_all("some sample data".as_bytes()).unwrap();
archive
.append_directory("sample directory")
.build()
.unwrap();
archive
.append_symlink("sample symlink", "target")
.build()
.unwrap();
}
#[test]
fn scan() {
use nuts_archive::ArchiveFactory;
use nuts_container::{Cipher, Container, CreateOptionsBuilder, OpenOptionsBuilder};
use nuts_directory::{CreateOptions, DirectoryBackend, OpenOptions};
use tempfile::{Builder, TempDir};
let dir = Builder::new().prefix("nuts-archive").tempdir().unwrap();
{
let backend_options = CreateOptions::for_path(dir.path().to_owned());
let container_options = CreateOptionsBuilder::new(Cipher::Aes128Gcm)
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<&TempDir>>()
.unwrap();
let container = Container::create(backend_options, container_options).unwrap();
Container::create_service::<ArchiveFactory>(container).unwrap();
}
let backend_options = OpenOptions::for_path(dir);
let container_options = OpenOptionsBuilder::new()
.with_password_callback(|| Ok(b"123".to_vec()))
.build::<DirectoryBackend<TempDir>>()
.unwrap();
let container = Container::open(backend_options, container_options).unwrap();
let mut archive = Container::open_service::<ArchiveFactory>(container, false).unwrap();
archive.append_file("f1").build().unwrap();
archive.append_directory("f2").build().unwrap();
archive.append_symlink("f3", "target").build().unwrap();
let entry = archive.first().unwrap().unwrap();
assert!(entry.is_file());
assert_eq!(entry.name(), "f1");
let entry = entry.next().unwrap().unwrap();
assert!(entry.is_directory());
assert_eq!(entry.name(), "f2");
let entry = entry.next().unwrap().unwrap();
assert!(entry.is_symlink());
assert_eq!(entry.name(), "f3");
assert!(entry.next().is_none());
}