Skip to content

Commit 966c440

Browse files
authored
add cmdlets Get/Start/convert-SynapseVulnerabilityAssessmentScan (#13690)
* SynapseVulnerabilityAssessmentScan * refine name * refine function * fix problem for StartAzureSynapseSqlPoolVulnerabilityAssessmentScan not work * some draft codes * resolve confilct 2 * removce strange sign * format code * refine function * add test * add help doc * code refine * format refine * update Az.Synapse.psd1 * add test json * refinde document * improve help examples * added test json * added test json 2 * improved test * add tests to credscansuppression
1 parent 2eddc95 commit 966c440

20 files changed

+13077
-7
lines changed

src/Synapse/Synapse.Test/ScenarioTests/VulnerabilityAssessmentTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,23 @@ public void TestVulnerabilityAssessmentBaseline(){
3535
_logger,
3636
"Test-VulnerabilityAssessmentBaseline");
3737
}
38+
39+
[Fact]
40+
[Trait(Category.AcceptanceType, Category.CheckIn)]
41+
public void TestVulnerabilityAssessmentScanRecordGetListTest()
42+
{
43+
NewInstance.RunPsTest(
44+
_logger,
45+
"Test-VulnerabilityAssessmentScanRecordGetListTest");
46+
}
47+
48+
[Fact]
49+
[Trait(Category.AcceptanceType, Category.CheckIn)]
50+
public void TestVulnerabilityAssessmentScanConvertTest()
51+
{
52+
NewInstance.RunPsTest(
53+
_logger,
54+
"Test-VulnerabilityAssessmentScanConvertTest");
55+
}
3856
}
3957
}

src/Synapse/Synapse.Test/ScenarioTests/VulnerabilityAssessmentTests.ps1

Lines changed: 187 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,197 @@ function Test-VulnerabilityAssessmentBaseline
161161
}
162162
}
163163

