Skip to content

Commit eea118a

Browse files
authored
[Storage] Support VLW (#15545)
* [Storage] Support VLW * fix review comment
1 parent 6cde428 commit eea118a

29 files changed

+8664
-3417
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,12 @@ public void TestStorageBlobChangeFeed()
107107
{
108108
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobChangeFeed");
109109
}
110+
111+
[Fact]
112+
[Trait(Category.AcceptanceType, Category.CheckIn)]
113+
public void TestStorageBlobContainerVLW()
114+
{
115+
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobContainerVLW");
116+
}
110117
}
111118
}

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,85 @@ function Test-StorageBlobContainerLegalHold
297297
}
298298
}
299299

300+
<#
301+
.SYNOPSIS
302+
Test StorageAccount ObjectLevelWorm
303+
.DESCRIPTION
304+
SmokeTest
305+
#>
306+
function Test-StorageBlobContainerVLW
307+
{
308+
# Setup
309+
$rgname = Get-StorageManagementTestResourceName;
310+
311+
try
312+
{
313+
# Test
314+
$stoname = 'sto' + $rgname;
315+
$stotype = 'Standard_GRS';
316+
$loc = Get-ProviderLocation_Canary ResourceManagement;
317+
$kind = 'StorageV2'
318+
$containerName = "container"+ $rgname
319+
$containerName2 = "container2"+ $rgname
320+
321+
Write-Verbose "RGName: $rgname | Loc: $loc"
322+
New-AzResourceGroup -Name $rgname -Location $loc;
323+
324+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype -Kind $kind
325+
$stos = Get-AzStorageAccount -ResourceGroupName $rgname;
326+
327+
# enabled versioning
328+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname -IsVersioningEnabled $true
329+
$property = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname
330+
Assert-AreEqual $true $property.IsVersioningEnabled
331+
332+
# create container with ImmutableStorageWithVersioning
333+
New-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName -EnableImmutableStorageWithVersioning
334+
$container = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName
335+
Assert-AreEqual $rgname $container.ResourceGroupName
336+
Assert-AreEqual $stoname $container.StorageAccountName
337+
Assert-AreEqual $containerName $container.Name
338+
Assert-AreEqual $false $container.HasLegalHold
339+
Assert-AreEqual $false $container.HasImmutabilityPolicy
340+
Assert-AreEqual $true $container.ImmutableStorageWithVersioning.Enabled
341+
342+
# migrate container to enable VLW
343+
New-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName2
344+
$container = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName2
345+
Assert-AreEqual $rgname $container.ResourceGroupName
346+
Assert-AreEqual $stoname $container.StorageAccountName
347+
Assert-AreEqual $containerName2 $container.Name
348+
Assert-AreEqual $false $container.HasLegalHold
349+
Assert-AreEqual $false $container.HasImmutabilityPolicy
350+
Assert-AreNotEqual $true $container.ImmutableStorageWithVersioning.Enabled
351+
352+
$immutabilityPeriod =1
353+
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName2 -ImmutabilityPeriod $immutabilityPeriod
354+
$policy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName2
355+
Assert-AreEqual $immutabilityPeriod $policy.ImmutabilityPeriodSinceCreationInDays
356+
Assert-AreEqual Unlocked $policy.State
357+
358+
$t = Invoke-AzRmStorageContainerImmutableStorageWithVersioningMigration -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName2 -asjob
359+
$t | Wait-Job
360+
$container = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName2
361+
Assert-AreEqual $true $container.ImmutableStorageWithVersioning.Enabled
362+
363+
# remove the containers
364+
Remove-AzRmStorageContainer -Force -StorageAccount $stos -Name $containerName
365+
Remove-AzRmStorageContainer -Force -StorageAccount $stos -Name $containerName2
366+
$containers = Get-AzRmStorageContainer -StorageAccount $stos
367+
Assert-AreEqual 0 $containers.Count
368+
369+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname;
370+
}
371+
finally
372+
{
373+
# Cleanup
374+
Clean-ResourceGroup $rgname
375+
}
376+
}
377+
378+
300379

