use anyhow::{Context, Result};
use keyhog_core::{Chunk, ChunkMetadata, DetectorFile};
use keyhog_scanner::{hw_probe::ScanBackend, CompiledScanner};
pub(crate) fn scan_engine_self_test() -> Result<bool> {
let _self_test_span = keyhog_profile::span(keyhog_profile::Stage::Preprocess);
const PLANTED: &str = "KHDOCTOR_A1b2C3d4E5f6";
let detector =
toml::from_str::<DetectorFile>(include_str!("../../data/doctor-self-test-detector.toml"))
.context("bundled doctor self-test detector TOML is invalid")?
.detector;
let scanner = CompiledScanner::compile_with_gpu_policy(
vec![detector],
keyhog_scanner::GpuInitPolicy::ForceDisabled,
)?;
let chunk = Chunk {
data: format!("api_secret = {PLANTED}").into(),
metadata: ChunkMetadata {
source_type: "doctor".into(),
path: Some("doctor-selftest.txt".into()),
..Default::default()
},
};
let matches = scanner.scan_with_backend(&chunk, ScanBackend::CpuFallback)?;
Ok(matches.iter().any(|m| m.credential.as_ref() == PLANTED))
}