Skip to content

Commit 4a9fec6

Browse files
committed
Remediation cmdlets + tests
1 parent 185b706 commit 4a9fec6

32 files changed

+4116
-100
lines changed

src/ResourceManager/PolicyInsights/Commands.PolicyInsights.Test/Commands.PolicyInsights.Test.csproj

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@
4141
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
4242
</PropertyGroup>
4343
<ItemGroup>
44-
<Reference Include="Microsoft.Azure.Management.PolicyInsights, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
44+
<Reference Include="Microsoft.Azure.Management.PolicyInsights, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
4545
<SpecificVersion>False</SpecificVersion>
46-
<HintPath>..\..\..\packages\Microsoft.Azure.Management.PolicyInsights.1.0.0\lib\net452\Microsoft.Azure.Management.PolicyInsights.dll</HintPath>
46+
<HintPath>..\..\..\packages\Microsoft.Azure.Management.PolicyInsights.2.0.0\lib\net452\Microsoft.Azure.Management.PolicyInsights.dll</HintPath>
4747
<Private>True</Private>
4848
</Reference>
4949
</ItemGroup>
5050
<ItemGroup>
5151
<Compile Include="Properties\AssemblyInfo.cs" />
52+
<Compile Include="ScenarioTests\RemediationTests.cs" />
5253
<Compile Include="ScenarioTests\QueryOptionTests.cs" />
5354
<Compile Include="ScenarioTests\PolicyStateTests.cs" />
5455
<Compile Include="ScenarioTests\PolicyStateSummaryTests.cs" />
@@ -69,6 +70,9 @@
6970
<None Include="ScenarioTests\Common.ps1">
7071
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7172
</None>
73+
<None Include="ScenarioTests\RemediationTests.ps1">
74+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
75+
</None>
7276
<None Include="ScenarioTests\PolicyStateSummaryTests.ps1">
7377
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7478
</None>
@@ -198,6 +202,9 @@
198202
<None Include="SessionRecords\Microsoft.Azure.Commands.PolicyInsights.Test.ScenarioTests.QueryOptionTests\QueryResultsWithTop.json">
199203
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
200204
</None>
205+
<None Include="SessionRecords\Microsoft.Azure.Commands.PolicyInsights.Test.ScenarioTests.RemediationTests\*.json">
206+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
207+
</None>
201208
</ItemGroup>
202209
<ItemGroup>
203210
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />

src/ResourceManager/PolicyInsights/Commands.PolicyInsights.Test/ScenarioTests/Common.ps1

Lines changed: 139 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Gets test management group name
1818
#>
1919
function Get-TestManagementGroupName
2020
{
21-
"azgovtest4"
21+
"azgovtest4"
2222
}
2323

2424
<#
@@ -27,7 +27,7 @@ Gets test resource group group name
2727
#>
2828
function Get-TestResourceGroupName
2929
{
30-
"bulenttestrg"
30+
"bulenttestrg"
3131
}
3232

3333
<#
@@ -36,7 +36,7 @@ Gets test resource id
3636
#>
3737
function Get-TestResourceId
3838
{
39-
"/subscriptions/d0610b27-9663-4c05-89f8-5b4be01e86a5/resourcegroups/govintpolicyrp/providers/microsoft.network/trafficmanagerprofiles/gov-int-policy-rp"
39+
"/subscriptions/d0610b27-9663-4c05-89f8-5b4be01e86a5/resourcegroups/govintpolicyrp/providers/microsoft.network/trafficmanagerprofiles/gov-int-policy-rp"
4040
}
4141

4242
<#
@@ -45,7 +45,7 @@ Gets test policy set definition name
4545
#>
4646
function Get-TestPolicySetDefinitionName
4747
{
48-
"12b58873-e0f8-4b95-936c-86cbe7c9d697"
48+
"12b58873-e0f8-4b95-936c-86cbe7c9d697"
4949
}
5050