301380
function Test-StorageBlobContainerImmutabilityPolicy
302381
{
@@ -669,6 +748,8 @@ function Test-StorageBlobORS
669748
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
670749
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
671750
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
751+
$destPolicy | Remove-AzStorageObjectReplicationPolicy
752+
$srcPolicy | Remove-AzStorageObjectReplicationPolicy
672753

673754
# disable AllowCrossTenantReplication
674755
$sto1 = Set-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 -AllowCrossTenantReplication $false -EnableHttpsTrafficOnly $true

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

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -336,41 +336,24 @@ function Test-Blob
336336
Disable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $ResourceGroupName -Name $StorageAccountName
337337
Remove-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext -Force
338338

339-
# container softdelete test
340-
## Enabled container softdelete,then create and delete a container
341-
Enable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -RetentionDays 3
342-
$containerNamesoftdelete = "softdeletecontainer"
343-
$newcontainerName = "newcontainer"
344-
New-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext
345-
Remove-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext -Force
346-
## Get container without -IncludeDeleted, won't list out deleted containers
347-
$deletedcontainer = Get-AzStorageContainer -Context $storageContext | ?{$_.IsDeleted}
348-
Assert-AreEqual 0 $deletedcontainer.Count
349-
## Get container with -IncludeDeleted, will list out deleted containers
350-
$deletedcontainer = Get-AzStorageContainer -Context $storageContext -IncludeDeleted | ?{$_.IsDeleted}
351-
Assert-AreEqual 1 $deletedcontainer.Count
352-
Assert-AreEqual $true $deletedcontainer.IsDeleted
353-
Assert-NotNull $deletedcontainer.VersionId
354-
## restore container with pipeline, to same container name
355-
sleep 60 # need wait for some time, or restore will fail with 409 (The specified container is being deleted.)
356-
$deletedcontainer | Restore-AzStorageContainer
357-
$container = Get-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext
358-
Assert-AreEqual 1 $container.Count
359-
Assert-Null $container.IsDeleted
360-
Assert-Null $container.VersionId
361-
## restore container with parameter, to a new container name
362-
Remove-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext -Force
363-
$deletedcontainer = Get-AzStorageContainer -Context $storageContext -IncludeDeleted | ?{$_.IsDeleted}
364-
Assert-AreEqual 1 $deletedcontainer.Count
365-
sleep 60 # need wait for some time, or restore will fail with 409 (The specified container is being deleted.)
366-
Restore-AzStorageContainer -Name $deletedcontainer[0].Name -VersionId $deletedcontainer[0].VersionId -DestinationContainerName $newcontainerName -Context $storageContext
367-
$container = Get-AzStorageContainer -Name $newcontainerName -Context $storageContext
368-
Assert-AreEqual 1 $container.Count
369-
Assert-AreEqual $newcontainerName $container.Name
370-
Assert-Null $container.IsDeleted
371-
Assert-Null $container.VersionId
372-
Disable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $ResourceGroupName -Name $StorageAccountName
373-
Remove-AzStorageContainer -Name $newcontainerName -Context $storageContext -Force
339+
# VLW
340+
## enabled versioning
341+
Update-AzStorageBlobServiceProperty -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -IsVersioningEnabled $true
342+
$containerNamevlw = "vlwcontainer"
343+
# create container with ImmutableStorageWithVersioning
344+
New-AzRmStorageContainer -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -Name $containerNamevlw -EnableImmutableStorageWithVersioning
345+
# upload a blob
346+
Set-AzStorageBlobContent -File $localSrcFile -Container $containerNamevlw -Blob $objectName -Force -Context $storageContext
347+
# manage ImmutabilityPolicy
348+
$policy = Set-AzStorageBlobImmutabilityPolicy -Container $containerNamevlw -Blob $objectName -ExpiriesOn (Get-Date).AddDays(1) -PolicyMode Unlocked -Context $storageContext
349+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
350+
Remove-AzStorageBlobImmutabilityPolicy -Container $containerNamevlw -Blob $objectName -Context $storageContext
351+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
352+
# manage legalhold
353+
Set-AzStorageBlobLegalHold -Container $containerNamevlw -Blob $objectName -Context $storageContext -EnableLegalHold
354+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
355+
Set-AzStorageBlobLegalHold -Container $containerNamevlw -Blob $objectName -Context $storageContext -DisableLegalHold
356+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
374357

375358
# Clean Storage Account
376359
Remove-AzStorageContainer -Name $containerName -Force -Context $storageContext

0 commit comments

Comments
 (0)