mod common;
#[test]
fn create() {
use nuts_container::*;
use nuts_memory::MemoryBackend;
let backend = MemoryBackend::new();
let kdf = Kdf::pbkdf2(Digest::Sha1, 65536, b"123");
let options = CreateOptionsBuilder::new(Cipher::Aes128Ctr)
.with_password_callback(|| Ok(b"abc".to_vec()))
.with_kdf(kdf.clone())
.build::<MemoryBackend>()
.unwrap();
let container = Container::<MemoryBackend>::create(backend, options).unwrap();
let info = container.info().unwrap();
assert_eq!(info.cipher, Cipher::Aes128Ctr);
assert_eq!(info.kdf, kdf);
}
#[test]
fn open() {
use nuts_container::*;
use nuts_memory::MemoryBackend;
let (backend, kdf) = {
let backend = MemoryBackend::new();
let kdf = Kdf::pbkdf2(Digest::Sha1, 65536, b"123");
let options = CreateOptionsBuilder::new(Cipher::Aes128Ctr)
.with_password_callback(|| Ok(b"abc".to_vec()))
.with_kdf(kdf.clone())
.build::<MemoryBackend>()
.unwrap();
let container = Container::<MemoryBackend>::create(backend, options).unwrap();
let backend = container.into_backend();
(backend, kdf)
};
let options = OpenOptionsBuilder::new()
.with_password_callback(|| Ok(b"abc".to_vec()))
.build::<MemoryBackend>()
.unwrap();
let container = Container::<MemoryBackend>::open(backend, options).unwrap();
let info = container.info().unwrap();
assert_eq!(info.cipher, Cipher::Aes128Ctr);
assert_eq!(info.kdf, kdf);
}
#[test]
fn read() {
use nuts_container::*;
use nuts_memory::MemoryBackend;
let mut backend = MemoryBackend::new();
let id = backend.insert().unwrap();
let options = CreateOptionsBuilder::new(Cipher::None)
.build::<MemoryBackend>()
.unwrap();
let mut container = Container::<MemoryBackend>::create(backend, options).unwrap();
let mut buf = [b'x'; 512];
assert_eq!(container.read(&id, &mut buf).unwrap(), 512);
assert_eq!(buf, [0; 512]);
let mut buf = [b'x'; 400];
assert_eq!(container.read(&id, &mut buf).unwrap(), 400);
assert_eq!(buf, [0; 400]);
let mut buf = [b'x'; 520];
assert_eq!(container.read(&id, &mut buf).unwrap(), 512);
assert_eq!(buf[..512], [0; 512]);
assert_eq!(buf[512..], [b'x'; 8]);
}
#[test]
fn write() {
use nuts_container::*;
use nuts_memory::MemoryBackend;
let mut backend = MemoryBackend::new();
let id = backend.insert().unwrap();
let options = CreateOptionsBuilder::new(Cipher::None)
.build::<MemoryBackend>()
.unwrap();
let mut container = Container::<MemoryBackend>::create(backend, options).unwrap();
assert_eq!(container.write(&id, &[b'x'; 512]).unwrap(), 512);
let mut buf = [0; 512];
assert_eq!(container.read(&id, &mut buf).unwrap(), 512);
assert_eq!(buf, [b'x'; 512]);
assert_eq!(container.write(&id, &[b'x'; 400]).unwrap(), 400);
let mut buf = [0; 512];
assert_eq!(container.read(&id, &mut buf).unwrap(), 512);
assert_eq!(buf[..400], [b'x'; 400]);
assert_eq!(buf[400..], [0; 112]);
assert_eq!(container.write(&id, &[b'x'; 520]).unwrap(), 512);
let mut buf = [0; 512];
assert_eq!(container.read(&id, &mut buf).unwrap(), 512);
assert_eq!(buf, [b'x'; 512]);
}