5151
<#
@@ -54,7 +54,7 @@ Gets test policy definition name
5454
#>
5555
function Get-TestPolicyDefinitionName
5656
{
57-
"24813039-7534-408a-9842-eb99f45721b1"
57+
"24813039-7534-408a-9842-eb99f45721b1"
5858
}
5959

6060
<#
@@ -63,7 +63,7 @@ Gets test policy assignment name
6363
#>
6464
function Get-TestPolicyAssignmentName
6565
{
66-
"45ab2ab7898d45ebb3087573"
66+
"45ab2ab7898d45ebb3087573"
6767
}
6868

6969
<#
@@ -72,7 +72,7 @@ Gets test resource group group name for resource group level policy assignment (
7272
#>
7373
function Get-TestResourceGroupNameForPolicyAssignmentEvents
7474
{
75-
"jilimpolicytest2"
75+
"jilimpolicytest2"
7676
}
7777

7878
<#
@@ -81,7 +81,7 @@ Gets test policy assignment name (resource group level) (for event tests)
8181
#>
8282
function Get-TestPolicyAssignmentNameResourceGroupLevelEvents
8383
{
84-
"e9860612d8ec4a469f59af06"
84+
"e9860612d8ec4a469f59af06"
8585
}
8686

8787
<#
@@ -90,7 +90,7 @@ Gets test resource group group name for resource group level policy assignment (
9090
#>
9191
function Get-TestResourceGroupNameForPolicyAssignmentStates
9292
{
93-
"bulenttestrg"
93+
"bulenttestrg"
9494
}
9595

9696
<#
@@ -99,7 +99,7 @@ Gets test policy assignment name (resource group level) (for state tests)
9999
#>
100100
function Get-TestPolicyAssignmentNameResourceGroupLevelStates
101101
{
102-
"f4d1645d-9180-4968-99df-17234d0f7019"
102+
"f4d1645d-9180-4968-99df-17234d0f7019"
103103
}
104104

105105
<#
@@ -108,7 +108,7 @@ Gets test query interval start
108108
#>
109109
function Get-TestQueryIntervalStart
110110
{
111-
"2018-03-31 00:00:00Z"
111+
"2018-03-31 00:00:00Z"
112112
}
113113

114114
<#
@@ -117,7 +117,25 @@ Gets test query interval end
117117
#>
118118
function Get-TestQueryIntervalEnd
119119
{
120-
"2018-05-30 00:00:00Z"
120+
"2018-05-30 00:00:00Z"
121+
}
122+
123+
<#
124+
.SYNOPSIS
125+
Gets the policy assignment used in remediation tests at subscription level and below
126+
#>
127+
function Get-TestRemediationSubscriptionPolicyAssignmentId
128+
{
129+
"/subscriptions/d0610b27-9663-4c05-89f8-5b4be01e86a5/providers/Microsoft.Authorization/policyAssignments/2deae24764b447c29af7c309"
130+
}
131+
132+
<#
133+
.SYNOPSIS
134+
Gets the policy assignment used in remediation tests at management group scope
135+
#>
136+
function Get-TestRemediationMgPolicyAssignmentId
137+
{
138+
"/providers/Microsoft.Management/managementGroups/PolicyUIMG/providers/Microsoft.Authorization/policyAssignments/326b090398a649e3858e3f23"
121139
}
122140

123141
<#
@@ -126,14 +144,14 @@ Validates a list of policy events
126144
#>
127145
function Validate-PolicyEvents
128146
{
129-
param([System.Collections.Generic.List`1[[Microsoft.Azure.Commands.PolicyInsights.Models.PolicyEvent]]]$policyEvents, [int]$count)
130-
131-
Assert-True { $count -ge $policyEvents.Count }
132-
Assert-True { $policyEvents.Count -gt 0 }
133-
Foreach($policyEvent in $policyEvents)
134-
{
135-
Validate-PolicyEvent $policyEvent
136-
}
147+
param([System.Collections.Generic.List`1[[Microsoft.Azure.Commands.PolicyInsights.Models.PolicyEvent]]]$policyEvents, [int]$count)
148+
149+
Assert-True { $count -ge $policyEvents.Count }
150+
Assert-True { $policyEvents.Count -gt 0 }
151+
Foreach($policyEvent in $policyEvents)
152+
{
153+
Validate-PolicyEvent $policyEvent
154+
}
137155
}
138156

139157
<#
@@ -142,19 +160,19 @@ Validates a policy event
142160
#>
143161
function Validate-PolicyEvent
144162
{
145-
param([Microsoft.Azure.Commands.PolicyInsights.Models.PolicyEvent]$policyEvent)
146-
147-
Assert-NotNull $policyEvent
148-
149-
Assert-NotNull $policyEvent.Timestamp
150-
Assert-NotNullOrEmpty $policyEvent.ResourceId
151-
Assert-NotNullOrEmpty $policyEvent.PolicyAssignmentId
152-
Assert-NotNullOrEmpty $policyEvent.PolicyDefinitionId
153-
Assert-NotNull $policyEvent.IsCompliant
154-
Assert-NotNullOrEmpty $policyEvent.SubscriptionId
155-
Assert-NotNullOrEmpty $policyEvent.PolicyDefinitionAction
156-
Assert-NotNullOrEmpty $policyEvent.TenantId
157-
Assert-NotNullOrEmpty $policyEvent.PrincipalOid
163+
param([Microsoft.Azure.Commands.PolicyInsights.Models.PolicyEvent]$policyEvent)
164+
165+
Assert-NotNull $policyEvent
166+
167+
Assert-NotNull $policyEvent.Timestamp
168+
Assert-NotNullOrEmpty $policyEvent.ResourceId
169+
Assert-NotNullOrEmpty $policyEvent.PolicyAssignmentId
170+
Assert-NotNullOrEmpty $policyEvent.PolicyDefinitionId
171+
Assert-NotNull $policyEvent.IsCompliant
172+
Assert-NotNullOrEmpty $policyEvent.SubscriptionId
173+
Assert-NotNullOrEmpty $policyEvent.PolicyDefinitionAction
174+
Assert-NotNullOrEmpty $policyEvent.TenantId
175+
Assert-NotNullOrEmpty $policyEvent.PrincipalOid
158176
}
159177

160178
<#
@@ -163,14 +181,14 @@ Validates a list of policy states
163181
#>
164182
function Validate-PolicyStates
165183
{
166-
param([System.Collections.Generic.List`1[[Microsoft.Azure.Commands.PolicyInsights.Models.PolicyState]]]$policyStates, [int]$count)
167-
168-
Assert-True { $count -ge $policyStates.Count }
169-
Assert-True { $policyStates.Count -gt 0 }
170-
Foreach($policyState in $policyStates)
171-
{
172-
Validate-PolicyState $policyState
173-
}
184+
param([System.Collections.Generic.List`1[[Microsoft.Azure.Commands.PolicyInsights.Models.PolicyState]]]$policyStates, [int]$count)
185+
186+
Assert-True { $count -ge $policyStates.Count }
187+
Assert-True { $policyStates.Count -gt 0 }
188+
Foreach($policyState in $policyStates)
189+
{
190+
Validate-PolicyState $policyState
191+
}
174192
}
175193

176194
<#
@@ -179,17 +197,17 @@ Validates a policy state
179197
#>
180198
function Validate-PolicyState
181199
{
182-
param([Microsoft.Azure.Commands.PolicyInsights.Models.PolicyState]$policyState)
200+
param([Microsoft.Azure.Commands.PolicyInsights.Models.PolicyState]$policyState)
183201

184-
Assert-NotNull $policyState
202+
Assert-NotNull $policyState
185203

186-
Assert-NotNull $policyState.Timestamp
187-
Assert-NotNullOrEmpty $policyState.ResourceId
188-
Assert-NotNullOrEmpty $policyState.PolicyAssignmentId
189-
Assert-NotNullOrEmpty $policyState.PolicyDefinitionId
190-
Assert-NotNull $policyState.IsCompliant
191-
Assert-NotNullOrEmpty $policyState.SubscriptionId
192-
Assert-NotNullOrEmpty $policyState.PolicyDefinitionAction
204+
Assert-NotNull $policyState.Timestamp
205+
Assert-NotNullOrEmpty $policyState.ResourceId
206+
Assert-NotNullOrEmpty $policyState.PolicyAssignmentId
207+
Assert-NotNullOrEmpty $policyState.PolicyDefinitionId
208+
Assert-NotNull $policyState.IsCompliant
209+
Assert-NotNullOrEmpty $policyState.SubscriptionId
210+
Assert-NotNullOrEmpty $policyState.PolicyDefinitionAction
193211
}
194212

195213
<#
@@ -198,49 +216,86 @@ Validates a policy state summary
198216
#>
199217
function Validate-PolicyStateSummary
200218
{
201-
param([Microsoft.Azure.Commands.PolicyInsights.Models.PolicyStateSummary]$policyStateSummary)
219+
param([Microsoft.Azure.Commands.PolicyInsights.Models.PolicyStateSummary]$policyStateSummary)
220+
221+
Assert-NotNull $policyStateSummary
222+
223+
Assert-NotNull $policyStateSummary.Results
224+
Assert-NotNull $policyStateSummary.Results.NonCompliantResources
225+
Assert-NotNull $policyStateSummary.Results.NonCompliantPolicies
226+
227+
Assert-NotNull $policyStateSummary.PolicyAssignments
228+
Assert-True { $policyStateSummary.PolicyAssignments.Count -le $policyStateSummary.Results.NonCompliantPolicies }
229+
Assert-True { $policyStateSummary.PolicyAssignments.Count -gt 0 }
202230

203-
Assert-NotNull $policyStateSummary
231+
Foreach($policyAssignmentSummary in $policyStateSummary.PolicyAssignments)
232+
{
233+
Assert-NotNull $policyAssignmentSummary
204234

205-
Assert-NotNull $policyStateSummary.Results
206-
Assert-NotNull $policyStateSummary.Results.NonCompliantResources
207-
Assert-NotNull $policyStateSummary.Results.NonCompliantPolicies
235+
Assert-NotNullOrEmpty $policyAssignmentSummary.PolicyAssignmentId
208236

209-
Assert-NotNull $policyStateSummary.PolicyAssignments
210-
Assert-True { $policyStateSummary.PolicyAssignments.Count -le $policyStateSummary.Results.NonCompliantPolicies }
211-
Assert-True { $policyStateSummary.PolicyAssignments.Count -gt 0 }
237+
Assert-NotNull $policyAssignmentSummary.Results
238+
Assert-NotNull $policyAssignmentSummary.Results.NonCompliantResources
239+
Assert-NotNull $policyAssignmentSummary.Results.NonCompliantPolicies
212240

213-
Foreach($policyAssignmentSummary in $policyStateSummary.PolicyAssignments)
214-
{
215-
Assert-NotNull $policyAssignmentSummary
241+
Assert-NotNull $policyAssignmentSummary.PolicyDefinitions
242+
Assert-True { $policyAssignmentSummary.PolicyDefinitions.Count -eq $policyAssignmentSummary.Results.NonCompliantPolicies }
243+
Assert-True { $policyAssignmentSummary.PolicyDefinitions.Count -gt 0 }
216244

217-
Assert-NotNullOrEmpty $policyAssignmentSummary.PolicyAssignmentId
245+
if ($policyAssignmentSummary.Results.NonCompliantPolicies -gt 1)
246+
{
247+
Assert-NotNullOrEmpty $policyAssignmentSummary.PolicySetDefinitionId
248+
}
218249

219-
Assert-NotNull $policyAssignmentSummary.Results
220-
Assert-NotNull $policyAssignmentSummary.Results.NonCompliantResources
221-
Assert-NotNull $policyAssignmentSummary.Results.NonCompliantPolicies
250+
Foreach($policyDefinitionSummary in $policyAssignmentSummary.PolicyDefinitions)
251+
{
252+
Assert-NotNull $policyDefinitionSummary
222253

223-
Assert-NotNull $policyAssignmentSummary.PolicyDefinitions
224-
Assert-True { $policyAssignmentSummary.PolicyDefinitions.Count -eq $policyAssignmentSummary.Results.NonCompliantPolicies }
225-
Assert-True { $policyAssignmentSummary.PolicyDefinitions.Count -gt 0 }
254+
Assert-NotNullOrEmpty $policyDefinitionSummary.PolicyDefinitionId
255+
Assert-NotNullOrEmpty $policyDefinitionSummary.Effect
226256

227-
if ($policyAssignmentSummary.Results.NonCompliantPolicies -gt 1)
228-
{
229-
Assert-NotNullOrEmpty $policyAssignmentSummary.PolicySetDefinitionId
230-
}
257+
Assert-NotNull $policyDefinitionSummary.Results
258+
Assert-NotNull $policyDefinitionSummary.Results.NonCompliantResources
259+
Assert-Null $policyDefinitionSummary.Results.NonCompliantPolicies
260+
}
261+
}
262+
}
231263

232-
Foreach($policyDefinitionSummary in $policyAssignmentSummary.PolicyDefinitions)
233-
{
234-
Assert-NotNull $policyDefinitionSummary
264+
<#
265+
.SYNOPSIS
266+
Validates a remediation
267+
#>
268+
function Validate-Remediation
269+
{
270+
param([Microsoft.Azure.Commands.PolicyInsights.Models.Remediation.PSRemediation]$remediation)
271+
272+
Assert-NotNull $remediation
273+
274+
Assert-NotNull $remediation.CreatedOn
275+
Assert-NotNull $remediation.LastUpdatedOn
276+
Assert-True { $remediation.Id -like "*/providers/microsoft.policyinsights/remediations/*" }
277+
Assert-AreEqual "Microsoft.PolicyInsights/remediations" $remediation.Type
278+
Assert-NotNullOrEmpty $remediation.Name
279+
Assert-NotNullOrEmpty $remediation.PolicyAssignmentId
280+
Assert-NotNullOrEmpty $remediation.ProvisioningState
281+
Assert-NotNull $remediation.DeploymentSummary
282+
}
283+
284+
<#
285+
.SYNOPSIS
286+
Validates a remediation deployment
287+
#>
288+
function Validate-RemediationDeployment
289+
{
290+
param([Microsoft.Azure.Commands.PolicyInsights.Models.Remediation.PSRemediationDeployment]$deployment)
235291

236-
Assert-NotNullOrEmpty $policyDefinitionSummary.PolicyDefinitionId
237-
Assert-NotNullOrEmpty $policyDefinitionSummary.Effect
292+
Assert-NotNull $deployment
238293

239-
Assert-NotNull $policyDefinitionSummary.Results
240-
Assert-NotNull $policyDefinitionSummary.Results.NonCompliantResources
241-
Assert-Null $policyDefinitionSummary.Results.NonCompliantPolicies
242-
}
243-
}
294+
Assert-NotNull $deployment.CreatedOn
295+
Assert-NotNull $deployment.LastUpdatedOn
296+
Assert-True { $deployment.RemediatedResourceId -like "/subscriptions/*/providers/*" }
297+
Assert-NotNullOrEmpty $deployment.Status
298+
Assert-NotNullOrEmpty $deployment.ResourceLocation
244299
}
245300

246301
<#
@@ -249,7 +304,7 @@ Validates a string is not null or empty
249304
#>
250305
function Assert-NotNullOrEmpty
251306
{
252-
param([string]$value)
307+
param([string]$value)
253308

254-
Assert-False { [string]::IsNullOrEmpty($value) }
309+
Assert-False { [string]::IsNullOrEmpty($value) }
255310
}

0 commit comments

Comments
 (0)