use envy_secrets::db::Vault;
const DUMMY_KEY: [u8; 32] = [0u8; 32];
#[test]
fn test_sentinel_not_visible_in_raw_vault_file() {
let tmp = tempfile::NamedTempFile::new()
.expect("NamedTempFile::new always succeeds in a writable temp dir");
let vault_path = tmp.path().to_path_buf();
let sentinel: &[u8] = b"SENTINEL_PLAINTEXT_12345";
let nonce = [0xAB; 12];
{
let vault = Vault::open(&vault_path, &DUMMY_KEY)
.expect("Vault::open must succeed on a fresh temp file");
let project_id = vault
.create_project("security-test")
.expect("create_project must succeed");
let env_id = vault
.create_environment(&project_id, "test")
.expect("create_environment must succeed");
vault
.upsert_secret(&env_id, "SENTINEL_KEY", sentinel, &nonce)
.expect("upsert_secret must succeed");
vault.close().expect("Vault::close must succeed");
}
let file_bytes =
std::fs::read(&vault_path).expect("reading the vault file must succeed after close");
assert!(
!file_bytes.windows(sentinel.len()).any(|w| w == sentinel),
"sentinel byte pattern must NOT appear in the raw vault file — \
SQLCipher full-file encryption should make it undetectable. \
If this assertion fails, the bundled-sqlcipher feature may not be active."
);
}
#[test]
fn test_cipher_version_is_available() {
let tmp = tempfile::NamedTempFile::new()
.expect("NamedTempFile::new always succeeds in a writable temp dir");
let vault = Vault::open(tmp.path(), &DUMMY_KEY).expect("Vault::open must succeed");
let version = vault
.pragma_str("cipher_version")
.expect("PRAGMA cipher_version must return a value when bundled-sqlcipher is active");
assert!(
!version.is_empty(),
"cipher_version must be non-empty — got an empty string, \
which suggests bundled-sqlcipher is not active"
);
}