mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
feat: Implement methods to get package names and parameters (#425)
This commit is contained in:
@@ -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 = ¶meters[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 = ¶meters[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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user