KeiSeiKit-1.0/_primitives/_rust/kei-hibernate/tests/common/mod.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

69 lines
2.5 KiB
Rust

//! Shared fixtures + bundle-crafting helpers for kei-hibernate tests.
//! Constructor Pattern keeps helper code in one cube, tests split by topic.
use kei_hibernate::manifest::{HibernateManifest, MANIFEST_FILENAME, MANIFEST_VERSION};
use std::fs;
use std::io::Write;
use std::path::{Path, PathBuf};
use tempfile::TempDir;
pub fn build_kit(dir: &Path) {
write_file(dir, "skills/alpha/skill.sh", b"alpha");
write_file(dir, "hooks/pre.sh", b"hook-body");
write_file(dir, "_capabilities/cap.toml", b"[cap]");
write_file(dir, "_roles/role.toml", b"role");
write_file(dir, "_blocks/blk.md", b"# block");
write_file(dir, "_agents/bot.md", b"bot");
write_file(dir, ".claude/agents/ledger.sqlite", b"SQLITE-DUMMY-A");
write_file(dir, ".claude/memory/kei-memory.sqlite", b"SQLITE-DUMMY-B");
write_file(dir, ".claude/agents/skip.txt", b"should-be-excluded");
write_file(dir, "README.md", b"root readme excluded");
}
pub fn write_file(root: &Path, rel: &str, bytes: &[u8]) {
let p = root.join(rel);
fs::create_dir_all(p.parent().unwrap()).unwrap();
let mut f = fs::File::create(&p).unwrap();
f.write_all(bytes).unwrap();
}
pub fn bundle_path(tmp: &TempDir) -> PathBuf {
tmp.path().join("bundle.tar.zst")
}
pub fn craft_bundle_with_manifest(out: &Path, manifest: &HibernateManifest) {
let f = fs::File::create(out).unwrap();
let enc = zstd::Encoder::new(f, 3).unwrap().auto_finish();
let mut b = tar::Builder::new(enc);
let toml_s = manifest.to_toml().unwrap();
append_blob(&mut b, MANIFEST_FILENAME, toml_s.as_bytes());
b.finish().unwrap();
}
pub fn craft_bundle_with_extra(
out: &Path,
manifest: &HibernateManifest,
name: &str,
bytes: &[u8],
) {
let f = fs::File::create(out).unwrap();
let enc = zstd::Encoder::new(f, 3).unwrap().auto_finish();
let mut b = tar::Builder::new(enc);
append_blob(&mut b, name, bytes);
let toml_s = manifest.to_toml().unwrap();
append_blob(&mut b, MANIFEST_FILENAME, toml_s.as_bytes());
b.finish().unwrap();
}
pub fn append_blob<W: Write>(b: &mut tar::Builder<W>, name: &str, bytes: &[u8]) {
let mut h = tar::Header::new_gnu();
h.set_size(bytes.len() as u64);
h.set_mode(0o644);
h.set_cksum();
b.append_data(&mut h, name, bytes).unwrap();
}
/// Signal-only consumer so `rustc` does not flag `MANIFEST_VERSION`
/// as unused when imported by test crates that don't directly cite it.
#[allow(dead_code)]
pub const MANIFEST_VERSION_RE: &str = MANIFEST_VERSION;