use attackstr::{MarkerPosition, PayloadConfig, PayloadDb};
#[test]
fn test_gap_marker_replacement_not_found() {
let mut db = PayloadDb::with_config(PayloadConfig {
marker_position: MarkerPosition::Replace("{NON_EXISTENT}".into()),
..Default::default()
});
let toml = r#"
[grammar]
name = "gap1"
sink_category = "gap"
[[techniques]]
name = "t1"
template = "payload"
"#;
let result = db.load_toml(toml);
assert!(result.is_ok());
let marked = db.payloads_with_marker("gap", "SLN");
assert!(!marked.is_empty());
}
#[test]
fn test_gap_duplicate_techniques_same_template() {
let mut db = PayloadDb::new();
let toml = r#"
[grammar]
name = "gap2"
sink_category = "gap2"
[[techniques]]
name = "t1"
template = "payload"
[[techniques]]
name = "t1"
template = "payload"
"#;
let result = db.load_toml(toml);
assert!(result.is_ok());
let payloads = db.payloads("gap2");
assert_eq!(
payloads.len(),
1,
"Duplicate techniques with identical templates should be deduplicated"
);
}
#[test]
fn test_gap_circular_dependency_graceful_failure() {
let mut db = PayloadDb::new();
let toml = r#"
[grammar]
name = "gap3"
sink_category = "gap3"
[[a]]
value = "{b}"
[[b]]
value = "{a}"
[[techniques]]
name = "t1"
template = "{a}"
"#;
let result = db.load_toml(toml);
assert!(result.is_err());
}