164+
<#
165+
.SYNOPSIS
166+
Tests for vulnerability assessment scan , scan record get and list scenarios
167+
#>
168+
function Test-VulnerabilityAssessmentScanRecordGetListTest
169+
{
170+
# Setup
171+
$testSuffix = getAssetName
172+
Create-VulnerabilityAssessmentTestEnvironment $testSuffix
173+
$params = Get-SqlVulnerabilityAssessmentTestEnvironmentParameters $testSuffix
174+
175+
try
176+
{
177+
# Turn on ATP
178+
Enable-AzSynapseSqlAdvancedThreatProtection -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -DoNotConfigureVulnerabilityAssessment
179+
180+
Update-AzSynapseSqlPoolVulnerabilityAssessmentSetting -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -SqlPoolName $params.sqlPoolName `
181+
-StorageAccountName $params.storageAccountName
182+
183+
# Trigger scan without scan IDconvert
184+
try
185+
{
186+
Start-AzSynapseSqlPoolVulnerabilityAssessmentScan -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName
187+
}
188+
catch
189+
{
190+
if ((Get-SynapseTestMode) -eq 'Playback')
191+
{
192+
# This command generated a scanId of DateTime.UtcNow.ToString("yyyyMMdd_HHmmss")
193+
# So the recording will always fail
194+
}
195+
else
196+
{
197+
throw;
198+
}
199+
}
200+
201+
# Trigger scan as a Job with scan ID
202+
$scanId1 = "cmdletGetListScan"
203+
$scanJob = Start-AzSynapseSqlPoolVulnerabilityAssessmentScan -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName -ScanId $scanId1 -AsJob
204+
$scanJob | Wait-Job
205+
$scanRecord1 = $scanJob | Receive-Job
206+
207+
# Validate the scan record that we got from the scan
208+
Assert-AreEqual $params.rgname $scanRecord1.ResourceGroupName
209+
Assert-AreEqual $params.workspaceName $scanRecord1.WorkspaceName
210+
Assert-AreEqual $params.sqlPoolName $scanRecord1.SqlPoolName
211+
Assert-AreEqual $scanId1 $scanRecord1.ScanId
212+
Assert-AreEqual "OnDemand" $scanRecord1.TriggerType
213+
214+
# Validate the scan record that we got from the get scan record cmdlet
215+
$scanRecord1FromGet = Get-AzSynapseSqlPoolVulnerabilityAssessmentScanRecord -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName -ScanId $scanId1
216+
217+
Assert-AreEqual $scanRecord1FromGet.ResourceGroupName $scanRecord1.ResourceGroupName
218+
Assert-AreEqual $scanRecord1FromGet.WorkspaceName $scanRecord1.WorkspaceName
219+
Assert-AreEqual $scanRecord1FromGet.SqlPoolName $scanRecord1.SqlPoolName
220+
Assert-AreEqual $scanRecord1FromGet.ScanId $scanRecord1.ScanId
221+
Assert-AreEqual $scanRecord1FromGet.TriggerType $scanRecord1.TriggerType
222+
Assert-AreEqual $scanRecord1FromGet.State $scanRecord1.State
223+
Assert-AreEqual $scanRecord1FromGet.StartTime $scanRecord1.StartTime
224+
Assert-AreEqual $scanRecord1FromGet.EndTime $scanRecord1.EndTime
225+
Assert-AreEqual $scanRecord1FromGet.Errors $scanRecord1.Errors
226+
Assert-AreEqual $scanRecord1FromGet.ScanResultsLocationPath $scanRecord1.ScanResultsLocationPath
227+
Assert-AreEqual $scanRecord1FromGet.NumberOfFailedSecurityChecks $scanRecord1.NumberOfFailedSecurityChecks
228+
229+
# Validate the scan record that we got from the get scan record cmdlet with piping
230+
$scanRecord1FromGet = Get-AzSynapseSqlPool -ResourceGroupName $params.rgname -WorkspaceName $params.WorkspaceName -Name $params.SqlPoolName | Get-AzSynapseSqlPoolVulnerabilityAssessmentScanRecord `
231+
-ScanId $scanId1
232+
233+
Assert-AreEqual $scanRecord1FromGet.ResourceGroupName $scanRecord1.ResourceGroupName
234+
Assert-AreEqual $scanRecord1FromGet.WorkspaceName $scanRecord1.WorkspaceName
235+
Assert-AreEqual $scanRecord1FromGet.SqlPoolName $scanRecord1.SqlPoolName
236+
Assert-AreEqual $scanRecord1FromGet.ScanId $scanRecord1.ScanId
237+
Assert-AreEqual $scanRecord1FromGet.TriggerType $scanRecord1.TriggerType
238+
Assert-AreEqual $scanRecord1FromGet.State $scanRecord1.State
239+
Assert-AreEqual $scanRecord1FromGet.StartTime $scanRecord1.StartTime
240+
Assert-AreEqual $scanRecord1FromGet.EndTime $scanRecord1.EndTime
241+
Assert-AreEqual $scanRecord1FromGet.Errors $scanRecord1.Errors
242+
Assert-AreEqual $scanRecord1FromGet.ScanResultsLocationPath $scanRecord1.ScanResultsLocationPath
243+
Assert-AreEqual $scanRecord1FromGet.NumberOfFailedSecurityChecks $scanRecord1.NumberOfFailedSecurityChecks
244+
245+
# Verify list scans
246+
$excpectedScanCount = 2
247+
$scanRecordList = Get-AzSynapseSqlPoolVulnerabilityAssessmentScanRecord -ResourceGroupName $params.rgname -WorkspaceName $params.WorkspaceName -Name $params.SqlPoolName
248+
Assert-AreEqual $excpectedScanCount $scanRecordList.Count
249+
250+
$scanRecord1FromListCmdlet = $scanRecordList[$excpectedScanCount-1]
251+
Assert-AreEqual $scanRecord1FromListCmdlet.ResourceGroupName $scanRecord1.ResourceGroupName
252+
Assert-AreEqual $scanRecord1FromListCmdlet.WorkspaceName $scanRecord1.WorkspaceName
253+
Assert-AreEqual $scanRecord1FromListCmdlet.SqlPoolName $scanRecord1.SqlPoolName
254+
Assert-AreEqual $scanRecord1FromListCmdlet.ScanId $scanRecord1.ScanId
255+
Assert-AreEqual $scanRecord1FromListCmdlet.TriggerType $scanRecord1.TriggerType
256+
Assert-AreEqual $scanRecord1FromListCmdlet.State $scanRecord1.State
257+
Assert-AreEqual $scanRecord1FromListCmdlet.StartTime $scanRecord1.StartTime
258+
Assert-AreEqual $scanRecord1FromListCmdlet.EndTime $scanRecord1.EndTime
259+
Assert-AreEqual $scanRecord1FromListCmdlet.Errors $scanRecord1.Errors
260+
Assert-AreEqual $scanRecord1FromListCmdlet.ScanResultsLocationPath $scanRecord1.ScanResultsLocationPath
261+
Assert-AreEqual $scanRecord1FromListCmdlet.NumberOfFailedSecurityChecks $scanRecord1.NumberOfFailedSecurityChecks
262+
263+
# Run scan with piping
264+
$excpectedScanCount = $excpectedScanCount + 1
265+
Get-AzSynapseSqlPool -ResourceGroupName $params.rgname -WorkspaceName $params.WorkspaceName -Name $params.SqlPoolName `
266+
| Start-AzSynapseSqlPoolVulnerabilityAssessmentScan -ScanId $scanId1
267+
268+
# Verify list scans with piping
269+
$scanRecordList = Get-AzSynapseSqlPool -ResourceGroupName $params.rgname -WorkspaceName $params.WorkspaceName -Name $params.SqlPoolName | Get-AzSynapseSqlPoolVulnerabilityAssessmentScanRecord
270+
Assert-AreEqual $excpectedScanCount $scanRecordList.Count
271+
272+
$scanRecord1FromListCmdlet = $scanRecordList[$excpectedScanCount-1]
273+
Assert-AreEqual $scanRecord1FromListCmdlet.ResourceGroupName $scanRecord1.ResourceGroupName
274+
Assert-AreEqual $scanRecord1FromListCmdlet.WorkspaceName $scanRecord1.WorkspaceName
275+
Assert-AreEqual $scanRecord1FromListCmdlet.SqlPoolName $scanRecord1.SqlPoolName
276+
Assert-AreEqual $scanRecord1FromListCmdlet.ScanId $scanRecord1.ScanId
277+
Assert-AreEqual $scanRecord1FromListCmdlet.TriggerType $scanRecord1.TriggerType
278+
Assert-AreEqual $scanRecord1FromListCmdlet.State $scanRecord1.State
279+
}
280+
finally
281+
{
282+
# Cleanup
283+
Remove-VulnerabilityAssessmentTestEnvironment $testSuffix
284+
}
285+
}
286+
287+
<#
288+
.SYNOPSIS
289+
Tests for vulnerability assessment scan Convert scenarios
290+
#>
291+
function Test-VulnerabilityAssessmentScanConvertTest
292+
{
293+
# Setup
294+
$testSuffix = getAssetName
295+
Create-VulnerabilityAssessmentTestEnvironment $testSuffix
296+
$params = Get-SqlVulnerabilityAssessmentTestEnvironmentParameters $testSuffix
297+
298+
try
299+
{
300+
# Turn on ATP
301+
Enable-AzSynapseSqlAdvancedThreatProtection -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -DoNotConfigureVulnerabilityAssessment
302+
303+
Update-AzSynapseSqlPoolVulnerabilityAssessmentSetting -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -SqlPoolName $params.sqlPoolName `
304+
-StorageAccountName $params.storageAccountName
305+
306+
# Trigger a new scan
307+
$scanId = "cmdletConvertScan"
308+
Start-AzSynapseSqlPoolVulnerabilityAssessmentScan -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName -ScanId $scanId
309+
310+
# Convert the scan
311+
$convertScanObject = Convert-AzSynapseSqlPoolVulnerabilityAssessmentScan -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName `
312+
-ScanId $scanId
313+
314+
Assert-AreEqual $params.rgname $convertScanObject.ResourceGroupName
315+
Assert-AreEqual $params.WorkspaceName $convertScanObject.WorkspaceName
316+
Assert-AreEqual $params.SqlPoolName $convertScanObject.SqlPoolName
317+
Assert-True -script { $convertScanObject.ExportedReportLocation.Contains($scanId) }
318+
Assert-True -script { $convertScanObject.ExportedReportLocation.Contains($params.storageAccountName) }
319+
320+
# Convert the scan (piping scenario)
321+
$scanId = "cmdletConvertScan1"
322+
Start-AzSynapseSqlPoolVulnerabilityAssessmentScan -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName -ScanId $scanId
323+
324+
$convertScanObject = Get-AzSynapseSqlPoolVulnerabilityAssessmentScanRecord -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName `
325+
-ScanId $scanId | Convert-AzSynapseSqlPoolVulnerabilityAssessmentScan
326+
327+
Assert-AreEqual $params.rgname $convertScanObject.ResourceGroupName
328+
Assert-AreEqual $params.WorkspaceName $convertScanObject.WorkspaceName
329+
Assert-AreEqual $params.SqlPoolName $convertScanObject.SqlPoolName
330+
Assert-True -script { $convertScanObject.ExportedReportLocation.Contains($scanId) }
331+
Assert-True -script { $convertScanObject.ExportedReportLocation.Contains($params.storageAccountName) }
332+
333+
334+
# Clear SqlPool settings and define Workspace settings
335+
Clear-AzSynapseSqlPoolVulnerabilityAssessmentSetting -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -SqlPoolName $params.sqlPoolName
336+
337+
Update-AzSynapseSqlPoolVulnerabilityAssessmentSetting -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -SqlPoolName $params.sqlPoolName `
338+
-StorageAccountName $params.storageAccountName
339+
340+
# Run a scan and see that no exception is thrown
341+
Start-AzSynapseSqlPoolVulnerabilityAssessmentScan -ResourceGroupName $params.rgname -WorkspaceName $params.workspaceName -Name $params.sqlPoolName -ScanId $scanId
342+
}
343+
finally
344+
{
345+
# Cleanup
346+
Remove-VulnerabilityAssessmentTestEnvironment $testSuffix
347+
}
348+
}
349+
164350
<#
165351
.SYNOPSIS
166352
Creates the test environment needed to perform the tests
167353
#>
168-
function Create-VulnerabilityAssessmentTestEnvironment ($testSuffix, $location = "West Central US")
354+
function Create-VulnerabilityAssessmentTestEnvironment ($testSuffix, $location = "North Europe")
169355
{
170356
$params = Get-SqlVulnerabilityAssessmentTestEnvironmentParameters $testSuffix
171357
Create-TestEnvironmentWithParams $params $location

0 commit comments

Comments
 (0)