public async Task SetImmutibilityPolicyAsync_SetLegalHold_ContainerSas(BlobContainerSasPermissions sasPermissions) { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = await GetNewBlobClient(vlwContainer.Container, GetNewBlobName()); BlobContainerClient sharedKeyContainer = InstrumentClient( GetServiceClient_OAuthAccount_SharedKey().GetBlobContainerClient(vlwContainer.Container.Name)); Uri containerSasUri = sharedKeyContainer.GenerateSasUri(sasPermissions, Recording.UtcNow.AddDays(1)); BlobBaseClient sasBlobClient = InstrumentClient(new BlobContainerClient(containerSasUri, GetOptions()).GetBlobBaseClient(blob.Name)); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); // Act Response <BlobImmutabilityPolicy> response = await sasBlobClient.SetImmutabilityPolicyAsync( immutabilityPolicy : immutabilityPolicy); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); // Act Response <BlobLegalHoldResult> legalHoldResponse = await sasBlobClient.SetLegalHoldAsync(hasLegalHold : false); // Assert Assert.IsFalse(legalHoldResponse.Value.HasLegalHold); }
public async Task CreateAppendBlob_ImmutableStorageWithVersioning() { // Arrange AppendBlobClient appendBlob = InstrumentClient(_containerClient.GetAppendBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); AppendBlobCreateOptions options = new AppendBlobCreateOptions { ImmutabilityPolicy = immutabilityPolicy, HasLegalHold = true }; // Act Response <BlobContentInfo> createResponse = await appendBlob.CreateAsync(options); // Assert Response <BlobProperties> propertiesResponse = await appendBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }
public async Task SetImmutibilityPolicyAsync_IfModifiedSince_Failed() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = await GetNewBlobClient(vlwContainer.Container); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(1), PolicyMode = BlobImmutabilityPolicyMode.Locked }; BlobRequestConditions conditions = new BlobRequestConditions { IfUnmodifiedSince = Recording.UtcNow.AddDays(-1) }; // Act await TestHelper.AssertExpectedExceptionAsync <RequestFailedException>( blob.SetImmutabilityPolicyAsync( immutabilityPolicy: immutabilityPolicy, conditions: conditions), e => Assert.AreEqual(BlobErrorCode.ConditionNotMet.ToString(), e.ErrorCode)); }
public async Task CreatePageBlob_ImmutableStorageWithVersioning() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); PageBlobClient pageBlob = InstrumentClient(vlwContainer.Container.GetPageBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); PageBlobCreateOptions options = new PageBlobCreateOptions { ImmutabilityPolicy = immutabilityPolicy, LegalHold = true }; // Act Response <BlobContentInfo> createResponse = await pageBlob.CreateAsync(size : Constants.KB, options); // Assert Response <BlobProperties> propertiesResponse = await pageBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }
public async Task SyncCopyFromUri_ImmutableStorageWithVersioning() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient srcBlob = await GetNewBlobClient(vlwContainer.Container); BlockBlobClient destBlob = InstrumentClient(vlwContainer.Container.GetBlockBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); BlobCopyFromUriOptions options = new BlobCopyFromUriOptions { DestinationImmutabilityPolicy = immutabilityPolicy, LegalHold = true }; // Act await destBlob.SyncCopyFromUriAsync(srcBlob.Uri, options); // Assert Response <BlobProperties> propertiesResponse = await destBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }
public async Task StartCopyFromUri_ImmutableStorageWithVersioning() { // Arrange BlobBaseClient srcBlob = await GetNewBlobClient(_containerClient); BlockBlobClient destBlob = InstrumentClient(_containerClient.GetBlockBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); BlobCopyFromUriOptions options = new BlobCopyFromUriOptions { DestinationImmutabilityPolicy = immutabilityPolicy, LegalHold = true }; // Act Operation <long> operation = await destBlob.StartCopyFromUriAsync(srcBlob.Uri, options); await operation.WaitForCompletionAsync(); // Assert Response <BlobProperties> propertiesResponse = await destBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }
public async Task SetImmutibilityPolicyAsync_IfModifiedSince() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = await GetNewBlobClient(vlwContainer.Container); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); BlobRequestConditions conditions = new BlobRequestConditions { IfUnmodifiedSince = Recording.UtcNow.AddDays(1) }; // Act Response <BlobImmutabilityPolicy> response = await blob.SetImmutabilityPolicyAsync( immutabilityPolicy : immutabilityPolicy, conditions : conditions); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); }
public async Task SetImmutibilityPolicyAsync_SetLegalHold_BlobSnapshotSas(SnapshotSasPermissions sasPermissions) { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = await GetNewBlobClient(vlwContainer.Container, GetNewBlobName()); Response <BlobSnapshotInfo> snapshotResponse = await blob.CreateSnapshotAsync(); BlobSasBuilder blobSasBuilder = new BlobSasBuilder { BlobContainerName = vlwContainer.Container.Name, BlobName = blob.Name, ExpiresOn = Recording.UtcNow.AddDays(1), Snapshot = snapshotResponse.Value.Snapshot }; blobSasBuilder.SetPermissions(sasPermissions); StorageSharedKeyCredential sharedKeyCredential = new StorageSharedKeyCredential(TestConfigOAuth.AccountName, TestConfigOAuth.AccountKey); BlobUriBuilder uriBuilder = new BlobUriBuilder(blob.Uri) { Snapshot = snapshotResponse.Value.Snapshot, Sas = blobSasBuilder.ToSasQueryParameters(sharedKeyCredential) }; BlobBaseClient sasBlobSnapshotClient = InstrumentClient(new BlobBaseClient(uriBuilder.ToUri(), GetOptions())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); // Act Response <BlobImmutabilityPolicy> response = await sasBlobSnapshotClient.SetImmutabilityPolicyAsync( immutabilityPolicy : immutabilityPolicy); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); // Act Response <BlobLegalHoldResult> legalHoldResponse = await sasBlobSnapshotClient.SetLegalHoldAsync(hasLegalHold : false); // Assert Assert.IsFalse(legalHoldResponse.Value.HasLegalHold); await sasBlobSnapshotClient.DeleteImmutabilityPolicyAsync(); // Delete blob snapshot. await blob.WithSnapshot(snapshotResponse.Value.Snapshot).DeleteAsync(); }
public async Task SetImmutibilityPolicyAsync() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = await GetNewBlobClient(vlwContainer.Container); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); // Test SetImmutabilityPolicyAsync API and validate response. // Act Response <BlobImmutabilityPolicy> response = await blob.SetImmutabilityPolicyAsync(immutabilityPolicy); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); // Validate that we are correctly deserializing Get Properties response. // Act Response <BlobProperties> propertiesResponse = await blob.GetPropertiesAsync(); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); // Validate we are correctly deserializing Blob Items. // Act List <BlobItem> blobItems = new List <BlobItem>(); await foreach (BlobItem blobItem in vlwContainer.Container.GetBlobsAsync(traits: BlobTraits.ImmutabilityPolicy)) { blobItems.Add(blobItem); } // Assert Assert.AreEqual(1, blobItems.Count); Assert.AreEqual(expectedImmutabilityPolicyExpiry, blobItems[0].Properties.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, blobItems[0].Properties.ImmutabilityPolicy.PolicyMode); // Validate we are correctly deserialzing Get Blob response. // Act Response <BlobDownloadInfo> downloadResponse = await blob.DownloadAsync(); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, downloadResponse.Value.Details.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, downloadResponse.Value.Details.ImmutabilityPolicy.PolicyMode); }
public async Task SetImmutibilityPolicyAsync_SetLegalHold_BlobVersionSas(BlobVersionSasPermissions sasPermissions) { // Arrange BlobBaseClient blob = await GetNewBlobClient(_containerClient, GetNewBlobName()); IDictionary <string, string> metadata = BuildMetadata(); Response <BlobInfo> metadataResponse = await blob.SetMetadataAsync(metadata); BlobSasBuilder blobSasBuilder = new BlobSasBuilder { BlobContainerName = _containerClient.Name, BlobName = blob.Name, ExpiresOn = Recording.UtcNow.AddDays(1), Version = metadataResponse.Value.VersionId }; blobSasBuilder.SetPermissions(sasPermissions); StorageSharedKeyCredential sharedKeyCredential = new StorageSharedKeyCredential(Tenants.TestConfigOAuth.AccountName, Tenants.TestConfigOAuth.AccountKey); BlobUriBuilder uriBuilder = new BlobUriBuilder(blob.Uri) { VersionId = metadataResponse.Value.VersionId, Sas = blobSasBuilder.ToSasQueryParameters(sharedKeyCredential) }; BlobBaseClient sasBlobSnapshotClient = InstrumentClient(new BlobBaseClient(uriBuilder.ToUri(), GetOptions())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); // Act Response <BlobImmutabilityPolicy> response = await sasBlobSnapshotClient.SetImmutabilityPolicyAsync( immutabilityPolicy : immutabilityPolicy); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); // Act Response <BlobLegalHoldResult> legalHoldResponse = await sasBlobSnapshotClient.SetLegalHoldAsync(hasLegalHold : false); // Assert Assert.IsFalse(legalHoldResponse.Value.HasLegalHold); }
public async Task SetImmutibilityPolicyAsync_Error() { // Arrange BlobBaseClient blob = InstrumentClient(_containerClient.GetBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(5), PolicyMode = BlobImmutabilityPolicyMode.Locked }; // Act await TestHelper.AssertExpectedExceptionAsync <RequestFailedException>( blob.SetImmutabilityPolicyAsync(immutabilityPolicy), e => Assert.AreEqual(BlobErrorCode.BlobNotFound.ToString(), e.ErrorCode)); }
public async Task SetImmutibilityPolicyAsync_Mutable() { // Arrange BlobBaseClient blob = InstrumentClient(_containerClient.GetBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(5), PolicyMode = BlobImmutabilityPolicyMode.Mutable }; // Act await TestHelper.AssertExpectedExceptionAsync <ArgumentException>( blob.SetImmutabilityPolicyAsync(immutabilityPolicy), e => Assert.AreEqual("PolicyMode must be Locked or Unlocked", e.Message)); }
public async Task SetImmutibilityPolicyAsync_InvalidRequestConditions(string invalidCondition) { // Arrange BlobBaseClient blobBaseClient = new BlobBaseClient(new Uri("https://www.doesntmatter.com"), GetOptions()); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; BlobRequestConditions conditions = new BlobRequestConditions(); switch (invalidCondition) { case nameof(BlobRequestConditions.IfMatch): conditions.IfMatch = new ETag(); break; case nameof(BlobRequestConditions.IfModifiedSince): conditions.IfModifiedSince = Recording.UtcNow.AddMinutes(5); break; case nameof(BlobRequestConditions.IfNoneMatch): conditions.IfNoneMatch = new ETag(); break; case nameof(BlobRequestConditions.LeaseId): conditions.LeaseId = string.Empty; break; case nameof(BlobRequestConditions.TagConditions): conditions.TagConditions = string.Empty; break; } // Act await TestHelper.AssertExpectedExceptionAsync <ArgumentException>( blobBaseClient.SetImmutabilityPolicyAsync( immutabilityPolicy, conditions), e => { Assert.IsTrue(e.Message.Contains($"SetImmutabilityPolicy does not support the {invalidCondition} condition(s).")); Assert.IsTrue(e.Message.Contains("conditions")); }); }
public async Task Upload_ImmutableStorageWithVersioning(bool multipart) { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlockBlobClient blockBlob = InstrumentClient(vlwContainer.Container.GetBlockBlobClient(GetNewBlobName())); byte[] data = GetRandomBuffer(Constants.KB); using Stream stream = new MemoryStream(data); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); BlobUploadOptions options = new BlobUploadOptions { ImmutabilityPolicy = immutabilityPolicy, LegalHold = true }; if (multipart) { StorageTransferOptions transferOptions = new StorageTransferOptions { InitialTransferSize = Constants.KB / 2, MaximumTransferSize = Constants.KB / 2 }; options.TransferOptions = transferOptions; } // Act await blockBlob.UploadAsync(stream, options); // Assert Response <BlobProperties> propertiesResponse = await blockBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }
public async Task SetImmutibilityPolicyAsync_Mutable() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = InstrumentClient(vlwContainer.Container.GetBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(5), PolicyMode = BlobImmutabilityPolicyMode.Mutable }; // Act await TestHelper.AssertExpectedExceptionAsync <ArgumentException>( blob.SetImmutabilityPolicyAsync(immutabilityPolicy), e => Assert.AreEqual("PolicyMode must be Locked or Unlocked", e.Message)); }
public async Task SetImmutibilityPolicyAsync_Error() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = InstrumentClient(vlwContainer.Container.GetBlobClient(GetNewBlobName())); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(5), PolicyMode = BlobImmutabilityPolicyMode.Locked }; // Act await TestHelper.AssertExpectedExceptionAsync <RequestFailedException>( blob.SetImmutabilityPolicyAsync(immutabilityPolicy), e => Assert.AreEqual(BlobErrorCode.BlobNotFound.ToString(), e.ErrorCode)); }
public async Task CommitBlockList_ImmutableStorageWithVersioning() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlockBlobClient blockBlob = InstrumentClient(vlwContainer.Container.GetBlockBlobClient(GetNewBlobName())); byte[] data = GetRandomBuffer(Constants.KB); string blockName = GetNewBlockName(); using Stream stream = new MemoryStream(data); await blockBlob.StageBlockAsync(ToBase64(blockName), stream); string[] blockList = new string[] { ToBase64(blockName) }; BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); CommitBlockListOptions options = new CommitBlockListOptions { ImmutabilityPolicy = immutabilityPolicy, LegalHold = true }; // Act await blockBlob.CommitBlockListAsync(blockList, options); // Assert Response <BlobProperties> propertiesResponse = await blockBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }
public async Task DeleteImmutibilityPolicyAsync() { // Arrange BlobBaseClient blob = await GetNewBlobClient(_containerClient); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; await blob.SetImmutabilityPolicyAsync(immutabilityPolicy); // Act await blob.DeleteImmutabilityPolicyAsync(); // Assert Response <BlobProperties> propertiesResponse = await blob.GetPropertiesAsync(); Assert.IsNull(propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.IsNull(propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); }
public async Task SetImmutibilityPolicyAsync_SetLegalHold_AccoutnSas(AccountSasPermissions sasPermissions) { // Arrange BlobBaseClient blob = await GetNewBlobClient(_containerClient, GetNewBlobName()); BlobServiceClient sharedKeyServiceClient = InstrumentClient( BlobsClientBuilder.GetServiceClient_OAuthAccount_SharedKey()); Uri serviceSasUri = sharedKeyServiceClient.GenerateAccountSasUri( sasPermissions, Recording.UtcNow.AddDays(1), AccountSasResourceTypes.All); BlobBaseClient sasBlobClient = InstrumentClient(new BlobServiceClient(serviceSasUri, GetOptions()) .GetBlobContainerClient(_containerClient.Name) .GetBlobBaseClient(blob.Name)); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); // Act Response <BlobImmutabilityPolicy> response = await sasBlobClient.SetImmutabilityPolicyAsync( immutabilityPolicy : immutabilityPolicy); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); // Act Response <BlobLegalHoldResult> legalHoldResponse = await sasBlobClient.SetLegalHoldAsync(hasLegalHold : false); // Assert Assert.IsFalse(legalHoldResponse.Value.HasLegalHold); }
public async Task SetImmutibilityPolicyAsync_IfModifiedSince_Failed() { // Arrange BlobBaseClient blob = await GetNewBlobClient(_containerClient); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(1), PolicyMode = BlobImmutabilityPolicyMode.Locked }; BlobRequestConditions conditions = new BlobRequestConditions { IfUnmodifiedSince = Recording.UtcNow.AddDays(-1) }; // Act await TestHelper.AssertExpectedExceptionAsync <RequestFailedException>( blob.SetImmutabilityPolicyAsync( immutabilityPolicy: immutabilityPolicy, conditions: conditions), e => Assert.AreEqual(BlobErrorCode.ConditionNotMet.ToString(), e.ErrorCode)); }
public async Task DeleteImmutibilityPolicyAsync() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlobBaseClient blob = await GetNewBlobClient(vlwContainer.Container); BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddSeconds(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; await blob.SetImmutabilityPolicyAsync(immutabilityPolicy); // Act await blob.DeleteImmutabilityPolicyAsync(); // Assert Response <BlobProperties> propertiesResponse = await blob.GetPropertiesAsync(); Assert.IsNull(propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.IsNull(propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); }
public override void ExecuteCmdlet() { IStorageBlobManagement localChannel = Channel; string blobName = BlobName; if (ParameterSetName == BlobPipelineParameterSet) { blobName = BlobBaseClient.Name; } if (ShouldProcess(blobName, "Set Blob ImmutabilityPolicy:")) { switch (ParameterSetName) { case BlobPipelineParameterSet: break; case NameParameterSet: default: string localContainerName = ContainerName; string localBlobName = BlobName; this.BlobBaseClient = Util.GetTrack2BlobServiceClient(localChannel.StorageContext, ClientOptions).GetBlobContainerClient(localContainerName).GetBlobBaseClient(blobName); break; } BlobImmutabilityPolicy immuPolicy = new BlobImmutabilityPolicy(); immuPolicy.ExpiresOn = this.ExpiresOn; immuPolicy.PolicyMode = this.policyMode; this.BlobBaseClient.SetImmutabilityPolicy(immuPolicy, cancellationToken: this.CmdletCancellationToken); BlobProperties blobProperties = this.BlobBaseClient.GetProperties(cancellationToken: this.CmdletCancellationToken).Value; this.BlobBaseClient = Util.GetTrack2BlobClientWithType(this.BlobBaseClient, localChannel.StorageContext, blobProperties.BlobType, ClientOptions); WriteObject(new AzureStorageBlob(this.BlobBaseClient, Channel.StorageContext, blobProperties, ClientOptions)); } }