Files
regorus/tests/azure_policy/cases/e2e_shared_dashboard_deny.yaml
Anand Krishnamoorthi afdb894d85 test(azure_policy): add end-to-end policy test cases (#699)
50 end-to-end test cases derived from real Azure built-in policies. Each
file contains a complete policy definition, sample resources, and expected
evaluation results. Coverage spans storage, networking, compute, security,
monitoring, database, identity, governance, and update management scenarios.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-27 18:04:50 -05:00

205 lines
7.2 KiB
YAML

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# E2E Test: Portal/SharedDashboardInlineContent_Deny
# Real Azure Policy: "Shared dashboards should not have markdown tiles with inline content"
# Source: regolator/policyDefinitions/Portal/SharedDashboardInlineContent_Deny.json
#
# Features exercised:
# - Doubly-nested wildcard: lenses[*].parts[*]
# - Field count with where clause on deeply-nested metadata paths
# - requestContext().apiVersion guard with NOT (double negation pattern)
# - "anyof" (lowercase 'o') variant
aliases: test_aliases.json
policy_definition: |
{
"properties": {
"displayName": "Shared dashboards should not have markdown tiles with inline content",
"policyType": "BuiltIn",
"mode": "Indexed",
"parameters": {
"effect": {
"type": "string",
"defaultValue": "Audit",
"allowedValues": ["Audit", "Deny", "Disabled"]
}
},
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Portal/dashboards"
},
{
"anyof": [
{
"not": {
"value": "[requestContext().apiVersion]",
"greaterOrEquals": "2020-09-01-alpha"
}
},
{
"count": {
"field": "Microsoft.Portal/dashboards/lenses[*].parts[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Portal/dashboards/lenses[*].parts[*].metadata.type",
"equals": "Extension/HubsExtension/PartType/MarkdownPart"
},
{
"anyOf": [
{
"field": "Microsoft.Portal/dashboards/lenses[*].parts[*].metadata.Extension-HubsExtension-PartType-MarkdownPart.settings.content.settings.markdownUri",
"exists": "false"
},
{
"field": "Microsoft.Portal/dashboards/lenses[*].parts[*].metadata.Extension-HubsExtension-PartType-MarkdownPart.settings.content.settings.markdownSource",
"exists": "false"
},
{
"field": "Microsoft.Portal/dashboards/lenses[*].parts[*].metadata.Extension-HubsExtension-PartType-MarkdownPart.settings.content.settings.markdownSource",
"equals": "1"
}
]
}
]
}
},
"greater": 0
}
]
}
]
},
"then": {
"effect": "[parameters('effect')]"
}
}
}
}
cases:
# =========================================================================
# Old API version → triggers (not greaterOrEquals "2020-09-01-alpha")
# =========================================================================
- note: audit_old_api_version
resource:
type: "Microsoft.Portal/dashboards"
name: "old-api-dashboard"
properties:
lenses: []
request_context:
apiVersion: "2019-01-01"
want_effect: "Audit"
# =========================================================================
# New API version, markdown part with inline content (no markdownUri)
# =========================================================================
- note: audit_inline_markdown_no_uri
resource:
type: "Microsoft.Portal/dashboards"
name: "inline-md"
properties:
lenses:
- parts:
- metadata:
type: "Extension/HubsExtension/PartType/MarkdownPart"
Extension-HubsExtension-PartType-MarkdownPart:
settings:
content:
settings:
markdownSource: "1"
request_context:
apiVersion: "2022-12-01"
want_effect: "Audit"
# =========================================================================
# New API version, markdown part with markdownUri set → compliant
# =========================================================================
- note: pass_markdown_with_uri
resource:
type: "Microsoft.Portal/dashboards"
name: "external-md"
properties:
lenses:
- parts:
- metadata:
type: "Extension/HubsExtension/PartType/MarkdownPart"
Extension-HubsExtension-PartType-MarkdownPart:
settings:
content:
settings:
markdownUri: "https://raw.githubusercontent.com/org/repo/main/README.md"
markdownSource: "url"
request_context:
apiVersion: "2022-12-01"
want_undefined: true
# =========================================================================
# Non-markdown part → compliant
# =========================================================================
- note: pass_non_markdown_part
resource:
type: "Microsoft.Portal/dashboards"
name: "chart-dashboard"
properties:
lenses:
- parts:
- metadata:
type: "Extension/HubsExtension/PartType/MonitorChartPart"
request_context:
apiVersion: "2022-12-01"
want_undefined: true
# =========================================================================
# Multiple lenses/parts, mixed: one inline, one external → triggers
# =========================================================================
- note: audit_mixed_parts_one_inline
resource:
type: "Microsoft.Portal/dashboards"
name: "mixed-dashboard"
properties:
lenses:
- parts:
- metadata:
type: "Extension/HubsExtension/PartType/MonitorChartPart"
- metadata:
type: "Extension/HubsExtension/PartType/MarkdownPart"
Extension-HubsExtension-PartType-MarkdownPart:
settings:
content:
settings:
markdownSource: "1"
- parts:
- metadata:
type: "Extension/HubsExtension/PartType/MarkdownPart"
Extension-HubsExtension-PartType-MarkdownPart:
settings:
content:
settings:
markdownUri: "https://example.com/md.md"
markdownSource: "url"
request_context:
apiVersion: "2022-12-01"
want_effect: "Audit"
# =========================================================================
# Wrong type → skip
# =========================================================================
- note: skip_wrong_type
resource:
type: "Microsoft.Storage/storageAccounts"
name: "storage"
properties: {}
want_undefined: true