Skip to content

Commit c1e88de

Browse files
authored
[Storage] Support container soft delete (#12914)
1 parent b888a26 commit c1e88de

File tree

41 files changed

+2777
-113
lines changed

Some content is hidden

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

41 files changed

+2777
-113
lines changed

src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,12 @@ public void TestStorageBlobLastAccessTimeTracking()
9393
{
9494
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobLastAccessTimeTracking");
9595
}
96+
97+
[Fact]
98+
[Trait(Category.AcceptanceType, Category.CheckIn)]
99+
public void TestStorageBlobContainerSoftDelete()
100+
{
101+
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobContainerSoftDelete");
102+
}
96103
}
97104
}

src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.ps1

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,3 +746,65 @@ function Test-StorageBlobLastAccessTimeTracking
746746
}
747747

748748

749+
750+
<#
751+
.SYNOPSIS
752+
Test StorageAccount Blob Container SoftDelete in Service Properties
753+
.DESCRIPTION
754+
SmokeTest
755+
#>
756+
function Test-StorageBlobContainerSoftDelete
757+
{
758+
# Setup
759+
$rgname = Get-StorageManagementTestResourceName;
760+
761+
try
762+
{
763+
# Test
764+
$stoname = 'sto' + $rgname;
765+
$stotype = 'Standard_GRS';
766+
$loc = Get-ProviderLocation_Canary ResourceManagement;
767+
$kind = 'StorageV2'
768+
769+
Write-Verbose "RGName: $rgname | Loc: $loc"
770+
New-AzResourceGroup -Name $rgname -Location $loc;
771+
772+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype -Kind $kind
773+
$stos = Get-AzStorageAccount -ResourceGroupName $rgname;
774+
775+
# Enable Blob Delete Retention Policy
776+
$policy = Enable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -PassThru -RetentionDays 30
777+
Assert-AreEqual $true $policy.Enabled
778+
Assert-AreEqual 30 $policy.Days
779+
$property = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname
780+
Assert-AreEqual $true $property.ContainerDeleteRetentionPolicy.Enabled
781+
Assert-AreEqual 30 $property.ContainerDeleteRetentionPolicy.Days
782+
783+
# Create and delete container, then get container
784+
$contaierName = "testcontaienr"
785+
New-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $contaierName
786+
Remove-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $contaierName -Force
787+
$cons = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname
788+
Assert-AreEqual 0 $cons.Count
789+
$cons = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -IncludeDeleted
790+
Assert-AreEqual 1 $cons.Count
791+
Assert-AreEqual $contaierName $cons[0].Name
792+
Assert-AreEqual $true $cons[0].Deleted
793+
794+
795+
# Disable Blob Delete Retention Policy
796+
$policy = Disable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -PassThru
797+
Assert-AreEqual $false $policy.Enabled
798+
$property = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname
799+
Assert-AreEqual $false $property.ContainerDeleteRetentionPolicy.Enabled
800+
801+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname;
802+
}
803+
finally
804+
{
805+
# Cleanup
806+
Clean-ResourceGroup $rgname
807+
}
808+
}
809+
810+

src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.ps1

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,43 @@ function Test-Blob
306306
Assert-AreEqual $true $container.BlobContainerProperties.PreventEncryptionScopeOverride
307307
$blob = Set-AzStorageBlobContent -Context $storageContext -File $localSrcFile -Container $containerName -Blob encryscopetest -EncryptionScope $scopename
308308
Assert-AreEqual $scopename $blob.BlobProperties.EncryptionScope
309-
Remove-AzStorageContainer -Name $containerName2 -Force -Context $storageContext
309+
Remove-AzStorageContainer -Name $containerName2 -Force -Context $storageContext
310+
311+
# container softdelete test
312+
## Enabled container softdelete,then create and delete a container
313+
Enable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -RetentionDays 3
314+
$containerNamesoftdelete = "softdeletecontainer"
315+
$newcontainerName = "newcontainer"
316+
New-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext
317+
Remove-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext -Force
318+
## Get container without -IncludeDeleted, won't list out deleted containers
319+
$deletedcontainer = Get-AzStorageContainer -Context $storageContext | ?{$_.IsDeleted}
320+
Assert-AreEqual 0 $deletedcontainer.Count
321+
## Get container with -IncludeDeleted, will list out deleted containers
322+
$deletedcontainer = Get-AzStorageContainer -Context $storageContext -IncludeDeleted | ?{$_.IsDeleted}
323+
Assert-AreEqual 1 $deletedcontainer.Count
324+
Assert-AreEqual $true $deletedcontainer.IsDeleted
325+
Assert-NotNull $deletedcontainer.VersionId
326+
## restore container with pipeline, to same container name
327+
sleep 60 # need wait for some time, or restore will fail with 409 (The specified container is being deleted.)
328+
$deletedcontainer | Restore-AzStorageContainer
329+
$container = Get-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext
330+
Assert-AreEqual 1 $container.Count
331+
Assert-Null $container.IsDeleted
332+
Assert-Null $container.VersionId
333+
## restore container with parameter, to a new container name
334+
Remove-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext -Force
335+
$deletedcontainer = Get-AzStorageContainer -Context $storageContext -IncludeDeleted | ?{$_.IsDeleted}
336+
Assert-AreEqual 1 $deletedcontainer.Count
337+
sleep 60 # need wait for some time, or restore will fail with 409 (The specified container is being deleted.)
338+
Restore-AzStorageContainer -Name $deletedcontainer[0].Name -VersionId $deletedcontainer[0].VersionId -DestinationContainerName $newcontainerName -Context $storageContext
339+
$container = Get-AzStorageContainer -Name $newcontainerName -Context $storageContext
340+
Assert-AreEqual 1 $container.Count
341+
Assert-AreEqual $newcontainerName $container.Name
342+
Assert-Null $container.IsDeleted
343+
Assert-Null $container.VersionId
344+
Disable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $ResourceGroupName -Name $StorageAccountName
345+
Remove-AzStorageContainer -Name $newcontainerName -Context $storageContext -Force
310346

311347
# Clean Storage Account
312348
Remove-AzStorageContainer -Name $containerName -Force -Context $storageContext

0 commit comments

Comments
 (0)