use hashbrown::HashMap;
use http::StatusCode;
use ordinary_auth::Auth;
use ordinary_config::{
StorageLimits, TemplateConfig, TemplateFfi, TemplateFfiSerialization, TemplateFfiVersion,
};
use ordinary_storage::{
Storage,
saferlmdb::{self, EnvBuilder},
};
use ordinary_template::{Template, TemplateResult};
use std::{error::Error, path::Path, sync::Arc};
use wasmtime::Engine;
#[test]
fn integration() -> Result<(), Box<dyn Error>> {
let store_dir = Path::new(".ordinary").join("store");
if std::fs::read_dir(&store_dir).is_ok() {
std::fs::remove_dir_all(&store_dir)?;
}
std::fs::create_dir_all(&store_dir)?;
let env = Arc::new(unsafe {
let mut env_builder = EnvBuilder::new()?;
env_builder.set_maxreaders(126)?;
env_builder.set_mapsize(16384 * 64 * 10)?;
env_builder.set_maxdbs(13)?;
env_builder.open(
store_dir.to_str().expect("store dir to str"),
&saferlmdb::open::Flags::empty(),
0o600,
)?
});
let auth = Arc::new(Auth::new(
"example.com".into(),
None,
[0u8; 32],
env.clone(),
)?);
let model_configs = vec![];
let content_defs = vec![];
let storage = Arc::new(Storage::new(
StorageLimits::default(),
model_configs.clone(),
content_defs.clone(),
[0u8; 32],
&env,
store_dir.join("search"),
false,
)?);
let mut model_map = HashMap::new();
for model_config in model_configs {
model_map.insert(model_config.name.clone(), model_config);
}
let mut content_map = HashMap::new();
for content_def in content_defs {
content_map.insert(content_def.name.clone(), content_def);
}
let config = TemplateConfig {
ffi: TemplateFfi {
version: TemplateFfiVersion::V1,
serialization: TemplateFfiSerialization::FlexBufferVector,
},
idx: 0,
name: "test".into(),
mime: "text/html".into(),
route: "/test".into(),
..Default::default()
};
let template = Template::new(
"example.com",
false,
None,
config,
auth,
&model_map,
&content_map,
None,
None,
Engine::default(),
storage,
)?;
let res = template.render("example.com", "test".to_string(), None, None, None, &None)?;
assert_eq!(
res,
TemplateResult::StatusCode(StatusCode::SERVICE_UNAVAILABLE)
);
Ok(())
}