mod common;
use nuts_container::{
Cipher, Container, CreateOptionsBuilder, Error, HeaderError, OpenOptionsBuilder,
};
use nuts_memory::MemoryBackend;
use std::fs::File;
use crate::common::{fixture_path, SampleService};
#[test]
fn inval_revision() {
let path = fixture_path("compat", "0.6.8-none.json");
let backend: MemoryBackend = serde_json::from_reader(File::open(path).unwrap()).unwrap();
let options = OpenOptionsBuilder::new().build::<MemoryBackend>().unwrap();
let container = Container::open(backend, options).unwrap();
assert_eq!(container.info().unwrap().revision, 0);
let err = Container::create_service::<SampleService>(container).unwrap_err();
assert!(matches!(err.0, Error::Header(cause)
if matches!(cause,HeaderError::InvalidRevision(expected, got)
if expected == 2 && got == 0)));
}
#[test]
fn already_attached() {
let backend = {
let options = CreateOptionsBuilder::new(Cipher::None)
.build::<MemoryBackend>()
.unwrap();
let container = Container::create(MemoryBackend::new(), options).unwrap();
let service = Container::create_service::<SampleService>(container).unwrap();
service.into_container().into_backend()
};
let options = OpenOptionsBuilder::new().build::<MemoryBackend>().unwrap();
let container = Container::open(backend, options).unwrap();
let err = Container::create_service::<SampleService>(container).unwrap_err();
assert!(matches!(err.0, Error::Header(cause)
if matches!(cause,HeaderError::UnexpectedSid { expected, got }
if expected.is_none() && got.unwrap() == 666)));
}