Skip to content

Commit aa95c26

Browse files
authored
Merge pull request #9496 from Nking92/regional-sites
Update WebSites SDK, add Location parameter to Deleted Web Apps, fix clone slots bug
2 parents 483602e + 82c5416 commit aa95c26

File tree

64 files changed

+96594
-43432
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+96594
-43432
lines changed

src/Websites/Websites.Test/ScenarioTests/AppServicePlanTests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ function Test-CreateNewAppServicePlanHyperV
9595
Assert-AreEqual $skuName $getResult.Sku.Name
9696
Assert-AreEqual $capacity $getResult.Sku.Capacity
9797
Assert-AreEqual $true $getResult.IsXenon
98-
Assert-AreEqual "xenon" $getResult.Kind
98+
Assert-AreEqual "windows" $getResult.Kind
9999

100100
}
101101
finally

src/Websites/Websites.Test/ScenarioTests/Common.ps1

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ function Get-WebLocation
109109
}
110110
}
111111

112-
return "WestUS"
112+
return "West US"
113113
}
114114

115115
<#
@@ -133,7 +133,7 @@ function Get-SecondaryLocation
133133
}
134134
}
135135

136-
return "WestUS"
136+
return "West US"
137137
}
138138

139139
<#
@@ -152,6 +152,9 @@ function PingWebApp($webApp)
152152
{
153153
if ((Get-WebsitesTestMode) -ne 'Playback')
154154
{
155+
# Give the app time to stabilize
156+
Start-Sleep -Seconds 30
157+
155158
try
156159
{
157160
$result = Invoke-WebRequest $webApp.HostNames[0] -UseBasicParsing

src/Websites/Websites.Test/ScenarioTests/WebAppBackupRestoreTests.ps1

Lines changed: 185 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,6 @@
1212
# limitations under the License.
1313
# ----------------------------------------------------------------------------------
1414

15-
# Snapshots require a Premium app to exist for several hours.
16-
# Deploy a Premium app and update these global variables to re-record the snapshots tests.
17-
$snapshotRgName = 'web2'
18-
$snapshotAppName = 'nkprem'
19-
$snapshotAppSlot = 'staging'
20-
21-
# Restoring a deleted web app requires an app to have a snapshot available.
22-
# Deploy a web app and wait at least an hour for a snapshot.
23-
# Update these global variables to re-record Test-RestoreDeletedWebApp.
24-
$undeleteRgName = 'web2'
25-
$undeleteAppName = 'undeletesrc'
26-
$undeleteSlot = 'testslot'
27-
2815
# !!! Storage keys and SAS URIs will be stored in the backup test recordings !!!
2916
# To find them, open the json files in a text editor and search for "listkeys"
3017
# to find the storage keys. Search for StorageAccountUrl to find the SAS URIs.
@@ -342,48 +329,134 @@ function Test-EditAndGetWebAppBackupConfigurationPiping
342329

343330
function Test-GetWebAppSnapshot
344331
{
345-
# Test named parameters
346-
$snapshots = Get-AzWebAppSnapshot -ResourceGroupName $snapshotRgName -Name $snapshotAppName -UseDisasterRecovery
347-
Assert-True { $snapshots.Length -gt 0 }
348-
Assert-NotNull $snapshots[0]
349-
Assert-NotNull $snapshots[0].SnapshotTime
350-
Assert-AreEqual 'Production' $snapshots[0].Slot
351-
352-
# Test positional parameters
353-
$snapshots = Get-AzWebAppSnapshot $snapshotRgName $snapshotAppName
354-
Assert-True { $snapshots.Length -gt 0 }
355-
Assert-NotNull $snapshots[0]
356-
Assert-NotNull $snapshots[0].SnapshotTime
357-
Assert-AreEqual 'Production' $snapshots[0].Slot
358-
359-
# Test snapshots for slots
360-
$snapshots = Get-AzWebAppSnapshot -ResourceGroupName $snapshotRgName -Name $snapshotAppName -Slot $snapshotAppSlot
361-
Assert-True { $snapshots.Length -gt 0 }
362-
Assert-NotNull $snapshots[0]
363-
Assert-NotNull $snapshots[0].SnapshotTime
364-
Assert-AreEqual $snapshotAppSlot $snapshots[0].Slot
365-
366-
# Test piping
367-
$app = Get-AzWebApp -ResourceGroupName $snapshotRgName -Name $snapshotAppName
368-
$snapshots = $app | Get-AzWebAppSnapshot
369-
Assert-True { $snapshots.Length -gt 0 }
370-
Assert-NotNull $snapshots[0]
371-
Assert-NotNull $snapshots[0].SnapshotTime
372-
Assert-AreEqual 'Production' $snapshots[0].Slot
332+
# Setup
333+
$rgname = Get-ResourceGroupName
334+
$wname = Get-WebsiteName
335+
$slotName = "staging"
336+
$location = Get-WebLocation
337+
$whpName = Get-WebHostPlanName
338+
$tier = "Premium"
339+
$isRecordMode = ((Get-WebsitesTestMode) -ne 'Playback')
340+
341+
try
342+
{
343+
New-AzResourceGroup -Name $rgname -Location $location
344+
New-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Location $location -Tier $tier
345+
$app = New-AzWebApp -ResourceGroupName $rgname -Name $wname -Location $location -AppServicePlan $whpName
346+
New-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName
347+
348+
# Wait for at least 1 snapshot to exist
349+
while ($snap -eq $null)
350+
{
351+
$snap = Get-AzWebAppSnapshot $app
352+
if ($isRecordMode)
353+
{
354+
Start-Sleep -Seconds 60
355+
}
356+
}
357+
358+
# Test named parameters
359+
$snapshots = Get-AzWebAppSnapshot -ResourceGroupName $rgname -Name $wname -UseDisasterRecovery
360+
Assert-True { $snapshots.Length -gt 0 }
361+
Assert-NotNull $snapshots[0]
362+
Assert-NotNull $snapshots[0].SnapshotTime
363+
Assert-AreEqual 'Production' $snapshots[0].Slot
364+
365+
# Test positional parameters
366+
$snapshots = Get-AzWebAppSnapshot $rgname $wname
367+
Assert-True { $snapshots.Length -gt 0 }
368+
Assert-NotNull $snapshots[0]
369+
Assert-NotNull $snapshots[0].SnapshotTime
370+
Assert-AreEqual 'Production' $snapshots[0].Slot
371+
372+
# Test snapshots for slots
373+
$snapshots = Get-AzWebAppSnapshot -ResourceGroupName $rgname -Name $wname -Slot $slotName
374+
Assert-True { $snapshots.Length -gt 0 }
375+
Assert-NotNull $snapshots[0]
376+
Assert-NotNull $snapshots[0].SnapshotTime
377+
Assert-AreEqual $slotName $snapshots[0].Slot
378+
379+
# Test piping
380+
$app = Get-AzWebApp -ResourceGroupName $rgname -Name $wname
381+
$snapshots = $app | Get-AzWebAppSnapshot
382+
Assert-True { $snapshots.Length -gt 0 }
383+
Assert-NotNull $snapshots[0]
384+
Assert-NotNull $snapshots[0].SnapshotTime
385+
Assert-AreEqual 'Production' $snapshots[0].Slot
386+
387+
}
388+
finally
389+
{
390+
# Cleanup
391+
Remove-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName -Force
392+
Remove-AzWebApp -ResourceGroupName $rgname -Name $wname -Force
393+
Remove-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Force
394+
Remove-AzResourceGroup -Name $rgname -Force
395+
}
373396
}
374397

375398
function Test-RestoreWebAppSnapshot
376399
{
377-
# Test overwrite
378-
$snapshot = (Get-AzWebAppSnapshot $snapshotRgName $snapshotAppName)[0]
379-
Restore-AzWebAppSnapshot -ResourceGroupName $snapshotRgName -Name $snapshotAppName -InputObject $snapshot -Force -RecoverConfiguration
400+
# Setup
401+
$rgname = Get-ResourceGroupName
402+
$wname = Get-WebsiteName
403+
$slotName = "staging"
404+
$location = Get-WebLocation
405+
$whpName = Get-WebHostPlanName
406+
$tier = "Premium"
407+
$isRecordMode = ((Get-WebsitesTestMode) -ne 'Playback')
408+
409+
try
410+
{
411+
New-AzResourceGroup -Name $rgname -Location $location
412+
New-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Location $location -Tier $tier
413+
$app = New-AzWebApp -ResourceGroupName $rgname -Name $wname -Location $location -AppServicePlan $whpName
414+
New-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName
415+
416+
# Wait for at least 1 snapshot to exist
417+
while ($snap -eq $null)
418+
{
419+
$snap = Get-AzWebAppSnapshot $app
420+
if ($isRecordMode)
421+
{
422+
Start-Sleep -Seconds 60
423+
}
424+
}
380425

381-
# Test restore to target slot
382-
Restore-AzWebAppSnapshot $snapshotRgName $snapshotAppName $snapshotAppSlot $snapshot -RecoverConfiguration -UseDisasterRecovery -Force
426+
# Test overwrite
427+
$snapshot = (Get-AzWebAppSnapshot $rgname $wname)[0]
428+
Restore-AzWebAppSnapshot -ResourceGroupName $rgname -Name $wname -InputObject $snapshot -Force -RecoverConfiguration
383429

384-
# Test piping and background job
385-
$job = $snapshot | Restore-AzWebAppSnapshot -Force -AsJob
386-
$job | Wait-Job
430+
if ($isRecordMode)
431+
{
432+
Start-Sleep -Seconds 600
433+
}
434+
435+
# Test restore to target slot
436+
Restore-AzWebAppSnapshot $rgname $wname $slotName $snapshot -RecoverConfiguration -UseDisasterRecovery -Force
437+
438+
if ($isRecordMode)
439+
{
440+
Start-Sleep -Seconds 600
441+
}
442+
443+
# Test piping and background job
444+
$job = $snapshot | Restore-AzWebAppSnapshot -Force -AsJob
445+
$job | Wait-Job
446+
447+
if ($isRecordMode)
448+
{
449+
Start-Sleep -Seconds 600
450+
}
451+
}
452+
finally
453+
{
454+
# Cleanup
455+
Remove-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName -Force
456+
Remove-AzWebApp -ResourceGroupName $rgname -Name $wname -Force
457+
Remove-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Force
458+
Remove-AzResourceGroup -Name $rgname -Force
459+
}
387460
}
388461

389462
function Test-GetDeletedWebApp
@@ -402,16 +475,16 @@ function Test-GetDeletedWebApp
402475
New-AzResourceGroup -Name $rgname -Location $location
403476
New-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Location $location -Tier $tier
404477
New-AzWebApp -ResourceGroupName $rgname -Name $wname -Location $location -AppServicePlan $whpName
405-
New-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName -AppServicePlan $planName
478+
New-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName
406479
Remove-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName -Force
407480
Remove-AzWebApp -ResourceGroupName $rgname -Name $wname -Force
408481

409-
$deletedApp = Get-AzDeletedWebApp -ResourceGroupName $rgname -Name $wname -Slot "Production"
482+
$deletedApp = Get-AzDeletedWebApp -ResourceGroupName $rgname -Name $wname -Slot "Production" -Location $location
410483
Assert-NotNull $deletedApp
411484
Assert-AreEqual $rgname $deletedApp.ResourceGroupName
412485
Assert-AreEqual $wname $deletedApp.Name
413486

414-
$deletedSlot = Get-AzDeletedWebApp -ResourceGroupName $rgname -Name $wname -Slot $slotName
487+
$deletedSlot = Get-AzDeletedWebApp -ResourceGroupName $rgname -Name $wname -Slot $slotName -Location $location
415488
Assert-NotNull $deletedSlot
416489
Assert-AreEqual $rgname $deletedSlot.ResourceGroupName
417490
Assert-AreEqual $wname $deletedSlot.Name
@@ -432,22 +505,52 @@ function Test-RestoreDeletedWebAppToExisting
432505
$wname = Get-WebsiteName
433506
$slotName = "staging"
434507
$appWithSlotName = "$wname/$slotName"
508+
$delName = Get-WebsiteName
509+
$delSlot = "testslot"
435510
$location = Get-WebLocation
436511
$whpName = Get-WebHostPlanName
437-
$tier = "Standard"
512+
$tier = "Premium"
513+
$isRecordMode = ((Get-WebsitesTestMode) -ne 'Playback')
438514

439515
try
440516
{
441517
New-AzResourceGroup -Name $rgname -Location $location
442518
New-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Location $location -Tier $tier
443519
New-AzWebApp -ResourceGroupName $rgname -Name $wname -Location $location -AppServicePlan $whpName
444-
New-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName -AppServicePlan $planName
520+
New-AzWebAppSlot -ResourceGroupName $rgname -Name $wname -Slot $slotName
521+
522+
# Make a webapp and delete it once a snapshot is available
523+
$tmpApp = New-AzWebApp -ResourceGroupName $rgname -Name $delName -Location $location -AppServicePlan $whpName
524+
New-AzWebAppSlot -ResourceGroupName $rgname -Name $delName -Slot $delSlot
525+
526+
while ($snap -eq $null)
527+
{
528+
$snap = Get-AzWebAppSnapshot $tmpApp
529+
if ($isRecordMode)
530+
{
531+
Start-Sleep -Seconds 60
532+
}
533+
}
534+
535+
Remove-AzWebAppSlot -ResourceGroupName $rgname -Name $delName -Slot $delSlot -Force
536+
Remove-AzWebApp -ResourceGroupName $rgname -Name $delName -Force
537+
538+
$deletedApp = Get-AzDeletedWebApp -ResourceGroupName $rgname -Name $delName -Slot "Production"
445539

446-
$deletedApp = Get-AzDeletedWebApp -ResourceGroupName $undeleteRgName -Name $undeleteAppName -Slot "Production"
447540
# Test the InputObject parameter set
448541
$restoredApp = Restore-AzDeletedWebApp $deletedApp -TargetResourceGroupName $rgname -TargetName $wname -Force
542+
if ($isRecordMode)
543+
{
544+
# Need extra time for restore operation to resolve globally
545+
Start-Sleep -Seconds 900
546+
}
547+
449548
# Test the FromDeletedResourceName parameter set
450-
$restoredSlot = Restore-AzDeletedWebApp -ResourceGroupName $undeleteRgName -Name $undeleteAppName -Slot $undeleteSlot -TargetResourceGroupName $rgname -TargetName $wname -TargetSlot $slotName -Force
549+
$restoredSlot = Restore-AzDeletedWebApp -ResourceGroupName $rgname -Name $delName -Slot $delSlot -TargetResourceGroupName $rgname -TargetName $wname -TargetSlot $slotName -Force
550+
if ($isRecordMode)
551+
{
552+
Start-Sleep -Seconds 900
553+
}
451554

452555
Assert-NotNull $restoredApp
453556
Assert-AreEqual $rgname $restoredApp.ResourceGroup
@@ -473,14 +576,30 @@ function Test-RestoreDeletedWebAppToNew
473576
$rgname = Get-ResourceGroupName
474577
$location = Get-WebLocation
475578
$whpName = Get-WebHostPlanName
476-
$tier = "Standard"
579+
$tier = "Premium"
580+
$delName = Get-WebsiteName
581+
$isRecordMode = ((Get-WebsitesTestMode) -ne 'Playback')
477582

478583
try
479584
{
480585
#Setup
481586
New-AzResourceGroup -Name $rgname -Location $location
482587
New-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Location $location -Tier $tier
483-
$deletedApp = Get-AzDeletedWebApp -ResourceGroupName $undeleteRgName -Name $undeleteAppName -Slot "Production"
588+
589+
# Make a webapp and delete it once a snapshot is available
590+
$tmpApp = New-AzWebApp -ResourceGroupName $rgname -Name $delName -Location $location -AppServicePlan $whpName
591+
while ($snap -eq $null)
592+
{
593+
$snap = Get-AzWebAppSnapshot $tmpApp
594+
if ($isRecordMode)
595+
{
596+
Start-Sleep -Seconds 60
597+
}
598+
}
599+
600+
Remove-AzWebApp -ResourceGroupName $rgname -Name $delName -Force
601+
$deletedApp = Get-AzDeletedWebApp -ResourceGroupName $rgname -Name $delName -Slot "Production"
602+
484603
# Test piping the deleted app
485604
$job = $deletedApp | Restore-AzDeletedWebApp -TargetResourceGroupName $rgname -TargetAppServicePlanName $whpName -UseDisasterRecovery -Force -AsJob
486605
$result = $job | Wait-Job
@@ -489,12 +608,18 @@ function Test-RestoreDeletedWebAppToNew
489608
$restoredApp = $job | Receive-Job
490609
Assert-NotNull $restoredApp
491610
Assert-AreEqual $rgname $restoredApp.ResourceGroup
492-
Assert-AreEqual $undeleteAppName $restoredApp.Name
611+
Assert-AreEqual $delName $restoredApp.Name
612+
613+
if ($isRecordMode)
614+
{
615+
# Need extra time for restore operation to resolve globally, or cleanup will be blocked
616+
Start-Sleep -Seconds 900
617+
}
493618
}
494619
finally
495620
{
496621
# Cleanup
497-
Remove-AzWebApp -ResourceGroupName $rgname -Name $undeleteAppName -Force
622+
Remove-AzWebApp -ResourceGroupName $rgname -Name $delName -Force
498623
Remove-AzAppServicePlan -ResourceGroupName $rgname -Name $whpName -Force
499624
Remove-AzResourceGroup -Name $rgname -Force
500625
}

0 commit comments

Comments
 (0)