Files
regorus/tests/azure_policy/cases/effects.yaml
Anand Krishnamoorthi 7f42115b63 test(azure_policy): add foundation test cases (#698)
YAML-driven test cases for the core Azure Policy compiler. These cover
alias resolution, field conditions, logical operators, type coercion,
count expressions, template functions, effect compilation, and policy
definition parsing. 24 files, each a self-contained scenario exercised
by the test runner in the companion code PR.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-28 11:03:39 -05:00

429 lines
12 KiB
YAML

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Effects Test Suite
# Tests all 9 Azure Policy effect types and parameterized effects.
cases:
# =========================================================================
# Simple effects
# =========================================================================
- note: effect_deny
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": { "effect": "deny" }
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "deny"
- note: effect_audit
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": { "effect": "audit" }
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "audit"
- note: effect_disabled
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": { "effect": "disabled" }
}
resource:
type: "Microsoft.Compute/virtualMachines"
# Azure Policy: "disabled" means the policy is inactive — no compliance
# result is produced. The compiler correctly returns undefined.
want_undefined: true
- note: effect_manual
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": { "effect": "manual" }
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "manual"
- note: effect_denyAction
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "denyAction",
"details": {
"actionNames": ["delete"]
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "denyAction"
# =========================================================================
# Effects with details
# =========================================================================
- note: effect_deny_with_message
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
"then": {
"effect": "deny",
"details": {
"message": "Storage accounts must use HTTPS"
}
}
}
resource:
type: "Microsoft.Storage/storageAccounts"
want_effect: "deny"
- note: effect_append
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
"then": {
"effect": "append",
"details": [
{
"field": "properties.supportsHttpsTrafficOnly",
"value": true
}
]
}
}
resource:
type: "Microsoft.Storage/storageAccounts"
want_effect: "append"
- note: effect_modify
policy_rule: |
{
"if": {
"allOf": [
{ "field": "type", "equals": "Microsoft.Compute/virtualMachines" },
{ "field": "tags.environment", "exists": false }
]
},
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "production"
}
]
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
tags: {}
want_effect: "modify"
- note: effect_modify_multiple_operations
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "production"
},
{
"operation": "add",
"field": "tags['managedBy']",
"value": "policy"
}
]
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "modify"
- note: effect_auditIfNotExists
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions",
"existenceCondition": {
"allOf": [
{ "field": "properties.publisher", "equals": "Microsoft.Azure.Security" },
{ "field": "properties.type", "equals": "IaaSAntimalware" }
]
}
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
host_await:
- key:
operation: "lookup_related_resources"
type: "Microsoft.Compute/virtualMachines/extensions"
response: null
want_effect: "auditIfNotExists"
# Related resource found and existenceCondition matches → compliant (undefined)
- note: effect_auditIfNotExists_compliant
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions",
"existenceCondition": {
"allOf": [
{ "field": "properties.publisher", "equals": "Microsoft.Azure.Security" },
{ "field": "properties.type", "equals": "IaaSAntimalware" }
]
}
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
host_await:
- response:
properties:
publisher: "Microsoft.Azure.Security"
type: "IaaSAntimalware"
want_undefined: true
# Related resource found but existenceCondition fails → non-compliant
- note: effect_auditIfNotExists_condition_fails
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions",
"existenceCondition": {
"allOf": [
{ "field": "properties.publisher", "equals": "Microsoft.Azure.Security" },
{ "field": "properties.type", "equals": "IaaSAntimalware" }
]
}
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
host_await:
- response:
properties:
publisher: "SomeOtherPublisher"
type: "SomeOtherExtension"
want_effect: "auditIfNotExists"
# No existenceCondition — just check if resource exists
- note: effect_auditIfNotExists_no_condition_exists
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions"
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
host_await:
- response:
name: "some-extension"
properties: {}
want_undefined: true
# No existenceCondition, resource not found → non-compliant
- note: effect_auditIfNotExists_no_condition_missing
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions"
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
host_await:
- response: null
want_effect: "auditIfNotExists"
- note: effect_deployIfNotExists
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions",
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c"
],
"existenceCondition": {
"field": "properties.publisher",
"equals": "Microsoft.Azure.Monitoring"
},
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": []
}
}
}
}
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
host_await:
- response: null
want_effect: "deployIfNotExists"
# =========================================================================
# Parameterized effects
# =========================================================================
- note: effect_parameterized
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "[parameters('effect')]"
}
}
resource:
type: "Microsoft.Compute/virtualMachines"
parameters:
effect: "deny"
want_effect: "deny"
- note: effect_parameterized_with_details
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
"then": {
"effect": "[parameters('effect')]",
"details": {
"message": "HTTPS required for storage accounts"
}
}
}
resource:
type: "Microsoft.Storage/storageAccounts"
parameters:
effect: "audit"
want_effect: "audit"
# =========================================================================
# Case-insensitive effect names
# =========================================================================
- note: effect_case_insensitive_Deny
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": { "effect": "Deny" }
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "Deny"
- note: effect_case_insensitive_AUDIT
policy_rule: |
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": { "effect": "AUDIT" }
}
resource:
type: "Microsoft.Compute/virtualMachines"
want_effect: "AUDIT"