AzSKARMTemplateSecurityStatus.Test.ps1
<#PSScriptInfo
.VERSION 1.0.0 .GUID bf41177f-4d1e-481a-a126-5f0c07dd9aae .AUTHOR Daniel Scott-Raynsford .DESCRIPTION Pester Test to use AzSK module to validate Azure Resource Manager Template best practices .COMPANYNAME .COPYRIGHT (c) 2018 Daniel Scott-Raynsford. All rights reserved. .TAGS AzSK, ARM, Pester, Test .LICENSEURI https://gist.github.com/PlagueHO/1af35ee65a2276ca90b3a8a5b224a5d4 .PROJECTURI https://gist.github.com/PlagueHO/1af35ee65a2276ca90b3a8a5b224a5d4 .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES First version. .PRIVATEDATA 2016-Datacenter,2016-Datacenter-Server-Core #> #requires -Modules @{ ModuleName="AzSK"; ModuleVersion="3.6.1" } #requires -Modules @{ ModuleName="Pester"; ModuleVersion="4.3.0" } <# .SYNOPSIS Pester test for validating ARM template meets best-practices .DESCRIPTION This Pester test will validate one or more ARM templates in the specified file path to validate that they meet the best practices. .PARAMETER TemplatePath The full path to the ARM template to check. This may be a path with wild cards to check multiple files. .PARAMETER Severity An array of severity values that will count as failed tests. Any violation found in the ARM template that matches a severity in this list will cause the Pester test to count as failed. Defaults to 'High' and 'Medium'. .PARAMETER SkipControlsFromFile The path to a controls file that can be use to suppress rules. #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $TemplatePath, [Parameter()] [System.String[]] $Severity = @('High','Medium'), [Parameter()] [System.String] $SkipControlsFromFile ) Describe 'ARM template best practices' -Tag 'AzSK' { Context 'When AzSK module is installed and run on all files in the Templates folder' { $resultPath = Get-AzSKARMTemplateSecurityStatus ` -ARMTemplatePath $TemplatePath ` -Preview:$true ` -DoNotOpenOutputFolder ` -SkipControlsFromFile $SkipControlsFromFile ` -Recurse $resultFile = (Get-ChildItem -Path $resultPath -Filter 'ARMCheckerResults_*.csv')[0].FullName It 'Should produce a valid CSV results file ' { $resultFile | Should -Not -BeNullOrEmpty Test-Path -Path $resultFile | Should -Be $true $script:resultsContent = Get-Content -Path $resultFile | ConvertFrom-Csv } $groupedResults = $script:resultsContent | Where-Object -Property Status -EQ 'Failed' | Group-Object -Property Severity $testCases = $Severity.Foreach({@{Severity = $_}}) It 'Should have 0 failed Severity:<Severity> results' -TestCases $testCases { param ( [System.String] $Severity ) $failedCount = $groupedResults.Where({ $_.Name -eq $Severity })[0].Count $failedCount | Should -Be 0 } } } |