Skip to content

Commit ebdf315

Browse files
authored
[Storage] Support VLW and account level worm GA (Azure#16305)
* [Storage] Support VLW (Azure#15545) * [Storage] Support VLW * fix review comment * [Storage] Support Account level worm (Azure#15988) * [Storage] Support Account level worm * Fix CI failure * remove AllowProtectedAppendWrite as it's not GA * fix some typo in help
1 parent 26d8c9a commit ebdf315

File tree

38 files changed

+10169
-3336
lines changed

38 files changed

+10169
-3336
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,5 +268,11 @@ public void TestAzureStorageAccountHierarchicalNamespaceUpgrade()
268268
TestRunner.RunTestScript("Test-AzureStorageAccountHierarchicalNamespaceUpgrade");
269269
}
270270

271+
[Fact]
272+
[Trait(Category.AcceptanceType, Category.CheckIn)]
273+
public void TestAzureStorageAccountWorm()
274+
{
275+
TestRunner.RunTestScript("Test-AzureStorageAccountWorm");
276+
}
271277
}
272278
}

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2065,4 +2065,54 @@ function Test-AzureStorageAccountHierarchicalNamespaceUpgrade
20652065
# Cleanup
20662066
Clean-ResourceGroup $rgname
20672067
}
2068+
}
2069+
2070+
<#
2071+
.SYNOPSIS
2072+
Test AzureStorageAccountWorm
2073+
.DESCRIPTION
2074+
SmokeTest
2075+
#>
2076+
function Test-AzureStorageAccountWorm
2077+
{
2078+
# Setup
2079+
$rgname = Get-StorageManagementTestResourceName;
2080+
2081+
try
2082+
{
2083+
# Test
2084+
$stoname = 'sto' + $rgname;
2085+
$stotype = 'Standard_LRS';
2086+
$loc = Get-ProviderLocation_Canary ResourceManagement;
2087+
$kind = 'StorageV2'
2088+
2089+
New-AzResourceGroup -Name $rgname -Location $loc;
2090+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype -Kind $kind -EnableAccountLevelImmutability -ImmutabilityPeriod 1 -ImmutabilityPolicyState Disabled
2091+
2092+
Retry-IfException { $global:sto = Get-AzStorageAccount -ResourceGroupName $rgname -Name $stoname; }
2093+
Assert-AreEqual $stoname $sto.StorageAccountName;
2094+
Assert-AreEqual $stotype $sto.Sku.Name;
2095+
Assert-AreEqual $loc.ToLower().Replace(" ", "") $sto.Location;
2096+
Assert-AreEqual $kind $sto.Kind;
2097+
Assert-AreEqual $true $sto.ImmutableStorageWithVersioning.Enabled;
2098+
Assert-AreEqual 1 $sto.ImmutableStorageWithVersioning.ImmutabilityPolicy.ImmutabilityPeriodSinceCreationInDays;
2099+
Assert-AreEqual Disabled $sto.ImmutableStorageWithVersioning.ImmutabilityPolicy.State;
2100+
2101+
Retry-IfException { $global:sto = Set-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -ImmutabilityPeriod 2 -ImmutabilityPolicyState Unlocked }
2102+
Assert-AreEqual $true $sto.ImmutableStorageWithVersioning.Enabled;
2103+
Assert-AreEqual 2 $sto.ImmutableStorageWithVersioning.ImmutabilityPolicy.ImmutabilityPeriodSinceCreationInDays;
2104+
Assert-AreEqual Unlocked $sto.ImmutableStorageWithVersioning.ImmutabilityPolicy.State;
2105+
2106+
Retry-IfException { $global:sto = Set-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -ImmutabilityPolicyState Locked }
2107+
Assert-AreEqual $true $sto.ImmutableStorageWithVersioning.Enabled;
2108+
Assert-AreEqual 2 $sto.ImmutableStorageWithVersioning.ImmutabilityPolicy.ImmutabilityPeriodSinceCreationInDays;
2109+
Assert-AreEqual Locked $sto.ImmutableStorageWithVersioning.ImmutabilityPolicy.State;
2110+
2111+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname;
2112+
}
2113+
finally
2114+
{
2115+
# Cleanup
2116+
Clean-ResourceGroup $rgname
2117+
}
20682118
}

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 TestStorageBlobLastAccessTimeTracking()
107107
{
108108
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobLastAccessTimeTracking");
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
@@ -298,6 +298,85 @@ function Test-StorageBlobContainerLegalHold
298298
}
299299
}
300300

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

302381
function Test-StorageBlobContainerImmutabilityPolicy
303382
{
@@ -662,6 +741,8 @@ function Test-StorageBlobORS
662741
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
663742
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
664743
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
744+
$destPolicy | Remove-AzStorageObjectReplicationPolicy
745+
$srcPolicy | Remove-AzStorageObjectReplicationPolicy
665746

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

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,25 @@ function Test-Blob
325325
Disable-AzStorageContainerDeleteRetentionPolicy -ResourceGroupName $ResourceGroupName -Name $StorageAccountName
326326
Remove-AzStorageContainer -Name $containerNamesoftdelete -Context $storageContext -Force
327327

328+
# VLW
329+
## enabled versioning
330+
Update-AzStorageBlobServiceProperty -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -IsVersioningEnabled $true
331+
$containerNamevlw = "vlwcontainer"
332+
# create container with ImmutableStorageWithVersioning
333+
New-AzRmStorageContainer -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -Name $containerNamevlw -EnableImmutableStorageWithVersioning
334+
# upload a blob
335+
Set-AzStorageBlobContent -File $localSrcFile -Container $containerNamevlw -Blob $objectName -Force -Context $storageContext
336+
# manage ImmutabilityPolicy
337+
$policy = Set-AzStorageBlobImmutabilityPolicy -Container $containerNamevlw -Blob $objectName -ExpiriesOn (Get-Date).AddDays(1) -PolicyMode Unlocked -Context $storageContext
338+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
339+
Remove-AzStorageBlobImmutabilityPolicy -Container $containerNamevlw -Blob $objectName -Context $storageContext
340+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
341+
# manage legalhold
342+
Set-AzStorageBlobLegalHold -Container $containerNamevlw -Blob $objectName -Context $storageContext -EnableLegalHold
343+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
344+
Set-AzStorageBlobLegalHold -Container $containerNamevlw -Blob $objectName -Context $storageContext -DisableLegalHold
345+
$blob = Get-AzStorageBlob -Container $containerNamevlw -Blob $objectName -Context $storageContext
346+
328347
# Clean Storage Account
329348
Remove-AzStorageContainer -Name $containerName -Force -Context $storageContext
330349

0 commit comments

Comments
 (0)