cfn-guard 3.2.0

AWS CloudFormation Guard is an open-source general-purpose policy-as-code evaluation tool. It provides developers with a simple-to-use, yet powerful and expressive domain-specific language (DSL) to define policies and enables developers to validate JSON- or YAML- formatted structured data with those policies.
Documentation
use crate::commands::rulegen;
use crate::utils::writer::Writer;
use pretty_assertions::assert_eq;

#[test]
fn test_rulegen() {
    let data = String::from(
        r#"
        {
            "Resources": {
                "NewVolume" : {
                    "Type" : "AWS::EC2::Volume",
                    "Properties" : {
                        "Size" : 500,
                        "Encrypted": false,
                        "AvailabilityZone" : "us-west-2b"
                    }
                },
                "NewVolume2" : {
                    "Type" : "AWS::EC2::Volume",
                    "Properties" : {
                        "Size" : 50,
                        "Encrypted": false,
                        "AvailabilityZone" : "us-west-2c"
                    }
                }
            }
        }
        "#,
    );

    let mut writer = Writer::default();
    let generated_rules = rulegen::parse_template_and_call_gen(&data, &mut writer);

    assert_eq!(1, generated_rules.len());
    assert!(generated_rules.contains_key("AWS::EC2::Volume"));

    let property_map = &generated_rules["AWS::EC2::Volume"];

    assert_eq!(3, property_map.len());
    assert!(property_map.contains_key("Encrypted"));
    assert!(property_map.contains_key("Size"));
    assert!(property_map.contains_key("AvailabilityZone"));
}

#[test]
fn test_rulegen_no_properties() {
    let data = String::from(
        r#"
        {
            "Resources": {
                "NewVolume" : {
                    "Type" : "AWS::EC2::Volume",
                },
                "NewVolume2" : {
                    "Type" : "AWS::EC2::Volume",
                }
            }
        }
        "#,
    );

    let mut writer = Writer::default();
    let generated_rules = rulegen::parse_template_and_call_gen(&data, &mut writer);

    assert_eq!(0, generated_rules.len());
}