feat: Implement methods to get package names and parameters (#425)

This commit is contained in:
Denis Komissarov
2025-08-04 13:02:22 -07:00
committed by GitHub
parent 3b802c14cb
commit 9fce2ccc00
10 changed files with 335 additions and 3 deletions

View File

@@ -101,3 +101,99 @@ fn extension_with_state() -> Result<()> {
Ok(())
}
#[test]
#[cfg(feature = "azure_policy")]
#[cfg_attr(docsrs, doc(cfg(feature = "azure_policy")))]
fn get_policy_package_names() -> Result<()> {
let mut engine = Engine::new();
engine.add_policy(
"testPolicy1".to_string(),
r#"package test
deny if {
1 == 2
}
"#
.to_string(),
)?;
engine.add_policy(
"testPolicy2".to_string(),
r#"package test.nested.name
deny if {
1 == 2
}
"#
.to_string(),
)?;
let package_names = engine.get_policy_package_names()?;
assert_eq!(2, package_names.len());
assert_eq!("test", package_names[0].package_name);
assert_eq!("testPolicy1", package_names[0].source_file);
assert_eq!("test.nested.name", package_names[1].package_name);
assert_eq!("testPolicy2", package_names[1].source_file);
Ok(())
}
#[test]
#[cfg(feature = "azure_policy")]
#[cfg_attr(docsrs, doc(cfg(feature = "azure_policy")))]
fn get_policy_parameters() -> Result<()> {
let mut engine = Engine::new();
engine.add_policy(
"testPolicy1".to_string(),
r#"package test
default parameters.a = 5
default parameters.b = { asdf: 10}
parameters.c = 10
deny if {
parameter.a == parameter.b.asdf
}
"#
.to_string(),
)?;
engine.add_policy(
"testPolicy2".to_string(),
r#"package test
default parameters = {
a: 5,
b: { asdf: 10 }
}
parameters.c = 5
deny if {
parameters.a == parameters.b.asdf
}
"#
.to_string(),
)?;
let parameters = engine.get_policy_parameters()?;
// let ast = engine.get_ast_as_json()?;
// println!("ast: {}", ast);
// let parameters = Value::from_json_str(&result)?;
assert_eq!(2, parameters.len());
let test_policy1_parameters = &parameters[0];
assert_eq!(2, test_policy1_parameters.parameters.len());
assert_eq!("a", test_policy1_parameters.parameters[0].name);
assert_eq!("b", test_policy1_parameters.parameters[1].name);
// We expect parameters to be defined separately, so the second policy does not have any parameters
let test_policy2_parameters = &parameters[1];
assert_eq!(0, test_policy2_parameters.parameters.len());
assert_eq!(1, test_policy2_parameters.modifiers.len());
assert_eq!("c", test_policy2_parameters.modifiers[0].name);
Ok(())
}