kingfisher/tests/smoke_archive.rs

62 lines
2 KiB
Rust
Raw Normal View History

2025-06-24 17:17:16 -07:00
// tests/smoke_archive.rs
use assert_cmd::prelude::*;
use predicates::prelude::*;
#[test]
fn smoke_scan_tar_gz_archive() -> anyhow::Result<()> {
use std::process::Command;
let dir = tempfile::tempdir()?;
let tar_gz = dir.path().join("payload.tar.gz");
2025-11-10 18:47:51 -08:00
let github_pat = "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";
2025-06-24 17:17:16 -07:00
// --- build a payload.tar.gz -------------------------------------------------
{
2025-06-24 20:17:40 -07:00
use std::fs::File;
2025-06-24 17:17:16 -07:00
use flate2::{write::GzEncoder, Compression};
use tar::Builder;
let f = File::create(&tar_gz)?;
let gz = GzEncoder::new(f, Compression::default());
let mut t = Builder::new(gz);
let data = format!("token={github_pat}\n");
t.append_data(&mut tar::Header::new_gnu(), "secret.txt", data.as_bytes())?;
t.into_inner()?.finish()?;
}
// Expected exit-code differs by OS
let findings_code = 200;
// ── 1) extraction ENABLED -- secret should be found ─────────────────────────
Command::new(assert_cmd::cargo::cargo_bin!("kingfisher"))
2025-06-25 20:56:24 -07:00
.args([
"scan",
tar_gz.to_str().unwrap(),
"--confidence=low",
"--format",
"json",
"--no-update-check",
])
2025-06-24 17:17:16 -07:00
.assert()
.code(findings_code)
.stdout(predicates::str::contains(github_pat));
// ── 2) extraction DISABLED -- secret *not* found ────────────────────────────
Command::new(assert_cmd::cargo::cargo_bin!("kingfisher"))
2025-06-24 17:17:16 -07:00
.args([
"scan",
tar_gz.to_str().unwrap(),
"--confidence=low",
"--format",
"json",
"--no-extract-archives",
2025-06-24 20:17:40 -07:00
"--no-update-check", // skip update check to avoid network calls
2025-06-24 17:17:16 -07:00
])
.assert()
.success() // always 0
.stdout(predicates::str::contains(github_pat).not());
dir.close()?;
Ok(())
}